这是如何在agda中工作的?

时间:2015-06-16 11:13:23

标签: agda

我想证明存在一个小于10的自然数。我用这种方式编写代码..

thm2 : (∃ λ m → (m < 10))
thm2 = zero , s≤s z≤n

我无法理解这是如何工作的。请解释..

1 个答案:

答案 0 :(得分:2)

让我们剖析thm2

表达式的类型

∃ λ m → m < 10

在Data.Product中定义为Σ的别名,其中第一个参数是隐式的。这意味着正在使用B类型的元素A → Set并返回包含a类型Ab的对的类型类型为B a

现在,λ m → m < 10正在m中取并返回m < 10的证明类型。

所以∃ λ m → m < 10对的类型,并证明它小于10

表达式本身

zero , s≤s z≤n

对于整体来说,我们需要:

zero

s≤s z≤n0 < 10的证据。 Data.Nat.Baseλ m n → suc m ≤ n中定义0 < 10作为1 ≤ 10的别名。因此证明0与证明suc相同。

现在,_<_是一个具有两个构造函数的归纳类型:

  • 基本案例_≤_s≤s z≤n小于或等于所有自然数
  • 一个案例z≤n说如果一个数字小于或等于另一个数字,那么他们的1 ≤ 10也小于或等于。

证明z≤n确实是0 ≤ 9s≤s证明1 ≤ 10searchoptions: {clearSearch: false}得出结论colModel的有效证据。< / p>