src/CCL/Set.ML
author wenzelm
Tue, 13 Jun 2006 23:41:39 +0200
changeset 19876 11d447d5d68c
parent 18413 50c0c118e96d
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
     1
(*  Title:      Set/Set.ML
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     3
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
     5
val [prem] = goal (the_context ()) "[| P(a) |] ==> a : {x. P(x)}";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
by (rtac (mem_Collect_iff RS iffD2) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
by (rtac prem 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
     8
qed "CollectI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    10
val prems = goal (the_context ()) "[| a : {x. P(x)} |] ==> P(a)";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
by (resolve_tac (prems RL [mem_Collect_iff  RS iffD1]) 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    12
qed "CollectD";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
    14
val CollectE = make_elim CollectD;
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
    15
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    16
val [prem] = goal (the_context ()) "[| !!x. x:A <-> x:B |] ==> A = B";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
by (rtac (set_extension RS iffD2) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
by (rtac (prem RS allI) 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    19
qed "set_ext";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
(*** Bounded quantifiers ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    23
val prems = goalw (the_context ()) [Ball_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
    "[| !!x. x:A ==> P(x) |] ==> ALL x:A. P(x)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
by (REPEAT (ares_tac (prems @ [allI,impI]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    26
qed "ballI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    28
val [major,minor] = goalw (the_context ()) [Ball_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
    "[| ALL x:A. P(x);  x:A |] ==> P(x)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
by (rtac (minor RS (major RS spec RS mp)) 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    31
qed "bspec";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    33
val major::prems = goalw (the_context ()) [Ball_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
    "[| ALL x:A. P(x);  P(x) ==> Q;  ~ x:A ==> Q |] ==> Q";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
by (rtac (major RS spec RS impCE) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
by (REPEAT (eresolve_tac prems 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    37
qed "ballE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
(*Takes assumptions ALL x:A.P(x) and a:A; creates assumption P(a)*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
fun ball_tac i = etac ballE i THEN contr_tac (i+1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    42
val prems = goalw (the_context ()) [Bex_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
    "[| P(x);  x:A |] ==> EX x:A. P(x)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
by (REPEAT (ares_tac (prems @ [exI,conjI]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    45
qed "bexI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    47
qed_goal "bexCI" (the_context ())
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    48
   "[| EX x:A. ~P(x) ==> P(a);  a:A |] ==> EX x:A. P(x)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
 (fn prems=>
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    50
  [ (rtac classical 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
    (REPEAT (ares_tac (prems@[bexI,ballI,notI,notE]) 1))  ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    53
val major::prems = goalw (the_context ()) [Bex_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    54
    "[| EX x:A. P(x);  !!x. [| x:A; P(x) |] ==> Q  |] ==> Q";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    55
by (rtac (major RS exE) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    56
by (REPEAT (eresolve_tac (prems @ [asm_rl,conjE]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    57
qed "bexE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    58
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    59
(*Trival rewrite rule;   (! x:A.P)=P holds only if A is nonempty!*)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    60
val prems = goal (the_context ())
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    61
    "(ALL x:A. True) <-> True";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    62
by (REPEAT (ares_tac [TrueI,ballI,iffI] 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    63
qed "ball_rew";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    64
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    65
(** Congruence rules **)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    66
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    67
val prems = goal (the_context ())
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    68
    "[| A=A';  !!x. x:A' ==> P(x) <-> P'(x) |] ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
\    (ALL x:A. P(x)) <-> (ALL x:A'. P'(x))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    70
by (resolve_tac (prems RL [ssubst,iffD2]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    71
by (REPEAT (ares_tac [ballI,iffI] 1
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    72
     ORELSE eresolve_tac ([make_elim bspec, mp] @ (prems RL [iffE])) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    73
qed "ball_cong";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    74
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    75
val prems = goal (the_context ())
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    76
    "[| A=A';  !!x. x:A' ==> P(x) <-> P'(x) |] ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    77
\    (EX x:A. P(x)) <-> (EX x:A'. P'(x))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    78
by (resolve_tac (prems RL [ssubst,iffD2]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    79
by (REPEAT (etac bexE 1
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    80
     ORELSE ares_tac ([bexI,iffI] @ (prems RL [iffD1,iffD2])) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    81
qed "bex_cong";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    82
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    83
(*** Rules for subsets ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    84
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    85
val prems = goalw (the_context ()) [subset_def] "(!!x. x:A ==> x:B) ==> A <= B";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    86
by (REPEAT (ares_tac (prems @ [ballI]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    87
qed "subsetI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    88
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    89
(*Rule in Modus Ponens style*)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    90
val major::prems = goalw (the_context ()) [subset_def] "[| A <= B;  c:A |] ==> c:B";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    91
by (rtac (major RS bspec) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    92
by (resolve_tac prems 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
    93
qed "subsetD";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    94
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    95
(*Classical elimination rule*)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
    96
val major::prems = goalw (the_context ()) [subset_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    97
    "[| A <= B;  ~(c:A) ==> P;  c:B ==> P |] ==> P";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    98
by (rtac (major RS ballE) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    99
by (REPEAT (eresolve_tac prems 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   100
qed "subsetCE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   101
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   102
(*Takes assumptions A<=B; c:A and creates the assumption c:B *)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   103
fun set_mp_tac i = etac subsetCE i  THEN  mp_tac i;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   104
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   105
qed_goal "subset_refl" (the_context ()) "A <= A"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   106
 (fn _=> [ (REPEAT (ares_tac [subsetI] 1)) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   107
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5062
diff changeset
   108
Goal "[| A<=B;  B<=C |] ==> A<=C";
642
0db578095e6a CCL/Gfp/coinduct2, coinduct3: modified proofs to suppress deep unification
lcp
parents: 8
diff changeset
   109
by (rtac subsetI 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   110
by (REPEAT (eresolve_tac [asm_rl, subsetD] 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   111
qed "subset_trans";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   112
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   113
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   114
(*** Rules for equality ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   115
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   116
(*Anti-symmetry of the subset relation*)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   117
val prems = goal (the_context ()) "[| A <= B;  B <= A |] ==> A = B";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   118
by (rtac (iffI RS set_ext) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   119
by (REPEAT (ares_tac (prems RL [subsetD]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   120
qed "subset_antisym";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   121
val equalityI = subset_antisym;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   122
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   123
(* Equality rules from ZF set theory -- are they appropriate here? *)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   124
val prems = goal (the_context ()) "A = B ==> A<=B";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   125
by (resolve_tac (prems RL [subst]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   126
by (rtac subset_refl 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   127
qed "equalityD1";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   128
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   129
val prems = goal (the_context ()) "A = B ==> B<=A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   130
by (resolve_tac (prems RL [subst]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   131
by (rtac subset_refl 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   132
qed "equalityD2";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   133
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   134
val prems = goal (the_context ())
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   135
    "[| A = B;  [| A<=B; B<=A |] ==> P |]  ==>  P";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   136
by (resolve_tac prems 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   137
by (REPEAT (resolve_tac (prems RL [equalityD1,equalityD2]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   138
qed "equalityE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   139
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   140
val major::prems = goal (the_context ())
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   141
    "[| A = B;  [| c:A; c:B |] ==> P;  [| ~ c:A; ~ c:B |] ==> P |]  ==>  P";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   142
by (rtac (major RS equalityE) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   143
by (REPEAT (contr_tac 1 ORELSE eresolve_tac ([asm_rl,subsetCE]@prems) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   144
qed "equalityCE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   145
5062
fbdb0b541314 isatool fixgoal;
wenzelm
parents: 3837
diff changeset
   146
Goal "{x. x:A} = A";
642
0db578095e6a CCL/Gfp/coinduct2, coinduct3: modified proofs to suppress deep unification
lcp
parents: 8
diff changeset
   147
by (REPEAT (ares_tac [equalityI,subsetI,CollectI] 1  ORELSE etac CollectD 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   148
qed "trivial_set";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   149
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   150
(*** Rules for binary union -- Un ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   151
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   152
val prems = goalw (the_context ()) [Un_def] "c:A ==> c : A Un B";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   153
by (REPEAT (resolve_tac (prems @ [CollectI,disjI1]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   154
qed "UnI1";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   155
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   156
val prems = goalw (the_context ()) [Un_def] "c:B ==> c : A Un B";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   157
by (REPEAT (resolve_tac (prems @ [CollectI,disjI2]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   158
qed "UnI2";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   159
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   160
(*Classical introduction rule: no commitment to A vs B*)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   161
qed_goal "UnCI" (the_context ()) "(~c:B ==> c:A) ==> c : A Un B"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   162
 (fn prems=>
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   163
  [ (rtac classical 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   164
    (REPEAT (ares_tac (prems@[UnI1,notI]) 1)),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   165
    (REPEAT (ares_tac (prems@[UnI2,notE]) 1)) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   166
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   167
val major::prems = goalw (the_context ()) [Un_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   168
    "[| c : A Un B;  c:A ==> P;  c:B ==> P |] ==> P";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   169
by (rtac (major RS CollectD RS disjE) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   170
by (REPEAT (eresolve_tac prems 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   171
qed "UnE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   172
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   173
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   174
(*** Rules for small intersection -- Int ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   175
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   176
val prems = goalw (the_context ()) [Int_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   177
    "[| c:A;  c:B |] ==> c : A Int B";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   178
by (REPEAT (resolve_tac (prems @ [CollectI,conjI]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   179
qed "IntI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   180
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   181
val [major] = goalw (the_context ()) [Int_def] "c : A Int B ==> c:A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   182
by (rtac (major RS CollectD RS conjunct1) 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   183
qed "IntD1";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   184
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   185
val [major] = goalw (the_context ()) [Int_def] "c : A Int B ==> c:B";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   186
by (rtac (major RS CollectD RS conjunct2) 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   187
qed "IntD2";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   188
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   189
val [major,minor] = goal (the_context ())
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   190
    "[| c : A Int B;  [| c:A; c:B |] ==> P |] ==> P";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   191
by (rtac minor 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   192
by (rtac (major RS IntD1) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   193
by (rtac (major RS IntD2) 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   194
qed "IntE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   195
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   196
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   197
(*** Rules for set complement -- Compl ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   198
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   199
val prems = goalw (the_context ()) [Compl_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   200
    "[| c:A ==> False |] ==> c : Compl(A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   201
by (REPEAT (ares_tac (prems @ [CollectI,notI]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   202
qed "ComplI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   203
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   204
(*This form, with negated conclusion, works well with the Classical prover.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   205
  Negated assumptions behave like formulae on the right side of the notional
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   206
  turnstile...*)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   207
val major::prems = goalw (the_context ()) [Compl_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   208
    "[| c : Compl(A) |] ==> ~c:A";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   209
by (rtac (major RS CollectD) 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   210
qed "ComplD";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   211
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   212
val ComplE = make_elim ComplD;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   213
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   214
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   215
(*** Empty sets ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   216
5062
fbdb0b541314 isatool fixgoal;
wenzelm
parents: 3837
diff changeset
   217
Goalw [empty_def] "{x. False} = {}";
642
0db578095e6a CCL/Gfp/coinduct2, coinduct3: modified proofs to suppress deep unification
lcp
parents: 8
diff changeset
   218
by (rtac refl 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   219
qed "empty_eq";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   220
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   221
val [prem] = goalw (the_context ()) [empty_def] "a : {} ==> P";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   222
by (rtac (prem RS CollectD RS FalseE) 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   223
qed "emptyD";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   224
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   225
val emptyE = make_elim emptyD;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   226
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   227
val [prem] = goal (the_context ()) "~ A={} ==> (EX x. x:A)";
18371
d93fdf00f8a6 Cla.swap;
wenzelm
parents: 17456
diff changeset
   228
by (rtac (prem RS Cla.swap) 1);
642
0db578095e6a CCL/Gfp/coinduct2, coinduct3: modified proofs to suppress deep unification
lcp
parents: 8
diff changeset
   229
by (rtac equalityI 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   230
by (ALLGOALS (fast_tac (FOL_cs addSIs [subsetI] addSEs [emptyD])));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   231
qed "not_emptyD";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   232
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   233
(*** Singleton sets ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   234
5062
fbdb0b541314 isatool fixgoal;
wenzelm
parents: 3837
diff changeset
   235
Goalw [singleton_def] "a : {a}";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   236
by (rtac CollectI 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   237
by (rtac refl 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   238
qed "singletonI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   239
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   240
val [major] = goalw (the_context ()) [singleton_def] "b : {a} ==> b=a";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   241
by (rtac (major RS CollectD) 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   242
qed "singletonD";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   243
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   244
val singletonE = make_elim singletonD;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   245
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   246
(*** Unions of families ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   247
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   248
(*The order of the premises presupposes that A is rigid; b may be flexible*)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   249
val prems = goalw (the_context ()) [UNION_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   250
    "[| a:A;  b: B(a) |] ==> b: (UN x:A. B(x))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   251
by (REPEAT (resolve_tac (prems @ [bexI,CollectI]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   252
qed "UN_I";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   253
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   254
val major::prems = goalw (the_context ()) [UNION_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   255
    "[| b : (UN x:A. B(x));  !!x.[| x:A;  b: B(x) |] ==> R |] ==> R";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   256
by (rtac (major RS CollectD RS bexE) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   257
by (REPEAT (ares_tac prems 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   258
qed "UN_E";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   259
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   260
val prems = goal (the_context ())
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   261
    "[| A=B;  !!x. x:B ==> C(x) = D(x) |] ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   262
\    (UN x:A. C(x)) = (UN x:B. D(x))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   263
by (REPEAT (etac UN_E 1
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   264
     ORELSE ares_tac ([UN_I,equalityI,subsetI] @
1459
d12da312eff4 expanded tabs
clasohm
parents: 757
diff changeset
   265
                      (prems RL [equalityD1,equalityD2] RL [subsetD])) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   266
qed "UN_cong";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   267
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   268
(*** Intersections of families -- INTER x:A. B(x) is Inter(B)``A ) *)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   269
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   270
val prems = goalw (the_context ()) [INTER_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   271
    "(!!x. x:A ==> b: B(x)) ==> b : (INT x:A. B(x))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   272
by (REPEAT (ares_tac ([CollectI,ballI] @ prems) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   273
qed "INT_I";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   274
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   275
val major::prems = goalw (the_context ()) [INTER_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   276
    "[| b : (INT x:A. B(x));  a:A |] ==> b: B(a)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   277
by (rtac (major RS CollectD RS bspec) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   278
by (resolve_tac prems 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   279
qed "INT_D";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   280
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   281
(*"Classical" elimination rule -- does not require proving X:C *)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   282
val major::prems = goalw (the_context ()) [INTER_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   283
    "[| b : (INT x:A. B(x));  b: B(a) ==> R;  ~ a:A ==> R |] ==> R";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   284
by (rtac (major RS CollectD RS ballE) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   285
by (REPEAT (eresolve_tac prems 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   286
qed "INT_E";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   287
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   288
val prems = goal (the_context ())
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   289
    "[| A=B;  !!x. x:B ==> C(x) = D(x) |] ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   290
\    (INT x:A. C(x)) = (INT x:B. D(x))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   291
by (REPEAT_FIRST (resolve_tac [INT_I,equalityI,subsetI]));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   292
by (REPEAT (dtac INT_D 1
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   293
     ORELSE ares_tac (prems RL [equalityD1,equalityD2] RL [subsetD]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   294
qed "INT_cong";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   295
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   296
(*** Rules for Unions ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   297
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   298
(*The order of the premises presupposes that C is rigid; A may be flexible*)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   299
val prems = goalw (the_context ()) [Union_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   300
    "[| X:C;  A:X |] ==> A : Union(C)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   301
by (REPEAT (resolve_tac (prems @ [UN_I]) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   302
qed "UnionI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   303
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   304
val major::prems = goalw (the_context ()) [Union_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   305
    "[| A : Union(C);  !!X.[| A:X;  X:C |] ==> R |] ==> R";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   306
by (rtac (major RS UN_E) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   307
by (REPEAT (ares_tac prems 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   308
qed "UnionE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   309
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   310
(*** Rules for Inter ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   311
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   312
val prems = goalw (the_context ()) [Inter_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   313
    "[| !!X. X:C ==> A:X |] ==> A : Inter(C)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   314
by (REPEAT (ares_tac ([INT_I] @ prems) 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   315
qed "InterI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   316
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   317
(*A "destruct" rule -- every X in C contains A as an element, but
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   318
  A:X can hold when X:C does not!  This rule is analogous to "spec". *)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   319
val major::prems = goalw (the_context ()) [Inter_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   320
    "[| A : Inter(C);  X:C |] ==> A:X";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   321
by (rtac (major RS INT_D) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   322
by (resolve_tac prems 1);
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   323
qed "InterD";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   324
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   325
(*"Classical" elimination rule -- does not require proving X:C *)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 5143
diff changeset
   326
val major::prems = goalw (the_context ()) [Inter_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   327
    "[| A : Inter(C);  A:X ==> R;  ~ X:C ==> R |] ==> R";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   328
by (rtac (major RS INT_E) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   329
by (REPEAT (eresolve_tac prems 1));
757
2ca12511676d added qed and qed_goal[w]
clasohm
parents: 642
diff changeset
   330
qed "InterE";