我在COQ如何,证明,接受一个布尔true|false
并返回一个函数f
一个bool true|false
(如下所示)中,当在单个布尔施加两次true|false
将始终返回相同值true|false
:证明F(˚F布尔)=布尔
(f:bool -> bool)
例如功能f
只能做4两件事,让调用函数b
的输入:
- 总是返回
true
- 总是返回
false
- 返回
b
(即,如果b为真反之亦然) - 返回返回true
not b
(即,如果b为真,反之芦荟)
因此,如果函数总是返回true返回false:
f (f bool) = f true = true
,如果函数总是返回false,我们将得到:
f (f bool) = f false = false
对于其他情况下让assum该函数返回not b
f (f true) = f false = true
f (f false) = f true = false
在这两种可能的输入情况下,我们总是以最初的输入结束。如果我们假设该函数返回b
,则同样成立。
那么你会如何在COQ证明这一点?
Goal forall (f:bool -> bool) (b:bool), f (f b) = f b.
我已经意识到f(f b:bool)= b不能被证明,就好像f总是返回true f(f false)== f true == true!= false。 – 2009-11-04 15:20:04
然而,f(f(fb))= f(b)。也许这更接近你想要的问题?虽然我不知道如何在Coq中证明这一点! – 2009-11-04 15:21:53
顺便说一句,你试图证明的财产有一个名字:幂等性。 https://en.wikipedia.org/wiki/Idempotence – krokodil 2017-11-14 19:49:15