了解Coq中的复合类型[软件基础]

时间:2018-08-14 20:22:49

标签: coq

Software Foundations, Basics, Compound Types

我试图了解Coq(第2天,所以请耐心等待,如果这很愚蠢),但我正在查看Software Foundations书中有关复合类型的部分,并试图理解这一点:

Inductive rgb : Type :=
  | red : rgb
  | green : rgb
  | blue : rgb.
    Inductive color : Type :=
  | black : color
  | white : color
  | primary : rgb → color.

好的,所以它们是共归类型,而我的问题是“基本”的定义。我看到rgb是枚举类型,颜色部分是,而primary是函数。

麻烦的是,看来这将是一个使用rgb并返回颜色的函数,但是该节中的以下所有示例(单色,isred)都返回布尔值。

这看起来也像我们在本书中一直在使用的反射性属性(同样,请与第1页一样,请耐心等待)看起来像是采取了策略并证明了平等;到目前为止,我们所有示例的格式均为boolean = boolean

我们需要一个使用rgb并返回颜色的函数的定义,并且我们可以使用反射性(因为这是我们在第1页上所知道的)来解决,对吗?对于单元测试?

我走对了吗?我想我对单色和isred的介绍感到困惑,因为它们可以回溯到布尔值的使用,这似乎不是我们为获得有效的颜色示例而要解决的问题。

1 个答案:

答案 0 :(得分:2)

(首先:

  

这些是共归类型

这些实际上是归纳型类型,但这可能是拼写错误。)

  

看起来这将是一个使用rgb并返回颜色的函数

是的,这正是primary的含义:一个函数,该函数接受rgb的元素并返回color的元素。这是一种称为 constructor 的特殊功能。构造函数与常规函数的不同之处在于,归纳类型的每个元素都是从该类型的一个构造函数中获得的。在第一章中,还有其他由模式匹配定义的功能,例如monochrome。该函数返回一个布尔值,但是我们也可以使用其他返回color的函数。例如:

Definition flip_color (c : color) : color :=
  match c with
  | white => black
  | black => white
  | primary _ => c
  end. 
  

反身属性[...]采取了战术,证明了平等

关于术语的注释:在这种情况下,reflexivity是一种策略,并且不以任何策略为参数。但是,您使用它来证明平等是正确的。

  

我们需要一个使用rgb并返回颜色的函数的定义,并且我们可以使用反射性(因为这是我们在第1页上所知道的)来解决,对吗?对于单元测试?

您在说什么单元测试?本章提到orbbinary类型的单元测试,但没有color的测试。