我想证明存在一个小于10的自然数。我用这种方式编写代码..
thm2 : (∃ λ m → (m < 10))
thm2 = zero , s≤s z≤n
我无法理解这是如何工作的。请解释..
答案 0 :(得分:2)
让我们剖析thm2
。
∃ λ m → m < 10
∃
在Data.Product中定义为Σ
的别名,其中第一个参数是隐式的。这意味着∃
正在使用B
类型的元素A → Set
并返回包含a
类型A
和b
的对的类型类型为B a
。
现在,λ m → m < 10
正在m
中取ℕ
并返回m < 10
的证明类型。
所以∃ λ m → m < 10
是ℕ
对的类型,并证明它小于10
。
zero , s≤s z≤n
对于整体来说,我们需要:
zero
是ℕ
。
s≤s z≤n
是0 < 10
的证据。 Data.Nat.Base
在λ m n → suc m ≤ n
中定义0 < 10
作为1 ≤ 10
的别名。因此证明0
与证明suc
相同。
现在,_<_
是一个具有两个构造函数的归纳类型:
证明z≤n
确实是0 ≤ 9
:s≤s
证明1 ≤ 10
和searchoptions: {clearSearch: false}
得出结论colModel
的有效证据。< / p>