用系列证明定理

时间:2018-01-13 15:03:41

标签: coq

我想证明两个序列的定理为

forall (a1,a2,...,an ∈ A), (b ∈ B) , (d1,d2,...,dn,d* ∈ D), 
a1+b=d1 AND a2+b=d2 AND ... AND an+b=dn AND ô(a1,a2,..,an)+b=d*  ->
          σ(d1,d2,...,dn) = d*

+,ô,σ是在归纳数据类型A,B,D上定义的运算符。我应该如何在Coq中编码这个定理?

1 个答案:

答案 0 :(得分:1)

您可以使用list来编写定理,并使用对来获得与A相同数量的D

Require Import Coq.Lists.List.
Goal forall (ad : list (A * D)) (b : B) (dstar : D),
  List.Forall (fun '(ai, di) => ai + b = dstar) ad
  /\ ô(List.map (@fst A D) ad) + b = dstar ->
    σ(List.map (@snd A B) ad) = dstar.