public static QuantifiedExpression Make(Quantifier q, IEnumerable<VariableType> vars, BooleanExpression b) { var freeVars = b.GetVariables(); foreach (var v in vars) if (!freeVars.Contains(v)) throw new ArgumentException(); return new QuantifiedExpression(q, vars, b); }
private QuantifiedExpression(Quantifier q, IEnumerable<VariableType> v, BooleanExpression oper1) { quantified_variables = new HashSet<VariableType>(); quantified_variables.UnionWith(v); boolean_expression_type = OperatorType.Quantifier; boolean_operation_arity = OperatorArity.One; switch (q) { case Quantifier.Exists: case Quantifier.Forall: quantifier = q; break; default: throw new ArgumentOutOfRangeException(); } operand1 = inner = oper1; }