Following is a useful lemma in classical propositional logic.
(A -> B \/ C) <-> (A -> B) \/ (A -> C).
The backward direction is easily proved. But I could not find an intuitionistic proof of the forward direction. I could prove above proposition using classical logic(Law of Excluded Middle) though.
You can confirm that the forward direction is provable in classical logic. Just think about the Godel's Completeness Theorem.
Now I am thinking, perhaps forall A B C: Prop, (A -> B \/ C) -> (A -> B) \/ (A -> C)
is equivalent to forall P: Prop, P \/ ~ P
.
My question is as follows:
(1). Is there an intuitionistic proof (not using LEM or double negation law) of (A -> B \/ C) -> (A -> B) \/ (A -> C)
?
(2). If the answer to (1) is negative, then can we prove
(forall A B C: Prop, (A -> B \/ C) -> (A -> B) \/ (A -> C)) ->
forall P: Prop, P \/ ~ P`
Here is the proof of (A -> B \/ C) -> (A -> B) \/ (A -> C)
using LEM I mentioned above.
From Coq Require Import Classical_Prop.
Fact imp_dist_or: forall A B C: Prop,
(A -> B \/ C) -> (A -> B) \/ (A -> C).
Proof.
intros.
destruct (classic (A -> B)) as [H1 | H2].
- left. exact H1.
- right.
intros Ha.
apply H in Ha.
destruct Ha as [Hb | Hc].
+ unfold not in H2.
assert (Hab: A -> B).
{ intros HA. exact Hb. }
apply H2 in Hab. destruct Hab.
+ exact Hc.
Qed.
I suspect that (2) is also provable in Coq.
There is no intuitionistic proof of (A -> B \/ C) -> (A -> B) \/ (A -> C)
. Notice that \/
has higher syntactic priority that ->
.
Indeed, one can find a Kripke counter model of that, here computed using the STRIP solver
written by our team many years ago.
STRIP> define => (a->b|c)->(a->b)|(a->c); refute; kripke;
unprovable: => ((a->(b|c))->((a->b)|(a->c)))
Counter-model for => ((a->(b|c))->((a->b)|(a->c)))
0 : { }
1 : { a,c }
2 : { a,b }