如何证明forall x形式的陈述。 f *中的ph *?

时间:2017-12-29 14:35:32

标签: fstar

我刚刚开始学习F *,完成了教程。其中一个练习是证明列表上的reverse函数是单射的。 由于这是因为入侵是单射的,所以我想将这个事实表达为F *中的引理。为此,我定义了

let is_involutive f = forall x. (f (f x) == x)
let is_injective f = forall x y. (f x == f y) ==> x == y

这是在F *中定义f是对偶还是内射的概念的正确方法?

然后我说明了引理

val inv_is_inj: #a:eqtype -> a -> f:(a->a) -> 
    Lemma (requires (is_involutive f)) (ensures(is_injective f))

非正式地,证据可以写成

 { fix (x:a) (y:a)
   assume (f x == f y)
   then have (f (f x) == f (f y))
   with (is_involutive f) have (x == y)
 } hence (forall (x:a) (y:a). f x == f y ==> x == y)
 then have (is_injective f)

我如何用F *表达这样的证据? 通常,可以使用哪些F *语言构造来证明forall (x:a). phi x形式的语句,其中phi是类型a的谓词?

0 个答案:

没有答案