equal
deleted
inserted
replaced
115 |
115 |
116 val subset_refl = prove_goal Set.thy "A <= A" |
116 val subset_refl = prove_goal Set.thy "A <= A" |
117 (fn _=> [ (REPEAT (ares_tac [subsetI] 1)) ]); |
117 (fn _=> [ (REPEAT (ares_tac [subsetI] 1)) ]); |
118 |
118 |
119 goal Set.thy "!!A B C. [| A<=B; B<=C |] ==> A<=C"; |
119 goal Set.thy "!!A B C. [| A<=B; B<=C |] ==> A<=C"; |
120 br subsetI 1; |
120 by (rtac subsetI 1); |
121 by (REPEAT (eresolve_tac [asm_rl, subsetD] 1)); |
121 by (REPEAT (eresolve_tac [asm_rl, subsetD] 1)); |
122 val subset_trans = result(); |
122 val subset_trans = result(); |
123 |
123 |
124 |
124 |
125 (*** Rules for equality ***) |
125 (*** Rules for equality ***) |
162 by (rtac mp 1); |
162 by (rtac mp 1); |
163 by (REPEAT (resolve_tac (refl::prems) 1)); |
163 by (REPEAT (resolve_tac (refl::prems) 1)); |
164 val setup_induction = result(); |
164 val setup_induction = result(); |
165 |
165 |
166 goal Set.thy "{x.x:A} = A"; |
166 goal Set.thy "{x.x:A} = A"; |
167 by (REPEAT (ares_tac [equalityI,subsetI,CollectI] 1 ORELSE eresolve_tac [CollectD] 1)); |
167 by (REPEAT (ares_tac [equalityI,subsetI,CollectI] 1 ORELSE etac CollectD 1)); |
168 val trivial_set = result(); |
168 val trivial_set = result(); |
169 |
169 |
170 (*** Rules for binary union -- Un ***) |
170 (*** Rules for binary union -- Un ***) |
171 |
171 |
172 val prems = goalw Set.thy [Un_def] "c:A ==> c : A Un B"; |
172 val prems = goalw Set.thy [Un_def] "c:A ==> c : A Un B"; |
233 |
233 |
234 |
234 |
235 (*** Empty sets ***) |
235 (*** Empty sets ***) |
236 |
236 |
237 goalw Set.thy [empty_def] "{x.False} = {}"; |
237 goalw Set.thy [empty_def] "{x.False} = {}"; |
238 br refl 1; |
238 by (rtac refl 1); |
239 val empty_eq = result(); |
239 val empty_eq = result(); |
240 |
240 |
241 val [prem] = goalw Set.thy [empty_def] "a : {} ==> P"; |
241 val [prem] = goalw Set.thy [empty_def] "a : {} ==> P"; |
242 by (rtac (prem RS CollectD RS FalseE) 1); |
242 by (rtac (prem RS CollectD RS FalseE) 1); |
243 val emptyD = result(); |
243 val emptyD = result(); |
244 |
244 |
245 val emptyE = make_elim emptyD; |
245 val emptyE = make_elim emptyD; |
246 |
246 |
247 val [prem] = goal Set.thy "~ A={} ==> (EX x.x:A)"; |
247 val [prem] = goal Set.thy "~ A={} ==> (EX x.x:A)"; |
248 br (prem RS swap) 1; |
248 by (rtac (prem RS swap) 1); |
249 br equalityI 1; |
249 by (rtac equalityI 1); |
250 by (ALLGOALS (fast_tac (FOL_cs addSIs [subsetI] addSEs [emptyD]))); |
250 by (ALLGOALS (fast_tac (FOL_cs addSIs [subsetI] addSEs [emptyD]))); |
251 val not_emptyD = result(); |
251 val not_emptyD = result(); |
252 |
252 |
253 (*** Singleton sets ***) |
253 (*** Singleton sets ***) |
254 |
254 |