public List <Statement> Equivalences(Statement s) { List <Statement> list = new List <Statement>(); string lisp = s.Lisp; HashSet <string> atoms = GetAtomics(s); foreach (Match m in RE1.Matches(lisp)) { GroupCollection gc = m.Groups; string[] lisps = new string[AMap2.Count]; foreach (string k in AMap1.Keys) { if (AMap2.ContainsKey(k)) { lisps[AMap2[k]] = gc[AMap1[k] + 1].Value; } } for (int i = 0; i < lisps.Length; ++i) { if (lisps[i] == null) { char c = 'A'; while (atoms.Contains(c.ToString())) { ++c; } atoms.Add(c.ToString()); lisps[i] = c.ToString(); } } Statement n = Statement.NewParse(string.Format(FS2, lisps)); if (n != null) { list.Add(n); } } atoms = GetAtomics(s); foreach (Match m in RE2.Matches(lisp)) { GroupCollection gc = m.Groups; string[] lisps = new string[AMap1.Count]; foreach (string k in AMap2.Keys) { if (AMap1.ContainsKey(k)) { lisps[AMap1[k]] = gc[AMap2[k] + 1].Value; } } for (int i = 0; i < lisps.Length; ++i) { if (lisps[i] == null) { char c = 'A'; while (atoms.Contains(c.ToString())) { ++c; } atoms.Add(c.ToString()); lisps[i] = c.ToString(); } } Statement n = Statement.NewParse(string.Format(FS1, lisps)); if (n != null) { list.Add(n); } } return(list); }