/// <summary> /// a+1=, 2+3+5= /// </summary> /// <param name="term"></param> /// <param name="obj"></param> /// <returns></returns> public bool ConstraintSatisfy(Term term, out object obj) { var evalObj = term.Eval(); var generatedEq = new Equation(term, evalObj); generatedEq.ImportTrace(term); var evalTerm = evalObj as Term; var evalVar = evalObj as Var; var dict = new Dictionary<object, object>(); var connectLst = new List<GraphNode>(); if (evalTerm != null) { for (var i = 0; i < _nodes.Count; i++) { var goalNode = _nodes[i] as GoalNode; if (goalNode != null) { if (evalTerm.ContainsVar((EqGoal)goalNode.Goal)) { connectLst.Add(goalNode); } } } } if (evalVar != null) { for (var i = 0; i < _nodes.Count; i++) { var goalNode = _nodes[i] as GoalNode; if (goalNode != null) { var eqGoal = goalNode.Goal as EqGoal; Debug.Assert(eqGoal != null); var lhsVar = eqGoal.Lhs as Var; Debug.Assert(lhsVar != null); if (lhsVar.Equals(evalVar)) { connectLst.Add(goalNode); } } } } dict.Add(connectLst, generatedEq); obj = dict; return true; }