public List<Sentence> plResolve(Sentence clause1, Sentence clause2) { List<Sentence> resolvents = new List<Sentence>(); ClauseSymbols cs = new ClauseSymbols(clause1, clause2); List<Symbol> complementedSymbols = cs.getComplementedSymbols(); foreach(Symbol symbol in complementedSymbols) { resolvents.Add(createResolventClause(cs, symbol)); } return resolvents; }
public List <Sentence> plResolve(Sentence clause1, Sentence clause2) { List <Sentence> resolvents = new List <Sentence>(); ClauseSymbols cs = new ClauseSymbols(clause1, clause2); List <Symbol> complementedSymbols = cs.getComplementedSymbols(); foreach (Symbol symbol in complementedSymbols) { resolvents.Add(createResolventClause(cs, symbol)); } return(resolvents); }
private Sentence createResolventClause(ClauseSymbols cs, Symbol toRemove) { List <Symbol> positiveSymbols = SetOps .union(cs.clause1PositiveSymbols, cs.clause2PositiveSymbols); List <Symbol> negativeSymbols = SetOps .union(cs.clause1NegativeSymbols, cs.clause2NegativeSymbols); if (positiveSymbols.Contains(toRemove)) { positiveSymbols.Remove(toRemove); } if (negativeSymbols.Contains(toRemove)) { negativeSymbols.Remove(toRemove); } positiveSymbols.Sort(new SymbolComparator()); negativeSymbols.Sort(new SymbolComparator()); List <Sentence> sentences = new List <Sentence>(); for (int i = 0; i < positiveSymbols.Count; i++) { sentences.Add(positiveSymbols[i]); } for (int i = 0; i < negativeSymbols.Count; i++) { sentences.Add(new UnarySentence(negativeSymbols[i])); } if (sentences.Count == 0) { return(new Symbol("EMPTY_CLAUSE")); // == empty clause } else { return(LogicUtils.chainWith("OR", sentences)); } }
private Sentence CreateResolventClause(ClauseSymbols cs, Symbol toRemove) { var positiveSymbols = cs.Clause1PositiveSymbols.Union(cs.Clause2PositiveSymbols).ToList(); var negativeSymbols = cs.Clause1NegativeSymbols.Union(cs.Clause2NegativeSymbols).ToList(); if (positiveSymbols.Contains(toRemove)) { positiveSymbols.Remove(toRemove); } if (negativeSymbols.Contains(toRemove)) { negativeSymbols.Remove(toRemove); } positiveSymbols.Sort(this.CompareSymbols); negativeSymbols.Sort(this.CompareSymbols); IList <Sentence> sentences = new List <Sentence>(); for (int i = 0; i < positiveSymbols.Count; i++) { sentences.Add(positiveSymbols[i]); } for (int i = 0; i < negativeSymbols.Count; i++) { sentences.Add(new UnarySentence(negativeSymbols[i])); } if (sentences.Count == 0) { return(new Symbol("EMPTY_CLAUSE")); // == empty clause } else { return(LogicUtils.ChainWith("OR", sentences)); } }
public IList <Sentence> PLResolve(Sentence clause1, Sentence clause2) { var cs = new ClauseSymbols(clause1, clause2); return(cs.GetComplementedSymbols().Select(symbol => this.CreateResolventClause(cs, symbol)).ToList()); }
private Sentence createResolventClause(ClauseSymbols cs, Symbol toRemove) { List<Symbol> positiveSymbols = SetOps .union(cs.clause1PositiveSymbols, cs.clause2PositiveSymbols); List<Symbol> negativeSymbols = SetOps .union(cs.clause1NegativeSymbols, cs.clause2NegativeSymbols); if (positiveSymbols.Contains(toRemove)) { positiveSymbols.Remove(toRemove); } if (negativeSymbols.Contains(toRemove)) { negativeSymbols.Remove(toRemove); } positiveSymbols.Sort(new SymbolComparator()); negativeSymbols.Sort( new SymbolComparator()); List<Sentence> sentences = new List<Sentence>(); for (int i = 0; i < positiveSymbols.Count; i++) { sentences.Add(positiveSymbols[i]); } for (int i = 0; i < negativeSymbols.Count; i++) { sentences.Add(new UnarySentence(negativeSymbols[i])); } if (sentences.Count == 0) { return new Symbol("EMPTY_CLAUSE"); // == empty clause } else { return LogicUtils.chainWith("OR", sentences); } }