32 text {* |
32 text {* |
33 Inductive definition of contractions, @{text "-1->"} and |
33 Inductive definition of contractions, @{text "-1->"} and |
34 (multi-step) reductions, @{text "--->"}. |
34 (multi-step) reductions, @{text "--->"}. |
35 *} |
35 *} |
36 |
36 |
37 consts |
37 inductive_set |
38 contract :: "(comb*comb) set" |
38 contract :: "(comb*comb) set" |
39 |
39 and contract_rel1 :: "[comb,comb] => bool" (infixl "-1->" 50) |
40 abbreviation |
40 where |
41 contract_rel1 :: "[comb,comb] => bool" (infixl "-1->" 50) where |
41 "x -1-> y == (x,y) \<in> contract" |
42 "x -1-> y == (x,y) \<in> contract" |
42 | K: "K##x##y -1-> x" |
|
43 | S: "S##x##y##z -1-> (x##z)##(y##z)" |
|
44 | Ap1: "x-1->y ==> x##z -1-> y##z" |
|
45 | Ap2: "x-1->y ==> z##x -1-> z##y" |
43 |
46 |
44 abbreviation |
47 abbreviation |
45 contract_rel :: "[comb,comb] => bool" (infixl "--->" 50) where |
48 contract_rel :: "[comb,comb] => bool" (infixl "--->" 50) where |
46 "x ---> y == (x,y) \<in> contract^*" |
49 "x ---> y == (x,y) \<in> contract^*" |
47 |
50 |
48 inductive contract |
|
49 intros |
|
50 K: "K##x##y -1-> x" |
|
51 S: "S##x##y##z -1-> (x##z)##(y##z)" |
|
52 Ap1: "x-1->y ==> x##z -1-> y##z" |
|
53 Ap2: "x-1->y ==> z##x -1-> z##y" |
|
54 |
|
55 text {* |
51 text {* |
56 Inductive definition of parallel contractions, @{text "=1=>"} and |
52 Inductive definition of parallel contractions, @{text "=1=>"} and |
57 (multi-step) parallel reductions, @{text "===>"}. |
53 (multi-step) parallel reductions, @{text "===>"}. |
58 *} |
54 *} |
59 |
55 |
60 consts |
56 inductive_set |
61 parcontract :: "(comb*comb) set" |
57 parcontract :: "(comb*comb) set" |
62 |
58 and parcontract_rel1 :: "[comb,comb] => bool" (infixl "=1=>" 50) |
63 abbreviation |
59 where |
64 parcontract_rel1 :: "[comb,comb] => bool" (infixl "=1=>" 50) where |
60 "x =1=> y == (x,y) \<in> parcontract" |
65 "x =1=> y == (x,y) \<in> parcontract" |
61 | refl: "x =1=> x" |
|
62 | K: "K##x##y =1=> x" |
|
63 | S: "S##x##y##z =1=> (x##z)##(y##z)" |
|
64 | Ap: "[| x=1=>y; z=1=>w |] ==> x##z =1=> y##w" |
66 |
65 |
67 abbreviation |
66 abbreviation |
68 parcontract_rel :: "[comb,comb] => bool" (infixl "===>" 50) where |
67 parcontract_rel :: "[comb,comb] => bool" (infixl "===>" 50) where |
69 "x ===> y == (x,y) \<in> parcontract^*" |
68 "x ===> y == (x,y) \<in> parcontract^*" |
70 |
|
71 inductive parcontract |
|
72 intros |
|
73 refl: "x =1=> x" |
|
74 K: "K##x##y =1=> x" |
|
75 S: "S##x##y##z =1=> (x##z)##(y##z)" |
|
76 Ap: "[| x=1=>y; z=1=>w |] ==> x##z =1=> y##w" |
|
77 |
69 |
78 text {* |
70 text {* |
79 Misc definitions. |
71 Misc definitions. |
80 *} |
72 *} |
81 |
73 |