6 Parallel reduction and a complete developments function "cd". |
6 Parallel reduction and a complete developments function "cd". |
7 *) |
7 *) |
8 |
8 |
9 ParRed = Lambda + Commutation + |
9 ParRed = Lambda + Commutation + |
10 |
10 |
11 consts par_beta :: "(db * db) set" |
11 consts par_beta :: "(dB * dB) set" |
12 |
12 |
13 syntax "=>" :: [db,db] => bool (infixl 50) |
13 syntax "=>" :: [dB,dB] => bool (infixl 50) |
14 |
14 |
15 translations |
15 translations |
16 "s => t" == "(s,t) : par_beta" |
16 "s => t" == "(s,t) : par_beta" |
17 |
17 |
18 inductive par_beta |
18 inductive par_beta |
19 intrs |
19 intrs |
20 var "Var n => Var n" |
20 var "Var n => Var n" |
21 abs "s => t ==> Fun s => Fun t" |
21 abs "s => t ==> Abs s => Abs t" |
22 app "[| s => s'; t => t' |] ==> s @ t => s' @ t'" |
22 app "[| s => s'; t => t' |] ==> s @ t => s' @ t'" |
23 beta "[| s => s'; t => t' |] ==> (Fun s) @ t => s'[t'/0]" |
23 beta "[| s => s'; t => t' |] ==> (Abs s) @ t => s'[t'/0]" |
24 |
24 |
25 consts |
25 consts |
26 cd :: db => db |
26 cd :: dB => dB |
27 deFun :: db => db |
27 deAbs :: dB => dB |
28 |
28 |
29 primrec cd db |
29 primrec cd dB |
30 "cd(Var n) = Var n" |
30 "cd(Var n) = Var n" |
31 "cd(s @ t) = (case s of |
31 "cd(s @ t) = (case s of |
32 Var n => s @ (cd t) | |
32 Var n => s @ (cd t) | |
33 s1 @ s2 => (cd s) @ (cd t) | |
33 s1 @ s2 => (cd s) @ (cd t) | |
34 Fun u => deFun(cd s)[cd t/0])" |
34 Abs u => deAbs(cd s)[cd t/0])" |
35 "cd(Fun s) = Fun(cd s)" |
35 "cd(Abs s) = Abs(cd s)" |
36 |
36 |
37 primrec deFun db |
37 primrec deAbs dB |
38 "deFun(Var n) = Var n" |
38 "deAbs(Var n) = Var n" |
39 "deFun(s @ t) = s @ t" |
39 "deAbs(s @ t) = s @ t" |
40 "deFun(Fun s) = s" |
40 "deAbs(Abs s) = s" |
41 end |
41 end |