我想证明组属性超过整数。我发现整数的setoid表示使证明变得容易。
ℤ
定义为(ℕ , ℕ)
,(a , b)
代表a - b
zero : ℤ
zero = 0 , 0
我已经证实了
leftIdZ : (a : ℤ) → zero + a ≡ a
rightIdZ : (a : ℤ) → a + zero ≡ a
zpre
和zsuc
定义为
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
,而上面是期望整数。
有没有有效的方法呢?或者我该怎么做?请帮忙。
答案 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
吗?