aboutsummaryrefslogtreecommitdiff
path: root/sample/245II.in
blob: 27910eb010ba52b6916eb78df2e85755fc1cd7a9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// 245II in YALE encoding

// Rules
Lam(a,b,c) >< App(x,y) => a~x, b~y, c~D;
D >< V => ;
B(a,x,e) >< Lam(b,c,y) => x~Lam(b,c,d), y~DB(a,d,e);
DB(a,b,c) >< V => a~c, b~V;
C(x,y) >< Lam(s,t,u) =>
	 x~Lam(a,b,c), y~Lam(d,e,f),
	 s~Delta(a,d), t~Delta(b,e), u~C(c,f);
C(x,y) >< V => x~V, y~V;
Delta(x,y) >< Delta(a,b) => x~a, y~b;
B(x,a,b) >< Delta(c,d) => x~CB(a,b,Delta(c,d));
Delta(a,b) >< CB(x,y,z) =>
	x~Delta(c,d), y~Delta(e,f), z~Delta(B(a,c,e),B(b,d,f));
Delta(x,y) >< V => x~V, y~V;
Delta(x,y) >< C(t,s) =>
	x~C(a,b), y~C(c,d), t~Delta(b,d), s~Delta(a,c);
Delta(x,y) >< App(t,s) =>
	x~App(a,b), y~App(c,d), t~Delta(a,c), s~Delta(b,d);
Delta(x,y) >< Lam(t,s,u)=>
	x~Lam(a,b,c), y~Lam(d,e,f),
	t~Delta(a,d), s~Delta(b,e), u~Delta(c,f);
DB(x,y,z) >< CB(t,s,u) =>
	x~CB(d,e,u), y~CB(t,f,d), s~DB(e,f,z);
C(x,y) >< CB(t,s,u) =>
	x~CB(a,b,c), y~CB(d,e,f), 
	t~Delta(a,d), s~C(b,e), u~C(c,f);
D >< CB(a,b,c) => a~c, b~D;

Eps >< Eps => ;
Eps >< S(x) => x~Eps;
Eps >< V => ;
Eps >< D =>;
Eps >< Delta(t,s) => t~Eps,s~Eps;
Eps >< Lam(t,s,u) => t~Eps,s~Eps,u~Eps;
Eps >< App(t,s) => t~Eps,s~Eps;
Eps >< B(t,s,u) => t~Eps,s~Eps,u~Eps;
Eps >< CB(t,s,u) => t~Eps,s~Eps,u~Eps;


// Nets
// lam x.x
id1 ~ Lam(i,i,V);
id2 ~ Lam(i2,i2,V);

// lam f. lam x. f(fx)
two ~ Lam(Lam(a,b,c),B(c,C(App(a,d),App(d,b)),V),V);

// lam f. lam x. f(fx)
four ~ Lam(Lam(dz4, dx2, da1), B(da1, C(App(dz4, dz3), C(App(dz3, dz2), C(App(dz2, dz1), App(dz1, dx2)))), V), V);

// lam f. lam x. f(fx)
five ~ Lam(Lam(z53, x23, a13), B(a13, C(App(z53, z43), C(App(z43, z33), C(App(z33,z23), C(App(z23, z13), App(z13, x23))))), V), V);

// 245II
two  ~ App(aux1, four);
aux1 ~ App(aux2, five);
aux2 ~ App(aux3, id1);
aux3 ~ App(aux4, id2);
aux4;
exit;