public void AddTerm(LogicANDTerm term)
 {
     if (term.IsConstantZero)
     {
         return;
     }
     else if (!RemoveTerm(term))
     {
         terms.Add(term, null);
     }
 }
 public bool Contains(LogicANDTerm term)
 {
     return terms.ContainsKey(term);
 }
        private void SubInEq(LogicANFEquation other, bool inverse, object diffSig)
        {
            int otherSubVarID;
            if (inverse)
            {
                otherSubVarID = other.SubVarID * -1;
            }
            else
            {
                otherSubVarID = other.SubVarID;
            }
            var subTerms = other.terms.Keys.ToArray();
            var thisTerms = terms.Keys.ToArray();
            terms.Clear();

            if (subTerms.Length == 0)
            {
                subTerms = new LogicANDTerm[] { LogicANDTerm.ConstantZero };
            }

            for (int i = 0; i < thisTerms.Length; i++)
            {
                if (thisTerms[i].ContainsVarID(otherSubVarID))
                {
                    for (int j = 0; j < subTerms.Length; j++)
                    {
                        AddTerm(thisTerms[i].SubstituteIn(subTerms[j], otherSubVarID));
                    }
                    if (inverse)
                    {
                        AddTerm(thisTerms[i].DeepCopy(otherSubVarID));
                    }
                }
                else
                {
                    AddTerm(thisTerms[i]);
                }
            }
        }
 public bool RemoveTerm(LogicANDTerm term)
 {
     return terms.Remove(term);
 }