public SubstitutionSet Unify(IUnifiable p, SubstitutionSet s) { if (p is SimpleSentence) { SimpleSentence s1 = (SimpleSentence)p; if (terms.Length != s1.terms.Length) { return(null); } SubstitutionSet sNew = new SubstitutionSet(s); for (int i = 0; i < terms.Length; i++) { sNew = terms[i].Unify(s1.terms[i], sNew); if (sNew == null) { return(null); } } return(sNew); } if (p is Variable) { return(p.Unify(this, s)); } return(null); }
public IPCExpression ReplaceVariables(SubstitutionSet s) { IUnifiable[] newTerms = new IUnifiable[terms.Length]; for (int i = 0; i < terms.Length; i++) { newTerms[i] = (IUnifiable)terms[i].ReplaceVariables(s); } return(new SimpleSentence(newTerms)); }
public SubstitutionSet Unify(IUnifiable exp, SubstitutionSet s) { if (this == exp) { return(new SubstitutionSet(s)); } if (exp is Variable) { return(exp.Unify(this, s)); } return(null); }
public SubstitutionSet Unify(IUnifiable p, SubstitutionSet s) { if (this == p) { return(s); } if (s.IsBound(this)) { return(s.GetBinding(this).Unify(p, s)); } SubstitutionSet sNew = new SubstitutionSet(s); sNew.Add(p, this); return(sNew); }
public void Add(IUnifiable exp, Variable v) { bindings.Add(exp, v); }
private void UnifyTester() { Constant friend = new Constant("friend"); Constant bill = new Constant("bill"); Constant george = new Constant("george"); Constant kate = new Constant("kate"); Constant merry = new Constant("merry"); Variable X = new Variable("X"); Variable Y = new Variable("Y"); List <IUnifiable> expressions = new List <IUnifiable>(); IUnifiable[] terms = new IUnifiable[2]; terms[0] = bill; terms[1] = george; expressions.Add(new SimpleSentence(friend, terms)); terms[1] = kate; expressions.Add(new SimpleSentence(friend, terms)); terms[1] = merry; expressions.Add(new SimpleSentence(friend, terms)); terms[0] = george; terms[1] = bill; expressions.Add(new SimpleSentence(friend, terms)); terms[1] = kate; expressions.Add(new SimpleSentence(friend, terms)); terms[0] = kate; terms[1] = merry; expressions.Add(new SimpleSentence(friend, terms)); terms[0] = X; terms[1] = Y; IUnifiable goal = new SimpleSentence(friend, terms); SubstitutionSet s = null; textBox1.Text += "Goal: " + goal.ToString() + "\r\n"; for (int i = 0; i < expressions.Count; i++) { IUnifiable next = expressions[i]; s = next.Unify(goal, new SubstitutionSet()); textBox1.Text += next.ToString() + "\t"; if (s != null) { IPCExpression ipcexp = goal.ReplaceVariables(s); SimpleSentence sent = (SimpleSentence)ipcexp; textBox1.Text += sent.ToString() + "\r\n"; } else { textBox1.Text += "False\r\n"; } } terms[0] = bill; terms[1] = Y; goal = new SimpleSentence(friend, terms); textBox1.Text += "Goal: " + goal.ToString() + "\r\n"; for (int i = 0; i < expressions.Count; i++) { IUnifiable next = expressions[i]; s = next.Unify(goal, new SubstitutionSet()); textBox1.Text += next.ToString() + "\t"; if (s != null) { IPCExpression ipcexp = goal.ReplaceVariables(s); textBox1.Text += ipcexp.ToString() + "\r\n"; } else { textBox1.Text += "False\r\n"; } } }