src/HOL/Isar_examples/Drinker.thy
author haftmann
Mon, 29 Sep 2008 12:31:58 +0200
changeset 28401 d5f39173444c
parent 16531 9b442d0e5c0c
child 31758 3edd5f813f01
permissions -rw-r--r--
separate HOL-Main image
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
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 16356
diff changeset
     8
theory Drinker imports Main begin
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     9
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    10
text {*
16531
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    11
  Here is another example of classical reasoning: the Drinker's
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    12
  Principle says that for some person, if he is drunk, everybody else
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    13
  is drunk!
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    14
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    15
  We first prove a classical part of de-Morgan's law.
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    16
*}
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    17
16531
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    18
lemma deMorgan:
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    19
  assumes "\<not> (\<forall>x. P x)"
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    20
  shows "\<exists>x. \<not> P x"
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    21
  using prems
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    22
proof (rule contrapos_np)
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    23
  assume a: "\<not> (\<exists>x. \<not> P x)"
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    24
  show "\<forall>x. P x"
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    25
  proof
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    26
    fix x
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    27
    show "P x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    28
    proof (rule classical)
16531
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    29
      assume "\<not> P x"
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    30
      then have "\<exists>x. \<not> P x" ..
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    31
      with a show ?thesis by contradiction
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    32
    qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    33
  qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    34
qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    35
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    36
theorem Drinker's_Principle: "\<exists>x. drunk x \<longrightarrow> (\<forall>x. drunk x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    37
proof cases
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    38
  fix a assume "\<forall>x. drunk x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    39
  then have "drunk a \<longrightarrow> (\<forall>x. drunk x)" ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    40
  then show ?thesis ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    41
next
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    42
  assume "\<not> (\<forall>x. drunk x)"
16531
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    43
  then have "\<exists>x. \<not> drunk x" by (rule deMorgan)
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    44
  then obtain a where a: "\<not> drunk a" ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    45
  have "drunk a \<longrightarrow> (\<forall>x. drunk x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    46
  proof
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    47
    assume "drunk a"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    48
    with a show "\<forall>x. drunk x" by (contradiction)
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    49
  qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    50
  then show ?thesis ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    51
qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    52
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    53
end