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的介绍感到困惑,因为它们可以回溯到布尔值的使用,这似乎不是我们为获得有效的颜色示例而要解决的问题。
答案 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页上所知道的)来解决,对吗?对于单元测试?
您在说什么单元测试?本章提到orb
和binary
类型的单元测试,但没有color
的测试。