es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿No se puede reescribir el objetivo con una afirmación?

No estoy seguro de entender por qué en algunos casos reescribir H funciona y en otros no.
Aquí, por ejemplo:
“`
Teorema add_assoc2 : forall n m: nat, n + m = m + n.
Proof. intros. rewrite add_comm. reflexivity. Qed.

Teorema plus_4: forall n m p q: nat,
n + (n * p) + m + (m * p) = n + m + (n * p) + (m * p).
Proof.
intros.
assert (H: n * p + m = m + n * p).
{ rewrite <- add_assoc2. reflexivity. }
rewrite H.
<code>
Obtenemos:
</code>
1 objetivo
n, m, p, q : nat
H : n * p + m = m + n * p
<strong><em>_</em><em>_</em><em>_</em><em>_</em><em>_</em><em>_</em><em>_</em><em>_</em><em>_</em><em>_</em><em>_</em>_</strong>(1/1)
n + n * p + m + m * p = n + m + n * p + m * p

“`
Pero Coq se queja: Found no subterm matching "n * p + m" in the current goal.
¿Por qué?

Claramente veo uno en el lado izquierdo. Al usar inducción, reescribir con IHn no plantea ningún problema, incluso si hay otros términos delante de la expresión reescribible.

Tags:  

Answer

  1. Avatar for davy.ai

    En el ejemplo dado, el término n*p + m se puede encontrar en el lado derecho de la ecuación m + n*p en la hipótesis H. Sin embargo, al intentar reescribir este término usando H, Coq busca el subtérmino exacto n*p + m en la meta. Este subtérmino exacto no se puede encontrar en la meta, ya que se expresa como n + n*p + m + m*p.

    En los casos en los que la reescritura funciona, es porque el subtérmino específico que se está reescribiendo se encuentra exactamente como está en la meta, o porque las reglas de reescritura utilizadas pueden coincidir y simplificar el término en múltiples pasos hasta que coincida eventualmente con el subtérmino.

    Cuando se utiliza la inducción, la reescritura con IHn puede no ser un problema porque la hipótesis de inducción es una ecuación explícita que coincide exactamente con un subtérmino, y se puede utilizar para reescribir la meta por sustitución. Además, la hipótesis de inducción ya es una afirmación comprobada, mientras que la hipótesis H en el ejemplo dado es simplemente una suposición que aún no ha sido probada.

Comments are closed.