我如何在 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.