Coq项目1.2.10类型转换

时间:2017-11-02 10:25:44

标签: coq

不确定Coq手册v8.7.0 item 1.2.10中的以下含义:

  • 表达式“ term type ”是一种类型转换表达式。它强制 term 的类型为 type
  • term <: type ”在本地设置虚拟机以检查 term 的类型是类型

我的理解是第一个的类型检查是由Coq(某些默认值)完成的,而第二个是由选择的Coq的VM(可能有不同的输入规则)完成的。

我尝试使用以下示例,但看不出与错误消息有任何区别

Check (3 : bool). (* Error: The term "3" has type "nat" while it is expected to have type "bool".*)
Check (3 <: bool). (* same as above*)

我的问题是:可能是默认情况和VM行为相同的情况?

此外,有一个例子,其中“:”和“&lt;:”的行为不同,所以人们可能会更加小心地选择另一个。

1 个答案:

答案 0 :(得分:5)

据我所知,默认的还原机制和VM减少机制旨在强制执行相同的打字规则。

但它们的行为并不相同,因为对于某些计算,验证时间可能是不同的数量级。

这是一个例子

Time Check (refl_equal 1 : (10 ^ 200 - 9 * 10 ^ 199) / 10 ^ 199 = 1).
...
Finished transaction in 0.103  secs ...

Time Check (refl_equal 1 <: (10 ^ 200 - 9 * 10 ^ 199) / 10 ^ 199 = 1).
...
Finished transaction in 0.053 secs

这很重要,因为在证明的中间可能会发生大量计算。