]> matita.cs.unibo.it Git - fireball-separation.git/blobdiff - ocaml/problems.ml
Fixed: was using compare in place of eta_eq
[fireball-separation.git] / ocaml / problems.ml
index bf1b67a0942bb9093cdf9be4343195269ea72f94..b49cf7733578832c022cc994b87ccc6599660a3e 100644 (file)
-let use_lambda3 = Array.length Sys.argv = 1;;
-
-let discriminator = ( module Lambda4 : Discriminator.Discriminator );;
-module Pippo = (val discriminator);;
-open Pippo;;
-
-let p2 = magic [ "x y"; "x z" ; "x (y z)"] ["*"]
-
-let p4 = magic
-  [ "x y"; "x (a. a x)" ; "y (y z)" ] ["*"]
-
-let p5 = magic
-  ["a (x. x a) b"; "b (x. x b) a"]
-  ["*"]
-;;
-
-let p6 = magic
-  ["a (x. x a) b"; "b (x. x b) (c a)"]
-  ["*"]
-;;
-
-let p7 = magic
-  ["a (x. (x a)(a x x a)(x x) )"]
-  ["*"]
-;;
-
-let p8 = magic
-  ["x x (x x)"]
-  ["*"]
-;;
-
-let p9 = magic
-  ["x x (x x x) (x x (x x)) (x x (x x x)) x x"]
-  ["*"]
-;;
-
-let p10 = magic
-  ["x (y (x a b c))"]
-  ["*"]
-;;
-
-let p11 = magic
-  ["x x"; "x (y.y)"]
-  ["*"]
-;;
-
-let p12 = magic
-  ["x x (x x)"; "x x (x (y.y))"]
-  ["*"]
-;;
-
-let p13 = magic
-  ["x x (x x (x x x x x (x x)))"]
-  ["*"]
-;;
-
-let p14 = magic
-  ["a (a a (a (a a)) (a (a a)))"]
-  ["*"]
-;;
-
-let p15 = magic
-  ["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)))"]
-  ["*"]
-;;
-
-let p16 = magic
-  ["a (a a) (a a (a (a a)) (a (a a)) (a a (a (a a)) a))"]
-  ["*"]
-;;
-
-let p17 = magic
-  ["b a"; "b (c.a)"]
-  ["*"]
-;;
-
-let p18 = magic
-  ["a (a a) (a a a (a (a (a a) a)) (a a a (a (a (a a) a))))" ; "a a" ; "a (a a)"]
-  ["*"]
-;;
-
-let p19 = magic
-  ["a (a a) (a a a (a (a (a a) a)) a)"]
-  ["*"]
-;;
-
-let p20 = magic
-  ["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)))))"]["*"];;
-
-let p21 = magic
+open Lambda4;;
+let solve_many = List.iter solve;;
+
+(* p-series problems *)
+let f x = problem_of None [] x in
+solve_many (List.map 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)))"
-] ["*"];;
-
-let p22 = magic
-["((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))))"] ["*"];;
-
-(* diverging tests *)
-(* test p23 leads to test p24 *)
-let p23 = magic
-["z z z"; "z (z z) (x. x)"] ["*"];;
-
-(* 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 *)
-let p24 = magic
-["b b"; "b f"; "f b"; "a (x.x)"] ["*"];;
-
-(* 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 *)
-let p25 = magic
-["b b"; "b f"; "f b"; "f (x.x)"] ["*"];;
-
-(* BUG:
-   0 (n (d (o.n) ...)))
-   After instantiating n, the magic number (for d) should be 2, not 1! *)
-let p26 = magic
-["(((x y) (z. (y. (y. z)))) (z. y))";
-"(((x y) x) (y y))"] ["*"];;
-
-let p27 = magic
-["(((((((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))"] ["*"];;
-
-let p28 = magic
-["((((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)))))" ] ["*"];;
-
-let p29 = magic
-["((((((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)"] ["*"];;
-
-let p30 = magic
-["((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)))"] ["*"];;
-
-let p31 = magic
-[" (((((((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))"] ["*"];;
-
-let p32 = magic
-["(((((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)))))))"
-] ["*"];;
-
-(* Shows an error when the strategy that minimizes special_k is NOT used *)
-let p33 = magic
-[
-"((((((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))))))" *)
-] ["*"];;
-
-let p34 = magic [
-"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";
-] ["*"];;
-(* 0: (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)
-1: (d j.e e j.(c f) j.(c j) b a)
-2: (d j.e e j.(c f) b (b c (b c) j.(c f)) a)
-3: (d j.e e j.(c f) b (b c (b c) j.(c f) (g b)) a)
-4: (d j.e e j.(c f) b j.k.(j l.e e l.(k f) b) a) *)
-
-let p35 = magic [
-"(((((((((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)))"
-] ["*"];;
+  "(((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))"];
+ (* 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)))))))"
+  ];
+ (* 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"];
 
-let p36 = magic
-[
-"(((((((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))"
-] ["*"];;
-
-(* issue with eta-equality of terms in ps *)
-let p37 = magic
-  ["x (a y) z"; "x (a z. y z) w"; "a c"]
-  ["*"];;
+]);;
 
-(**********************)
+(* q-series problems *)
 
-let q1 () = magic_conv
+let q1 () = problem_of
  None
  ["a d e"]
  ["a b"; "a c"]
["*"];;
+ ;;
 
-let q2 () = magic_conv
+let q2 () = problem_of
  None
  ["a d e"]
  ["a b" ]
["*"];;
+ ;;
 
-let q3 () = magic_conv
- (Some "x")
+let q3 () = problem_of
+ (Some "x y")
  ["a d e f"]
  ["a b" ]
["*"];;
+ ;;
 
-let q4 () = magic_conv
+let q4 () = problem_of
  None
  ["f (x.a b c d)"]
  ["a b" ]
["*"];;
+ ;;
 
-let q5 () = magic_conv
- (Some"x")
+let q5 () = problem_of
+ (Some"x y")
  ["(y. x)"]
  ["x"]
["*"];;
+ ;;
 
-let q6 () = magic_conv
- (Some"x")
+let q6 () = problem_of
+ (Some"x w")
  ["(y. x z)"]
  ["y"]
["*"];;
+ ;;
 
-let q7 () = magic_conv
+let q7 () = problem_of
  (Some "(b (c d (e f f k.(g e))) f)")
  ["(g (e f) (g e h) (f d (e f) k.e) k.(c d l.(c d)) (f d k.g (b (g (e f)) (b (g (e f)) (e f)) (g (e f) (g e h)))) k.l.(h f (b i)))";
   "(g (e f) (g e h) (f d (e f) k.e) k.(c d l.(c d)) (b (g (e f))) k.l.(g f (k f f (k f f m.(g k)))))";
@@ -244,25 +149,25 @@ let q7 () = magic_conv
  ["(f d (e f) k.e k.l.(c d) (b (g e) k.h) (i b k.l.m.e b) a)";
   "(f d (e f) k.e k.l.(c d) (b (g e) k.h) (d k.e) (f d (e f) k.e) a)";
   "(g (e f) (g e h) (f d (e f) k.e) k.(c d l.(c d)) (g e h) (g f (e f f (e f f k.(g e))) (g (e f)) (b (c d (e f f k.(g e))) (b (g (e f)) (e f)) (b (g (e f)) k.l.e))) a)"]
["*"];;
+ ;;
 
 (**********************)
 
-let q8 () = magic_conv
+let q8 () = problem_of
  (Some"x a")
- ["y (x b c)"] ["j"] ["*"]
+ ["y (x b c)"] ["j"]
 ;;
 
-let q9 () = magic_conv
+let q9 () = problem_of
  (Some"x a")
- ["y x"] ["a (y a b b b)"] ["*"]
+ ["y x"] ["a (y a b b b)"]
 ;;
 
-let q11 () = magic_conv
+let q11 () = problem_of
  (Some "x y")
- ["a (x z)"] [] ["*"];;
+ ["a (x z)"] [] ;;
 
-let q10 () = magic_conv
+let q10 () = problem_of
  (Some "b (k. c) d (e (f g) (k. g)) (k. l. c) (k. l. b (m. c)) (k. l. c) (b (k. c) (k. l. b (m. c)) (k. c f)
 (k. e (f g))) (b (k. c) (k. e) f (b (k. c) (k. l. b (m. c)) (k. c f)) (b (k. c) (k. e) f (b (k. c) (k. l. b
  (m. c)) (k. c f))) (k. b (l. c) b (l. b (m. c))) (k. b (l. c)))")
@@ -277,27 +182,156 @@ let q10 () = magic_conv
 "b (k. c) d (e (f g) (k. g)) (k. l. c) (k. l. b (m. c)) (k. l. m. n. o. p. o) (e (f g) (k. g) (c f) (k. i) f)";
 "b (k. c) d (e (f g) (k. g)) (k. l. c) (k. l. b (m. c)) (k. l. c) (k. b)";
 "e (f g) (k. g) (c f) (k. e) (k. b (l. c)) (c f (k. b (l. c)) (k. l. b (m. k))) (k. b (l. k)) (e (f g) (k. g) (c f) (c f (k. b (l. c)) (k. e)))";
-] ["*"];;
+] ;;
 
