是否有一种简便的方法来定义两个共固定点,使您可以同时输出它们?理想情况下,我想要以下内容:
Require Import Streams.
Definition alts : Stream bool * Stream bool :=
cofix a := Cons false b with
b := Cons true a for (a,b).
但是,似乎Coq只允许您从互斥的块中返回标识符之一。我现在能做的最好的事情如下:
Definition alts2 : Stream bool * Stream bool :=
let a := cofix a := Cons false b with
b := Cons true a for a in (a,Cons true a).
当然,这不是理想的选择,因为我需要重复b
的定义。有更好的方法吗?
答案 0 :(得分:0)
一种解决方法是使用CoFixpoint
来相互定义a
和b
,然后重用它们来定义alts
。
CoFixpoint a : Stream bool := Cons false b
with b : Stream bool := Cons true a.
Definition alts : Stream bool * Stream bool := (a, b).
此方法的缺点是我们用新名称a
和b
污染名称空间。