7 |
7 |
8 Addsimps (sfinite.intrs @ seq.rews); |
8 Addsimps (sfinite.intrs @ seq.rews); |
9 |
9 |
10 |
10 |
11 (* Instead of adding UU_neq_nil every equation UU~=x could be changed to x~=UU *) |
11 (* Instead of adding UU_neq_nil every equation UU~=x could be changed to x~=UU *) |
12 goal thy "UU ~=nil"; |
12 Goal "UU ~=nil"; |
13 by (res_inst_tac [("s1","UU"),("t1","nil")] (sym RS rev_contrapos) 1); |
13 by (res_inst_tac [("s1","UU"),("t1","nil")] (sym RS rev_contrapos) 1); |
14 by (REPEAT (Simp_tac 1)); |
14 by (REPEAT (Simp_tac 1)); |
15 qed"UU_neq_nil"; |
15 qed"UU_neq_nil"; |
16 |
16 |
17 Addsimps [UU_neq_nil]; |
17 Addsimps [UU_neq_nil]; |
34 bind_thm ("smap_unfold", fix_prover2 thy smap_def |
34 bind_thm ("smap_unfold", fix_prover2 thy smap_def |
35 "smap = (LAM f tr. case tr of \ |
35 "smap = (LAM f tr. case tr of \ |
36 \ nil => nil \ |
36 \ nil => nil \ |
37 \ | x##xs => f`x ## smap`f`xs)"); |
37 \ | x##xs => f`x ## smap`f`xs)"); |
38 |
38 |
39 goal thy "smap`f`nil=nil"; |
39 Goal "smap`f`nil=nil"; |
40 by (stac smap_unfold 1); |
40 by (stac smap_unfold 1); |
41 by (Simp_tac 1); |
41 by (Simp_tac 1); |
42 qed"smap_nil"; |
42 qed"smap_nil"; |
43 |
43 |
44 goal thy "smap`f`UU=UU"; |
44 Goal "smap`f`UU=UU"; |
45 by (stac smap_unfold 1); |
45 by (stac smap_unfold 1); |
46 by (Simp_tac 1); |
46 by (Simp_tac 1); |
47 qed"smap_UU"; |
47 qed"smap_UU"; |
48 |
48 |
49 goal thy |
49 Goal |
50 "!!x.[|x~=UU|] ==> smap`f`(x##xs)= (f`x)##smap`f`xs"; |
50 "!!x.[|x~=UU|] ==> smap`f`(x##xs)= (f`x)##smap`f`xs"; |
51 by (rtac trans 1); |
51 by (rtac trans 1); |
52 by (stac smap_unfold 1); |
52 by (stac smap_unfold 1); |
53 by (Asm_full_simp_tac 1); |
53 by (Asm_full_simp_tac 1); |
54 by (rtac refl 1); |
54 by (rtac refl 1); |
61 bind_thm ("sfilter_unfold", fix_prover2 thy sfilter_def |
61 bind_thm ("sfilter_unfold", fix_prover2 thy sfilter_def |
62 "sfilter = (LAM P tr. case tr of \ |
62 "sfilter = (LAM P tr. case tr of \ |
63 \ nil => nil \ |
63 \ nil => nil \ |
64 \ | x##xs => If P`x then x##(sfilter`P`xs) else sfilter`P`xs fi)"); |
64 \ | x##xs => If P`x then x##(sfilter`P`xs) else sfilter`P`xs fi)"); |
65 |
65 |
66 goal thy "sfilter`P`nil=nil"; |
66 Goal "sfilter`P`nil=nil"; |
67 by (stac sfilter_unfold 1); |
67 by (stac sfilter_unfold 1); |
68 by (Simp_tac 1); |
68 by (Simp_tac 1); |
69 qed"sfilter_nil"; |
69 qed"sfilter_nil"; |
70 |
70 |
71 goal thy "sfilter`P`UU=UU"; |
71 Goal "sfilter`P`UU=UU"; |
72 by (stac sfilter_unfold 1); |
72 by (stac sfilter_unfold 1); |
73 by (Simp_tac 1); |
73 by (Simp_tac 1); |
74 qed"sfilter_UU"; |
74 qed"sfilter_UU"; |
75 |
75 |
76 goal thy |
76 Goal |
77 "!!x. x~=UU ==> sfilter`P`(x##xs)= \ |
77 "!!x. x~=UU ==> sfilter`P`(x##xs)= \ |
78 \ (If P`x then x##(sfilter`P`xs) else sfilter`P`xs fi)"; |
78 \ (If P`x then x##(sfilter`P`xs) else sfilter`P`xs fi)"; |
79 by (rtac trans 1); |
79 by (rtac trans 1); |
80 by (stac sfilter_unfold 1); |
80 by (stac sfilter_unfold 1); |
81 by (Asm_full_simp_tac 1); |
81 by (Asm_full_simp_tac 1); |
89 bind_thm ("sforall2_unfold", fix_prover2 thy sforall2_def |
89 bind_thm ("sforall2_unfold", fix_prover2 thy sforall2_def |
90 "sforall2 = (LAM P tr. case tr of \ |
90 "sforall2 = (LAM P tr. case tr of \ |
91 \ nil => TT \ |
91 \ nil => TT \ |
92 \ | x##xs => (P`x andalso sforall2`P`xs))"); |
92 \ | x##xs => (P`x andalso sforall2`P`xs))"); |
93 |
93 |
94 goal thy "sforall2`P`nil=TT"; |
94 Goal "sforall2`P`nil=TT"; |
95 by (stac sforall2_unfold 1); |
95 by (stac sforall2_unfold 1); |
96 by (Simp_tac 1); |
96 by (Simp_tac 1); |
97 qed"sforall2_nil"; |
97 qed"sforall2_nil"; |
98 |
98 |
99 goal thy "sforall2`P`UU=UU"; |
99 Goal "sforall2`P`UU=UU"; |
100 by (stac sforall2_unfold 1); |
100 by (stac sforall2_unfold 1); |
101 by (Simp_tac 1); |
101 by (Simp_tac 1); |
102 qed"sforall2_UU"; |
102 qed"sforall2_UU"; |
103 |
103 |
104 goal thy |
104 Goal |
105 "!!x. x~=UU ==> sforall2`P`(x##xs)= ((P`x) andalso sforall2`P`xs)"; |
105 "!!x. x~=UU ==> sforall2`P`(x##xs)= ((P`x) andalso sforall2`P`xs)"; |
106 by (rtac trans 1); |
106 by (rtac trans 1); |
107 by (stac sforall2_unfold 1); |
107 by (stac sforall2_unfold 1); |
108 by (Asm_full_simp_tac 1); |
108 by (Asm_full_simp_tac 1); |
109 by (rtac refl 1); |
109 by (rtac refl 1); |
118 bind_thm ("stakewhile_unfold", fix_prover2 thy stakewhile_def |
118 bind_thm ("stakewhile_unfold", fix_prover2 thy stakewhile_def |
119 "stakewhile = (LAM P tr. case tr of \ |
119 "stakewhile = (LAM P tr. case tr of \ |
120 \ nil => nil \ |
120 \ nil => nil \ |
121 \ | x##xs => (If P`x then x##(stakewhile`P`xs) else nil fi))"); |
121 \ | x##xs => (If P`x then x##(stakewhile`P`xs) else nil fi))"); |
122 |
122 |
123 goal thy "stakewhile`P`nil=nil"; |
123 Goal "stakewhile`P`nil=nil"; |
124 by (stac stakewhile_unfold 1); |
124 by (stac stakewhile_unfold 1); |
125 by (Simp_tac 1); |
125 by (Simp_tac 1); |
126 qed"stakewhile_nil"; |
126 qed"stakewhile_nil"; |
127 |
127 |
128 goal thy "stakewhile`P`UU=UU"; |
128 Goal "stakewhile`P`UU=UU"; |
129 by (stac stakewhile_unfold 1); |
129 by (stac stakewhile_unfold 1); |
130 by (Simp_tac 1); |
130 by (Simp_tac 1); |
131 qed"stakewhile_UU"; |
131 qed"stakewhile_UU"; |
132 |
132 |
133 goal thy |
133 Goal |
134 "!!x. x~=UU ==> stakewhile`P`(x##xs) = \ |
134 "!!x. x~=UU ==> stakewhile`P`(x##xs) = \ |
135 \ (If P`x then x##(stakewhile`P`xs) else nil fi)"; |
135 \ (If P`x then x##(stakewhile`P`xs) else nil fi)"; |
136 by (rtac trans 1); |
136 by (rtac trans 1); |
137 by (stac stakewhile_unfold 1); |
137 by (stac stakewhile_unfold 1); |
138 by (Asm_full_simp_tac 1); |
138 by (Asm_full_simp_tac 1); |
147 bind_thm ("sdropwhile_unfold", fix_prover2 thy sdropwhile_def |
147 bind_thm ("sdropwhile_unfold", fix_prover2 thy sdropwhile_def |
148 "sdropwhile = (LAM P tr. case tr of \ |
148 "sdropwhile = (LAM P tr. case tr of \ |
149 \ nil => nil \ |
149 \ nil => nil \ |
150 \ | x##xs => (If P`x then sdropwhile`P`xs else tr fi))"); |
150 \ | x##xs => (If P`x then sdropwhile`P`xs else tr fi))"); |
151 |
151 |
152 goal thy "sdropwhile`P`nil=nil"; |
152 Goal "sdropwhile`P`nil=nil"; |
153 by (stac sdropwhile_unfold 1); |
153 by (stac sdropwhile_unfold 1); |
154 by (Simp_tac 1); |
154 by (Simp_tac 1); |
155 qed"sdropwhile_nil"; |
155 qed"sdropwhile_nil"; |
156 |
156 |
157 goal thy "sdropwhile`P`UU=UU"; |
157 Goal "sdropwhile`P`UU=UU"; |
158 by (stac sdropwhile_unfold 1); |
158 by (stac sdropwhile_unfold 1); |
159 by (Simp_tac 1); |
159 by (Simp_tac 1); |
160 qed"sdropwhile_UU"; |
160 qed"sdropwhile_UU"; |
161 |
161 |
162 goal thy |
162 Goal |
163 "!!x. x~=UU ==> sdropwhile`P`(x##xs) = \ |
163 "!!x. x~=UU ==> sdropwhile`P`(x##xs) = \ |
164 \ (If P`x then sdropwhile`P`xs else x##xs fi)"; |
164 \ (If P`x then sdropwhile`P`xs else x##xs fi)"; |
165 by (rtac trans 1); |
165 by (rtac trans 1); |
166 by (stac sdropwhile_unfold 1); |
166 by (stac sdropwhile_unfold 1); |
167 by (Asm_full_simp_tac 1); |
167 by (Asm_full_simp_tac 1); |
178 "slast = (LAM tr. case tr of \ |
178 "slast = (LAM tr. case tr of \ |
179 \ nil => UU \ |
179 \ nil => UU \ |
180 \ | x##xs => (If is_nil`xs then x else slast`xs fi))"); |
180 \ | x##xs => (If is_nil`xs then x else slast`xs fi))"); |
181 |
181 |
182 |
182 |
183 goal thy "slast`nil=UU"; |
183 Goal "slast`nil=UU"; |
184 by (stac slast_unfold 1); |
184 by (stac slast_unfold 1); |
185 by (Simp_tac 1); |
185 by (Simp_tac 1); |
186 qed"slast_nil"; |
186 qed"slast_nil"; |
187 |
187 |
188 goal thy "slast`UU=UU"; |
188 Goal "slast`UU=UU"; |
189 by (stac slast_unfold 1); |
189 by (stac slast_unfold 1); |
190 by (Simp_tac 1); |
190 by (Simp_tac 1); |
191 qed"slast_UU"; |
191 qed"slast_UU"; |
192 |
192 |
193 goal thy |
193 Goal |
194 "!!x. x~=UU ==> slast`(x##xs)= (If is_nil`xs then x else slast`xs fi)"; |
194 "!!x. x~=UU ==> slast`(x##xs)= (If is_nil`xs then x else slast`xs fi)"; |
195 by (rtac trans 1); |
195 by (rtac trans 1); |
196 by (stac slast_unfold 1); |
196 by (stac slast_unfold 1); |
197 by (Asm_full_simp_tac 1); |
197 by (Asm_full_simp_tac 1); |
198 by (rtac refl 1); |
198 by (rtac refl 1); |
207 "sconc = (LAM t1 t2. case t1 of \ |
207 "sconc = (LAM t1 t2. case t1 of \ |
208 \ nil => t2 \ |
208 \ nil => t2 \ |
209 \ | x##xs => x ## (xs @@ t2))"); |
209 \ | x##xs => x ## (xs @@ t2))"); |
210 |
210 |
211 |
211 |
212 goal thy "nil @@ y = y"; |
212 Goal "nil @@ y = y"; |
213 by (stac sconc_unfold 1); |
213 by (stac sconc_unfold 1); |
214 by (Simp_tac 1); |
214 by (Simp_tac 1); |
215 qed"sconc_nil"; |
215 qed"sconc_nil"; |
216 |
216 |
217 goal thy "UU @@ y=UU"; |
217 Goal "UU @@ y=UU"; |
218 by (stac sconc_unfold 1); |
218 by (stac sconc_unfold 1); |
219 by (Simp_tac 1); |
219 by (Simp_tac 1); |
220 qed"sconc_UU"; |
220 qed"sconc_UU"; |
221 |
221 |
222 goal thy "(x##xs) @@ y=x##(xs @@ y)"; |
222 Goal "(x##xs) @@ y=x##(xs @@ y)"; |
223 by (rtac trans 1); |
223 by (rtac trans 1); |
224 by (stac sconc_unfold 1); |
224 by (stac sconc_unfold 1); |
225 by (Asm_full_simp_tac 1); |
225 by (Asm_full_simp_tac 1); |
226 by (case_tac "x=UU" 1); |
226 by (case_tac "x=UU" 1); |
227 by (REPEAT (Asm_full_simp_tac 1)); |
227 by (REPEAT (Asm_full_simp_tac 1)); |
237 bind_thm ("sflat_unfold", fix_prover2 thy sflat_def |
237 bind_thm ("sflat_unfold", fix_prover2 thy sflat_def |
238 "sflat = (LAM tr. case tr of \ |
238 "sflat = (LAM tr. case tr of \ |
239 \ nil => nil \ |
239 \ nil => nil \ |
240 \ | x##xs => x @@ sflat`xs)"); |
240 \ | x##xs => x @@ sflat`xs)"); |
241 |
241 |
242 goal thy "sflat`nil=nil"; |
242 Goal "sflat`nil=nil"; |
243 by (stac sflat_unfold 1); |
243 by (stac sflat_unfold 1); |
244 by (Simp_tac 1); |
244 by (Simp_tac 1); |
245 qed"sflat_nil"; |
245 qed"sflat_nil"; |
246 |
246 |
247 goal thy "sflat`UU=UU"; |
247 Goal "sflat`UU=UU"; |
248 by (stac sflat_unfold 1); |
248 by (stac sflat_unfold 1); |
249 by (Simp_tac 1); |
249 by (Simp_tac 1); |
250 qed"sflat_UU"; |
250 qed"sflat_UU"; |
251 |
251 |
252 goal thy "sflat`(x##xs)= x@@(sflat`xs)"; |
252 Goal "sflat`(x##xs)= x@@(sflat`xs)"; |
253 by (rtac trans 1); |
253 by (rtac trans 1); |
254 by (stac sflat_unfold 1); |
254 by (stac sflat_unfold 1); |
255 by (Asm_full_simp_tac 1); |
255 by (Asm_full_simp_tac 1); |
256 by (case_tac "x=UU" 1); |
256 by (case_tac "x=UU" 1); |
257 by (REPEAT (Asm_full_simp_tac 1)); |
257 by (REPEAT (Asm_full_simp_tac 1)); |
269 \ nil => nil \ |
269 \ nil => nil \ |
270 \ | x##xs => (case t2 of \ |
270 \ | x##xs => (case t2 of \ |
271 \ nil => UU \ |
271 \ nil => UU \ |
272 \ | y##ys => <x,y>##(szip`xs`ys)))"); |
272 \ | y##ys => <x,y>##(szip`xs`ys)))"); |
273 |
273 |
274 goal thy "szip`nil`y=nil"; |
274 Goal "szip`nil`y=nil"; |
275 by (stac szip_unfold 1); |
275 by (stac szip_unfold 1); |
276 by (Simp_tac 1); |
276 by (Simp_tac 1); |
277 qed"szip_nil"; |
277 qed"szip_nil"; |
278 |
278 |
279 goal thy "szip`UU`y=UU"; |
279 Goal "szip`UU`y=UU"; |
280 by (stac szip_unfold 1); |
280 by (stac szip_unfold 1); |
281 by (Simp_tac 1); |
281 by (Simp_tac 1); |
282 qed"szip_UU1"; |
282 qed"szip_UU1"; |
283 |
283 |
284 goal thy "!!x. x~=nil ==> szip`x`UU=UU"; |
284 Goal "!!x. x~=nil ==> szip`x`UU=UU"; |
285 by (stac szip_unfold 1); |
285 by (stac szip_unfold 1); |
286 by (Asm_full_simp_tac 1); |
286 by (Asm_full_simp_tac 1); |
287 by (res_inst_tac [("x","x")] seq.casedist 1); |
287 by (res_inst_tac [("x","x")] seq.casedist 1); |
288 by (REPEAT (Asm_full_simp_tac 1)); |
288 by (REPEAT (Asm_full_simp_tac 1)); |
289 qed"szip_UU2"; |
289 qed"szip_UU2"; |
290 |
290 |
291 goal thy "!!x. x~=UU ==> szip`(x##xs)`nil=UU"; |
291 Goal "!!x. x~=UU ==> szip`(x##xs)`nil=UU"; |
292 by (rtac trans 1); |
292 by (rtac trans 1); |
293 by (stac szip_unfold 1); |
293 by (stac szip_unfold 1); |
294 by (REPEAT (Asm_full_simp_tac 1)); |
294 by (REPEAT (Asm_full_simp_tac 1)); |
295 qed"szip_cons_nil"; |
295 qed"szip_cons_nil"; |
296 |
296 |
297 goal thy "!!x.[| x~=UU; y~=UU|] ==> szip`(x##xs)`(y##ys) = <x,y>##szip`xs`ys"; |
297 Goal "!!x.[| x~=UU; y~=UU|] ==> szip`(x##xs)`(y##ys) = <x,y>##szip`xs`ys"; |
298 by (rtac trans 1); |
298 by (rtac trans 1); |
299 by (stac szip_unfold 1); |
299 by (stac szip_unfold 1); |
300 by (REPEAT (Asm_full_simp_tac 1)); |
300 by (REPEAT (Asm_full_simp_tac 1)); |
301 qed"szip_cons"; |
301 qed"szip_cons"; |
302 |
302 |
314 |
314 |
315 (* ------------------------------------------------------------------------------------- *) |
315 (* ------------------------------------------------------------------------------------- *) |
316 |
316 |
317 section "scons, nil"; |
317 section "scons, nil"; |
318 |
318 |
319 goal thy |
319 Goal |
320 "!!x. [|x~=UU;y~=UU|]==> (x##xs=y##ys) = (x=y & xs=ys)"; |
320 "!!x. [|x~=UU;y~=UU|]==> (x##xs=y##ys) = (x=y & xs=ys)"; |
321 by (rtac iffI 1); |
321 by (rtac iffI 1); |
322 by (etac (hd seq.injects) 1); |
322 by (etac (hd seq.injects) 1); |
323 by Auto_tac; |
323 by Auto_tac; |
324 qed"scons_inject_eq"; |
324 qed"scons_inject_eq"; |
325 |
325 |
326 goal thy "!!x. nil<<x ==> nil=x"; |
326 Goal "!!x. nil<<x ==> nil=x"; |
327 by (res_inst_tac [("x","x")] seq.casedist 1); |
327 by (res_inst_tac [("x","x")] seq.casedist 1); |
328 by (hyp_subst_tac 1); |
328 by (hyp_subst_tac 1); |
329 by (etac antisym_less 1); |
329 by (etac antisym_less 1); |
330 by (Asm_full_simp_tac 1); |
330 by (Asm_full_simp_tac 1); |
331 by (Asm_full_simp_tac 1); |
331 by (Asm_full_simp_tac 1); |
336 (* ------------------------------------------------------------------------------------- *) |
336 (* ------------------------------------------------------------------------------------- *) |
337 |
337 |
338 section "sfilter, sforall, sconc"; |
338 section "sfilter, sforall, sconc"; |
339 |
339 |
340 |
340 |
341 goal thy "(if b then tr1 else tr2) @@ tr \ |
341 Goal "(if b then tr1 else tr2) @@ tr \ |
342 \= (if b then tr1 @@ tr else tr2 @@ tr)"; |
342 \= (if b then tr1 @@ tr else tr2 @@ tr)"; |
343 by (res_inst_tac [("P","b"),("Q","b")] impCE 1); |
343 by (res_inst_tac [("P","b"),("Q","b")] impCE 1); |
344 by (fast_tac HOL_cs 1); |
344 by (fast_tac HOL_cs 1); |
345 by (REPEAT (Asm_full_simp_tac 1)); |
345 by (REPEAT (Asm_full_simp_tac 1)); |
346 qed"if_and_sconc"; |
346 qed"if_and_sconc"; |
347 |
347 |
348 Addsimps [if_and_sconc]; |
348 Addsimps [if_and_sconc]; |
349 |
349 |
350 |
350 |
351 goal thy "sfilter`P`(x @@ y) = (sfilter`P`x @@ sfilter`P`y)"; |
351 Goal "sfilter`P`(x @@ y) = (sfilter`P`x @@ sfilter`P`y)"; |
352 |
352 |
353 by (res_inst_tac[("x","x")] seq.ind 1); |
353 by (res_inst_tac[("x","x")] seq.ind 1); |
354 (* adm *) |
354 (* adm *) |
355 by (Simp_tac 1); |
355 by (Simp_tac 1); |
356 (* base cases *) |
356 (* base cases *) |
358 by (Simp_tac 1); |
358 by (Simp_tac 1); |
359 (* main case *) |
359 (* main case *) |
360 by (asm_full_simp_tac (simpset() setloop split_If_tac) 1); |
360 by (asm_full_simp_tac (simpset() setloop split_If_tac) 1); |
361 qed"sfiltersconc"; |
361 qed"sfiltersconc"; |
362 |
362 |
363 goal thy "sforall P (stakewhile`P`x)"; |
363 Goal "sforall P (stakewhile`P`x)"; |
364 by (simp_tac (simpset() addsimps [sforall_def]) 1); |
364 by (simp_tac (simpset() addsimps [sforall_def]) 1); |
365 by (res_inst_tac[("x","x")] seq.ind 1); |
365 by (res_inst_tac[("x","x")] seq.ind 1); |
366 (* adm *) |
366 (* adm *) |
367 by (simp_tac (simpset() addsimps [adm_trick_1]) 1); |
367 by (simp_tac (simpset() addsimps [adm_trick_1]) 1); |
368 (* base cases *) |
368 (* base cases *) |
370 by (Simp_tac 1); |
370 by (Simp_tac 1); |
371 (* main case *) |
371 (* main case *) |
372 by (asm_full_simp_tac (simpset() setloop split_If_tac) 1); |
372 by (asm_full_simp_tac (simpset() setloop split_If_tac) 1); |
373 qed"sforallPstakewhileP"; |
373 qed"sforallPstakewhileP"; |
374 |
374 |
375 goal thy "sforall P (sfilter`P`x)"; |
375 Goal "sforall P (sfilter`P`x)"; |
376 by (simp_tac (simpset() addsimps [sforall_def]) 1); |
376 by (simp_tac (simpset() addsimps [sforall_def]) 1); |
377 by (res_inst_tac[("x","x")] seq.ind 1); |
377 by (res_inst_tac[("x","x")] seq.ind 1); |
378 (* adm *) |
378 (* adm *) |
379 (* FIX should be refined in _one_ tactic *) |
379 (* FIX should be refined in _one_ tactic *) |
380 by (simp_tac (simpset() addsimps [adm_trick_1]) 1); |
380 by (simp_tac (simpset() addsimps [adm_trick_1]) 1); |
396 (* 1. Finite(nil), (by definition) *) |
396 (* 1. Finite(nil), (by definition) *) |
397 (* 2. ~Finite(UU), *) |
397 (* 2. ~Finite(UU), *) |
398 (* 3. a~=UU==> Finite(a##x)=Finite(x) *) |
398 (* 3. a~=UU==> Finite(a##x)=Finite(x) *) |
399 (* ---------------------------------------------------- *) |
399 (* ---------------------------------------------------- *) |
400 |
400 |
401 goal thy "Finite x --> x~=UU"; |
401 Goal "Finite x --> x~=UU"; |
402 by (rtac impI 1); |
402 by (rtac impI 1); |
403 by (etac sfinite.induct 1); |
403 by (etac sfinite.induct 1); |
404 by (Asm_full_simp_tac 1); |
404 by (Asm_full_simp_tac 1); |
405 by (Asm_full_simp_tac 1); |
405 by (Asm_full_simp_tac 1); |
406 qed"Finite_UU_a"; |
406 qed"Finite_UU_a"; |
407 |
407 |
408 goal thy "~(Finite UU)"; |
408 Goal "~(Finite UU)"; |
409 by (cut_inst_tac [("x","UU")]Finite_UU_a 1); |
409 by (cut_inst_tac [("x","UU")]Finite_UU_a 1); |
410 by (fast_tac HOL_cs 1); |
410 by (fast_tac HOL_cs 1); |
411 qed"Finite_UU"; |
411 qed"Finite_UU"; |
412 |
412 |
413 goal thy "Finite x --> a~=UU --> x=a##xs --> Finite xs"; |
413 Goal "Finite x --> a~=UU --> x=a##xs --> Finite xs"; |
414 by (strip_tac 1); |
414 by (strip_tac 1); |
415 by (etac sfinite.elim 1); |
415 by (etac sfinite.elim 1); |
416 by (fast_tac (HOL_cs addss simpset()) 1); |
416 by (fast_tac (HOL_cs addss simpset()) 1); |
417 by (fast_tac (HOL_cs addSDs seq.injects) 1); |
417 by (fast_tac (HOL_cs addSDs seq.injects) 1); |
418 qed"Finite_cons_a"; |
418 qed"Finite_cons_a"; |
419 |
419 |
420 goal thy "!!x. a~=UU ==>(Finite (a##x)) = (Finite x)"; |
420 Goal "!!x. a~=UU ==>(Finite (a##x)) = (Finite x)"; |
421 by (rtac iffI 1); |
421 by (rtac iffI 1); |
422 by (rtac (Finite_cons_a RS mp RS mp RS mp) 1); |
422 by (rtac (Finite_cons_a RS mp RS mp RS mp) 1); |
423 by (REPEAT (assume_tac 1)); |
423 by (REPEAT (assume_tac 1)); |
424 by (fast_tac HOL_cs 1); |
424 by (fast_tac HOL_cs 1); |
425 by (Asm_full_simp_tac 1); |
425 by (Asm_full_simp_tac 1); |
447 (etac subst 1), |
447 (etac subst 1), |
448 (resolve_tac prems 1) |
448 (resolve_tac prems 1) |
449 ]); |
449 ]); |
450 |
450 |
451 |
451 |
452 goal thy |
452 Goal |
453 "!!P.[|P(UU);P(nil);\ |
453 "!!P.[|P(UU);P(nil);\ |
454 \ !! x s1.[|x~=UU;P(s1)|] ==> P(x##s1)\ |
454 \ !! x s1.[|x~=UU;P(s1)|] ==> P(x##s1)\ |
455 \ |] ==> seq_finite(s) --> P(s)"; |
455 \ |] ==> seq_finite(s) --> P(s)"; |
456 by (rtac seq_finite_ind_lemma 1); |
456 by (rtac seq_finite_ind_lemma 1); |
457 by (etac seq.finite_ind 1); |
457 by (etac seq.finite_ind 1); |
468 aus dem seq_finite Induktionsprinzip. |
468 aus dem seq_finite Induktionsprinzip. |
469 Problem bei admissibility von Finite-->seq_finite! |
469 Problem bei admissibility von Finite-->seq_finite! |
470 Deshalb Finite jetzt induktiv und nicht mehr rekursiv definiert! |
470 Deshalb Finite jetzt induktiv und nicht mehr rekursiv definiert! |
471 ------------------------------------------------------------------ *) |
471 ------------------------------------------------------------------ *) |
472 |
472 |
473 goal thy "seq_finite nil"; |
473 Goal "seq_finite nil"; |
474 by (simp_tac (simpset() addsimps [seq.sfinite_def]) 1); |
474 by (simp_tac (simpset() addsimps [seq.sfinite_def]) 1); |
475 by (res_inst_tac [("x","Suc 0")] exI 1); |
475 by (res_inst_tac [("x","Suc 0")] exI 1); |
476 by (simp_tac (simpset() addsimps seq.rews) 1); |
476 by (simp_tac (simpset() addsimps seq.rews) 1); |
477 qed"seq_finite_nil"; |
477 qed"seq_finite_nil"; |
478 |
478 |
479 goal thy "seq_finite UU"; |
479 Goal "seq_finite UU"; |
480 by (simp_tac (simpset() addsimps [seq.sfinite_def]) 1); |
480 by (simp_tac (simpset() addsimps [seq.sfinite_def]) 1); |
481 qed"seq_finite_UU"; |
481 qed"seq_finite_UU"; |
482 |
482 |
483 Addsimps[seq_finite_nil,seq_finite_UU]; |
483 Addsimps[seq_finite_nil,seq_finite_UU]; |
484 |
484 |
485 goal HOL.thy "(B-->A) --> (A--> (B-->C))--> (B--> C)"; |
485 goal HOL.thy "(B-->A) --> (A--> (B-->C))--> (B--> C)"; |
486 by (fast_tac HOL_cs 1); |
486 by (fast_tac HOL_cs 1); |
487 qed"logic_lemma"; |
487 qed"logic_lemma"; |
488 |
488 |
489 |
489 |
490 goal thy "!!P.[| P nil; \ |
490 Goal "!!P.[| P nil; \ |
491 \ !!a t. [|a~=UU;Finite t; P t|] ==> P (a##t)|]\ |
491 \ !!a t. [|a~=UU;Finite t; P t|] ==> P (a##t)|]\ |
492 \ ==> Finite x --> P x"; |
492 \ ==> Finite x --> P x"; |
493 |
493 |
494 by (rtac (logic_lemma RS mp RS mp) 1); |
494 by (rtac (logic_lemma RS mp RS mp) 1); |
495 by (rtac trf_impl_tf 1); |
495 by (rtac trf_impl_tf 1); |
498 by (simp_tac (simpset() addsimps [Finite_def]) 1); |
498 by (simp_tac (simpset() addsimps [Finite_def]) 1); |
499 by (asm_full_simp_tac (simpset() addsimps [Finite_def]) 1); |
499 by (asm_full_simp_tac (simpset() addsimps [Finite_def]) 1); |
500 qed"Finite_ind"; |
500 qed"Finite_ind"; |
501 |
501 |
502 |
502 |
503 goal thy "Finite tr --> seq_finite tr"; |
503 Goal "Finite tr --> seq_finite tr"; |
504 by (rtac seq.ind 1); |
504 by (rtac seq.ind 1); |
505 (* adm *) |
505 (* adm *) |
506 (* hier grosses Problem !!!!!!!!!!!!!!! *) |
506 (* hier grosses Problem !!!!!!!!!!!!!!! *) |
507 |
507 |
508 by (simp_tac (simpset() addsimps [Finite_def]) 2); |
508 by (simp_tac (simpset() addsimps [Finite_def]) 2); |