From c855ba913465be19e71062de24cb4cd5e50f90f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20Wi=C3=9Fmann?= <edu@thorsten-wissmann.de> Date: Mon, 21 Jul 2014 11:32:14 +0200 Subject: [PATCH] Change AtMostProbable to LessProbableThan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The actual box of PML (in GMLMIP) is: less probable than. The Diamond is: At least Probable than. So now you have ¬[p] C = <p> C. --- src/lib/CoAlgFormula.ml | 54 ++++++++++++++++++--------------- src/lib/CoAlgFormula.mli | 7 +++-- src/lib/CoAlgLogics.ml | 2 +- src/lib/CoAlgMisc.ml | 10 +++--- src/lib/CoAlgMisc.mli | 2 +- src/testsuite/cool-testsuite.ml | 8 ++--- 6 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/lib/CoAlgFormula.ml b/src/lib/CoAlgFormula.ml index 2f083d0..8210bd6 100644 --- a/src/lib/CoAlgFormula.ml +++ b/src/lib/CoAlgFormula.ml @@ -49,7 +49,7 @@ type formula = | MAXEXCEPT of int * string * formula (* box of GML *) | ATLEASTPROB of rational * formula (* = {>= 0.5} C ---> C occurs with *) (* probability of at least 50% *) - | ATMOSTPROB of rational * formula + | LESSPROB of rational * formula | CHC of formula * formula | CHCN of formula * formula | FUS of bool * formula @@ -91,7 +91,7 @@ let rec sizeFormula f = | MIN (_, _, f1) | MAX (_, _, f1) | ATLEASTPROB (_, f1) - | ATMOSTPROB (_, f1) + | LESSPROB (_, f1) | MORETHAN (_, _, f1) | MAXEXCEPT (_, _, f1) -> succ (sizeFormula f1) | CHC (f1, f2) @@ -116,7 +116,7 @@ let rec iter func formula = | EQU (a,b) | IMP (a,b) -> (proc a ; proc b) | ENFORCES (_,a) | ALLOWS (_,a) | MIN (_,_,a) | MAX (_,_,a) - | ATLEASTPROB (_, a) | ATMOSTPROB (_, a) + | ATLEASTPROB (_, a) | LESSPROB (_, a) | MORETHAN (_,_,a) | MAXEXCEPT (_,_,a) -> proc a | CHC (a,b) | CHCN (a,b) -> (proc a ; proc b) | FUS (_,a) -> proc a @@ -142,7 +142,7 @@ let rec convert_post func formula = (* run over all subformulas in post order *) | MIN (n,s,a) -> MIN (n,s,c a) | MAX (n,s,a) -> MAX (n,s,c a) | ATLEASTPROB (p,a) -> ATLEASTPROB (p, c a) - | ATMOSTPROB (p,a) -> ATMOSTPROB (p, c a) + | LESSPROB (p,a) -> LESSPROB (p, c a) | MORETHAN (n,s,a) -> MORETHAN (n,s,c a) | MAXEXCEPT (n,s,a) -> MAXEXCEPT (n,s,c a) | CHC (a,b) -> CHC (c a, c b) @@ -268,8 +268,8 @@ let rec exportFormula_buffer sb f = Buffer.add_string sb (string_of_rational p); Buffer.add_string sb "}"; prio 4 f1 - | ATMOSTPROB (p, f1) -> - Buffer.add_string sb "{<="; + | LESSPROB (p, f1) -> + Buffer.add_string sb "{<"; Buffer.add_string sb (string_of_rational p); Buffer.add_string sb "}"; prio 4 f1 @@ -396,7 +396,7 @@ let rec exportTatlFormula_buffer sb f = | CHC _ | CHCN _ | ATLEASTPROB _ - | ATMOSTPROB _ + | LESSPROB _ | FUS _ -> raise (CoAlgException ("export to tatl: Not connectives of CL")) let exportTatlFormula f = @@ -468,7 +468,7 @@ let exportQueryParsable tbox (_,f) = let lexer = A.make_lexer [":";";";"|-";"(";")";"=>";"<=>";"|";"&";"~";"@";"True";"False";"<";">";"[";"]";"{<=";"{>=";"}";"+";"[pi1]";"[pi2]" - ;"[{";"}]";"<{";"}>";",";"/" + ;"[{";"}]";"<{";"}>";",";"/";"{<" ] let mk_exn s = CoAlgException s @@ -629,8 +629,14 @@ and parse_rest ts = let (n, denom, s) = boxinternals false "}" in let f1 = parse_rest ts in if (denom <> 0) - then ATMOSTPROB (rational_of_int n denom, f1) + then A.printError mk_exn ~ts "Can not express {<= probability}" else MAX (n, s, f1) + | A.Kwd "{<" -> + let (n, denom, s) = boxinternals false "}" in + let f1 = parse_rest ts in + if (denom <> 0) + then LESSPROB (rational_of_int n denom, f1) + else A.printError mk_exn ~ts "The \"Less than\" < is not implemented yet" | A.Kwd "(" -> begin let f = parse_formula ts in match Stream.next ts with @@ -776,8 +782,8 @@ let rec nnfNeg f = | MAX (n, s, f1) -> MORETHAN (n, s, nnf f1) | MORETHAN (n, s, f1) -> MAXEXCEPT (n, s, nnfNeg f1) | MAXEXCEPT (n, s, f1) -> MORETHAN (n, s, nnfNeg f1) - | ATLEASTPROB (p, f1) -> ATMOSTPROB (p, nnf f1) - | ATMOSTPROB (p, f1) -> ATLEASTPROB (p, nnf f1) + | ATLEASTPROB (p, f1) -> LESSPROB (p, nnf f1) + | LESSPROB (p, f1) -> ATLEASTPROB (p, nnf f1) | CHC (f1, f2) -> CHCN (nnfNeg f1, nnfNeg f2) | CHCN (f1, f2) -> CHC (nnfNeg f1, nnfNeg f2) | FUS (first, f1) -> FUS (first, nnfNeg f1) @@ -838,9 +844,9 @@ and nnf f = | ATLEASTPROB (p, f1) -> let ft = nnf f1 in if ft == f1 then f else ATLEASTPROB (p, ft) - | ATMOSTPROB (p, f1) -> + | LESSPROB (p, f1) -> let ft = nnf f1 in - if ft == f1 then f else ATMOSTPROB (p, ft) + if ft == f1 then f else LESSPROB (p, ft) | CHC (f1, f2) -> let ft1 = nnf f1 in let ft2 = nnf f2 in @@ -967,9 +973,9 @@ let rec simplify f = | FALSE -> TRUE | _ -> if ft == f1 then f else MAX (n, s, ft) end - | ATMOSTPROB (p,f1) -> + | LESSPROB (p,f1) -> let ft1 = simplify f1 in - if (ft1 == f1) then f else ATMOSTPROB (p,ft1) + if (ft1 == f1) then f else LESSPROB (p,ft1) | ATLEASTPROB (p,f1) -> let ft1 = simplify f1 in if (ft1 == f1) then f else ATLEASTPROB (p,ft1) @@ -1438,7 +1444,7 @@ and hcFormula_node = | HCMORETHAN of int * string * hcFormula (* GML Diamond *) | HCMAXEXCEPT of int * string * hcFormula (* GML Box *) | HCATLEASTPROB of rational * hcFormula - | HCATMOSTPROB of rational * hcFormula + | HCLESSPROB of rational * hcFormula | HCCHC of hcFormula * hcFormula | HCCHCN of hcFormula * hcFormula | HCFUS of bool * hcFormula @@ -1466,7 +1472,7 @@ let equal_hcFormula_node f1 f2 = n1 = n2 && compare s1 s2 = 0 && f1 == f2 | HCATLEASTPROB (p1, f1), HCATLEASTPROB (p2,f2) -> p1 = p2 && f1 == f2 - | HCATMOSTPROB (p1, f1), HCATMOSTPROB (p2,f2) -> + | HCLESSPROB (p1, f1), HCLESSPROB (p2,f2) -> p1 = p2 && f1 == f2 | HCCHC (f1a, f1b), HCCHC (f2a, f2b) -> f1a == f2a && f1b == f2b | HCCHCN (f1a, f1b), HCCHCN (f2a, f2b) -> f1a == f2a && f1b == f2b @@ -1488,7 +1494,7 @@ let equal_hcFormula_node f1 f2 = | HCMORETHAN _, _ | HCMAXEXCEPT _, _ | HCATLEASTPROB _, _ - | HCATMOSTPROB _, _ + | HCLESSPROB _, _ | HCCHC _, _ | HCCHCN _, _ | HCFUS _, _ -> false @@ -1511,7 +1517,7 @@ let hash_hcFormula_node f = | HCMORETHAN (n, s, f1) -> 19 * (19 * (19 * (Hashtbl.hash s) + n) + f1.HC.hkey) + 7 | HCMAXEXCEPT (n, s, f1) -> 19 * (19 * (19 * (Hashtbl.hash s) + n) + f1.HC.hkey) + 8 | HCATLEASTPROB (p,f1) -> 19 * (19 * (19 * p.nominator + p.denominator) + f1.HC.hkey) + 9 - | HCATMOSTPROB (p,f1) -> 19 * (19 * (19 * p.nominator + p.denominator) + f1.HC.hkey) + 10 + | HCLESSPROB (p,f1) -> 19 * (19 * (19 * p.nominator + p.denominator) + f1.HC.hkey) + 10 | HCCHC (f1, f2) -> 19 * (19 * f1.HC.hkey + f2.HC.hkey) + 11 | HCCHCN (f1, f2) -> 19 * (19 * f1.HC.hkey + f2.HC.hkey) + 12 | HCFUS (first, f1) -> 19 * (19 * (Hashtbl.hash first) + f1.HC.hkey) + 13 @@ -1538,7 +1544,7 @@ let toFml_hcFormula_node f = | HCMORETHAN (n, s, f1) -> MORETHAN (n, s, f1.HC.fml) | HCMAXEXCEPT (n, s, f1) -> MAXEXCEPT (n, s, f1.HC.fml) | HCATLEASTPROB (p, f1) -> ATLEASTPROB (p, f1.HC.fml) - | HCATMOSTPROB (p, f1) -> ATMOSTPROB (p, f1.HC.fml) + | HCLESSPROB (p, f1) -> LESSPROB (p, f1.HC.fml) | HCCHC (f1, f2) -> CHC (f1.HC.fml, f2.HC.fml) | HCCHCN (f1, f2) -> CHCN (f1.HC.fml, f2.HC.fml) | HCFUS (first, f1) -> FUS (first, f1.HC.fml) @@ -1562,8 +1568,8 @@ let negNde_hcFormula_node f = | HCALLOWS (s, f2) -> HCENFORCES (s, f2.HC.neg) | HCMORETHAN (n, s, f1) -> HCMAXEXCEPT (n, s, f1.HC.neg) | HCMAXEXCEPT (n, s, f1) -> HCMORETHAN (n, s, f1.HC.neg) - | HCATLEASTPROB (p, f1) -> HCATMOSTPROB (p, f1) - | HCATMOSTPROB (p, f1) -> HCATLEASTPROB (p, f1) + | HCATLEASTPROB (p, f1) -> HCLESSPROB (p, f1) + | HCLESSPROB (p, f1) -> HCATLEASTPROB (p, f1) | HCCHC (f1, f2) -> HCCHCN (f1.HC.neg, f2.HC.neg) | HCCHCN (f1, f2) -> HCCHC (f1.HC.neg, f2.HC.neg) | HCFUS (first, f1) -> HCFUS (first, f1.HC.neg) @@ -1629,8 +1635,8 @@ let rec hc_formula hcF f = HcFormula.hashcons hcF (HCMAXEXCEPT (n, s, tf1)) | ATLEASTPROB (p, f1) -> HcFormula.hashcons hcF (HCATLEASTPROB (p, hc_formula hcF f1)) - | ATMOSTPROB (p, f1) -> - HcFormula.hashcons hcF (HCATMOSTPROB (p, hc_formula hcF f1)) + | LESSPROB (p, f1) -> + HcFormula.hashcons hcF (HCLESSPROB (p, hc_formula hcF f1)) | CHC (f1, f2) -> let tf1 = hc_formula hcF f1 in let tf2 = hc_formula hcF f2 in diff --git a/src/lib/CoAlgFormula.mli b/src/lib/CoAlgFormula.mli index 8fc08a9..ea8c662 100644 --- a/src/lib/CoAlgFormula.mli +++ b/src/lib/CoAlgFormula.mli @@ -30,9 +30,10 @@ type formula = | MAX of int * string * formula (* some more intuitive box for GML *) | MORETHAN of int * string * formula (* diamond of GML *) | MAXEXCEPT of int * string * formula (* box of GML, means: ¬>_nR.¬C *) - | ATLEASTPROB of rational * formula (* = {>= 0.5} C ---> C occurs with *) + | ATLEASTPROB of rational * formula (* = {>= 1/2} C ---> C occurs with *) (* probability of at least 50% *) - | ATMOSTPROB of rational * formula + | LESSPROB of rational * formula (* = [1/2] C = {< 1/2} C ---> C occours with *) + (* probability of less than 50% *) | CHC of formula * formula | CHCN of formula * formula | FUS of bool * formula @@ -133,7 +134,7 @@ and hcFormula_node = | HCMORETHAN of int * string * hcFormula (* GML Diamond *) | HCMAXEXCEPT of int * string * hcFormula (* GML Box *) | HCATLEASTPROB of rational * hcFormula - | HCATMOSTPROB of rational * hcFormula + | HCLESSPROB of rational * hcFormula | HCCHC of hcFormula * hcFormula | HCCHCN of hcFormula * hcFormula | HCFUS of bool * hcFormula diff --git a/src/lib/CoAlgLogics.ml b/src/lib/CoAlgLogics.ml index d656a51..6fa92ae 100644 --- a/src/lib/CoAlgLogics.ml +++ b/src/lib/CoAlgLogics.ml @@ -299,7 +299,7 @@ let mkRule_PML sort bs sl : stateExpander = assert (List.length sl = 1); let s1 = List.hd sl in (* [s1] = List.hd sl *) let diamonds = bsetFilter bs (fun f -> lfGetType sort f = AtLeastProbF) in - let boxes = bsetFilter bs (fun f -> lfGetType sort f = AtMostProbF) in + let boxes = bsetFilter bs (fun f -> lfGetType sort f = LessProbF) in let premise: (bool*int*int*int) list = let modality isDiamond m acc = let nominator = lfGetDestNum sort m in diff --git a/src/lib/CoAlgMisc.ml b/src/lib/CoAlgMisc.ml index b5ffc7c..bbc3689 100644 --- a/src/lib/CoAlgMisc.ml +++ b/src/lib/CoAlgMisc.ml @@ -124,7 +124,7 @@ type formulaType = | MoreThanF (* more than n successors = diamond in gml *) | MaxExceptF(* at most n exceptions = box in gml *) | AtLeastProbF (* for PML *) - | AtMostProbF (* for PML *) + | LessProbF (* for PML *) | ChcF (* Choice *) | FusF (* Fusion *) @@ -674,9 +674,9 @@ let rec detClosure nomTbl hcF fset atset nomset s f = else (); detClosure nomTbl hcF fset atset nomset (List.hd sortlst) f1 | C.HCATLEASTPROB (_,f1) - | C.HCATMOSTPROB (_,f1) -> + | C.HCLESSPROB (_,f1) -> if func <> PML || List.length sortlst <> 1 - then raise (C.CoAlgException "[{>=,<=}]-formula with probability is used in wrong sort.") + then raise (C.CoAlgException "[{>=,<}]-formula with probability is used in wrong sort.") else (); detClosure nomTbl hcF fset atset nomset (List.hd sortlst) f1 | C.HCCHC (f1, f2) @@ -788,8 +788,8 @@ let initTables nomTbl hcF htF htR s f n = !arrayDest1.(s).(n) <- C.HcFHt.find htF.(List.hd sortlst) f1; !arrayDestNum.(s).(n) <- p.C.nominator; !arrayDestNum2.(s).(n) <- p.C.denominator - | C.HCATMOSTPROB (p,f1) -> - !arrayType.(s).(n) <- AtMostProbF; + | C.HCLESSPROB (p,f1) -> + !arrayType.(s).(n) <- LessProbF; !arrayDest1.(s).(n) <- C.HcFHt.find htF.(List.hd sortlst) f1; !arrayDestNum.(s).(n) <- p.C.nominator; !arrayDestNum2.(s).(n) <- p.C.denominator diff --git a/src/lib/CoAlgMisc.mli b/src/lib/CoAlgMisc.mli index dbc602e..f42a548 100644 --- a/src/lib/CoAlgMisc.mli +++ b/src/lib/CoAlgMisc.mli @@ -37,7 +37,7 @@ type formulaType = | MoreThanF | MaxExceptF | AtLeastProbF (* for PML *) - | AtMostProbF (* for PML *) + | LessProbF (* for PML *) | ChcF | FusF diff --git a/src/testsuite/cool-testsuite.ml b/src/testsuite/cool-testsuite.ml index b1cfb47..682b081 100644 --- a/src/testsuite/cool-testsuite.ml +++ b/src/testsuite/cool-testsuite.ml @@ -100,10 +100,10 @@ let kOrKd_testcases : satCheck list = let pml_testcases : testcase_section = use_functor "PML" - [ sat "{>= 1/3} C & {<= 1/2} D" - ; sat "{>= 1/3} C & {<= 1/2} C" - ; unsat "{<= 1/3} C & {>= 1/2} C" - ; sat "{<= 1/3} C & {<= 1/2} C" + [ sat "{>= 1/3} C & {< 1/2} D" + ; sat "{>= 1/3} C & {< 1/2} C" + ; unsat "{< 1/3} C & {>= 1/2} C" + ; sat "{< 1/3} C & {< 1/2} C" ] let testcases = -- GitLab