public void TestMobilizedWhenAllocGBA() { ILiteral alloc = new Proposition ("allocated"); ILiteral mob = new Proposition ("mobilized"); ILiteral nalloc = new Negation (alloc); ILiteral nmob = new Negation (mob); var lts = new BuchiAutomaton<AutomatonNode> (new AutomatonNodeFactory ()); var n0 = lts.AddNode ("i"); var n1 = lts.AddNode ("s0"); var n2 = lts.AddNode ("s1"); var n3 = lts.AddNode ("s2"); lts.SetInitialNode (n0); lts.AddTransition (n0, n1, new ILiteral [] { nalloc, nmob }); lts.AddTransition (n1, n2, new ILiteral [] { alloc, nmob }); lts.AddTransition (n2, n3, new ILiteral [] { alloc, mob }); lts.AddTransition (n3, n0, new ILiteral [] { nalloc, nmob }); lts.SetAcceptanceCondition (new BuchiAcceptance<AutomatonNode> (lts.Nodes)); var f = new StrongImplication (alloc, new Next (mob)).Negate (); var t = new GPVW (); var gba = t.GetGBA (f); var otfec = new OnTheFlyGBAEmptinessChecker (gba, lts); var e1 = otfec.EmptinessSearch (); Console.WriteLine (e1); }
public void TestSafraExampleInPaper() { var ba = new BuchiAutomaton<AutomatonNode> (new AutomatonNodeFactory ()); var q = ba.AddNode ("qI"); var f = ba.AddNode ("f"); var g = ba.AddNode ("g"); var pa = new Proposition ("a"); var pb = new Proposition ("b"); var pc = new Proposition ("c"); var a = new ILiteral[] { pa }; var b = new ILiteral[] { pb }; var c = new ILiteral [] { pc }; // a,b from qI to qI ba.AddTransition (q, q, a); ba.AddTransition (q, q, b); // c from f to f ba.AddTransition (f, f, c); // a from qI to f ba.AddTransition (q, f, a); // a from f to g ba.AddTransition (f, g, a); // a from g to g ba.AddTransition (g, g, a); // a from g to f ba.AddTransition (g, f, a); ba.SetInitialNode (q); ba.SetAcceptanceCondition (new BuchiAcceptance<AutomatonNode> (new [] { f, g })); var rabin = ba.Determinize (); //var folder = new Fold<RabinAutomaton<AutomatonNode>, AutomatonNode> (); //rabin = folder.Transform (rabin); rabin.UnfoldTransitions (); Console.WriteLine (rabin.ToDot ()); }
public void TestMobilizedWhenAlloc() { ILiteral alloc = new Proposition ("allocated"); ILiteral mob = new Proposition ("mobilized"); ILiteral nalloc = new Negation (alloc); ILiteral nmob = new Negation (mob); var lts = new BuchiAutomaton<AutomatonNode> (new AutomatonNodeFactory ()); var n0 = lts.AddNode ("i"); var n1 = lts.AddNode ("s0"); var n2 = lts.AddNode ("s1"); var n3 = lts.AddNode ("s2"); lts.SetInitialNode (n0); lts.AddTransition (n0, n1, new ILiteral [] { nalloc, nmob }); lts.AddTransition (n1, n2, new ILiteral [] { alloc, nmob }); lts.AddTransition (n2, n3, new ILiteral [] { alloc, mob }); lts.AddTransition (n3, n0, new ILiteral [] { nalloc, nmob }); lts.SetAcceptanceCondition (new BuchiAcceptance<AutomatonNode> (lts.Nodes)); var f = new StrongImplication (alloc, new Next (mob)).Negate (); var t = new GPVW (); var gba = t.GetGBA (f); var ba = gba.ToBA (); var otfec = new OnTheFlyEmptinessChecker<AutomatonNode,AutomatonNode> (ba, lts); var e1 = otfec.Emptiness (); if (e1) { foreach (var i in otfec.counterexample_prefix) { Console.WriteLine (i.Name); } Console.WriteLine ("-- loop starts here --"); foreach (var i in otfec.counterexample_loop) { Console.WriteLine (i.Name); } Console.WriteLine ("-- loop ends here --"); } else { Console.WriteLine ("No trace found"); } }