public CPDLLogConnPred(CPDLPred lhs, CPDLPred rhs, PDLLogicalOperator original) {
     this.lhs = lhs;
     this.rhs = rhs;
     this.original = original;
 }
 public CPDLNegationPred(CPDLPred original)
 {
     this.original = original;
 }
 public CPDLSecondOrderQuantifierPred(string variableName, CPDLPred originalFormula)
 {
     Debug.Assert(variableName != null);
     Debug.Assert(originalFormula != null);
     this.variableName = variableName;
     this.originalFormula = originalFormula;
 }
 private static void GenerateConstraints(CPDLPred choicePred, HashSet<char> alphabet, VariableCache.ConstraintMode constraintMode, Context z3Context, Solver z3Solver)
 {
     VariableCache variableGenerator = VariableCache.Create(constraintMode);
     choicePred.ToSMTConstraints(z3Context, z3Solver, alphabet.Count, variableGenerator);
     variableGenerator.GenerateAdditionalConstraints(z3Context, z3Solver);
 }
        private static IEnumerable<PDLPred> Concretize(CPDLPred choicePred, HashSet<char> alphabet, VariableCache.ConstraintMode constraintMode) {
            Context z3Context = new Context();
            Solver z3Solver = z3Context.MkSolver();

            GenerateConstraints(choicePred, alphabet, constraintMode, z3Context, z3Solver);

            List<char> alphabetList = new List<char>(alphabet);
            IEnumerable<string> choiceVariables = choicePred.GetChoiceVariables();
            while (z3Solver.Check() == Status.SATISFIABLE)
            {
                yield return choicePred.InterpretModel(alphabetList, z3Context, z3Solver.Model);
                ExcludeLastModel(choiceVariables, z3Context, z3Solver);
            }
        }
 public CPDLPredSet(string FOVar, CPDLPred pred) {
     this.FOVar = FOVar;
     this.pred = pred;
 }