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
Foi útil?

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 destruct IHeven para separar uma testemunha k1 e uma prova de que p = 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.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top