[英]Agda standard library - why are more properties not marked abstract?
在過去的幾個月里,我一直在Agda工作,我剛剛遇到了Agda中的abstract
塊,這阻止了該塊范圍之外的術語的進一步規范化。
使用它來隱藏我的引理的工作方式大大減少了對我的程序進行類型檢查所需的時間。 透過Agda標准庫,然而幾乎沒有使用abstract
。 在我看來,幾乎所有Properties
文件中的所有內容(例如Data.Nat.Properties
)都可以在一個abstract
塊中,因為我無法想到用於推理的用法,例如,如何證明加法是可交換的。
這是一個抽象的案例,是一個尚未進入標准庫的新功能嗎? 或者是否有一些微妙或缺點的標記證據abstract
我錯過了?
abstract
是用於抽象的東西,它會阻塞計算,所以如果你將樣張放在一個abstract
塊中,你將無法在subst
或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
塊具有相同的效果。
如果用module _ where
替換abstract
,則文件將鍵入check。
Andreas Abel 寫道 :
我認為這個“抽象”特征很少被理解。 我們應該安排它去除,給予5年的寬限期。 如果直到2020年沒有人寫過關於它的技術論文,並且有適當的語義和對與metas的預期交互的描述,我們放棄它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.