src/HOL/Isar_examples/Drinker.thy
author wenzelm
Thu, 09 Jun 2005 23:33:28 +0200
changeset 16356 94011cf701a4
child 16417 9bc16273c2d4
permissions -rw-r--r--
added Isar_examples/Drinker.thy;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     1
(*  Title:      HOL/Isar_examples/Drinker.thy
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     3
    Author:     Makarius
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     4
*)
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     5
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     6
header {* The Drinker's Principle *}
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     7
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     8
theory Drinker = Main:
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     9
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    10
text {*
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    11
 Two parts of de-Morgan's law -- one intuitionistic and one classical:
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    12
*}
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    13
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    14
lemma deMorgan1: "\<not> (\<exists>x. P x) \<Longrightarrow> \<forall>x. \<not> P x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    15
proof -
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    16
  assume a: "\<not> (\<exists>x. P x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    17
  show ?thesis
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    18
  proof
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    19
    fix x
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    20
    show "\<not> P x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    21
    proof
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    22
      assume "P x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    23
      then have "\<exists>x. P x" ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    24
      with a show False by contradiction
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    25
    qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    26
  qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    27
qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    28
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    29
lemma deMorgan2: "\<not> (\<forall>x. P x) \<Longrightarrow> \<exists>x. \<not> P x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    30
proof (rule classical)
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    31
  assume a: "\<not> (\<forall>x. P x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    32
  assume b: "\<not> (\<exists>x. \<not> P x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    33
  have "\<forall>x. P x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    34
  proof
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    35
    fix x
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    36
    show "P x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    37
    proof (rule classical)
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    38
      assume c: "\<not> P x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    39
      from b have "\<forall>x. \<not> \<not> P x" by (rule deMorgan1)
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    40
      then have "\<not> \<not> P x" ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    41
      with c show ?thesis by contradiction
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    42
    qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    43
  qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    44
  with a show ?thesis by contradiction
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    45
qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    46
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    47
text {*
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    48
 Here is another example of classical reasoning: the Drinker's
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    49
 Principle says that for some person, if he is drunk, everybody else
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    50
 is drunk!
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    51
*}
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    52
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    53
theorem Drinker's_Principle: "\<exists>x. drunk x \<longrightarrow> (\<forall>x. drunk x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    54
proof cases
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    55
  fix a assume "\<forall>x. drunk x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    56
  then have "drunk a \<longrightarrow> (\<forall>x. drunk x)" ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    57
  then show ?thesis ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    58
next
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    59
  assume "\<not> (\<forall>x. drunk x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    60
  then have "\<exists>x. \<not> drunk x" by (rule deMorgan2)
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    61
  then obtain a where a: "\<not> drunk a" ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    62
  have "drunk a \<longrightarrow> (\<forall>x. drunk x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    63
  proof
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    64
    assume "drunk a"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    65
    with a show "\<forall>x. drunk x" by (contradiction)
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    66
  qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    67
  then show ?thesis ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    68
qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    69
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    70
end