簡體   English   中英

你如何證明一個函數對於它的類型是唯一的?

[英]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)

我們可以通過將所有類型“刪除”為無類型語言來為我們的語言提供語義,以便NatSNat擦除相同的東西。 然后,按語言的輸入規則

id (x :: SNat n) :: SNat n

SNat n只有一個居民(它的單身人士),因為語義是由擦除給出的,函數不能使用他們的參數類型,所以在任何Nat上從id的唯一值是你給它的數字。 這個基本論證可以擴展到證明大多數參數性結果,並被Karl Crary用於參數化結果的簡單證明技術中使用,盡管我在這里的演示靈感來自Stone和Harper

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM