我如何在 coq 中证明一个f接受 booltrue|false并返回 bool的函数true|false(如下所示),当两次应用于单个 bool 时,true|false将始终返回相同的值true|false:
(f:bool -> bool)
例如函数f只能做 4 件事,让我们调用函数的输入b:
- 总是返回
true - 总是返回
false - 返回
b(即如果 b 为真,则返回真,反之亦然) - 返回
not b(即如果 b 为真则返回假,反之亦然)
因此,如果函数始终返回 true:
f (f bool) = f true = true
如果函数总是返回 false,我们会得到:
f (f bool) = f false = false
对于其他情况,让我们假设函数返回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.