| author | paulson | 
| Mon, 01 Dec 1997 12:52:18 +0100 | |
| changeset 4331 | 34bb65b037dd | 
| parent 4152 | 451104c223e2 | 
| child 5068 | fb28eaa07e01 | 
| permissions | -rw-r--r-- | 
| 1461 | 1  | 
(* Title: Confluence.ML  | 
| 1048 | 2  | 
ID: $Id$  | 
| 1461 | 3  | 
Author: Ole Rasmussen  | 
| 1048 | 4  | 
Copyright 1995 University of Cambridge  | 
5  | 
Logic Image: ZF  | 
|
6  | 
*)  | 
|
7  | 
||
8  | 
open Confluence;  | 
|
9  | 
||
10  | 
(* ------------------------------------------------------------------------- *)  | 
|
11  | 
(* strip lemmas *)  | 
|
12  | 
(* ------------------------------------------------------------------------- *)  | 
|
13  | 
||
14  | 
goalw Confluence.thy [confluence_def,strip_def]  | 
|
15  | 
"!!u.[|confluence(Spar_red1)|]==> strip";  | 
|
16  | 
by (resolve_tac [impI RS allI RS allI] 1);  | 
|
| 1732 | 17  | 
by (etac Spar_red.induct 1);  | 
| 2469 | 18  | 
by (Fast_tac 1);  | 
| 4091 | 19  | 
by (fast_tac (claset() addIs [Spar_red.trans]) 1);  | 
| 
3734
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
20  | 
qed "strip_lemma_r";  | 
| 1048 | 21  | 
|
22  | 
||
23  | 
goalw Confluence.thy [confluence_def,strip_def]  | 
|
| 3840 | 24  | 
"!!u. strip==> confluence(Spar_red)";  | 
| 1048 | 25  | 
by (resolve_tac [impI RS allI RS allI] 1);  | 
| 1732 | 26  | 
by (etac Spar_red.induct 1);  | 
| 2469 | 27  | 
by (Fast_tac 1);  | 
| 
3734
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
28  | 
by (Clarify_tac 1);  | 
| 1048 | 29  | 
by (dres_inst_tac [("x1","z")] (spec RS mp) 1);
 | 
30  | 
by (REPEAT(eresolve_tac [exE,conjE] 2));  | 
|
31  | 
by (dres_inst_tac [("x1","ua")] (spec RS mp) 2);
 | 
|
| 4091 | 32  | 
by (fast_tac (claset() addIs [Spar_red.trans]) 3);  | 
| 1048 | 33  | 
by (TRYALL assume_tac );  | 
| 
3734
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
34  | 
qed "strip_lemma_l";  | 
| 1048 | 35  | 
|
36  | 
(* ------------------------------------------------------------------------- *)  | 
|
37  | 
(* Confluence *)  | 
|
38  | 
(* ------------------------------------------------------------------------- *)  | 
|
39  | 
||
40  | 
||
41  | 
goalw Confluence.thy [confluence_def] "confluence(Spar_red1)";  | 
|
| 
3734
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
42  | 
by (Clarify_tac 1);  | 
| 1048 | 43  | 
by (forward_tac [simulation] 1);  | 
44  | 
by (forw_inst_tac [("n","z")] simulation 1);
 | 
|
| 
3734
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
45  | 
by (Clarify_tac 1);  | 
| 1048 | 46  | 
by (forw_inst_tac [("v","va")] paving 1);
 | 
47  | 
by (TRYALL assume_tac);  | 
|
| 4091 | 48  | 
by (fast_tac (claset() addIs [completeness] addss (simpset())) 1);  | 
| 
3734
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
49  | 
qed "parallel_moves";  | 
| 
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
50  | 
|
| 
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
51  | 
bind_thm ("confluence_parallel_reduction",
 | 
| 
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
52  | 
parallel_moves RS strip_lemma_r RS strip_lemma_l);  | 
| 1048 | 53  | 
|
| 
3734
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
54  | 
goalw Confluence.thy [confluence_def]  | 
| 
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
55  | 
"!!u.[|confluence(Spar_red)|]==> confluence(Sred)";  | 
| 4152 | 56  | 
by (blast_tac (claset() addIs [par_red_red, red_par_red]) 1);  | 
| 
3734
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
57  | 
val lemma1 = result();  | 
| 1048 | 58  | 
|
| 
3734
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
59  | 
bind_thm ("confluence_beta_reduction",
 | 
| 
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
60  | 
confluence_parallel_reduction RS lemma1);  | 
| 
 
33f355f56f82
Much tidying including "qed" instead of result(), and even qed_spec_mp,
 
paulson 
parents: 
2469 
diff
changeset
 | 
61  |