Agda标准库 - 为什么更多属性没有标记为抽象?

时间:2016-06-30 13:33:34

标签: abstract standard-library agda

过去几个月一直在Agda工作,我刚刚遇到Agda的abstract区块,这阻止了该区域范围以外的进一步规范化。

使用它隐藏我的lemmas的工作方式极大地减少了对我的程序进行类型检查所需的时间。浏览Agda标准库但是abstract几乎没有使用。在我看来,任何Properties文件中的所有内容(例如Data.Nat.Properties)都可以在abstract块内,因为我无法想到用于推理的用法,例如,如何证明加法是可交换的。

这是抽象的一个新功能还没有进入标准库的情况吗?或者是否有一些我遗漏的标记abstract的微妙或缺点?

1 个答案:

答案 0 :(得分:5)

abstract用于抽象事物,它会阻止计算,因此如果您将证据放在abstract块中,您将无法在subst或{{1}中使用它们同时仍保留正规性:

rewrite

即。 module _ where open import Function open import Relation.Binary.PropositionalEquality open import Data.Nat.Base open import Data.Fin hiding (_+_) abstract +0 : ∀ n -> n + 0 ≡ n +0 0 = refl +0 (suc n) = cong suc (+0 n) zero′ : ∀ n -> Fin (suc n + 0) zero′ n = subst (Fin ∘ suc) (sym (+0 n)) zero fail : zero′ 2 ≡ zero fail = refl -- subst ((λ {.x} → Fin) ∘ suc) (sym (+0 2)) zero != zero of type Fin (suc 2 + 0) -- when checking that the expression refl has type zero′ 2 ≡ zero 块与abstract块具有相同的效果。

如果您将postulate替换为abstract,则该文件将键入check。

Andreas Abel wrote

  

我认为这种“抽象”功能很少被人理解。我们应该   安排将其移除,给予5年的宽限期。如果不   一个人写了一篇关于它的技术论文,直到2020年   适当的语义和与...的预期交互的描述   metas,我们放弃它。