From Notes to Coursera/Stanford's Introduction to Philosophy, Chapter 9: Equality: ---------------------------------------------------------------------------------- "Although the semantics of Relational Logic does not, by itself, tell us which terms are equal and which are not, the idea of co-referentiality does impose some contraints. For example, we cannot believe a=b and b=c and at the same time believe that a!=c." In my system (http://subbot.org/logicagent), I can do the following: --- C:\logicagent>ruby logicbot.rb Hello I have loaded C:/logicagent/logicagent-api.yaml. C:/logicagent/graph.yaml loaded. > Socrates = a philosopher Okay, Socrates = a philosopher. > a philosopher = Aristotle Okay, a philosopher = Aristotle. > is Socrates Aristotle? Yes, Socrates is Aristotle. > Socrates is not Aristotle. Okay, Socrates is not Aristotle. > is Socrates a philosopher? Yes, Socrates is a philosopher. > is Aristotle a philosopher? Yes, Aristotle is a philosopher. > is Socrates Aristotle? No, Socrates is not Aristotle. > --- So by default if a=b and b=c, a=c: "=" is an Equivalence Relation. However, I can tell it that, in a specific case, a!=c. Then if I tell it b=d, the program still assumes a=d and c=d (unless I tell it different): --- > a philosopher is a lover of wisdom. Okay, a philosopher is a lover of wisdom. > is Socrates a lover of wisdom? Yes, Socrates is a lover of wisdom. > is Aristotle a lover of wisdom? Yes, Aristotle is a lover of wisdom. > --- Thus I am adding some context-dependency to the system: I can override the default inference procedure in specific cases. In other words, I can add exceptions.