author | blanchet |
Mon, 31 Jan 2022 16:09:23 +0100 | |
changeset 75020 | b087610592b4 |
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 |