Intuitionistic logic plus $A → B \lor C \vdash ( A → B ) \lor ( A → C )$

887 Views Asked by At

The following is a classically valid deduction for any propositions $A,B,C$. $\def\imp{\rightarrow}$

$A \imp B \lor C \vdash ( A \imp B ) \lor ( A \imp C )$.

But I'm quite sure it isn't intuitionistically valid, although I don't know how to prove it, which is my first question.

If my conjecture is true, my next question is what happens if we add this rule to intuitionistic logic. I do not think we will get classical logic. Is my guess right?

[Edit: The user who came to close and downvote this 4 years after I asked this presumably did not see my comment: "The BHK interpretation suggests to me that it isn't intuitionistically valid, but that's just my intuition...". If you are not familiar with Kripke frames (and I was not at that time), good luck trying to figure out what to try!]

3

There are 3 best solutions below

9
On BEST ANSWER

Are you familiar with Kripke semantic of intuitionistic logic (see Semantics of intuitionistic logic here)?$\def\imp{\rightarrow}$

Intuitively, a proposition is not interpreted as globally truth or false, but rather as the set of 'knowledge states' in which it is 'known'. Knowledge states may evolve, and the only restriction to the interpretation of propositions is that knowledge cannot be revoked.

Formally, you pick a Kripke frame, i.e. a set $W$ equipped with a preorder $\leq$, and interpret any propositional variable as a subset of $W$ that is closed under passing to $\leq$-greater elements. With the interpretations of the propositional variables fixed, you interpret $\lor$ and $\land$ as union and intersection, respectively. Also, you interpret $\bot$ as none of $W$ (the empty set) and $\top$ as all of $W$. The interesting part is the interpretation of implication: If $\psi$ and $\phi$ are interpreted as $A,B\subset W$, then $\psi\imp\phi$ is interpreted as the set of states $w\in W$ such that for any $v\in W$ with $w\leq v$ and $v\in A$, you also have $v\in B$. Appealing to the intuition again, it means that however knowledge evolves, whenever $\psi$ is known then so is $\phi$. For example, $\neg\neg\phi \equiv ( \phi \imp \bot ) \imp \bot$ is known at $w$ precisely if for any $v\in W$ with $w\leq v$ there is $z\in W$ with $w\leq z$ such that $\phi$ holds at $z$ - in other words, you can never refute $\phi$. This is much weaker than asserting that $\phi$ holds for all of $W$, as you can see e.g. from the example at the end of the post, where $W = \{0\to 1\}$.

Anyway, the Kripke semantics is sound for intuitionistic logic, so to prove that a formula is not an intuitionistic tautology, it suffices to provide some Kripke frame with an interpretation of the formulas' propositional variables such that the associated interpretation is not true in the whole Kripke frame.

Let's do this for $(A\imp (B\lor C))\imp ((A\imp B)\lor (A\imp C))$: Consider the frame $1\leftarrow 0\rightarrow 2$ and interpret $A$ as known only at $1,2$, $B$ as known only at $1$ and $C$ as known only at $2$. Then $A\imp B$ and $A\imp C$ are both not known at $0$ since there is an evolution which validates $A$ but does not validate $B$ (similarly $C$). However, $A\imp (B\lor C)$ is valid at $0$, since for any evolution from $0$ to either $1$ or $2$, either $B$ or $C$ is valid in the new state.

Concerning your second question: An example like the above can only exist if the frame $W$ under consideration has branches; if, in contrast, evolution is unique - meaning formally that for any three elements $u,v,w$ in the frame satisfying $u\leq v$ and $u\leq w$, we have either $v\leq w$ or $w\leq v$ - the formula $(A\imp (B\lor C))\imp ((A\imp B)\lor (A\imp C))$ does indeed hold under any interpretation.

Therefore, if you add $(A\imp (B\lor C))\imp ((A\imp B)\lor (A\imp C))$ as an axiom to intuitionistic logic, you will still have sound Kripke semantics when restricting to frames with unique evolution. Hence, to check that a formula is not a tautology with respect to this stronger calculus, it suffices to find an interpretation in such a uniquely evolving frame which does not validate the formula. For $\neg \neg A$, you can pick the frame $W = \{0\to 1\}$ and interpret $A$ as known at $1$ but unknown at $0$: Then $\neg\neg A$ is globally known (see above), but $A$ is not. Hence, $\neg \neg A \imp A$ is not a tautology in the enhanced calculus, and therefore the enhanced calculus is still strictly contained in classical propositional logic.

