来自 stdlib "less" 的内置 "less"
Builtin "less" from stdlib "less"
我想将标准库 "less" 转换为内置(布尔)库。
这是我目前的情况:
open import Agda.Builtin.Equality
open import Agda.Builtin.Bool
open import Agda.Builtin.Nat using (_<_)
open import Relation.Nullary using (Dec;yes;no)
open import Data.Nat using (ℕ;zero;suc;_<?_;z≤n;s≤s)
convert : ∀{a b p} → (a <? b) ≡ yes p → (a < b) ≡ true
convert {_} {zero} ()
convert {zero} {suc _} _ = refl
convert {suc a} {suc b} {Data.Nat.s≤s p} eq =
convert {a} {b} {p} ?
最后一个问号是问题。
编辑:正如gallais所建议的,使用辅助引理更容易证明。以下代码可以完成这项工作:
lemma : ∀ {a b} → a Data.Nat.< b → (a < b) ≡ true
lemma {a} {zero} ()
lemma {zero} {suc b} eq = refl
lemma {suc a} {suc b} (s≤s eq) = lemma eq
convert : ∀{a b p} → (a <? b) ≡ yes p → (a < b) ≡ true
convert {_} {zero} ()
convert {zero} {suc _} _ = refl
convert {suc a} {suc b} {Data.Nat.s≤s p} eq = lemma p
证明更一般的引理更容易:
lemma : ∀ {a b} → a Data.Nat.< b → (a < b) ≡ true
然后总结:
lemma : ∀ {a b p} → (a <? b) ≡ yes p → (a < b) ≡ true
lemma {p = p} eq = convert p
我想将标准库 "less" 转换为内置(布尔)库。
这是我目前的情况:
open import Agda.Builtin.Equality
open import Agda.Builtin.Bool
open import Agda.Builtin.Nat using (_<_)
open import Relation.Nullary using (Dec;yes;no)
open import Data.Nat using (ℕ;zero;suc;_<?_;z≤n;s≤s)
convert : ∀{a b p} → (a <? b) ≡ yes p → (a < b) ≡ true
convert {_} {zero} ()
convert {zero} {suc _} _ = refl
convert {suc a} {suc b} {Data.Nat.s≤s p} eq =
convert {a} {b} {p} ?
最后一个问号是问题。
编辑:正如gallais所建议的,使用辅助引理更容易证明。以下代码可以完成这项工作:
lemma : ∀ {a b} → a Data.Nat.< b → (a < b) ≡ true
lemma {a} {zero} ()
lemma {zero} {suc b} eq = refl
lemma {suc a} {suc b} (s≤s eq) = lemma eq
convert : ∀{a b p} → (a <? b) ≡ yes p → (a < b) ≡ true
convert {_} {zero} ()
convert {zero} {suc _} _ = refl
convert {suc a} {suc b} {Data.Nat.s≤s p} eq = lemma p
证明更一般的引理更容易:
lemma : ∀ {a b} → a Data.Nat.< b → (a < b) ≡ true
然后总结:
lemma : ∀ {a b p} → (a <? b) ≡ yes p → (a < b) ≡ true
lemma {p = p} eq = convert p