硬币

共创记录

可以定义无限列表(或流)的类型某些类型的元素A类如下:,

记录(A类: 设置) : 设置 哪里
  共性的
  领域
    高清 :A类热释光 :流A

对于归纳记录类型,我们必须引入关键字共性的在定义构成记录的字段之前。

值得注意的是,不必给出明确的记录类型的构造函数 A类.

我们还可以定义一对 A类作为一个创造记录。

记录_≈_{A类: 设置} (X轴:流A) (:流A) : 设置 哪里
  共性的
  领域
    hd-≈ :hd-xs≡hd-ystl-≈ :tl-xs≈tl-ys

使用共模式我们可以定义一对函数这样就返回了一个元素位于偶数位置和其他位于奇数位置的元素。

即使 :  {A类} 流A流A高清(偶数x) =高清x热释光(偶数x) =即使(热释光(tl x公司))

古怪的 :  {A类} 流A流A奇数x=即使(热释光x)

分裂 :  {A类} 流A流A×流A拆分xs=偶数xs,奇数xs

并合并一对通过交错它们的元素。

合并 :  {A类} 流A×流A流A高清(合并(fst、snd)) =高清fst热释光(合并(fst、snd)) =合并(snd、tl、fst)

最后,我们可以证明分裂是合并的左逆。

合并拆分id :  {A类} (X轴:流A) 合并(拆分xs)≈xshd-≈(合并拆分id_)  =回流tl-≈(合并-拆分-id xs) =合并拆分id(tl-xs公司)

旧硬币

注释

这是Agda中支持共创的旧方法。建议您使用共创记录而不是。

注释

类型构造函数可以用来证明荒谬!

要使用coinduction,建议您从标准库。然后可以通过使用延迟运算符标记共导事件来定义共导类型:

数据有限公司: 设置 哪里
    :有限公司苏克  :∞Co有限公司

类型 A类可以看作是类型的暂停计算A类。它具有延迟和强制功能:

♯_ :  {} {A类: 设置} A类∞A  :  {} {A类: 设置} ∞AA类

共导类型的值可以使用同位词来构造,它不需要终止,但必须是有效的。作为生产力的近似值,终止检查器要求共递归定义由共导构造函数保护。例如,无限“自然数”可以定义如下:

inf公司 :有限公司inf公司=苏克(inf公司)

保护同余校验与变尺寸终止校验相结合,从而允许归纳类型和共导类型的有趣组合。例如,我们可以定义流处理器的类型,以及一些函数:

--无限的流。

数据(A类: 设置) : 设置 哪里
  _∷_ : (x个:A类) (X轴:(流A)) 流A--流处理器SP A B使用元素A并生成
--元素B。它之前只能消耗有限数量的a
--产生B。

数据服务提供商(A和B: 设置) : 设置 哪里
  得到 : ((f):A类SP A B) SP A B : (b条:B类) (特殊用途:(SP A B)) SP A B--eat函数由流入流B的外同余函数定义
--和SP A B上的内部递归。

 :  {A和B} SP A B流AB流(得到f)    (a|作为) =(财务报表) (作为)(放置b sp)作为=b‰(特殊用途)作为--流处理器的组成。

_∘_ :  {A、B、C} 特殊用途B C特殊用途标准普尔A C得到f₁    ∘ 放置x sp=(f)x∘特殊用途放置x sp₁ ∘ 特殊用途=放置x((Ş特殊用途₁ ∘ 特殊用途))特殊用途₁       ∘ 得到f=得到(λx特殊用途₁ ∘ (f)x个)

也可以定义“共生性家族”。建议不要使用延迟构造函数(♯_)在构造函数的索引表达式中。不鼓励使用以下关于共性“自然数”之间相等的定义:

数据_≈’_:有限公司有限公司 设置 哪里
   :0≈'zero苏克  :  {百万牛顿} (m≈'n) 苏克()≈'suc(n个)

建议定义如下:

数据_≈_:有限公司有限公司 设置 哪里
   :0≈0苏克  :  {百万牛顿} (m≈n个) suc m≈suc n

当前共生产类型的实现带有一些限制.