X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fformula.ml;h=c75748fb6ef9ebe56b13aa8438930d872ea27561;hp=03618c2e22e0cf39f13c283a8d1caa1f1c0752e0;hb=83c90cb5eeebfffa05d0383430eb80e7905b46a0;hpb=c1b43e1dcdb3d0960dbc50db9f226d68ad30c16e diff --git a/src/formula.ml b/src/formula.ml index 03618c2..c75748f 100644 --- a/src/formula.ml +++ b/src/formula.ml @@ -80,7 +80,21 @@ let rec eval_form ss f = match expr f with | Or(f1,f2) -> eval_form ss f1 || eval_form ss f2 | Atom(dir, b, s) -> let set = match dir with |`Left -> fst ss | `Right -> snd ss in - StateSet.mem s set + if b then StateSet.mem s set + else not (StateSet.mem s set) + +let rec infer_form ssq ssr f = match expr f with + | False -> false + | True -> true + | And(f1,f2) -> infer_form ssq ssr f1 && infer_form ssq ssr f2 + | Or(f1,f2) -> infer_form ssq ssr f1 || infer_form ssq ssr f2 + | Atom(dir, b, s) -> + let setq, setr = match dir with + |`Left -> fst ssq, fst ssr + | `Right -> snd ssq, fst ssr in + (* WG: WE SUPPOSE THAT Q^r and Q^q are disjoint ! *) + let mem = StateSet.mem s setq || StateSet.mem s setr in + if b then mem else not mem (* End *) let rec print ?(parent=false) ppf f =