private Formula ReadFormula(CompoundExpression exp, Dictionary <string, string> dParameterNameToType, bool bParamterized, Domain d) { bool bPredicate = true; //Debug.WriteLine(exp); if (d != null && d.IsFunctionExpression(exp.Type)) { Predicate p = ReadFunctionExpression(exp, dParameterNameToType, d); return(new PredicateFormula(p)); } else if (IsUniversalQuantifier(exp)) { CompoundExpression eParameter = (CompoundExpression)exp.SubExpressions[0]; CompoundExpression eBody = (CompoundExpression)exp.SubExpressions[1]; string sParameter = eParameter.Type; string sType = eParameter.SubExpressions[1].ToString(); dParameterNameToType[sParameter] = sType; ParametrizedFormula cfQuantified = new ParametrizedFormula(exp.Type); cfQuantified.Parameters[sParameter] = sType; Formula fBody = ReadFormula(eBody, dParameterNameToType, true, d); cfQuantified.AddOperand(fBody); return(cfQuantified); } else { foreach (Expression eSub in exp.SubExpressions) { if (eSub is CompoundExpression) { bPredicate = false; break; } } if (bPredicate) { return(ReadPredicate(exp, dParameterNameToType, bParamterized, d)); } else { CompoundFormula cf = new CompoundFormula(exp.Type); int iExpression = 0; for (iExpression = 0; iExpression < exp.SubExpressions.Count; iExpression++) { if (exp.SubExpressions[iExpression] is StringExpression) { throw new InvalidDataException(); } Formula f = ReadFormula((CompoundExpression)exp.SubExpressions[iExpression], dParameterNameToType, bParamterized, d); cf.SimpleAddOperand(f); } if (cf.Operator == "not" && cf.Operands[0] is PredicateFormula) { PredicateFormula fNegate = new PredicateFormula(((PredicateFormula)cf.Operands[0]).Predicate.Negate()); return(fNegate); } return(cf); } } }
public override Formula Negate() { CompoundFormula cfNegate = new ParametrizedFormula(this); foreach (Formula fOperand in Operands) { cfNegate.AddOperand(fOperand.Negate()); } return(cfNegate); }
public override Formula PartiallyGround(Dictionary <string, Constant> dBindings) { ParametrizedFormula cfGrounded = new ParametrizedFormula(this); foreach (Formula fSub in Operands) { Formula fGrounded = fSub.PartiallyGround(dBindings); cfGrounded.AddOperand(fGrounded); } return(cfGrounded); }
public override Formula Simplify() { if (Simplified) { return(this); } ParametrizedFormula pf = new ParametrizedFormula(this); foreach (Formula f in Operands) { pf.AddOperand(f.Simplify()); } return(pf); }
private Formula ReadGroundedFormula(CompoundExpression exp, Domain d) { bool bPredicate = true; if (IsUniversalQuantifier(exp)) { CompoundExpression eParameter = (CompoundExpression)exp.SubExpressions[0]; CompoundExpression eBody = (CompoundExpression)exp.SubExpressions[1]; string sParameter = eParameter.Type; string sType = eParameter.SubExpressions[1].ToString(); Dictionary <string, string> dParameterNameToType = new Dictionary <string, string>(); dParameterNameToType[sParameter] = sType; ParametrizedFormula cfQuantified = new ParametrizedFormula(exp.Type); cfQuantified.Parameters[sParameter] = sType; Formula fBody = ReadFormula(eBody, dParameterNameToType, true, d); cfQuantified.AddOperand(fBody); return(cfQuantified); } foreach (Expression eSub in exp.SubExpressions) { if (eSub is CompoundExpression) { bPredicate = false; break; } } if (bPredicate) { return(new PredicateFormula(ReadGroundedPredicate(exp, d))); } else { CompoundFormula cf = new CompoundFormula(exp.Type); int iExpression = 0; for (iExpression = 0; iExpression < exp.SubExpressions.Count; iExpression++) { Formula f = ReadGroundedFormula((CompoundExpression)exp.SubExpressions[iExpression], d); cf.AddOperand(f); } if (cf.Operator == "not" && cf.Operands[0] is PredicateFormula) { return(new PredicateFormula(((PredicateFormula)cf.Operands[0]).Predicate.Negate())); } return(cf); } }
public ParametrizedFormula(ParametrizedFormula cf) : this(cf.Operator) { Parameters = new Dictionary <string, string>(cf.Parameters); }