Buena manera de probar una clase en Coq.
¿Existe una buena manera de probar la implementación de una clase en Coq?
Por ejemplo, si tengo la siguiente Clase muy simple:
El teorema chekc_modulo (c: nat): {c mod 2 = 0} + {c mod 2 <> 0} .
Admitido.
Definición update(n: nat):= add n one.
Clase test :={
f: R -> nat;
g: R -> nat;
contando: nat;
iniciar: contando = zero /\ f 0 = 0 /\ g 0 = 0;
resultado: para todo t, t >= 0 ->
coincidir con chekc_modulo contando con
|left _ => f t = 1 /\ g t = 0 /\ actualizar contando
|right _ => g t = 1 /\ g t = 0 /\ actualizar contando
fin
}.
Me gustaría encontrar una manera de probar esta clase, básicamente para verificar que f y g tengan los valores requeridos después de procesar el resultado.
Lo que he hecho hasta ahora: Implementé manualmente f y g dándoles los valores que espero que tengan en un t dado, después de procesar en resultado. Y ahora intento crear una instancia de la Clase test para ver qué sucede con el resultado.
Estoy un poco atascado porque no veo cómo obtener el resultado real y, por lo tanto, cómo verificar que la implementación es correcta.
¿Alguien tiene un consejo? En general, ¿existe una mejor manera de probar el código en Coq, especialmente en Clases?
EDICIÓN:
En mi estrategia de prueba, he definido el comportamiento esperado de f y g:
Definición f': nat -> nat :=
fun t =>
coincidir con chekc_modulo t con
|left _ => 1
|right _ => 0
fin.
Definición g': nat -> nat :=
fun t =>
coincidir con chekc_modulo t con
|left _ => 0
|right _ => 1
fin.
Entonces, el siguiente paso sería verificar que este comportamiento es de hecho el mismo que lo que sucede después de que se procese el resultado.
davy.ai
Para probar la implementación de la clase
test
en Coq, puede crear una instancia de la clase y luego usar el comandoCompute
para evaluar la salida def
yg
. Por ejemplo:Esto crea una instancia de la clase
test
concontando
inicializado en0
, yf
yg
definidos usando el comportamiento esperadof'
yg'
. Luego, usamos el comandoCompute
para evaluarf
yg
en el momentot=0
y verificar que tienen los valores esperados.Este enfoque se puede extender para evaluar
f
yg
en otros momentos y verificar que tengan los valores esperados.En general, una buena manera de probar el código Coq es escribir pruebas unitarias usando
Compute
o el comandoExample
para evaluar el comportamiento esperado bajo entradas dadas. Además, es posible que desee usar la tácticanot
de Coq para especificar propiedades que no deberían cumplirse, y luego usar un demostrador de teoremas para verificar que estas propiedades de hecho no se cumplen.