-let m1 () = magic_conv None []
+let m1 () = problem_of None []
  ["y z"; "x z"; "x (a k) u"; "x (a r)"; "x (a k) v"]
- ["*"]
+
 ;;
 
-let m2 () = magic_conv None []
+let m2 () = problem_of None []
  ["y z"; "x z"; "x (a k) u"; "x (a r)"; "x (a k) v"]
- ["*"]
+
+;;
+
+
+let n1 () = problem_of (Some"b (c b) (k. l. c b d) (c e) (k. l. m. f) (g (k. c e) (b (c b) (k. l. c b d) (c e) b)) (f c (h (k. c c g))) (g (k. c e) (k. i) f e (g (k. c e) (k. i) (c b) (c (c e)) (k. l. c b d)) (k. e c (k (l. f))) (g (k. c e) (k. i) e)) (g (k. c e) (k. i) (c b) (f c) b)")
+[
+"b (c b) (k. l. c b d) (c e) (k. l. m. f) (g (k. c e) (b (c b) (k. l. c b d) (c e) b)) (f c (h (k. c c g))) (g (k. c e) (k. i) f e (g (k. c e) (k. i) (c b) (c (c e)) (k. l. c b d)) (k. e c (k (l. f))) (g (k. c e) (k. i) e)) (b (k. f) (g (k. c e) (k. i) (c b) (c (c e))) (k. l. m. f) (g (k. c e) (k. i) f e) (k. i))";
+"g (k. c e) (k. i) (c b) (c (c e)) (k. l. c b d) (k. l. g (m. c e) (m. i) (c b) (l c) b) (e c (d d (d c)) (c e (k. f)) (b (c b) (k. l. c b d) (c e) (k. l. m. f)))";
+"b (c b) (k. l. c b d) (c e) (k. l. m. f) (g (k. c e) (b (c b) (k. l. c b d) (c e) b)) (f c (h (k. c c g))) (g (k. c e) (k. i) f e (g (k. c e) (k. i) (c b) (c (c e)) (k. l. c b d)) (k. e c (k (l. f))) (g (k. c e) (k. i) e))";
+"b (k. f) (g (k. c e) (k. i) (c b) (c (c e))) (k. l. m. f) (g (k. c e) (k. i) f e) (k. l. m. c c g) (e c (b (k. f))) (k. f c)";
+"c (c e) (e c (d d (d c)) (k. c e (f c))) (g (k. c e) (k. i) (c b) (c (c e)) (k. l. c b d) (k. c e (l. f) (k (l. c e) (l. i)))) (k. l. l (m. c e) (m. i) (c b) (f c) b) (k. l. c k) (f (f c) (b (c b) (k. l. c b d) (c e)) (b (k. f) (g (k. c e) (k. i) (c b) (c (c e))) (k. l. m. f) (g (k. c e) (k. i) f e) (k. l. m. c c g) (e c (b (k. f)))))";
+] [
+"b (c b) (k. l. c b d) (c e) b (g (k. c e) (k. i) (c b)) (h (g (k. c e) (k. i) (c b) (c (c e)))) (g (k. c e) (b (c b) (k. l. c b d) (c e) b) (g (k. c e) (k. i) (g (k. c e) (k. i) e) (e c (d d (d c)) (k. c e (f c))))) a";
+"c c g (k. b (c b) (l. m. c b k) (c e)) (k. b (c b) (l. m. c b d) (c k) b) (k. e c (d h) k) (g (k. c e) (b (c b) (k. l. c b d) (c e) b) (g (k. c e) (k. i) (g (k. c e) (k. i) e) (e c (d d (d c)) (k. c e (f c))))) a";
+"d h (b (c b) (k. l. c b d) (c e)) (k. g (l. c e) (l. i) (c b) (k c) b) d b (b (c b) (k. l. c b d) (c e) b (g (k. c e) (k. i) (c b)) (k. c)) a";
+"g (k. c e) (k. d d) (k. k k) (e c (d d (d c)) i) (k. g (l. k e) (l. d d)) (g i (b (c b) (k. l. c b d) (e c (d d (d c)) (k. c e (f c)) (k. k (c k) (l. m. c k d) (c e) k (g (l. c e) (l. i) (c k)) (l. c))))) (c b) a";
+"g (k. c e) (k. i) f e (g (k. c e) (k. i) (c b) (c (c e)) (k. l. c b d)) (k. e c (k (l. f))) (g (k. c e) (k. i) e) a"
+] ;;
+
+let n2 () = problem_of
+(Some"b b (c d) (k. d e) (k. k) (k. l. b)")
+[
+"b b (d e (k. d e)) (g (k. e) (k. k)) (b (b b) (d (g (d e) (g (k. e)) h) (b b (c d) (k. l. b)) (b (k. h))) (k. k (k k) (l. l))) (f (e (c d))) (b b (d e (k. d e)) (b b) (b (b b) (d (g (d e) (g (k. e)) h) (b b (c d) (k. l. b)) (b (k. h))))) (d e (k. d e) g (i (k. k)))";
+"f (g (k. e)) (k. b b) (c d (k. k d) (k. l. l) c) (k. c d) (k. c) (d (g (de) (g (k. e)) h) (g (k. b b)))";
+"f (g (k. e)) (k. b b) (c d (k. k d) (k. l. l) c) (k. c d) (k. l. l) (k. g (d e) (l. m. m))";
+"b b (d e (k. d e)) (g (k. e) (k. k)) (b (b b) (d (g (d e) (g (k. e)) h) (b b (c d) (k. l. b)) (b (k. h))) (k. k (k k) (l. l))) (f (e (c d))) (b b (d e (k. d e)) (b b) (b (b b) (d (g (d e) (g (k. e)) h) (b b (c d) (k. l. b)) (b (k. h)))))";
+"d (g (d e) (g (k. e)) h) (g (g (d e)) (d e (k. d e) (k. b (l. h)) (k. l. d e))) (b (k. h) (k. k e (l. m. b b)) (k. k (k k) (l. l))) (k. b) (b b (k. l. i)(k. c))";
+] [
+"b (b b) (d (g (d e) (g (k. e)) h) (b b (c d) (k. l. b)) (b (k. h))) (e (b b (c d))) (d (g (d e) (g (k. e)) h) (b b (c d) (k. l. b)) (g (k. e) (k. k))) (k. l. d (g (d k) (g (m. k)) h) (d k (m. n. b b))) (e (c d) (e (c d))) a";
+"d (g (d e) (g (k. e)) h) (d e (k. l. b b)) (b b) h (k. g (l. e) (l. l)) a";
+"d e (k. d e) (k. b (l. h)) (k. l. d e) (d (g (d e) (g (k. e)) h) (g (d e) (k. l. l))) a";
+"f (g (k. e)) (k. b b) (c d (k. k d) (k. l. l) c) (k. c d) (k. c) (k. l. m. b b) a";
+"f (g (k. e)) (k. b b) (c d (k. k d) (k. l. l) c) (k. c d) (b (b b) (d (g(d e) (g (k. e)) h) (b b (c d) (k. l. b)) (b (k. h))) (e (b b (c d))) (d (g (d e) (g (k. e)) h) (b b (c d) (k. l. b)) (g (k. e) (k. k)))) (k. d e (l. d e) f) a";
+]
 ;;
 
