src/HOL/Isar_Examples/Drinker.thy
author blanchet
Fri, 30 Apr 2010 09:36:45 +0200
changeset 36569 3a29eb7606c3
parent 33026 8f35633c4922
child 37671 fa53d267dab3
permissions -rw-r--r--
added "no_atp" for theorems that are automatically used or included by Sledgehammer when appropriate (about combinators and fequal)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33026
8f35633c4922 modernized session Isar_Examples;
wenzelm
parents: 31758
diff changeset
     1
(*  Title:      HOL/Isar_Examples/Drinker.thy
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     3
*)
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     4
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     5
header {* The Drinker's Principle *}
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
     6
31758
3edd5f813f01 observe standard theory naming conventions;
wenzelm
parents: 16531
diff changeset
     7
theory Drinker
3edd5f813f01 observe standard theory naming conventions;
wenzelm
parents: 16531
diff changeset
     8
imports Main
3edd5f813f01 observe standard theory naming conventions;
wenzelm
parents: 16531
diff changeset
     9
begin
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    10
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    11
text {*
16531
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    12
  Here is another example of classical reasoning: the Drinker's
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    13
  Principle says that for some person, if he is drunk, everybody else
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    14
  is drunk!
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    15
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    16
  We first prove a classical part of de-Morgan's law.
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    17
*}
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    18
16531
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    19
lemma deMorgan:
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    20
  assumes "\<not> (\<forall>x. P x)"
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    21
  shows "\<exists>x. \<not> P x"
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    22
  using prems
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    23
proof (rule contrapos_np)
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    24
  assume a: "\<not> (\<exists>x. \<not> P x)"
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    25
  show "\<forall>x. P x"
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    26
  proof
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    27
    fix x
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    28
    show "P x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    29
    proof (rule classical)
16531
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    30
      assume "\<not> P x"
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    31
      then have "\<exists>x. \<not> P x" ..
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    32
      with a show ?thesis by contradiction
16356
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
qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    36
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    37
theorem Drinker's_Principle: "\<exists>x. drunk x \<longrightarrow> (\<forall>x. drunk x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    38
proof cases
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    39
  fix a assume "\<forall>x. drunk x"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    40
  then have "drunk a \<longrightarrow> (\<forall>x. drunk x)" ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    41
  then show ?thesis ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    42
next
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    43
  assume "\<not> (\<forall>x. drunk x)"
16531
9b442d0e5c0c improved proof;
wenzelm
parents: 16417
diff changeset
    44
  then have "\<exists>x. \<not> drunk x" by (rule deMorgan)
16356
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    45
  then obtain a where a: "\<not> drunk a" ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    46
  have "drunk a \<longrightarrow> (\<forall>x. drunk x)"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    47
  proof
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    48
    assume "drunk a"
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    49
    with a show "\<forall>x. drunk x" by (contradiction)
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    50
  qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    51
  then show ?thesis ..
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    52
qed
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    53
94011cf701a4 added Isar_examples/Drinker.thy;
wenzelm
parents:
diff changeset
    54
end