如何在Agda中证明setoid中的正确身份

时间:2015-12-28 11:27:26

标签: algebra agda integer-arithmetic

我想证明组属性超过整数。我发现整数的setoid表示使证明变得容易。

定义为(ℕ , ℕ)(a , b)代表a - b

zero : ℤ
zero = 0 , 0

我已经证实了

leftIdZ : (a : ℤ) → zero + a ≡ a
rightIdZ : (a : ℤ) → a + zero ≡ a

zprezsuc定义为

zsuc : ℤ → ℤ
zsuc (m , n) = suc m , n

zpre : ℤ → ℤ
zpre (m , n) = m , suc n

我想证明加法的可交换性:

commZ-+ : (a b : ℤ) → a + b ≡ b + a
commZ-+ (ℕ.zero , ℕ.zero) b = sym (trans (rightIdZ b) (sym (leftIdZ b)))
commZ-+ (ℕ.zero , suc x₁) (ℕ.zero , ℕ.zero) = rightIdZ (ℕ.zero , suc x₁)
commZ-+ (ℕ.zero , suc x₁) (ℕ.zero , suc x₃) = cong zpre {!!}
commZ-+ (ℕ.zero , suc x₁) (suc x₂ , x₃) = cong zsuc {!!}
commZ-+ (suc x , x₁) (x₂ , x₃) = {!!}

我发现他们通过使用agda库证明了这一点。但我试过这种方式(上图)。

问题缩小为证据0 , (x₁ ℕ.+ suc x₃) ≡ 0 , (x₃ ℕ.+ suc x₁)

我有证据证明这个引理:lemma-+succ : ∀ a b → suc a + b ≡ a + suc b 我知道一些引理将如何用来证明上面减少的目标,但它的返回类型是Set,而上面是期望整数。

有没有有效的方法呢?或者我该怎么做?请帮忙。

1 个答案:

答案 0 :(得分:1)

您的问题描述可简化为在以下代码中定义problem

open import Data.Product
open import Data.Nat as ℕ
open import Relation.Binary.PropositionalEquality

postulate lemma-+succ : ∀ a b → suc a ℕ.+ b ≡ a ℕ.+ suc b

problem : ∀ x₁ x₃ → 0 ,′ (x₁ ℕ.+ suc x₃) ≡ 0 ,′ (x₃ ℕ.+ suc x₁)
problem = ?

首先,让我们摆脱0,部分:if x ≡ y,然后0, x ≡ 0, y简单的同意:

problem : ∀ x₁ x₃ → 0 ,′ (x₁ ℕ.+ suc x₃) ≡ 0 ,′ (x₃ ℕ.+ suc x₁)
problem x₁ x₃ = cong (λ y → 0 , y) ?

因此,我们只留下自然添加的交换性:洞的类型是x₁ + suc x₃ ≡ x₃ + suc x₁

这应该给你足够的提示来完成你想要做的事情:lemma-+succ不能直接适用;你能证明lemma-+comm : ∀ a b → a ℕ.+ b ≡ b ℕ.+ a吗?

相关问题