-main ([
- (* p2 ; p4 ; p5 ; p6 ; p7 ; p8 ; p9 ; p10 ; p11 ; p12 ; p13 ; p14 ; p15 ; p16 ; p17 ; p18 ; p19 ; p20 ; p21 ; p22 ; p23 ; p24 ; p25 ; p26 ; p27 ; p28 ; p29 ; p30 ; p31 ; p32 ; p33 ; p34 ; p35 ; p36 ; p37 ; *)
- p24 ; p25 ;
-] @ if use_lambda3 then [] else List.map ((|>) ()) [
+let n3 () = problem_of
+(Some"b (k. c (c d e f)) (k. l. f (m. f) (m. f) (m. n. n))")
+[
+"b (g (k. e e)) (k. b (g (l. e e))) (g (h (k. i)) (k. e)) (f (k. f) (k. f) i) (i (k. c (c d e f)) (k. l. l) (k. g (h (l. i)) (k d) f) e) (k. l. h) (k. f (l. f) (l. f) (l. e)) (k. l. l (m. l))";
+"c d e (f i) (e e) (g e) (k. l. e) (k. c (g (k (l. i)))) (c d e (k. k))";
+"f (k. f) (k. f) (f h) (f h (c d e (f i))) (k. b) (c d e (f i) (e e) (f (k. h))) (g e (b (k. i)) (e e (e e)))";
+"f (k. f) (k. f) (k. e) (c d e (f i) (e e) (g e)) (k. e e) (k. l. m. e) (k. e)";
+"g e f (f (k. f) (f (k. f) (k. l. f)) (c d e b)) (f (k. f) (k. f) (k. l. l) b) (f (k. h)) (c d e (f i) (e e) (g e) (k. l. e)) (f (k. f) f)";
+][
+"b (g (k. e e)) (k. b (g (l. e e))) (g (h (k. i)) (k. e)) (f (k. f) (k. f) i) (i (k. c (c d e f)) (k. l. l) (k. g (h (l. i)) (k d) f) e) (k. l. h) (k. f (l. f) (l. f) (l. e)) a";
+"c d e (f i) (e e) (g e) (b (g (k. e e)) (k. c (g (h (l. i))) (l. f l))) (k. f (l. f) (l. f)) a";
+"e e (k. k d e (l. l)) (g e) (c d e b (e e (c (c d e f)))) (d (e e (k. k d e (l. l))) (k. k i)) (k. i (l. c (c d e f))) (k. h) a";
+"f (k. f) (k. f) (f h) (f h (c d e (f i))) (k. b) (f i (c d e)) (k. h) a";
+"g e f (f (k. f) (f (k. f) (k. l. f)) (c d e b)) (f (k. f) (k. f) (k. l. l) b) (f (k. h)) (c d e (f i) (e e) (g e) (k. l. e)) (f (k. f) f) (f (k. f) (k. f) (k. l. l) (c (k. i (l. c (c d e f))))) a";
+] ;;
+
+(* ************************************************************************** *)
+
+let o1 () = problem_of None [] ["x a b"; "x (_. BOT) c"] ;;
+let o2 () = problem_of None [] ["x (y (_. BOT) a) c"; "x (y a PAC) d"] ;;
+let o3 () = problem_of
+ (Some"y (x a1 BOMB c) (x BOMB b1 d)")
+ [ "y (x a2 BOMB c) (x BOMB b1 d)";
+ "y (x a1 BOMB c) (x BOMB b2 d)";] [] ;;
+let o4 () = problem_of (Some"x BOMB a1 c")
+ [ "x y BOMB d"; "x BOMB a2 c" ] [] ;;
+let o5 () = problem_of (Some"BOT") [] [] ;;
+let o6 () = problem_of (Some"x BOMB") ["x y"] [];;
+
+solve_many (List.map ((|>) ()) [
+ o1; o2; o3; o4; o5; o6
+]);;
+
+should_fail(fun () -> problem_of None ["BOT"] []);;
+should_fail(fun () -> problem_of (Some"x y") ["x BOMB"] []);;
+should_fail(fun () -> problem_of (Some"x y z") ["x BOMB z"; "x y y"] []);;
+
+solve_many [
+ problem_of
+ (* DISPLAY PROBLEM (main) - measure=965
+    Discriminating sets (deltas):
+    0 <> 1 <> 2 <> 3 <> 4
+ *)(* DIVERGENT  *)
+      (Some"b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (k. b c d (l. c (l k)) (b c (l. e e) (b c d (l. e l) (e e (b (l. m. b)) d (l. d))) (l. c)))")
+   (* CONVERGENT *) [
+   (* _ *) "b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (e e (b (k. l. b)) (k. e k)) (k. e e) (k. g (l. g (m. b c)) (l. i (f g)))";
+   (* _ *) "b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (d b (k. b)) (k. d k (k (l. m. k)) (c (e h))) (b c (k. c (e h)))";
+   (* _ *) "b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (e e (b (k. l. b)) (k. e k)) (k. e e)";
+   (* _ *) "b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (d b (k. b)) (k. d k (k (l. m. k)) (c (e h)))";
+   (* _ *) "b (k. l. b) (e f) (b c d) (e e (b (k. l. b)) d) (e (k. l. b c) (k. l. b k) (b c)) d (e e (e e) (d (k. f)) (b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))))) (e e (b (k. l. b)) (b (k. l. b) (e f) (b c
+ d)) (e e (b (k. l. b)) d (k. d) (b (k. l. b))) (k. b c k (l. e l) (e e (b (l. m. b)) k (l. k)) (f g (c (e h))) (k b (l. b) (f g (e f))) (c (e h))) (k. i (f g) (l. l)))";
+ ] (* NUMERIC    *) [
+   (* 0 *) "b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (d b (k. b)) (k. l. c (l k)) a";
+   (* 1 *) "b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (e e (b (k. l. b)) (k. e k)) a";
+   (* 2 *) "b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (e e (b (k. l. b)) (k. e k)) (k. l. c (k h)) a";
+   (* 3 *) "b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (e e (b (k. l. b)) (k. e k)) (k. l. c (k h)) (d b (b c d (k. c (k h))) (b c d (k. e k) (b c))) a";
+   (* 4 *) "b c d (k. e k) (e e (b (k. l. b)) d (k. d)) (f g (c (e h))) (d b (k. b) (f g (e f))) (c (e h)) (e e (b (k. l. b)) (k. e k)) (k. b k d (l. e l) (e e (b (l. m. b)) d (l. d)) (f g (k (e h)))) a";
+ ];
+ problem_of
+ (* DISPLAY PROBLEM (main) - measure=561
+    Discriminating sets (deltas):
+    0 <> 1 <> 2 <> 3 <> 4
+ *)(* DIVERGENT  *)
+      (Some"b (c b) (k. d) (e f (k. e) (k. b) (f d)) (e f (k. g k) d) (k. c k (c k g))")
+   (* CONVERGENT *) [
+   (* _ *) "c (k. l. l b k) (k. l. d) (e f (k. k) (g e)) (k. l. m. n. n b m) (k. b (b (k e))) (k. g) (e f (k. k (g e) h) b (e (k. g) (h c (g c) f)))";
+   (* _ *) "e f (k. k) (k. l. c b) (k. l. l (k b) g) (k. e f (l. l)) (h c (c (k. l. l b k) (k. l. d) (e f (k. k) (g e))) (k. g e (g e))) (k. g (l. e f g) (l. h c) (g (l. e f g) (l. h c)))";
+   (* _ *) "e f (k. k (g e) h) (g (k. e f g) (c (c b g) (k. l. l b g))) (k. k (g e) h) (k. h) (b (b (g e)) (k. c (l. m. m b l))) (k. l. g l (g l) (m. c b))";
+   (* _ *) "c (k. l. l b k) (k. l. d) (e f (k. k) (g e)) (k. l. m. n. n b m) (k. b (b (k e))) (k. g)";
+   (* _ *) "e f (k. k) (g e) (e f (k. e)) (e f (k. e)) (h c (b (g e) h (k. c (l. m. m k l))))";
+ ] (* NUMERIC    *) [
+   (* 0 *) "c (k. l. l b k) (k. l. d) (e f (k. k) (g e)) (k. l. m. n. n b m) (k. b (b (k e))) (k. i) a";
+   (* 1 *) "e f (k. k (g e) h) (g (k. e f g) (c (c b g) (k. l. l b g))) (k. k (g e) h) (k. h) (b (b (g e)) (k. c (l. m. m b l))) (h (c b) g i) a";
+   (* 2 *) "e f (k. k) (g e) (e f (k. e)) (h (k. g e (g e)) (h (k. g e (g e)))) (k. d) a";
+   (* 3 *) "e f (k. k) (g e) (e f (k. e)) (h (k. g e (g e)) (h (k. g e (g e)))) (k. d) (k. l. m. c k) a";
+   (* 4 *) "g (k. e f g) (k. h c) (b (g e) h (k. c (l. m. m k l))) (k. c b g) (k. e f (l. l) (g e) (e f (l. e))) f a";
+ ]
+];;
+
+(* This fails *)
+(* solve (problem_of
+ (Some"x PAC PAC PAC PAC PAC a")
+ ["x PAC PAC PAC PAC PAC b"]
+ ["y x"; "y z"]
+ (* In general:
+ DIV x (n times PAC) a
+ CON x (n times PAC) b
+ 1 y (m times lambda. x) 0
+ 2 y z 0
+ when x steps on the n+1-th argument,
+ y must apply n+m+1 variables
+ Thus special_k must be >=n+m+1 *)
+);; *)
+
+solve_many (List.map ((|>) ()) ([
  q1 ; q2; q3; q4 ; q5 ; q6 ;
- (* q7 ; *)
+ q7 ;
  q8 ;
  q9 ;
  q10 ;
  q11 ;
  m1 ;
-]);;
+ m2 ;
+] @ [
+ n1 ;
+ n2 ;
+ n3
+]));;