Coq 将选项元素置于列表的开头

Coq 将选项元素置于列表的开头,coq,Coq,我有打字机 Variable l: list (a * b * option c * option d). Variable ls : list (list l). 我想从列表的开头选择类型选项d,然后检查整个列表。我的代码如下所示: Definition test (l: list (a * b * option c * option d)):= match l with | nil => ... (* not important *) | (_,_,_,od) :: l' =>

我有打字机

Variable l: list (a * b * option c * option d).
Variable ls : list (list l).
我想从列表的开头选择类型
选项d
,然后检查整个列表。我的代码如下所示:

Definition test (l: list (a * b * option c * option d)):=
match l with
| nil => ... (* not important *)
| (_,_,_,od) :: l' => 
  match od with
  | None => ... (* not important *)
  | Some d => if forallb (fun li => forallb (fun ci => do_something ci d)) ls) l'
  end
end.
我的问题是测试
if-forallb(fun-li=>forallb(fun-ci=>do\u-some-ci-d))l'
我添加了
forallb(fun-li=>…)
,因为我想在整个列表中测试
l'
。但是我根本没有使用参数
li


编辑:我的问题集中在
if forallb(fun li=>forallb(fun ci=>do_some ci d))l'
。我添加了
forallb(fun li=>
,因为我想在列表的其余部分进行测试
l'
。没有
forallb(fun li
我可以将此测试存档
如果(forallb(fun ci=>do_something ci d))ls
,但我不知道如何在列表中再次测试此条件
l'

您的上下文不一致

变量l:

让我成为一个列表

变量ls:list(list l)

假设l是一个类型

也许你的意思是:

定义l:=列表(a*b*选项c*选项d)

变量ls:=列表(列表l)

这使得ls成为一个列表列表(类似于三维数组)

现在,假设你想做点什么,输入l->d->bool

我猜你想用ls中l类型的所有元素和test参数中d类型的所有元素来测试dou(也称为l,恶心)

你应该

|一些d=>如果forallb(fun li=>forallb(fun ci=>do_something ci d))为ls,则测试l'else为false


但是坦率地说,你的问题留给回答者去猜测!

你的定义中的
ls
是什么?为什么要用内部
来定义ALLB
?很难帮助你,因为你试图实现的目标从你的解释中很不清楚。