]> matita.cs.unibo.it Git - fireball-separation.git/commitdiff
Parser.from_file, and p* problems moved to problems/p
authoracondolu <andrea.condoluci@unibo.it>
Fri, 14 Jul 2017 17:28:29 +0000 (19:28 +0200)
committeracondolu <andrea.condoluci@unibo.it>
Mon, 28 May 2018 09:08:57 +0000 (11:08 +0200)
(cherry picked from commit 032edbca0cd6654adae5b5f06620723e74847435)

ocaml/parser.ml
ocaml/parser.mli
ocaml/problems.ml
ocaml/problems/p [new file with mode: 0644]

index 9e0e809c36b83feadef56ea275abaa7d113df55c..a1a9d95a7dd85f91545009d81c132cfbc49676ef 100644 (file)
@@ -188,25 +188,16 @@ prerr_endline (s);
   aux' chr line in\r
  let _, name, div, conv, ps = List.fold_left aux ("#", "?", "", [], []) lines in\r
  let div_provided = div <> "" in\r
- let div = if div_provided then div else "BOT" in\r
+ let div = if div_provided then div else "xxxxxx" in\r
  let strs = [div] @ ps @ conv in\r
 \r
  (* parse' *)\r
  let (tms, free) = parse_many strs in\r
- (* Replace pacmans and bottoms *)\r
- let n_bot = try Util.index_of "BOT" free with Not_found -> min_int in\r
- let n_pac = try Util.index_of "PAC" free with Not_found -> min_int in\r
- let n_bomb = try Util.index_of "BOMB" free with Not_found -> min_int in\r
- let fix lev v =\r
-  if v = lev + n_bot then assert false\r
-   else if v = lev + n_pac then assert false\r
-    else if v = lev + n_bomb then assert false\r
-     else `Var(v,1) in (* 1 by default when variable not applied *)\r
  (* Fix arity *)\r
  let open Num in\r
  let rec aux lev : nf -> nf = function\r
  | `I((n,_), args) -> `I((n,1 + Listx.length args), Listx.map (fun t -> aux lev t) args)\r
- | `Var(n,_) -> fix lev n\r
+ | `Var(n,_) -> `Var(n,1)\r
  | `Lam(_,t) -> `Lam (true, aux (lev+1) t)\r
  | `Match _ | `N _ -> assert false in\r
 let all_tms = List.map (aux 0) (tms :> Num.nf list) in\r
@@ -232,3 +223,18 @@ let ps = List.map (
  ) ps in\r
  name, div, conv, ps, free\r
 ;;\r
+\r
+\r
+let from_file path =\r
+ let lines = ref [] in\r
+ let chan = open_in path in\r
+ let _ = try\r
+  while true; do\r
+    lines := input_line chan :: !lines\r
+  done\r
+ with End_of_file ->\r
+  close_in chan in\r
+ let txt = String.concat "\n" (List.rev !lines) in\r
+ let problems = Str.split (Str.regexp "\r?\n\r?\n\\#") txt in\r
+ List.map problem_of_string problems\r
+;;\r
index 927506732d13e8c125769d28a4c3dcaf5696c6af..47cfb28aaee6f814d43d319c99e754a68e2b0256 100644 (file)
@@ -8,3 +8,9 @@ val problem_of_string:
   * Num.i_n_var list (* conv *)\r
   * Num.i_n_var list (* ps *)\r
   * string list (* names of free variables *)\r
+val from_file : string ->\r
+ (string (* problem label *)\r
+ * Num.i_var option (* div *)\r
+ * Num.i_n_var list (* conv *)\r
+ * Num.i_n_var list (* ps *)\r
+ * string list (* names of free variables *)) list\r
index e01a741339652a74cdcbe5497971090d70dc7bda..399549694facd6d982fca15da808d2b7b4a57459 100644 (file)
@@ -21,107 +21,7 @@ let solve_many = List.iter assert_separable;;
 (* div under a lambda in conv *)
 (* assert_unseparable (problem_of (Some"`y y") ["x (_. y y)"] []);; *)
 
-assert_unseparable (problem_of None [] (* 32 *)
- ["(((((a y) v) (z a)) (z (((z a) (z a)) (w. v)))) (y. (a y)))";
- "(((((a y) v) (z a)) (z (((z a) (z a)) (w. v)))) a)";
- "(((((z a) (z a)) b) (v. (v. (z a)))) (v. ((a y) v)))";
- "((((a y) v) (z a)) (z (((z a) (z a)) (w. v))))";
- "((((w (a. (z. ((z a) (z a))))) (v. ((a y) v))) (((z a) (z a)) b)) (w. (((z a) (z a)) (c. (c ((z a) (z a)))))))"
- ]);;
-
-(* p-series problems *)
-let f x = assert_separable (problem_of None [] x) in
-List.iter f [
- (* 2 *) [ "x y"; "x z" ; "x (y z)"];
- (* 4 *) [ "x y"; "x (a. a x)" ; "y (y z)" ];
- (* 5 *) ["a (x. x a) b"; "b (x. x b) a"];
- (* 6 *) ["a (x. x a) b"; "b (x. x b) (c a)"];
- (* 7 *) ["a (x. (x a) (a x x a) (x x) )"];
- (* 8 *) ["x x (x x)"];
- (* 9 *) ["x x (x x x) (x x (x x)) (x x (x x x)) x x"];
- (* 10 *) ["x (y (x a b c))"];
- (* 11 *) ["x x"; "x (y.y)"];
- (* 12 *) ["x x (x x)"; "x x (x (y.y))"];
- (* 13 *) ["x x (x x (x x x x x (x x)))"];
- (* 14 *) ["a (a a (a (a a)) (a (a a)))"];
- (* 15 *) ["a (a (a a)) (a a (a a) (a (a (a a))) (a (a a)) (a a (a a) (a (a (a a))) (a (a a)))) (a a (a a) (a (a (a a))) (a (a a)))"];
- (* 16 *) ["a (a a) (a a (a (a a)) (a (a a)) (a a (a (a a)) a))"];
- (* 17 *) ["b a"; "b (c.a)"];
- (* 18 *) ["a (a a) (a a a (a (a (a a) a)) (a a a (a (a (a a) a))))" ; "a a" ; "a (a a)"];
- (* 19 *) ["a (a a) (a a a (a (a (a a) a)) a)"];
- (* 20 *) ["a (a b) (b (a b) (a (a b))) (a (a b) (a (a b)) (a (a b)) c) (a (a b) (a (a b)) (b (a b)) c (a a (a (a b) (a (a b)) b)) (a (a b) (a (a b)) (b (a b)) (a a) (a c (b (a b)))))"];
- (* 21 *)
-  ["(((y z) (y z)) ((z (y z)) ((y z) (z z))))";
-  "(((z z) x) (y z))";
-  "((z (y z)) ((y z) (z z)))"];
- (* 22 *)
-  ["((z y) ((((y (z y)) x) (y (z y))) ((y (z y)) (z z))))";
-  "((z y) (((((y (z y)) x) (y (z y))) ((y (z y)) (z z))) (((((y (z y)) x) (y (z y))) ((y (z y)) (z z))) ((x y) (z z)))))";
-  "(y ((((y (z y)) x) (y (z y))) ((y (z y)) (z z))))"];
- (* 23 *) (* diverging tests *) (* test p23 leads to test p24 *)
-  ["z z z"; "z (z z) (x. x)"];
- (* 24 *)
-  (* because of the last term, the magic number is 1 and we diverge;
-     but setting the magic number to 0 allows to solve the problem;
-     thus our strategy is incomplete *)
-  ["b b"; "b f"; "f b"; "a (x.x)"];
- (* 25 *)
-  (* because of the last term, the magic number is 1 and we diverge;
-     but setting the magic number to 0 allows to solve the problem;
-     thus our strategy is incomplete *)
-  ["b b"; "b f"; "f b"; "f (x.x)"];
- (* 26 *)
-  (* BUG:
-     0 (n (d (o.n) ...)))
-     After instantiating n, the magic number (for d) should be 2, not 1! *)
-  ["(((x y) (z. (y. (y. z)))) (z. y))";
-  "(((x y) x) (y y))"];
- (* 27 *)
-  ["(((((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y)) (((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y))) ((((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y)) (((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y))))";
-  "((((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y)) (((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y)))";
-  "(((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y))"];
- (* 28 *)
-  ["((((z (x. (z. (x. x)))) (z x)) x) (z (x. (z. (x. x)))))";
-   "(((z (x. (z. (x. x)))) (z x)) ((z x) (x. (z. (x. x)))))" ];
- (* 29 *)
-  ["((((((x x) (x x)) (z. (y x))) (z. ((x x) y))) y) ((x x) y))";
-  "(((((x x) (x x)) (z. (y x))) (z. ((x x) y))) y)"];
- (* 30 *)
-  ["((b c) (b. (z a)))";
-  "((v (a. (z v))) ((y (b c)) ((z a) (v y))))";
-  "((v (v. c)) z)";
-  "((v y) (v (a. (z v))))";
-  "((y (b c)) ((z a) (v y)))"];
- (* 31 *)
-  [" (((((((v (((a v) w) (((a v) w) v))) (w. c)) (b (a v))) c) (z. a)) (x. (w. (w. c)))) (((a (y c)) ((y c) ((a v) (w (z. a))))) (w. c)))";
-  "((((((v (((a v) w) (((a v) w) v))) (w. c)) (b (a v))) c) (z. a)) (x. (w. (w. c))))";
-  "(((((b (a v)) (a. (y c))) z) (w. w)) ((a c) c))";
-  "(((((v (((a v) w) (((a v) w) v))) (w. c)) (b (a v))) c) (z. a))";
-  "((((a (y c)) ((y c) ((a v) (w (z. a))))) (w. c)) (x. w))"];
- (* 33 *)
-  (* Shows an error when the strategy that minimizes special_k is NOT used *)
-  [ "((((((v (y. v)) (w. (c. y))) ((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) ((a (c. y)) b))) (((y (y (v w))) z) ((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) ((a (c. y)) b)))) (b c)) (((v w) (z (a (c. y)))) ((y b) (b (z (a (c. y)))))))";
-  "((((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) ((a (c. y)) b)) (c. y)) (c. y))";
-  "(((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) ((a (c. y)) b)) (c. y))";
-  "(((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) (b (z (a (c. y))))) ((c b) (b. (b w))))";
-  (* "(((((a (c. y)) b) v) (z (a (c. y)))) (a. (b (z (a (c. y))))))" *) ];
- (* 34 *)
-  [ "b c (b c) (c (d (j. e))) (b c (b c) (j.c f)) (b f (j. k. d)) (b (j. k. l. b c (b c)) (b g)) a";
-  "d (j. e) e (j. c f) (j. c j) b a";
-  "d (j. e) e (j. c f) b (b c (b c) (j. c f)) a";
-  "d (j. e) e (j. c f) b (b c (b c) (j. c f) (g b)) a";
-  "d (j. e) e (j. c f) b (j. k. j (l. e) e (l. k f) b) a";];
- (* 35 *)
-  [ "(((((((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) ((w ((a b) z)) (a ((v (y y)) (v (y y)))))) (z ((y (v (y y))) b))) (((y (v (y y))) ((y (v (y y))) x)) ((((c (a b)) (y y)) ((y (v (y y))) b)) (((c (a b)) (y y)) ((y (v (y y))) b))))) (z (z b))) ((y y) (((b z) v) (a ((v (y y)) (v (y y)))))))";
-  "((((((((a b) z) w) (((b z) v) (a ((v (y y)) (v (y y)))))) ((y y) ((y (v (y y))) b))) ((((((c (a b)) (y y)) ((y (v (y y))) b)) (((c (a b)) (y y)) ((y (v (y y))) b))) (((((c (a b)) (y y)) (y (v (y y)))) (z w)) ((w (((v (y y)) (v (y y))) a)) (w (z ((y (v (y y))) b)))))) (z w))) (((((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) ((w ((a b) z)) (a ((v (y y)) (v (y y)))))) (z ((y (v (y y))) b))) (c (a b)))) (((((b z) (c b)) (c ((v (y y)) (v (y y))))) (((((c (a b)) (y y)) ((y (v (y y))) b)) (((c (a b)) (y y)) ((y (v (y y))) b))) ((c b) (z (z b))))) (((((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) (b (((v (y y)) (v (y y))) ((y y) (z (z b)))))) (((((w ((a b) z)) (a ((v (y y)) (v (y y))))) (((v (y y)) (v (y y))) a)) (((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) (b (((v (y y)) (v (y y))) ((y y) (z (z b))))))) (b z))) ((x ((c b) (c b))) (((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) ((w ((a b) z)) (a ((v (y y)) (v (y y))))))))))";
-  "((((((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) ((w ((a b) z)) (a ((v (y y)) (v (y y)))))) (z ((y (v (y y))) b))) (((y (v (y y))) ((y (v (y y))) x)) ((((c (a b)) (y y)) ((y (v (y y))) b)) (((c (a b)) (y y)) ((y (v (y y))) b))))) (v (y y)))"];
- (* 36 *)
-  [ "(((((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (((y c) (x a)) (v (((y a) (((z v) (y a)) (b a))) z)))) ((b a) (b a))) ((a c) (b (((y a) (((z v) (y a)) (b a))) (z a))))) ((((((b (((y a) (((z v) (y a)) (b a))) z)) (c ((y (x a)) ((z v) (y a))))) (v (((y a) (((z v) (y a)) (b a))) z))) (((((y a) (((z v) (y a)) (b a))) z) (((z v) (y a)) (c y))) ((x a) (((y a) (((z v) (y a)) (b a))) z)))) ((c ((y (x a)) ((z v) (y a)))) (b (((y a) (((z v) (y a)) (b a))) z)))) ((((b (z a)) (y a)) (y c)) (a (((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (x a)) ((((y a) (((z v) (y a)) (b a))) z) (((z v) (y a)) (c y))))))))";
-  "(((((((z v) (y a)) (b a)) w) b) (((b a) ((((z v) (y a)) (b a)) w)) ((((z v) (y a)) (b a)) w))) (((b a) ((((y a) (((z v) (y a)) (b a))) ((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (x a))) w)) (((c y) a) v)))";
-  "(((((((z v) (y a)) (b a)) w) b) (a (((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (x a)) ((((y a) (((z v) (y a)) (b a))) z) (((z v) (y a)) (c y)))))) ((((y a) (((z v) (y a)) (b a))) ((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (x a))) x))"];
- (* 37 *) (* issue with eta-equality of terms in ps *)
-  ["x (a y) z"; "x (a z. y z) w"; "a c"];
-];;
+List.iter (assert_separable ++ Lambda4.tmp) (Parser.from_file "problems/p");;
 
 (* q-series problems *)
 
