From 4706decbaeb97aaed07de78684c8d6417c190acf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20Wi=C3=9Fmann?= <edu@thorsten-wissmann.de> Date: Wed, 29 Jan 2014 19:53:34 +0100 Subject: [PATCH] Make CoAlgLogics with GML rules compile --- CoAlgLogics.ml | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/CoAlgLogics.ml b/CoAlgLogics.ml index c826d15..06cfc69 100644 --- a/CoAlgLogics.ml +++ b/CoAlgLogics.ml @@ -278,13 +278,38 @@ let mkRule_GML sort bs sl = in bsetIter addRole boxes; bsetIter addRole diamonds; - (* - mkRule_GML sort bs [s1] - = { (λ[bs1]. bs, [(s1, { ?a_i | i∈I, ?=neg iff a_i should be false })]) - | I some rule conclusion - } - *) - let rules = [] in + let addRule role acc = + let premise: (bool*int*int) list = + let modality isDiamond m acc = + if lfGetDest3 sort m = role + then (isDiamond,lfGetDestNum sort m,lfToInt (lfGetDest1 sort m))::acc + else acc + in + List.append + (bsetFold (modality true) diamonds []) + (bsetFold (modality false) boxes []) + in + let conclusion = gml_rules premise in + (* conclusion is a set of rules, each of the forman \/ /\ lit *) + let handleRuleConcl rc acc = + let handleConjunction conj = + let res = bsetMake () in + List.iter (fun (f,positive) -> + let f = lfFromInt f in + let f = if positive then f else + match lfGetNeg sort f with + | Some nf -> nf + | None -> raise (CoAlgFormula.CoAlgException ("Negation of formula missing")) + in + bsetAdd res f) + conj; + (s1,res) + in + let rc = List.map handleConjunction rc in + ((fun bs1 -> bs),rc)::acc + in List.fold_right handleRuleConcl conclusion acc + in + let rules = S.foldBS addRule roles [] in (* standard return procedure *) let res = ref (Some rules) in fun () -> -- GitLab