Check...
好啦,in-flatcat 終於 check 了,可是看看我證了一個什麼樣的 lemma…
in-flatcat : {A : Set} {n m : Nat} -> Braun A m -> List A ⋮ hasLength n ->
List A ⋮ hasLength (m + n)
in-flatcat nul accum = accum
in-flatcat {A} (bin a p left right) accum with in-flatcat right accum
... | sub ys yslenpf = subst
(\x -> List A ⋮ hasLength x)
lemma
(in-flatcat left (sub (a :: ys) (len-step yslenpf)))
where
lemma : {n₁ n₂ n₃ : Nat} ->
suc (parity p + (n₁ + n₂) + n₃) ≡ parity p + n₁ + suc (n₂ + n₃)
lemma {n₁} {n₂} {n₃} =
trans
(trans
(sym (cong suc (+assoc (parity p) (n₁ + n₂) n₃)))
(trans
(sym (+suc (parity p) (n₁ + n₂ + n₃)))
(cong (\x -> parity p + x)
(trans
(cong suc (sym (+assoc n₁ n₂ n₃)))
(sym (+suc n₁ (n₂ + n₃)))))))
(+assoc (parity p) n₁ (suc (n₂ + n₃)))
不是這樣搞的吧 XD。
--
似乎該來研究一下 Logic.ChainReasoning 了?XD
Labels: Agda, Programming


<< 回到主頁