如何在agda中的两个集合之间使用逻辑AND操作?

时间:2015-06-13 16:04:25

标签: agda

我想证明if there is m which is less than 10 and there is n which is less than 15 then there exist z which is less than 25.

thm : ((∃ λ m → (m < 10)) AND (∃ λ n → (n < 15))) -> (∃ λ z → (z < 25))  
thm = ?

如何定义AND?请帮我。以及如何证明这一点??

2 个答案:

答案 0 :(得分:1)

and对应于Agda中的productHere is标准库中的相应构造。在您的情况下,您可能希望使用the non-dependent version _×_

答案 1 :(得分:1)

你要证明的定理似乎有点奇怪。特别是∃ λ z → z < 25没有任何假设!

让我们先做进口。

open import Data.Nat.Base
open import Data.Product

对你的定理进行推广的一个简单证明(没有假设)的工作原理如下:

lem : ∃ λ z → z < 25
lem = zero , s≤s z≤n

在标准库中,m < n定义为suc m ≤ n。引理因此等同于∃ λ z → suc z ≤ suc 24。对于z = zeros≤s z≤n保留{/ 1}}。

以下是表达原始定理的几种不同方式(实际证明始终相同):

thm : (∃ λ m → m < 10) × (∃ λ n → n < 15) → ∃ λ z → z < 25
thm _ = lem

thm′ : (∃₂ λ m n → m < 10 × n < 15) → ∃ λ z → z < 25
thm′ _ = lem

thm″ : (∃ λ m → m < 10) → (∃ λ n → n < 15) → ∃ λ z → z < 25
thm″ _ _ = lem

在大多数情况下,我更喜欢最后一个版本。