From ad63163ecdc461a46eb271e5a3812c19f76a80cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thorsten=20Wi=C3=9Fmann?= <edu@thorsten-wissmann.de>
Date: Wed, 29 Jan 2014 14:32:14 +0100
Subject: [PATCH] Improve K formula generator

---
 CoolUtils.ml    |  4 ++++
 CoolUtils.mli   |  2 ++
 coalgcompare.ml | 24 ++++++++++++++----------
 3 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/CoolUtils.ml b/CoolUtils.ml
index c525032..24b6486 100644
--- a/CoolUtils.ml
+++ b/CoolUtils.ml
@@ -44,3 +44,7 @@ let cl_set_agents arr = ignore (
 
 
 let intlist_of_string str = List.map int_of_string (Str.split (Str.regexp "[ \t,]+") str)
+
+let compose f g x = f (g (x))
+let flip f y x = f x y
+
diff --git a/CoolUtils.mli b/CoolUtils.mli
index 24af1e8..24016a4 100644
--- a/CoolUtils.mli
+++ b/CoolUtils.mli
@@ -21,3 +21,5 @@ val cl_set_agents : int array -> unit
 
 val intlist_of_string : string -> int list
 
+val compose : ('b -> 'c) -> ('a -> 'b) -> ('a -> 'c)
+val flip : ('a -> 'b -> 'c) -> ('b -> 'a -> 'c)
diff --git a/coalgcompare.ml b/coalgcompare.ml
index 26bc05f..35bcecd 100644
--- a/coalgcompare.ml
+++ b/coalgcompare.ml
@@ -204,16 +204,20 @@ let doTestK (tboxsizes:int list) (szlist:int list) : testresults =
     lPPP A list of pairs (p->p->p, n), e.g. (.+., 1).
   *)
   let timeout = !ptimeout in (* 5 minutes *)
-  let lF = List.map (fun p -> (C.AP ("p"^(string_of_int p)), 1)) (1--3) in
-  let lFF = [(C.const_not,1)] in
-  let lFFF = [(C.const_and,1)] in (* Warning: This forbids disjunctions! *)
-  let lPFF = [(C.const_ex,1); (C.const_ax, 1)] in
-  (* role names *)
-  let lP : (string *int) list = List.map (fun p -> ("R"^(string_of_int p), 1)) (1--3) in
-  let lPP : ((string -> string) * int) list= [] in
-  let lFP : ((C.formula -> string) * int) list = [] in
-  let lPPP = [] in
-  let (genF,_) = G.mk_generator lF lFF lFFF lPFF lP lPP lFP lPPP in
+  let lF = List.map (fun p -> C.AP ("p"^(string_of_int p))) (1--3) in
+  let lF = List.append lF (List.map (C.const_not) lF) in
+  let lF = C.TRUE :: C.FALSE :: lF in
+  let lF = List.map (fun v -> (v,1)) lF in
+  let roles : string list = List.map (fun p -> "R"^(string_of_int p)) (1--3) in
+  let exs : (C.formula -> C.formula) list = List.map C.const_ex roles in
+  let axs : (C.formula -> C.formula) list = List.map C.const_ax roles in
+  let lFF = List.map (fun v -> (v,1)) (List.append exs axs) in
+  let lFFF : (C.formula -> C.formula -> C.formula) list = List.append
+                (List.map (fun x y z -> x (C.const_and y z)) exs)
+                (List.map (fun x y z -> x (C.const_or y z))  axs)
+  in
+  let lFFF = List.map (fun v -> (v,1)) lFFF in
+  let (genF,_) = G.mk_generator lF lFF lFFF [] [] [] [] [] in
   let reasonerNames = List.map (fun (_,s) -> s) solvs in
   let s1 = 0 in (* probably the correct formula... *)
   let formulas = List.map (fun (sz,cnt) ->
-- 
GitLab