The lemma is not provable. Try intros. remember (j+0) as Q. rewrite <- plus_n_O in HeqQ. subst Q.
It will get rid of the + 0
. Your goal is now
P j n ln = P j n jn
Both sides are of type nat
. But now you need to prove that these two nat
s are equal, without knowing anything else about them...
EDIT:
Actually I was a little too quick... The value of the function P
cannot depend on ln
and jn
since they are Prop
s, . But to prove that, you need proof irrelevance.
If you do Require Import ProofIrrelevance.
you get the axiom
Axiom proof_irrelevance : forall (P:Prop) (p1 p2:P), p1 = p2.
It is not a consequence of Coq's logic, but it is consistent with it (and often is just what we mean with a proof - two formally correct arguments are equally true even if they differ in the details).
Now you just do
rewrite (proof_irrelevance _ ln jn). reflexivity. Qed.