| author | wenzelm | 
| Sun, 19 Feb 2023 13:43:38 +0100 | |
| changeset 77300 | 57467fdd507d | 
| parent 71925 | bf085daea304 | 
| permissions | -rw-r--r-- | 
| 71925 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 1 | (* Title: HOL/Examples/Drinker.thy | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 2 | Author: Makarius | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 3 | *) | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 4 | |
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 5 | section \<open>The Drinker's Principle\<close> | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 6 | |
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 7 | theory Drinker | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 8 | imports Main | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 9 | begin | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 10 | |
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 11 | text \<open> | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 12 | Here is another example of classical reasoning: the Drinker's Principle says | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 13 | that for some person, if he is drunk, everybody else is drunk! | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 14 | |
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 15 | We first prove a classical part of de-Morgan's law. | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 16 | \<close> | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 17 | |
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 18 | lemma de_Morgan: | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 19 | assumes "\<not> (\<forall>x. P x)" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 20 | shows "\<exists>x. \<not> P x" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 21 | proof (rule classical) | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 22 | assume "\<nexists>x. \<not> P x" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 23 | have "\<forall>x. P x" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 24 | proof | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 25 | fix x show "P x" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 26 | proof (rule classical) | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 27 | assume "\<not> P x" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 28 | then have "\<exists>x. \<not> P x" .. | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 29 | with \<open>\<nexists>x. \<not> P x\<close> show ?thesis by contradiction | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 30 | qed | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 31 | qed | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 32 | with \<open>\<not> (\<forall>x. P x)\<close> show ?thesis by contradiction | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 33 | qed | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 34 | |
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 35 | theorem Drinker's_Principle: "\<exists>x. drunk x \<longrightarrow> (\<forall>x. drunk x)" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 36 | proof cases | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 37 | assume "\<forall>x. drunk x" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 38 | then have "drunk a \<longrightarrow> (\<forall>x. drunk x)" for a .. | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 39 | then show ?thesis .. | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 40 | next | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 41 | assume "\<not> (\<forall>x. drunk x)" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 42 | then have "\<exists>x. \<not> drunk x" by (rule de_Morgan) | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 43 | then obtain a where "\<not> drunk a" .. | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 44 | have "drunk a \<longrightarrow> (\<forall>x. drunk x)" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 45 | proof | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 46 | assume "drunk a" | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 47 | with \<open>\<not> drunk a\<close> show "\<forall>x. drunk x" by contradiction | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 48 | qed | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 49 | then show ?thesis .. | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 50 | qed | 
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 51 | |
| 
bf085daea304
clarified sessions: "Notable Examples in Isabelle/HOL";
 wenzelm parents: diff
changeset | 52 | end |