Theory Drinker

Up to index of Isabelle/HOL/Isar_Examples

theory Drinker
imports Main

(*  Title:      HOL/Isar_Examples/Drinker.thy
Author: Makarius
*)


header {* The Drinker's Principle *}

theory Drinker
imports Main
begin


text {*
Here is another example of classical reasoning: the Drinker's
Principle says that for some person, if he is drunk, everybody else
is drunk!

We first prove a classical part of de-Morgan's law.
*}


lemma deMorgan:
assumes "¬ (∀x. P x)"
shows "∃x. ¬ P x"

using prems
proof (rule contrapos_np)
assume a: "¬ (∃x. ¬ P x)"
show "∀x. P x"
proof
fix x
show "P x"
proof (rule classical)
assume "¬ P x"
then have "∃x. ¬ P x" ..
with a show ?thesis by contradiction
qed
qed
qed

theorem Drinker's_Principle: "∃x. drunk x --> (∀x. drunk x)"
proof cases
fix a assume "∀x. drunk x"
then have "drunk a --> (∀x. drunk x)" ..
then show ?thesis ..
next
assume "¬ (∀x. drunk x)"
then have "∃x. ¬ drunk x" by (rule deMorgan)
then obtain a where a: "¬ drunk a" ..
have "drunk a --> (∀x. drunk x)"
proof
assume "drunk a"
with a show "∀x. drunk x" by (contradiction)
qed
then show ?thesis ..
qed

end