From 9b6bdd74b2727da82077515da616823d06120e47 Mon Sep 17 00:00:00 2001 From: Christoph Egger <Christoph.Egger@fau.de> Date: Tue, 1 Dec 2015 15:14:54 +0100 Subject: [PATCH] unfold fixpoints when creating new Cores --- src/lib/CoAlgReasoner.ml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lib/CoAlgReasoner.ml b/src/lib/CoAlgReasoner.ml index 034d6f2..77d68df 100644 --- a/src/lib/CoAlgReasoner.ml +++ b/src/lib/CoAlgReasoner.ml @@ -476,6 +476,23 @@ let newCore sort bs = assert (okay1); let okay2 = M.add_clause solver [M.neg_lit lf; lf2] in assert (okay2) + | MuF + | NuF -> + (* + Dest of a fixpoint is it's unfolded version. This adds just + an simple forward implication that could be optimised out + though not without nontrivial transformation of code + + f = μ X . φ |---> lf + φ[X |-> f] |---> lf1 + + Then adding lf -> lf1 to minisat + *) + let f1 = lfGetDest1 sort f in + addClauses f1; + let lf1 = fhtMustFind fht f1 in + let okay1 = M.add_clause solver [M.neg_lit lf; lf1] in + assert (okay1); | _ -> () (* case 2.(c) We don't need to do anything except adding f to the fht -- GitLab