将选项元素放在列表的头部

时间:2012-11-07 08:40:43

标签: coq

我有类型

Variable l: list (a * b * option c * option d).
Variable ls : list (list l).

我想从列表的头部取出option 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_something ci d))ls)l'我添加了forallb (fun li =>...),因为我希望它在整个列表l'中进行测试。但我根本没有使用论证li

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

1 个答案:

答案 0 :(得分:0)

您的背景不一致。

变量l:...

使l是列表

变量ls:list(list l)。

假设l是一个类型。

也许你的意思是:

定义l:= list(a * b *选项c *选项d)。

变量ls:= list(list l)。

这使得ls成为列表列表的列表(如三维数组)。

现在,假设你的意思是do_something有类型l - > d - >布尔

我想你想用ls中l类型的所有元素测试do_something,测试参数中的所有d类型元素(也称为l,yuck)。

你应该

...

|有些d => if forallb(fun li => forallb(fun ci => do_something ci d))ls然后测试l'else false ...

但坦率地说,你的问题让回答者猜到了很多!