src/HOL/ex/set.thy
author krauss
Tue, 28 Sep 2010 09:54:07 +0200
changeset 39754 150f831ce4a3
parent 36319 8feb2c4bef1a
child 40928 ace26e2cee91
permissions -rw-r--r--
no longer declare .psimps rules as [simp]. This regularly caused confusion (e.g., they show up in simp traces when the regular simp rules are disabled). In the few places where the rules are used, explicitly mentioning them actually clarifies the proof text.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
     1
(*  Title:      HOL/ex/set.thy
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
     2
    ID:         $Id$
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
     3
    Author:     Tobias Nipkow and Lawrence C Paulson
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
     4
    Copyright   1991  University of Cambridge
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
     5
*)
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
     6
19982
ballarin
parents: 18391
diff changeset
     7
header {* Set Theory examples: Cantor's Theorem, Schröder-Bernstein Theorem, etc. *}
9100
9e081c812338 fixed deps;
wenzelm
parents:
diff changeset
     8
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 15488
diff changeset
     9
theory set imports Main begin
9100
9e081c812338 fixed deps;
wenzelm
parents:
diff changeset
    10
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    11
text{*
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    12
  These two are cited in Benzmueller and Kohlhase's system description
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    13
  of LEO, CADE-15, 1998 (pages 139-143) as theorems LEO could not
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    14
  prove.
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    15
*}
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    16
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    17
lemma "(X = Y \<union> Z) =
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    18
    (Y \<subseteq> X \<and> Z \<subseteq> X \<and> (\<forall>V. Y \<subseteq> V \<and> Z \<subseteq> V \<longrightarrow> X \<subseteq> V))"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    19
  by blast
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    20
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    21
lemma "(X = Y \<inter> Z) =
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    22
    (X \<subseteq> Y \<and> X \<subseteq> Z \<and> (\<forall>V. V \<subseteq> Y \<and> V \<subseteq> Z \<longrightarrow> V \<subseteq> X))"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    23
  by blast
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    24
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    25
text {*
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    26
  Trivial example of term synthesis: apparently hard for some provers!
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    27
*}
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    28
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 34055
diff changeset
    29
schematic_lemma "a \<noteq> b \<Longrightarrow> a \<in> ?X \<and> b \<notin> ?X"
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    30
  by blast
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    31
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    32
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    33
subsection {* Examples for the @{text blast} paper *}
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    34
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    35
lemma "(\<Union>x \<in> C. f x \<union> g x) = \<Union>(f ` C)  \<union>  \<Union>(g ` C)"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    36
  -- {* Union-image, called @{text Un_Union_image} in Main HOL *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    37
  by blast
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    38
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    39
lemma "(\<Inter>x \<in> C. f x \<inter> g x) = \<Inter>(f ` C) \<inter> \<Inter>(g ` C)"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    40
  -- {* Inter-image, called @{text Int_Inter_image} in Main HOL *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    41
  by blast
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    42
16898
543ee8fabe1a revised examples
paulson
parents: 16417
diff changeset
    43
lemma singleton_example_1:
543ee8fabe1a revised examples
paulson
parents: 16417
diff changeset
    44
     "\<And>S::'a set set. \<forall>x \<in> S. \<forall>y \<in> S. x \<subseteq> y \<Longrightarrow> \<exists>z. S \<subseteq> {z}"
18391
2e901da7cd3a meson no longer does these examples
paulson
parents: 16898
diff changeset
    45
  by blast
16898
543ee8fabe1a revised examples
paulson
parents: 16417
diff changeset
    46
543ee8fabe1a revised examples
paulson
parents: 16417
diff changeset
    47
lemma singleton_example_2:
543ee8fabe1a revised examples
paulson
parents: 16417
diff changeset
    48
     "\<forall>x \<in> S. \<Union>S \<subseteq> x \<Longrightarrow> \<exists>z. S \<subseteq> {z}"
543ee8fabe1a revised examples
paulson
parents: 16417
diff changeset
    49
  -- {*Variant of the problem above. *}
18391
2e901da7cd3a meson no longer does these examples
paulson
parents: 16898
diff changeset
    50
  by blast
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    51
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    52
lemma "\<exists>!x. f (g x) = x \<Longrightarrow> \<exists>!y. g (f y) = y"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    53
  -- {* A unique fixpoint theorem --- @{text fast}/@{text best}/@{text meson} all fail. *}
24573
paulson
parents: 19982
diff changeset
    54
  by metis
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    55
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    56
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    57
subsection {* Cantor's Theorem: There is no surjection from a set to its powerset *}
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    58
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    59
lemma cantor1: "\<not> (\<exists>f:: 'a \<Rightarrow> 'a set. \<forall>S. \<exists>x. f x = S)"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    60
  -- {* Requires best-first search because it is undirectional. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    61
  by best
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    62
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 34055
diff changeset
    63
schematic_lemma "\<forall>f:: 'a \<Rightarrow> 'a set. \<forall>x. f x \<noteq> ?S f"
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    64
  -- {*This form displays the diagonal term. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    65
  by best
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    66
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 34055
diff changeset
    67
schematic_lemma "?S \<notin> range (f :: 'a \<Rightarrow> 'a set)"
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    68
  -- {* This form exploits the set constructs. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    69
  by (rule notI, erule rangeE, best)
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    70
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 34055
diff changeset
    71
schematic_lemma "?S \<notin> range (f :: 'a \<Rightarrow> 'a set)"
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    72
  -- {* Or just this! *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    73
  by best
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    74
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    75
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    76
subsection {* The Schröder-Berstein Theorem *}
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    77
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    78
lemma disj_lemma: "- (f ` X) = g ` (-X) \<Longrightarrow> f a = g b \<Longrightarrow> a \<in> X \<Longrightarrow> b \<in> X"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    79
  by blast
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    80
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    81
lemma surj_if_then_else:
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    82
  "-(f ` X) = g ` (-X) \<Longrightarrow> surj (\<lambda>z. if z \<in> X then f z else g z)"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    83
  by (simp add: surj_def) blast
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    84
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    85
lemma bij_if_then_else:
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    86
  "inj_on f X \<Longrightarrow> inj_on g (-X) \<Longrightarrow> -(f ` X) = g ` (-X) \<Longrightarrow>
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    87
    h = (\<lambda>z. if z \<in> X then f z else g z) \<Longrightarrow> inj h \<and> surj h"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    88
  apply (unfold inj_on_def)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    89
  apply (simp add: surj_if_then_else)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    90
  apply (blast dest: disj_lemma sym)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    91
  done
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    92
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    93
lemma decomposition: "\<exists>X. X = - (g ` (- (f ` X)))"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    94
  apply (rule exI)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    95
  apply (rule lfp_unfold)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    96
  apply (rule monoI, blast)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    97
  done
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
    98
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
    99
theorem Schroeder_Bernstein:
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   100
  "inj (f :: 'a \<Rightarrow> 'b) \<Longrightarrow> inj (g :: 'b \<Rightarrow> 'a)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   101
    \<Longrightarrow> \<exists>h:: 'a \<Rightarrow> 'b. inj h \<and> surj h"
15488
7c638a46dcbb tidying of some subst/simplesubst proofs
paulson
parents: 15481
diff changeset
   102
  apply (rule decomposition [where f=f and g=g, THEN exE])
7c638a46dcbb tidying of some subst/simplesubst proofs
paulson
parents: 15481
diff changeset
   103
  apply (rule_tac x = "(\<lambda>z. if z \<in> x then f z else inv g z)" in exI) 
7c638a46dcbb tidying of some subst/simplesubst proofs
paulson
parents: 15481
diff changeset
   104
    --{*The term above can be synthesized by a sufficiently detailed proof.*}
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   105
  apply (rule bij_if_then_else)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   106
     apply (rule_tac [4] refl)
33057
764547b68538 inv_onto -> inv_into
nipkow
parents: 32988
diff changeset
   107
    apply (rule_tac [2] inj_on_inv_into)
15306
51f3d31e8eea fixed proof
nipkow
parents: 14353
diff changeset
   108
    apply (erule subset_inj_on [OF _ subset_UNIV])
15488
7c638a46dcbb tidying of some subst/simplesubst proofs
paulson
parents: 15481
diff changeset
   109
   apply blast
7c638a46dcbb tidying of some subst/simplesubst proofs
paulson
parents: 15481
diff changeset
   110
  apply (erule ssubst, subst double_complement, erule inv_image_comp [symmetric])
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   111
  done
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   112
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   113
24853
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   114
subsection {* A simple party theorem *}
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   115
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   116
text{* \emph{At any party there are two people who know the same
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   117
number of people}. Provided the party consists of at least two people
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   118
and the knows relation is symmetric. Knowing yourself does not count
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   119
--- otherwise knows needs to be reflexive. (From Freek Wiedijk's talk
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   120
at TPHOLs 2007.) *}
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   121
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   122
lemma equal_number_of_acquaintances:
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   123
assumes "Domain R <= A" and "sym R" and "card A \<ge> 2"
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   124
shows "\<not> inj_on (%a. card(R `` {a} - {a})) A"
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   125
proof -
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   126
  let ?N = "%a. card(R `` {a} - {a})"
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   127
  let ?n = "card A"
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   128
  have "finite A" using `card A \<ge> 2` by(auto intro:ccontr)
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   129
  have 0: "R `` A <= A" using `sym R` `Domain R <= A`
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   130
    unfolding Domain_def sym_def by blast
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   131
  have h: "ALL a:A. R `` {a} <= A" using 0 by blast
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   132
  hence 1: "ALL a:A. finite(R `` {a})" using `finite A`
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   133
    by(blast intro: finite_subset)
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   134
  have sub: "?N ` A <= {0..<?n}"
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   135
  proof -
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   136
    have "ALL a:A. R `` {a} - {a} < A" using h by blast
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   137
    thus ?thesis using psubset_card_mono[OF `finite A`] by auto
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   138
  qed
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   139
  show "~ inj_on ?N A" (is "~ ?I")
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   140
  proof
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   141
    assume ?I
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   142
    hence "?n = card(?N ` A)" by(rule card_image[symmetric])
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   143
    with sub `finite A` have 2[simp]: "?N ` A = {0..<?n}"
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   144
      using subset_card_intvl_is_intvl[of _ 0] by(auto)
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   145
    have "0 : ?N ` A" and "?n - 1 : ?N ` A"  using `card A \<ge> 2` by simp+
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   146
    then obtain a b where ab: "a:A" "b:A" and Na: "?N a = 0" and Nb: "?N b = ?n - 1"
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   147
      by (auto simp del: 2)
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   148
    have "a \<noteq> b" using Na Nb `card A \<ge> 2` by auto
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   149
    have "R `` {a} - {a} = {}" by (metis 1 Na ab card_eq_0_iff finite_Diff)
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   150
    hence "b \<notin> R `` {a}" using `a\<noteq>b` by blast
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   151
    hence "a \<notin> R `` {b}" by (metis Image_singleton_iff assms(2) sym_def)
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   152
    hence 3: "R `` {b} - {b} <= A - {a,b}" using 0 ab by blast
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   153
    have 4: "finite (A - {a,b})" using `finite A` by simp
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   154
    have "?N b <= ?n - 2" using ab `a\<noteq>b` `finite A` card_mono[OF 4 3] by simp
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   155
    then show False using Nb `card A \<ge>  2` by arith
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   156
  qed
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   157
qed
aab5798e5a33 added lemmas
nipkow
parents: 24573
diff changeset
   158
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   159
text {*
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   160
  From W. W. Bledsoe and Guohui Feng, SET-VAR. JAR 11 (3), 1993, pages
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   161
  293-314.
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   162
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   163
  Isabelle can prove the easy examples without any special mechanisms,
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   164
  but it can't prove the hard ones.
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   165
*}
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   166
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   167
lemma "\<exists>A. (\<forall>x \<in> A. x \<le> (0::int))"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   168
  -- {* Example 1, page 295. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   169
  by force
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   170
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   171
lemma "D \<in> F \<Longrightarrow> \<exists>G. \<forall>A \<in> G. \<exists>B \<in> F. A \<subseteq> B"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   172
  -- {* Example 2. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   173
  by force
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   174
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   175
lemma "P a \<Longrightarrow> \<exists>A. (\<forall>x \<in> A. P x) \<and> (\<exists>y. y \<in> A)"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   176
  -- {* Example 3. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   177
  by force
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   178
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   179
lemma "a < b \<and> b < (c::int) \<Longrightarrow> \<exists>A. a \<notin> A \<and> b \<in> A \<and> c \<notin> A"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   180
  -- {* Example 4. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   181
  by force
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   182
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   183
lemma "P (f b) \<Longrightarrow> \<exists>s A. (\<forall>x \<in> A. P x) \<and> f s \<in> A"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   184
  -- {*Example 5, page 298. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   185
  by force
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   186
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   187
lemma "P (f b) \<Longrightarrow> \<exists>s A. (\<forall>x \<in> A. P x) \<and> f s \<in> A"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   188
  -- {* Example 6. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   189
  by force
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   190
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   191
lemma "\<exists>A. a \<notin> A"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   192
  -- {* Example 7. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   193
  by force
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   194
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   195
lemma "(\<forall>u v. u < (0::int) \<longrightarrow> u \<noteq> abs v)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   196
    \<longrightarrow> (\<exists>A::int set. (\<forall>y. abs y \<notin> A) \<and> -2 \<in> A)"
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13107
diff changeset
   197
  -- {* Example 8 now needs a small hint. *}
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13107
diff changeset
   198
  by (simp add: abs_if, force)
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13107
diff changeset
   199
    -- {* not @{text blast}, which can't simplify @{text "-2 < 0"} *}
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   200
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   201
text {* Example 9 omitted (requires the reals). *}
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   202
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   203
text {* The paper has no Example 10! *}
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   204
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   205
lemma "(\<forall>A. 0 \<in> A \<and> (\<forall>x \<in> A. Suc x \<in> A) \<longrightarrow> n \<in> A) \<and>
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   206
  P 0 \<and> (\<forall>x. P x \<longrightarrow> P (Suc x)) \<longrightarrow> P n"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   207
  -- {* Example 11: needs a hint. *}
34055
fdf294ee08b2 streamlined proofs
paulson
parents: 33057
diff changeset
   208
by(metis Nat.induct)
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   209
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   210
lemma
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   211
  "(\<forall>A. (0, 0) \<in> A \<and> (\<forall>x y. (x, y) \<in> A \<longrightarrow> (Suc x, Suc y) \<in> A) \<longrightarrow> (n, m) \<in> A)
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   212
    \<and> P n \<longrightarrow> P m"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   213
  -- {* Example 12. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   214
  by auto
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   215
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   216
lemma
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   217
  "(\<forall>x. (\<exists>u. x = 2 * u) = (\<not> (\<exists>v. Suc x = 2 * v))) \<longrightarrow>
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   218
    (\<exists>A. \<forall>x. (x \<in> A) = (Suc x \<notin> A))"
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   219
  -- {* Example EO1: typo in article, and with the obvious fix it seems
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   220
      to require arithmetic reasoning. *}
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   221
  apply clarify
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   222
  apply (rule_tac x = "{x. \<exists>u. x = 2 * u}" in exI, auto)
34055
fdf294ee08b2 streamlined proofs
paulson
parents: 33057
diff changeset
   223
   apply metis+
13107
8743cc847224 tuned presentation;
wenzelm
parents: 13058
diff changeset
   224
  done
13058
ad6106d7b4bb converted theory "set" to Isar and added some SET-VAR examples
paulson
parents: 9100
diff changeset
   225
9100
9e081c812338 fixed deps;
wenzelm
parents:
diff changeset
   226
end