[英]Dependent types can prove your code is correct up to a specification. But how do you prove the specification is correct?
[英]How do you prove that a function is unique for its type?
id
是類型a -> a
的唯一函數,而fst
是類型(a,b) -> a
的唯一函數。 在這些簡單的情況下,這是非常簡單的。 但總的來說,你會如何證明這一點? 如果有多個相同類型的可能功能怎么辦?
或者,給定函數的類型,如何導出該類型的唯一(如果這是真的)函數?
編輯:我特別感興趣的是當我們開始在類型中添加約束時會發生什么。
您正在尋找的結果來自雷諾茲的參數化,並且是Wadler在免費定理中最為着名的。
證明基本參數化結果的最優雅的方法我已經看到使用“單一類型”的概念。 基本上,給定任何ADT
data Nat = Zero | Succ Nat
存在一個索引族(也稱為GADT)
data SNat n where
SZero :: SNat Zero
SSucc :: SNat n -> SNat (Succ n)
我們可以通過將所有類型“刪除”為無類型語言來為我們的語言提供語義,以便Nat
和SNat
擦除相同的東西。 然后,按語言的輸入規則
id (x :: SNat n) :: SNat n
SNat n
只有一個居民(它的單身人士),因為語義是由擦除給出的,函數不能使用他們的參數類型,所以在任何Nat
上從id
的唯一值是你給它的數字。 這個基本論證可以擴展到證明大多數參數性結果,並被Karl Crary用於參數化結果的簡單證明技術中使用,盡管我在這里的演示靈感來自Stone和Harper
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.