我對Agda很新穎。我正在處理作業中的一個問題。我得到了大部分,但有一個目標,我卡住了。Agda:偶數產品甚至是
data Arith : Set where
Num : ℕ → Arith
Plus : Arith → Arith → Arith
Times : Arith → Arith → Arith
eval : Arith → ℕ
eval (Num x) = x
eval (Plus e1 e2) = eval e1 + eval e2
eval (Times e1 e2) = eval e1 * eval e2
data Even : ℕ → Set where
zEven : Even 0
ssEven : {n : ℕ} → Even n → Even (suc (suc n))
-- [PROBLEM 1]
plusEven : ∀ n m → Even n → Even m → Even (n + m)
plusEven zero m x x₁ = x₁
plusEven (suc zero) m() x₁
plusEven (suc (suc .0)) m (ssEven zEven) x₁ = ssEven x₁
plusEven (suc (suc ._)) m (ssEven (ssEven x)) x₁ = ssEven (ssEven (plusEven _ m x x₁))
-- [PROBLEM 2]
timesEven : ∀ n m → Even n → Even m → Even (n * m)
timesEven zero m x x₁ = zEven
timesEven (suc ._) zero (ssEven x) x₁ = (timesEven _ zero x x₁)
timesEven (suc ._) (suc ._) (ssEven x) (ssEven x₁) = ssEven ((λ h → {!!}) (timesEven _ _ x x₁))
我要證明我們的目標是
Goal: Even (.n₁ + suc (suc (.n₁ + .n * suc (suc .n₁))))
我覺得我必須使用plusEven一些如何。但目標看起來並不那麼簡單。我對這個問題有困難嗎?還是我在正確的軌道上?有沒有更簡單的方法來做到這一點?我不想要這個解決方案。但正確的方向推動將不勝感激。我一直堅持這一段時間。