我想证明两个序列的定理为
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中编码这个定理?
答案 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.