Contexto: Estoy trabajando en ejercicios en Software Foundations.No se puede encontrar una instancia para la variable
Theorem neg_move : forall x y : bool,
x = negb y -> negb x = y.
Proof. Admitted.
Theorem evenb_n__oddb_Sn : forall n : nat,
evenb n = negb (evenb (S n)).
Proof.
intros n. induction n as [| n'].
Case "n = 0".
simpl. reflexivity.
Case "n = S n'".
rewrite -> neg_move.
Antes de la última línea, mi subobjetivo es la siguiente:
evenb (S n') = negb (evenb (S (S n')))
y quiero transformarlo en esto:
negb (evenb (S n')) = evenb (S (S n'))
Cuando intento para pasar por rewrite -> neg_move
, sin embargo, produce este error:
Error: Unable to find an instance for the variable y.
Estoy seguro de que esto es realmente simple, pero ¿qué estoy haciendo mal? (Por favor, no des nada por resolver evenb_n__oddb_Sn
, a menos que lo esté haciendo completamente mal).
La frase "no se puede encontrar una instancia para la variable * y *" significa que Coq no puede encontrar un valor para sustituir la variable * y * en el tipo de * neg_move *. Puede resolver este problema instanciando explícitamente los parámetros de * neg_move *, incluido el antecedente del condicional (que se generará como un subgrupo si se deja sin desinstalar). Sin embargo, las declaraciones condicionales generalmente se deben * aplicar *; de hecho, * neg_move * se puede aplicar a su hipótesis de inducción para obtener una hipótesis más útil. – danportin