If you have a world (a set of logical propositions) and you want to represent changes to that world over time (or perhaps space, or inheritance, or any other comparison), you will need some kind of ‘delta’ expression. The simplest possible delta, annoying as it is to humans, is an XOR (and I might yet come back to that). The next simplest is adding an explicit NOT, and representing deltas as sets of propositions P1, P2… NOT P1, P2…, to capture how propositions change from true to false, and false to true.
This leads naturally to a four-state logic: propositions not listed in the delta set (an infinite number of them) have logical state Unknown; propositions which have both a P1 and a NOT P1 have logical state Both. Whether or not we’d prefer a three-state logic, the intrinsic shape of the data seems to give us four states.
Belnap used four-state logic to investigate relevance logics, but after a quick glance at his ideas I’m stuck in the weeds of complex logical formalisms with very little idea on what he was trying to accomplish. Trying instead to consult my intuition on which way to go. Or at least wander around looking at some of the sights now that I’m off the path.
Relevance (or relevant) logics are one way of attacking the problem of explosion ( ‘from paradox, all propositions follow’) issue of classical logic. This annoying feature of classical logic is annoying because no human naturally thinks like this – which is perhaps a clue that this logic, though simple, is not based on our actual laws of thought. It’s maybe also linked to the problem of creating an efficient search procedure for logical inference – because explosion seems to involve dragging in irrelevant facts, while efficient search is about minimising the number of irrelevant facts we need to drag in.
The more I look at explosion, the more my sense of annoyance centres around the idea of disjunction introduction. My gut feeling seems to come down to: a simple logical fact is natural: it’s in the database or it’s not. A conjunction (AND) is also natural – two or more facts are in the database, or they are not. If we express the database as something like a set, or a relation, we seem to get ANDs ‘for free’: they are simply in the structure of the data.
A disjunction (OR), however is NOT naturally ‘in the data’ in any sense. It’s an extra fact we have to add: a higher-level judgement about data, in a sense.
This queasiness about disjunctions parallels the queasiness most people feel about material implication: that we could infer (A -> B), ((not A) or B) if we only know that B is true. This feels intuitively very wrong because, I believe, we have a natural intuition that an implication is a statement about all possible states of the world, not about the current state.
The queasiness about material implication comes down to a disjunction being inferred. I would like to argue that – as our intuition suggests- a disjunction is in fact a higher-level fact (at least, a fact in itself) and that it should never be legitimate to infer a disjunction from any part of the current state of a logical world.
I feel strongly that this is correct. In logic as practiced by actual humans, ‘A or B’, is not entailed in ‘A’, in much the same sense that the cons cell (A . nil) is not the same data element as the atom A. It is a higher order statement linking two statements. Think about it for a moment:
First, ‘I am in New York, or I am in Moscow’ is a sensible fact to add or infer if we have some reason for believing that either were the case. (Eg, we had been directly told this proposition: or we had observed something which entailed this disjunction). The disjunction, however, does not arise at will. The ‘OR’ here is itself one bit of data. We can’t arbitrarily add bits of data to a database during a search procedure!
Second: in the back of our human mind is our constant understanding that the state of a world is fragmentary, not completely known, and will change over time, and therefore individual facts should be complete in themselves, and should not be dependent on the state of the world as a whole. ‘A’ is complete a in itself. ‘A and B’ is also complete. ‘A or B’ is a complete statement if we know this as a given, as a whole piece of data. But ‘A or B’ inferred out of thin air seems wrong: it is created by the temporary, transient state of A or B, and even by the mere act of thinking about either of them. If it’s caused by the act of thinking (or searching), it’s metadata; again, it seems very much illegitimate to add metadata about an enquiry to the database as if it were the same kind of information that we are searching.
Another way of looking at this: Think about the statement ‘A and not-B’. This would also be true of A as long as B wasn’t in the database – thus it could, legitimately, be inferred at any point from a database which only contained (A). But if the state of B ever changed, it would become false. It’s easy to see that this inference links two facts. The inference ‘A or B’ also links two facts, but because (by accident) it is always true when A is true (though it is also true at other times), we might think it’s legitimate to think that A alone entails it – the ‘or anything’ is somehow contained within every A. But if you view connectives as links, this inference becomes obvious as a mistake. And indeed, in the case where we A somehow becomes both true and false, that mistake (in the sense of being a very strong deviation from human logic) becomes obvious.
What this line of thinking comes down to is that the (modern) classical-logic idea that connectives are and only are truth-functions capturing the current state of the database is dead wrong, at least in the case of disjunctions. In analyzing the intuition of how our own built-in human logic works, we see that we naturally treat disjunctions as two separate cases: we can evaluate a truth-function ‘A or B’ by looking at the database – but evaluating the truth of ‘A or B’ is a very different thing from adding ‘A or B’ to the database. Adding ‘A or B’ at any point means we are creating a rule, a link, a meta-statement about the state of the world in all its possible states.
This means, I think, that we need to start from a model of logic not as separated facts but as links between inferences.
I’d like to go further and say that disjunction is at the heart of the concept of ‘rule’ and ‘law’ – we can construct implications from OR, but also more subtle links between data. With AND we have ‘the data itself’, but with OR we have something much deeper, stronger and more interesting: the potential to construct data not explicitly described – to describe or put restrictions on infinite possible worlds. That’s where our whole concept of computation comes from right there.
And because of that deep computational-inference power encoded within OR – that it represents a structure that ranges across infinite possible logical worlds – we should treat it with respect. Just as you wouldn’t expect a compiler or interpreter to, at runtime, construct and execute random garbage lambdas (well, unless it were deliberately stress-testing a system, such as fuzzing an API), you shouldn’t expect a sensible logic solver to randomly introduce disjunctions – the logical equivalent of lambdas in their computational power – at the level of the primary database and expect sane results.
Prolog’s search procedure (Robinson resolution over Horn clauses with the closed-world assumption), interestingly, ‘bakes in’ this view of disjunctions, though it never explicitly says so. But in Prolog, disjunctions are never inferred during search. Implications can be added to the database only if another implication instructs us to do so. This decision makes the Prolog solver naturally easy to understand – but it would be very useful, I think, if we understood at a much deeper theoretical level that disjunction introduction is an unnatural operation – and not just making it a ‘solver design quirk’.
Restricting disjunction introduction is obviously what some paraconsistent logics do. But Prolog doesn’t deliberately intend to be a paraconsistent logic. It just happily ‘falls out’ of the solver design that it’s somewhat paradox-tolerant in a way that mostly aligns with human expections. I’m saying it would be smarter if we didn’t just trust the stability of our core logic to a happy accident. And that, given the massive complexity of paraconsistent logics, perhaps we don’t need to go all the way to paraconsistency to get big wins. Small steps in a useful direction may be more helpful.
If we eliminate disjunction introduction, we can still get paradox at the level of individual statements, or ones linked by direct database-level disjunctions. This is where the fourth logical value in four-state logic might help us decide that from ‘both true and false’ we should not conclude anything. But in our human logic, it would still be an acceptable failure (though unhelpful) to conclude from ‘A and not-A’ all the entailments of A and the entailments of not-A; it remains a completely machinelike and nonhuman failure for A and not-A to entail ‘everything in the entire universe’.
The infinite-arithmetic model of the fourth state as ‘NaN’ may or may not be helpful here. It would perhaps flag a direct contradiction as immediately wrong. I think Belman’s use of it is much more subtle, and I’m not entirely sure I want to follow him.
But the idea of ‘AND is data; OR is computation’ I’ve been exploring here seems perhaps useful. I want to think about it some more.
Edit: Looking at OR as a secondary construct created from the more primary Boolean arithmetic operations of AND (multiplication) and XOR (addition) maybe sheds some more light. It’s very easy to see that A XOR B depends strongly on the state of both A and B, just as A AND B does, and that therefore it is not legitimate to infer it from one fact alone, while A OR B gives us that accidental (and unfortunate) coincidence with A.
But there’s still a deeper connection, I think. My intuition tells me it should still not be legitimate to conclude A XOR B from (A and not-B) even given access to both bits of data. Because the XOR connective is ‘not naturally in the shape of the data’ in the way AND is, therefore it must be an extra piece of information, separate from the data itself. And that extra piece of information is about how data changes across infinite possibility space. Inference and computation.
Edit: What I’m talking about here is similar to the idea of Strict Conditional in relevance logics: that implication, in natural human logic, means something like ‘in every possible world‘ A -> B. But I’m arguing a stronger version: that the OR/XOR operators themselves are, fundamentally, modal across all possible worlds. Because when you look at a set of facts, you see ‘and’ arising naturally as a result of its set-ness: the existence of more than one fact means there’s an implicit ‘and’, which is inextricable from the facts. OR/XOR, however, aren’t in the set of facts: they are statements about relations between facts. So the most natural interpretation is that they are describing possible relations among configurations of data that don’t yet exist. OR/XOR (and to an extent, NOT) are control operators while AND is a data operator.
This explains why, if a human reads a sentence with ANDs – ‘John owns a car and a bicycle’ – it feels simple and easy to understand: we can parse it directly into a single data model, or a picture in our heads. But a sentence with ORs immediately creates a sense of tension, nervousness, complexity, because it requires creating multiple possible worlds, sets of data, in our mind: ‘John owns a car or bicycle or both / John owns either a car or a bicycle, but not both’. Try it: what do you visualise in your mind? A set of scenarios? Two or pictures: John with a car, John with a bicycle, John with both? A feeling that ‘This is a rule, not a fact – I don’t quite fully understand this, this could get very complicated very quickly, I need to sit down and carefully work it through?’
That’s because AND is naturally in the data model, but OR is a control operator – it’s creating constraints over a potentially infinite set of potential models. That right there is the power of logic, but also a hint that AND and OR are working on fundamentally different levels. One is a connective, the other a meta-connective, and we should not confuse those two levels. (Per Wittgenstein and contra Russell, they’re not different types or categories of things – if you can name anything, even a mental concept, it’s at the very least an instance of NameableThing – but there’s an issue of nesting level involved. What is the data set that OR, taken as a fact, operates on? It is not the current world state but the set of all world states).
This makes me strongly sympathetic to the idea that ‘testing’ or ‘evaluating’ a disjunction (which can occur at the level of ‘data’, or the current world state) is something fundamentally different from ‘inferring’ or ‘asserting’ a disjunction (which is at the level of ‘control’, or constraints over all possible worlds) and that two disjunction operators are probably required.Which I guess puts my idea of a ‘natural human logic’ into the subset of paraconsistent logics which 1) reject disjunction introduction and 2) have two disjunction operators.
In fact AND operates much the same way as OR – but it’s an accident that, in all possible worlds, the assertion of AND is the same as the evaluation of AND. If and only if ‘A’ and ‘B’, then ‘A AND B’ by definition. This is not true for OR: ‘A’ at data-level with or without ‘B’ does not imply the control-level rule ‘A OR B’, although the truth-function ‘A or B’ evaluates to true whenever A is true. So we need a way of testing ‘OR’ as a truth-function without asserting its truth.
Prolog resolution gets us this nice property that inferences are only made as a result of higher-level implications in the database, apparently ‘by accident’, but actually because it is optimised to be efficient, and the key to being efficient is to only deal with the smallest set of relevant facts. Many of the inference rules of classical logic are wildly inefficient, which should also be a hint that they’re not how human reasoning works.
Still not convinced that AND and OR act at separate levels? Here’s what they look like as syntax:
(AND (owns John bicycle) (owns John car)
(OR (owns John bicycle) (owns John car)))
You can see that they are literally separate statements: they can coexist at the same time. (AND is so primal that we have to, literally, wrap the OR inside it in order to merely put these statements together, to say that they are ‘true at the same time’.) Since they can exist at the same time, and are not identical, and can’t be made identical, they must require separate bits of data to describe. However all the bits of data that describe the current world state are taken up by the AND-statements. Since A OR B as a truth function is true of all B, any OR-statements in a statement like this containing also AND-statements would be vacuous tautologies. That’s one possible interpretation of ‘OR’ but it seems a very poor one, that adds very little information and makes it mostly useless. So the most natural interpretation of OR – the interpretation that maximises its information-containing capacity – would be that it’s describing something completely orthogonal to AND: a constraint that persists through all permutations of the world.
(This is applying the same logic which, applied to NOT, leads us to a four-state logic.)