diff --git a/ocaml/problems/p b/ocaml/problems/p
new file mode 100644 (file)
index 0000000..5e7283c
--- /dev/null
@@ -0,0 +1,170 @@
+# p2\r
+N x y\r
+  x z\r
+  x (y z)\r
+\r
+# p4\r
+N x y\r
+  x (a. a x)\r
+  y (y z)\r
+\r
+# p5\r
+N a (x. x a) b\r
+  b (x. x b) a\r
+\r
+# p6\r
+N a (x. x a) b\r
+  b (x. x b) (c a)\r
+\r
+# p7\r
+N a (x. (x a) (a x x a) (x x) )\r
+\r
+# p8\r
+N x x (x x)\r
+\r
+# p9\r
+N x x (x x x) (x x (x x)) (x x (x x x)) x x\r
+\r
+# p10\r
+N x (y (x a b c))\r
+\r
+# p11\r
+N x x\r
+  x (y.y)\r
+\r
+# p12\r
+N x x (x x)\r
+  x x (x (y.y))\r
+\r
+# p13\r
+N x x (x x (x x x x x (x x)))\r
+\r
+# p14\r
+N a (a a (a (a a)) (a (a a)))\r
+\r
+# p15\r
+N a (a (a a)) (a a (a a) (a (a (a a))) (a (a a)) (a a (a a) (a (a (a a))) (a (a a)))) (a a (a a) (a (a (a a))) (a (a a)))\r
+\r
+# p16:\r
+N a (a a) (a a (a (a a)) (a (a a)) (a a (a (a a)) a))\r
+\r
+# p17\r
+N b a\r
+  b (c.a)\r
+\r
+# p18\r
+N a (a a) (a a a (a (a (a a) a)) (a a a (a (a (a a) a))))\r
+  a a\r
+  a (a a)\r
+\r
+# p19\r
+N a (a a) (a a a (a (a (a a) a)) a)\r
+\r
+# p20\r
+N a (a b) (b (a b) (a (a b))) (a (a b) (a (a b)) (a (a b)) c) (a (a b) (a (a b)) (b (a b)) c (a a (a (a b) (a (a b)) b)) (a (a b) (a (a b)) (b (a b)) (a a) (a c (b (a b)))))\r
+\r
+# p21\r
+N (((y z) (y z)) ((z (y z)) ((y z) (z z))))\r
+  (((z z) x) (y z))\r
+  ((z (y z)) ((y z) (z z)))\r
+\r
+# p22\r
+N ((z y) ((((y (z y)) x) (y (z y))) ((y (z y)) (z z))))\r
+  ((z y) (((((y (z y)) x) (y (z y))) ((y (z y)) (z z))) (((((y (z y)) x) (y (z y))) ((y (z y)) (z z))) ((x y) (z z)))))\r
+  (y ((((y (z y)) x) (y (z y))) ((y (z y)) (z z))))\r
+\r
+# p23\r
+  (* diverging tests *) (* test p23 leads to test p24 *)\r
+N z z z\r
+  z (z z) (x. x)\r
+\r
+# p24\r
+  (* because of the last term, the magic number is 1 and we diverge\r
+     but setting the magic number to 0 allows to solve the problem\r
+     thus our strategy is incomplete *)\r
+N b b\r
+  b f\r
+  f b\r
+  a (x.x)\r
+\r
+# p25\r
+  (* because of the last term, the magic number is 1 and we diverge\r
+     but setting the magic number to 0 allows to solve the problem\r
+     thus our strategy is incomplete *)\r
+N b b\r
+  b f\r
+  f b\r
+  f (x.x)\r
+\r
+# p26\r
+  (* BUG:\r
+     0 (n (d (o.n) ...)))\r
+     After instantiating n, the magic number (for d) should be 2, not 1! *)\r
+N (((x y) (z. (y. (y. z)))) (z. y))\r
+  (((x y) x) (y y))\r
+\r
+# p27\r
+N (((((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y)) (((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y))) ((((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y)) (((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y))))\r
+  ((((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y)) (((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y)))\r
+  (((((z y) (z (z y))) (z (z y))) ((z y) (((z y) (z (z y))) ((z y) x)))) (((((z y) (z (z y))) (z (z y))) x) y))\r
+\r
+# p28\r
+N ((((z (x. (z. (x. x)))) (z x)) x) (z (x. (z. (x. x)))))\r
+   (((z (x. (z. (x. x)))) (z x)) ((z x) (x. (z. (x. x)))))\r
+\r
+# p29\r
+N ((((((x x) (x x)) (z. (y x))) (z. ((x x) y))) y) ((x x) y))\r
+  (((((x x) (x x)) (z. (y x))) (z. ((x x) y))) y)\r
+\r
+# p30\r
+N ((b c) (b. (z a)))\r
+  ((v (a. (z v))) ((y (b c)) ((z a) (v y))))\r
+  ((v (v. c)) z)\r
+  ((v y) (v (a. (z v))))\r
+  ((y (b c)) ((z a) (v y)))\r
+\r
+# p31\r
+N  (((((((v (((a v) w) (((a v) w) v))) (w. c)) (b (a v))) c) (z. a)) (x. (w. (w. c)))) (((a (y c)) ((y c) ((a v) (w (z. a))))) (w. c)))\r
+   ((((((v (((a v) w) (((a v) w) v))) (w. c)) (b (a v))) c) (z. a)) (x. (w. (w. c))))\r
+   (((((b (a v)) (a. (y c))) z) (w. w)) ((a c) c))\r
+    (((((v (((a v) w) (((a v) w) v))) (w. c)) (b (a v))) c) (z. a))\r
+      ((((a (y c)) ((y c) ((a v) (w (z. a))))) (w. c)) (x. w))\r
+\r
+# p32\r
+N (((((a y) v) (z a)) (z (((z a) (z a)) (w. v)))) (y. (a y)))\r
+  (((((a y) v) (z a)) (z (((z a) (z a)) (w. v)))) a)\r
+  (((((z a) (z a)) b) (v. (v. (z a)))) (v. ((a y) v)))\r
+  ((((a y) v) (z a)) (z (((z a) (z a)) (w. v))))\r
+  ((((w (a. (z. ((z a) (z a))))) (v. ((a y) v))) (((z a) (z a)) b)) (w. (((z a) (z a)) (c. (c ((z a) (z a)))))))\r
+\r
+# p33\r
+  (* Shows an error when the strategy that minimizes special_k is NOT used *)\r
+N ((((((v (y. v)) (w. (c. y))) ((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) ((a (c. y)) b))) (((y (y (v w))) z) ((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) ((a (c. y)) b)))) (b c)) (((v w) (z (a (c. y)))) ((y b) (b (z (a (c. y)))))))\r
+  ((((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) ((a (c. y)) b)) (c. y)) (c. y))\r
+  (((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) ((a (c. y)) b)) (c. y))\r
+  (((((a (c. y)) (v w)) ((b (z (a (c. y)))) (b (z (a (c. y)))))) (b (z (a (c. y))))) ((c b) (b. (b w))))\r
+#  (* "(((((a (c. y)) b) v) (z (a (c. y)))) (a. (b (z (a (c. y))))))" *)\r
+\r
+# p34\r
+N b c (b c) (c (d (j. e))) (b c (b c) (j.c f)) (b f (j. k. d)) (b (j. k. l. b c (b c)) (b g)) a\r
+  d (j. e) e (j. c f) (j. c j) b a\r
+  d (j. e) e (j. c f) b (b c (b c) (j. c f)) a\r
+  d (j. e) e (j. c f) b (b c (b c) (j. c f) (g b)) a\r
+  d (j. e) e (j. c f) b (j. k. j (l. e) e (l. k f) b) a\r
+\r
+# p35\r
+N (((((((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) ((w ((a b) z)) (a ((v (y y)) (v (y y)))))) (z ((y (v (y y))) b))) (((y (v (y y))) ((y (v (y y))) x)) ((((c (a b)) (y y)) ((y (v (y y))) b)) (((c (a b)) (y y)) ((y (v (y y))) b))))) (z (z b))) ((y y) (((b z) v) (a ((v (y y)) (v (y y)))))))\r
+  ((((((((a b) z) w) (((b z) v) (a ((v (y y)) (v (y y)))))) ((y y) ((y (v (y y))) b))) ((((((c (a b)) (y y)) ((y (v (y y))) b)) (((c (a b)) (y y)) ((y (v (y y))) b))) (((((c (a b)) (y y)) (y (v (y y)))) (z w)) ((w (((v (y y)) (v (y y))) a)) (w (z ((y (v (y y))) b)))))) (z w))) (((((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) ((w ((a b) z)) (a ((v (y y)) (v (y y)))))) (z ((y (v (y y))) b))) (c (a b)))) (((((b z) (c b)) (c ((v (y y)) (v (y y))))) (((((c (a b)) (y y)) ((y (v (y y))) b)) (((c (a b)) (y y)) ((y (v (y y))) b))) ((c b) (z (z b))))) (((((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) (b (((v (y y)) (v (y y))) ((y y) (z (z b)))))) (((((w ((a b) z)) (a ((v (y y)) (v (y y))))) (((v (y y)) (v (y y))) a)) (((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) (b (((v (y y)) (v (y y))) ((y y) (z (z b))))))) (b z))) ((x ((c b) (c b))) (((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) ((w ((a b) z)) (a ((v (y y)) (v (y y))))))))))\r
+  ((((((((b z) v) (a ((v (y y)) (v (y y))))) (y (v (y y)))) ((w ((a b) z)) (a ((v (y y)) (v (y y)))))) (z ((y (v (y y))) b))) (((y (v (y y))) ((y (v (y y))) x)) ((((c (a b)) (y y)) ((y (v (y y))) b)) (((c (a b)) (y y)) ((y (v (y y))) b))))) (v (y y)))\r
+\r
+# p36\r
+N (((((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (((y c) (x a)) (v (((y a) (((z v) (y a)) (b a))) z)))) ((b a) (b a))) ((a c) (b (((y a) (((z v) (y a)) (b a))) (z a))))) ((((((b (((y a) (((z v) (y a)) (b a))) z)) (c ((y (x a)) ((z v) (y a))))) (v (((y a) (((z v) (y a)) (b a))) z))) (((((y a) (((z v) (y a)) (b a))) z) (((z v) (y a)) (c y))) ((x a) (((y a) (((z v) (y a)) (b a))) z)))) ((c ((y (x a)) ((z v) (y a)))) (b (((y a) (((z v) (y a)) (b a))) z)))) ((((b (z a)) (y a)) (y c)) (a (((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (x a)) ((((y a) (((z v) (y a)) (b a))) z) (((z v) (y a)) (c y))))))))\r
+  (((((((z v) (y a)) (b a)) w) b) (((b a) ((((z v) (y a)) (b a)) w)) ((((z v) (y a)) (b a)) w))) (((b a) ((((y a) (((z v) (y a)) (b a))) ((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (x a))) w)) (((c y) a) v)))\r
+  (((((((z v) (y a)) (b a)) w) b) (a (((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (x a)) ((((y a) (((z v) (y a)) (b a))) z) (((z v) (y a)) (c y)))))) ((((y a) (((z v) (y a)) (b a))) ((((y a) (((z v) (y a)) (b a))) ((b a) (b a))) (x a))) x))\r
+\r
+\r
+# p37\r
+  issue with eta-equality of terms in ps\r
+N x (a y) z\r
+  x (a z. y z) w\r
+  a c\r