public void TestTwoLevelExcept() { var input = @" declare goal [ pg ] except [ o1 ] cm1 except [ o2 ] cm2 refinedby sg1, sg2 end declare goal [ sg1 ] obstructedby o1 end declare goal [ sg2 ] obstructedby o2 end declare goal [ cm1 ] obstructedby o3 end declare goal [ cm2 ] except [ o4 ] cm4 obstructedby o4 end declare obstacle [ o1 ] esr .1 end declare obstacle [ o2 ] esr .2 end declare obstacle [ o3 ] esr .3 end declare obstacle [ o4 ] esr .4 end " ; var parser = new ModelBuilder(); var model = parser.Parse(input); var pg = model.Goal("pg"); var p0 = new ObstructionSuperset(pg); Console.WriteLine(p0.ToDot()); var p1 = new ObstructionResolutionSuperset(pg); Console.WriteLine(p1.ToDot()); Console.WriteLine("---"); //var p2 = new BDDBasedPropagator(model); //Console.WriteLine(p2.GetESR(pg)); var p3 = new BDDBasedResolutionPropagator(model); Console.WriteLine(p3.GetESR(pg)); foreach (var e in GetAllCombinations(model.goalRepository.GetGoalExceptions().ToList())) { Console.Write(string.Join(",", e.Select(x => x.ResolvingGoalIdentifier)) + ": "); Console.WriteLine(p3.GetESR(pg, e)); } }