29 "(p,q) : step (atom a) (Some b) = (p=[True] & q=[False] & b=a)"; |
29 "(p,q) : step (atom a) (Some b) = (p=[True] & q=[False] & b=a)"; |
30 by(Simp_tac 1); |
30 by(Simp_tac 1); |
31 qed "in_step_atom_Some"; |
31 qed "in_step_atom_Some"; |
32 Addsimps [in_step_atom_Some]; |
32 Addsimps [in_step_atom_Some]; |
33 |
33 |
34 Goal |
34 Goal "([False],[False]) : steps (atom a) w = (w = [])"; |
35 "([False],[False]) : steps (atom a) w = (w = [])"; |
|
36 by (induct_tac "w" 1); |
35 by (induct_tac "w" 1); |
37 by(Simp_tac 1); |
36 by(Simp_tac 1); |
38 by(asm_simp_tac (simpset() addsimps [comp_def]) 1); |
37 by(asm_simp_tac (simpset() addsimps [comp_def]) 1); |
39 qed "False_False_in_steps_atom"; |
38 qed "False_False_in_steps_atom"; |
40 |
39 |
41 Goal |
40 Goal "(start (atom a), [False]) : steps (atom a) w = (w = [a])"; |
42 "(start (atom a), [False]) : steps (atom a) w = (w = [a])"; |
|
43 by (induct_tac "w" 1); |
41 by (induct_tac "w" 1); |
44 by(asm_simp_tac (simpset() addsimps [start_atom,rtrancl_empty]) 1); |
42 by(asm_simp_tac (simpset() addsimps [start_atom,rtrancl_empty]) 1); |
45 by(asm_full_simp_tac (simpset() |
43 by(asm_full_simp_tac (simpset() |
46 addsimps [False_False_in_steps_atom,comp_def,start_atom]) 1); |
44 addsimps [False_False_in_steps_atom,comp_def,start_atom]) 1); |
47 qed "start_fin_in_steps_atom"; |
45 qed "start_fin_in_steps_atom"; |
48 |
46 |
49 Goal |
47 Goal "accepts (atom a) w = (w = [a])"; |
50 "accepts (atom a) w = (w = [a])"; |
|
51 by(simp_tac(simpset() addsimps |
48 by(simp_tac(simpset() addsimps |
52 [accepts_def,start_fin_in_steps_atom,fin_atom]) 1); |
49 [accepts_def,start_fin_in_steps_atom,fin_atom]) 1); |
53 qed "accepts_atom"; |
50 qed "accepts_atom"; |
54 |
51 |
55 |
52 |
88 AddIffs [True_in_step_union,False_in_step_union]; |
85 AddIffs [True_in_step_union,False_in_step_union]; |
89 |
86 |
90 (***** True/False ueber epsclosure anheben *****) |
87 (***** True/False ueber epsclosure anheben *****) |
91 |
88 |
92 Goal |
89 Goal |
93 "!!d. (tp,tq) : (eps(union L R))^* ==> \ |
90 "(tp,tq) : (eps(union L R))^* ==> \ |
94 \ !p. tp = True#p --> (? q. (p,q) : (eps L)^* & tq = True#q)"; |
91 \ !p. tp = True#p --> (? q. (p,q) : (eps L)^* & tq = True#q)"; |
95 be rtrancl_induct 1; |
92 be rtrancl_induct 1; |
96 by(Blast_tac 1); |
93 by(Blast_tac 1); |
97 by(Clarify_tac 1); |
94 by(Clarify_tac 1); |
98 by(Asm_full_simp_tac 1); |
95 by(Asm_full_simp_tac 1); |
99 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
96 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
100 val lemma1a = result(); |
97 val lemma1a = result(); |
101 |
98 |
102 Goal |
99 Goal |
103 "!!d. (tp,tq) : (eps(union L R))^* ==> \ |
100 "(tp,tq) : (eps(union L R))^* ==> \ |
104 \ !p. tp = False#p --> (? q. (p,q) : (eps R)^* & tq = False#q)"; |
101 \ !p. tp = False#p --> (? q. (p,q) : (eps R)^* & tq = False#q)"; |
105 be rtrancl_induct 1; |
102 be rtrancl_induct 1; |
106 by(Blast_tac 1); |
103 by(Blast_tac 1); |
107 by(Clarify_tac 1); |
104 by(Clarify_tac 1); |
108 by(Asm_full_simp_tac 1); |
105 by(Asm_full_simp_tac 1); |
109 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
106 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
110 val lemma1b = result(); |
107 val lemma1b = result(); |
111 |
108 |
112 Goal |
109 Goal |
113 "!!p. (p,q) : (eps L)^* ==> (True#p, True#q) : (eps(union L R))^*"; |
110 "(p,q) : (eps L)^* ==> (True#p, True#q) : (eps(union L R))^*"; |
114 be rtrancl_induct 1; |
111 be rtrancl_induct 1; |
115 by(Blast_tac 1); |
112 by(Blast_tac 1); |
116 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
113 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
117 val lemma2a = result(); |
114 val lemma2a = result(); |
118 |
115 |
119 Goal |
116 Goal |
120 "!!p. (p,q) : (eps R)^* ==> (False#p, False#q) : (eps(union L R))^*"; |
117 "(p,q) : (eps R)^* ==> (False#p, False#q) : (eps(union L R))^*"; |
121 be rtrancl_induct 1; |
118 be rtrancl_induct 1; |
122 by(Blast_tac 1); |
119 by(Blast_tac 1); |
123 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
120 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
124 val lemma2b = result(); |
121 val lemma2b = result(); |
125 |
122 |
289 AddIffs [True_step_conc, False_step_conc]; |
286 AddIffs [True_step_conc, False_step_conc]; |
290 |
287 |
291 (** False in epsclosure **) |
288 (** False in epsclosure **) |
292 |
289 |
293 Goal |
290 Goal |
294 "!!d. (tp,tq) : (eps(conc L R))^* ==> \ |
291 "(tp,tq) : (eps(conc L R))^* ==> \ |
295 \ !p. tp = False#p --> (? q. (p,q) : (eps R)^* & tq = False#q)"; |
292 \ !p. tp = False#p --> (? q. (p,q) : (eps R)^* & tq = False#q)"; |
296 by(etac rtrancl_induct 1); |
293 by(etac rtrancl_induct 1); |
297 by(Blast_tac 1); |
294 by(Blast_tac 1); |
298 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
295 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
299 qed "lemma1b"; |
296 qed "lemma1b"; |
300 |
297 |
301 Goal |
298 Goal |
302 "!!p. (p,q) : (eps R)^* ==> (False#p, False#q) : (eps(conc L R))^*"; |
299 "(p,q) : (eps R)^* ==> (False#p, False#q) : (eps(conc L R))^*"; |
303 by(etac rtrancl_induct 1); |
300 by(etac rtrancl_induct 1); |
304 by(Blast_tac 1); |
301 by(Blast_tac 1); |
305 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
302 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
306 val lemma2b = result(); |
303 val lemma2b = result(); |
307 |
304 |
327 AddIffs [False_steps_conc]; |
324 AddIffs [False_steps_conc]; |
328 |
325 |
329 (** True in epsclosure **) |
326 (** True in epsclosure **) |
330 |
327 |
331 Goal |
328 Goal |
332 "!!L R. (p,q): (eps L)^* ==> (True#p,True#q) : (eps(conc L R))^*"; |
329 "(p,q): (eps L)^* ==> (True#p,True#q) : (eps(conc L R))^*"; |
333 be rtrancl_induct 1; |
330 be rtrancl_induct 1; |
334 by(Blast_tac 1); |
331 by(Blast_tac 1); |
335 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
332 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
336 qed "True_True_eps_concI"; |
333 qed "True_True_eps_concI"; |
337 |
334 |
338 Goal |
335 Goal |
339 "!!L R. !p. (p,q) : steps L w --> (True#p,True#q) : steps (conc L R) w"; |
336 "!p. (p,q) : steps L w --> (True#p,True#q) : steps (conc L R) w"; |
340 by(induct_tac "w" 1); |
337 by(induct_tac "w" 1); |
341 by (simp_tac (simpset() addsimps [True_True_eps_concI]) 1); |
338 by (simp_tac (simpset() addsimps [True_True_eps_concI]) 1); |
342 by (Simp_tac 1); |
339 by (Simp_tac 1); |
343 by(blast_tac (claset() addIs [True_True_eps_concI]) 1); |
340 by(blast_tac (claset() addIs [True_True_eps_concI]) 1); |
344 qed_spec_mp "True_True_steps_concI"; |
341 qed_spec_mp "True_True_steps_concI"; |
345 |
342 |
346 Goal |
343 Goal |
347 "!!d. (tp,tq) : (eps(conc L R))^* ==> \ |
344 "(tp,tq) : (eps(conc L R))^* ==> \ |
348 \ !p. tp = True#p --> \ |
345 \ !p. tp = True#p --> \ |
349 \ (? q. tq = True#q & (p,q) : (eps L)^*) | \ |
346 \ (? q. tq = True#q & (p,q) : (eps L)^*) | \ |
350 \ (? q r. tq = False#q & (p,r):(eps L)^* & fin L r & (start R,q) : (eps R)^*)"; |
347 \ (? q r. tq = False#q & (p,r):(eps L)^* & fin L r & (start R,q) : (eps R)^*)"; |
351 by(etac rtrancl_induct 1); |
348 by(etac rtrancl_induct 1); |
352 by(Blast_tac 1); |
349 by(Blast_tac 1); |
353 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
350 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
354 val lemma1a = result(); |
351 val lemma1a = result(); |
355 |
352 |
356 Goal |
353 Goal |
357 "!!p. (p, q) : (eps L)^* ==> (True#p, True#q) : (eps(conc L R))^*"; |
354 "(p, q) : (eps L)^* ==> (True#p, True#q) : (eps(conc L R))^*"; |
358 by(etac rtrancl_induct 1); |
355 by(etac rtrancl_induct 1); |
359 by(Blast_tac 1); |
356 by(Blast_tac 1); |
360 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
357 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
361 val lemma2a = result(); |
358 val lemma2a = result(); |
362 |
359 |
365 by(split_all_tac 1); |
362 by(split_all_tac 1); |
366 by (Asm_full_simp_tac 1); |
363 by (Asm_full_simp_tac 1); |
367 val lemma = result(); |
364 val lemma = result(); |
368 |
365 |
369 Goal |
366 Goal |
370 "!!L R. (p,q) : (eps R)^* ==> (False#p, False#q) : (eps(conc L R))^*"; |
367 "(p,q) : (eps R)^* ==> (False#p, False#q) : (eps(conc L R))^*"; |
371 by(etac rtrancl_induct 1); |
368 by(etac rtrancl_induct 1); |
372 by(Blast_tac 1); |
369 by(Blast_tac 1); |
373 by (dtac lemma 1); |
370 by (dtac lemma 1); |
374 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
371 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1); |
375 val lemma2b = result(); |
372 val lemma2b = result(); |
475 "!A. (p,q) : step A a --> (True#p, True#q) : step (star A) a"; |
472 "!A. (p,q) : step A a --> (True#p, True#q) : step (star A) a"; |
476 by(Simp_tac 1); |
473 by(Simp_tac 1); |
477 qed_spec_mp "True_True_step_starI"; |
474 qed_spec_mp "True_True_step_starI"; |
478 |
475 |
479 Goal |
476 Goal |
480 "!!A. (p,r) : (eps A)^* ==> (True#p, True#r) : (eps(star A))^*"; |
477 "(p,r) : (eps A)^* ==> (True#p, True#r) : (eps(star A))^*"; |
481 be rtrancl_induct 1; |
478 be rtrancl_induct 1; |
482 by(Blast_tac 1); |
479 by(Blast_tac 1); |
483 by(blast_tac (claset() addIs [True_True_step_starI,rtrancl_into_rtrancl]) 1); |
480 by(blast_tac (claset() addIs [True_True_step_starI,rtrancl_into_rtrancl]) 1); |
484 qed_spec_mp "True_True_eps_starI"; |
481 qed_spec_mp "True_True_eps_starI"; |
485 |
482 |
487 "!A. fin A p --> (True#p,True#start A) : eps(star A)"; |
484 "!A. fin A p --> (True#p,True#start A) : eps(star A)"; |
488 by(Simp_tac 1); |
485 by(Simp_tac 1); |
489 qed_spec_mp "True_start_eps_starI"; |
486 qed_spec_mp "True_start_eps_starI"; |
490 |
487 |
491 Goal |
488 Goal |
492 "!!dummy. (tp,s) : (eps(star A))^* ==> (! p. tp = True#p --> \ |
489 "(tp,s) : (eps(star A))^* ==> (! p. tp = True#p --> \ |
493 \ (? r. ((p,r) : (eps A)^* | \ |
490 \ (? r. ((p,r) : (eps A)^* | \ |
494 \ (? q. (p,q) : (eps A)^* & fin A q & (start A,r) : (eps A)^*)) & \ |
491 \ (? q. (p,q) : (eps A)^* & fin A q & (start A,r) : (eps A)^*)) & \ |
495 \ s = True#r))"; |
492 \ s = True#r))"; |
496 be rtrancl_induct 1; |
493 be rtrancl_induct 1; |
497 by(Simp_tac 1); |
494 by(Simp_tac 1); |