Search code examples
predicateisabelle

Drinker's Principle


I came across a proof in Isabelle/HOL that shows the Drinker's Principle. I do understand the entire proof; however, I do not understand very well the next proof case in the Drinker's Principle proof:

  assume "∀x. drunk x"
  then have "drunk a ⟶ (∀x. drunk x)" for a ..
  then show ?thesis ..

Why does the proof also prove "drunk a ⟶ (∀x. drunk x)"? I think it is enough ∀x. drunk x to show ∃x. drunk x.

The entire proof as follows:

theorem Drinker's_Principle: "∃x. drunk x ⟶ (∀x. drunk x)"
proof cases
  assume "∀x. drunk x"
  then have "drunk a ⟶ (∀x. drunk x)" for a ..
  then show ?thesis ..
next
  assume "¬ (∀x. drunk x)"
  then have "∃x. ¬ drunk x" by (rule de_Morgan)
  then obtain a where "¬ drunk a" ..
  have "drunk a ⟶ (∀x. drunk x)"
  proof
    assume "drunk a"
    with ‹¬ drunk a› show "∀x. drunk x" by contradiction
  qed
  then show ?thesis ..
qed

Solution

  • I think it is enough ∀x. drunk x to show ∃x. drunk x.

    That's what we are actually doing: the for a at the end of the the statement

    then have "drunk a ⟶ (∀x. drunk x)" for a ..
    

    is Isar's way of saying that there is a witness a of "drunk a ⟶ (∀x. drunk x)". The next line of the proof then uses this to prove the version of the statement with the existential premise.