Preso no mesmo lexema com existe
Pergunta
Eu estou preso em um lexema "deixada como um exercício" de esta palestra.Ele vai como esta:
Lemma even_double : forall n, even n -> exists k, n = 2 * k.
Proof.
intros n H.
induction H.
...
Onde even
é uma indutivo predicado definido assim:
Inductive even : nat -> Prop :=
| even0 : even 0
| evenS : forall p:nat, even p -> even (S (S p).
Ajuda, por favor?Eu sempre acabo com (S (S p) = 2
ou semelhante.
EDITAR
Algumas entradas e táticas que eu usei (não completa a prova):
destruct IHeven
exists (S x)
rewrite mult_succ_l
apply eq_S
apply plus_n_Sm
Solução
Após a sua introdução passo, você deve ter dois objetivos.
O primeiro (caso base, para even0
) deve ser fácil provar.O testemunho existencial deve ser escolhido para ser 0
, depois de que o objetivo deve segurar pela reflexividade.
O segundo caso (para evenS
pode ficar assim:
p : nat
H : even p
IHeven : exists k : nat, p = 2 * k
============================
exists k : nat, S (S p) = 2 * k
IHeven
diz-se que existe um número (vamos nome k1
) tais que p = 2 * k1
.
Seu objetivo é apresentar um número (por exemplo, k2
) de tal forma que você pode provar S (S p) = 2 * k2
.
Se você fizer as contas, você verá que (S k1)
seria o candidato perfeito.
Então, para continuar você pode usar as seguintes táticas:
destruct
para destructIHeven
para separar uma testemunhak1
e uma prova de quep = 2 * k1
.exists
a exposição(S k1)
como o testemunho existencial para você gol.- em seguida, algum trabalho para provar que a igualdade se mantém.