如何在Agda的类型delaration中定义别名?

时间:2017-11-20 08:42:33

标签: functional-programming agda

我的代码:

law : ∀ a x → ((suc a) * (suc a) ÷ (suc a) ⟨ x ⟩) →ℕ ≡ (suc a , refl)
law a x = refl

我认为suc a太多了,我想给suc a一个别名,比如(这段代码只描述了我的想法,它没有编译):

law : ∀ a x → ((s : suc a) * s ÷ s ⟨ x ⟩) →ℕ ≡ (s , refl)
law a x = refl

我可以实现吗?

1 个答案:

答案 0 :(得分:3)

不确定。您可以使用let

law : ∀ a x → let s = suc a in (s * s ÷ s ⟨ x ⟩) →ℕ ≡ (s , refl)
law a x = refl

或定义匿名模块:

module _ (a : ℕ) where
  s = suc a
  law : ∀ x → (s * s ÷ s ⟨ x ⟩) →ℕ ≡ (s , refl)
  law x = refl

模块law外部的类型签名与您提供的类型签名相同。