4
On

That is G(Gödel–Dummett logic: https://en.wikipedia.org/wiki/Intermediate_logic#Properties_and_examples). $$ \forall A\forall B\forall C((A\to B\lor C)\to (A\to B)\lor (A\to C))\leftrightarrow \forall A\forall B((A\to B)\lor (B\to A)) $$ Let me do a tedious speech.
$\forall A\forall B\forall C((A\to B\lor C)\to (A\to B)\lor(A\to C))\vdash \forall A\forall B((A\to B)\lor(B\to A))$

$ \forall A\forall B,\\ \ \ \ \ A\lor B,\\ \ \ \ \ \ \ \ \ (i)A,\\ \ \ \ \ \ \ \ \ \ \ \ \ B\to A\\ \ \ \ \ \ \ \ \ \ \ \ \ \therefore(A\to B)\lor(B\to A)\\ \ \ \ \ \ \ \ \ (ii)B,\\ \ \ \ \ \ \ \ \ \ \ \ \ A\to B\\ \ \ \ \ \ \ \ \ \ \ \ \ \therefore(A\to B)\lor(B\to A)\\ \ \ \ \ \ \ \ \ \therefore (A\to B)\lor(B\to A)\\ \ \ \ \ A\lor B\to (A\to B)\lor(B\to A)\\ \ \ \ \ by\ Hypothesis\\ \ \ \ \ (A\lor B\to A\to B)\lor(A\lor B\to B\to A)\\ \ \ \ \ (i)A\lor B\to A\to B,\\ \ \ \ \ \ \ \ \ A,\\ \ \ \ \ \ \ \ \ \ \ \ \ A\lor B\\ \ \ \ \ \ \ \ \ \ \ \ \ A\to B\\ \ \ \ \ \ \ \ \ \ \ \ \ \therefore B\\ \ \ \ \ \ \ \ \ A\to B\\ \ \ \ \ \ \ \ \ \therefore (A\to B)\lor(B\to A)\\ \ \ \ \ (ii)A\lor B\to B\to A,\\ \ \ \ \ \ \ \ \ B,\\ \ \ \ \ \ \ \ \ \ \ \ \ A\lor B\\ \ \ \ \ \ \ \ \ \ \ \ \ B\to A\\ \ \ \ \ \ \ \ \ \ \ \ \ \therefore A\\ \ \ \ \ \ \ \ \ B\to A\\ \ \ \ \ \ \ \ \ \therefore (A\to B)\lor(B\to A)\\ \ \ \ \ \therefore (A\to B)\lor(B\to A)\\ \therefore \forall A\forall B((A\to B)\lor(B\to A)) $

Conversely,
$\forall A\forall B((A\to B)\lor(B\to A))\vdash \forall A\forall B\forall C((A \to B \lor C)\to (A\to B)\lor(A\to C))$

$ \forall A\forall B\forall C,\\ \ \ \ \ A\to B\lor C,\\ \ \ \ \ \ \ \ \ by\ Hypothersis\\ \ \ \ \ \ \ \ \ ((A\to B)\to A\to C)\lor((A\to C)\to A\to B)\\ \ \ \ \ \ \ \ \ (i)(A\to B)\to A\to C,\\ \ \ \ \ \ \ \ \ \ \ \ \ A,\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ B\lor C\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (i)B,\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ A\to B\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ A\to C\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \therefore C\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (ii)C,\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \therefore C\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \therefore C\\ \ \ \ \ \ \ \ \ \ \ \ \ A\to C\\ \ \ \ \ \ \ \ \ \ \ \ \ \therefore (A\to B)\lor (A\to C)\\ \ \ \ \ \ \ \ \ (ii)(A\to C)\to A\to B,\\ \ \ \ \ \ \ \ \ \ \ \ \ A,\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ B\lor C\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (i)B,\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \therefore B\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (ii)C,\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ A\to C\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ A\to B\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \therefore B\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \therefore B\\ \ \ \ \ \ \ \ \ \ \ \ \ A\to B\\ \ \ \ \ \ \ \ \ \ \ \ \ \therefore (A\to B)\lor (A\to C)\\ \ \ \ \ \ \ \ \ \therefore (A\to B)\lor (A\to C)\\ \ \ \ \ \therefore (A\to B\lor C)\to (A\to B)\lor (A\to C)\\ \therefore \forall A\forall B\forall C((A \to B \lor C)\to (A\to B)\lor (A\to C)) $

7
On

It's interesting to me that different people's intuitions were so different on this. Different models are helpful with different examples, and nobody in the thread mentioned the connection between intuitionistic logic and programming language semantics, which for this example I found very helpful.

In the programming language model, $$(A\to(B\lor C))\to((A\to B)\lor(A\to C))$$ is the type of a function $f$ which is given a value $in$ of type $$A\to(B\lor C)$$ and which transforms it into a value $out$ of type $$(A\to B)\lor(A\to C).$$ How might we implement such a function $f$?

An experienced computer programmer will think something like this:

I would need to produce a function that turns $A$ into $B$. I can't do that because all I have is a function that turns $A$ into $B\lor C$ and it might not give me the $B$ I need.

That's the intuition. The intuition is a shortcut for the following thought process.

In code, our function $f$ will look like this:

def f in = out   where    -- `in` has type A → (B ∨ C)
   out = ???              -- `out` should have type (A → B) ∨ (A → C)

$\def\lt{\mathtt{Left}\ }\def\rt{\mathtt{Right}\ }$ A value of type $(A\to B)\lor(A\to C)$ must have the form $\lt out_L$ where $out_L$ has type $A\to B$, or $\rt out_R$ where $out_R$ has type $A\to C$. Those are the only two choices. Let's try the first one:

def f in = out   where      -- `in` has type A → (B ∨ C)
   out        = Left outL   -- `outL` should have type A → B

Since outL has type $A\to B$, it is a function that takes a value of type $A$ and turns it into a value of type $B$:

def f in = out   where    -- `in` has type A → (B ∨ C)
   out        = Left outL 
   outL a     = ???       -- we want to produce a value of type B

Where is $out_L$ going to get a value of type $B$? The only tools it has available are $in$ (of type $A\to(B\lor C)$) and $a$ (of type $A$) and there is only one thing it can do with these: it must give the argument $a$ to the function $in$, producing a result of type $B\lor C$:

def f in = out where      -- `in` has type A → (B ∨ C)
   out        = Left outL 
   outL a     = ?? in a ??  -- `in a` has type B ∨ C
                            --  we want to produce a value of type B

The in a expression produces a value of type $B\lor C$. A value of type $B\lor C$ looks either like $\lt b$ or like $\rt c$, so we need a case expression to handle the two cases.

def f in = out where      -- `in` has type A → (B ∨ C)
   out        = Left outL 
   outL a     = case  in a  of    -- we want to produce a value of type B
                   Left b  -> ???
                   Right c -> ???

In the $\lt b$ case it's easy to see how to proceed: just return the $b$:

def f in = out where      -- `in` has type A → (B ∨ C)
   out        = Left outL 
   outL a     = case  in a  of      -- we want to produce a value of type B
                   Left b  -> b   -- … and we did!
                   Right c -> ???

In the $\rt c$ case there's no way to proceed, because $out_L$ has available a value $c$ of type $C$, but it still needs to produce a value of type $B$ and it has no way to get one. There is no way to complete the implementation.

Perhaps we made a mistake back at the beginning when we chose to define out = Left outL? Would out = Right outR work better? No, the problem will be exactly the same:

def f in = out where      -- `in` has type A → (B ∨ C)
   out        = Right outR 
   outR a     = case  in a  of      -- we want to produce a value of type C
                   Left b  -> ??? -- … but we don't have one 
                   Right c -> c  

This exhausts the possibilities. There is no way to implement $f$.

The points I want to make here are not only that programmers can and do acquire this sort of intuition for what can't be implemented and why not, but also that they can convert the intuition into an argument that doesn't rely on the intuition alone. Once the intuition is turned a detailed argument, the Curry-Howard correspondence can be used to convert the failed implementation directly to an LJ sequent calculus proof or analytic tableau proof that the statement is invalid.

[ Addendum: Note by the way that the reverse implication, which is intuitionistically valid, is easy to prove and just as easy to construct a program:

def fINV out a =   -- fINV has type ((A→B)∨(A→C))→(A→(B∨C))
  case out of Left  outL -> Left  (outL a)  -- outL has type A→B
              Right outR -> Right (outR a)  -- outR has type A→C

and again the Curry-Howard correspondence converts the program into a proof or vice-versa. ]