¿Cómo puedo en Coq, demostrar que una función f
que acepta un bool true|false
y devuelve un bool true|false
(mostrado a continuación), cuando se aplica dos veces a un solo bool true|false
siempre volvería ese mismo valor true|false
:f Demostrando (f bool) = bool
(f:bool -> bool)
Por ejemplo la función f
sólo se puede hacer 4 cosas, permite llamar a la entrada de la función b
:
- siempre volver
true
- Siempre volver
false
- Return
b
(es decir, devuelve verdadero si b es cierto viceversa) - Return
not b
(es decir, devuelve FALSE si b es verdadero y vice vera)
lo tanto, si la función siempre devuelve verdadero:
f (f bool) = f true = true
y si el función siempre devuelve falso que se pueden conseguir:
f (f bool) = f false = false
Para los otros casos permite assum la función devuelve not b
f (f true) = f false = true
f (f false) = f true = false
En ambos casos de entrada posibles, siempre terminamos con la entrada original. Lo mismo vale si asumimos que la función devuelve b
.
Entonces, ¿cómo demostrarías esto en coq? prueba
Goal forall (f:bool -> bool) (b:bool), f (f b) = f b.
me he dado cuenta de que f (b f: bool)! = B no pueden ser probadas, como si f siempre devuelto verdadera f (f false) == f cierto == true = false. –
Sin embargo, f (f (f b)) = f (b). Tal vez esto es más cercano a su pregunta deseada? ¡Pero no sé cómo probar esto en Coq! –
Por cierto, la propiedad que intentas probar tiene un nombre: Idempotence. https://en.wikipedia.org/wiki/Idempotence – krokodil