本文提出了一種新穎的方法,從第一原理推匯出依賴型別的物件導向程式設計(OOP)。
題為“從基本原理推導依賴型別 OOP”,由德國圖賓根大學和德國 IPAI 的 Aleph Alpha Research 的 David Binder、Ingo Skupin、Tim Süberkrüb 和 Klaus Ostermann 撰寫。該論文探討了依賴型別物件導向程式設計 (OOP) 的概念,以及如何使用二元性、去功能化和重新功能化的原理系統地推導它。
現有OOP問題:
大多數型別能夠透過新的方式生成型別、或使用型別來輕鬆擴充套件,但不能同時實現兩者。體現了型別的生產和消費兩難:
- 函數語言程式設計在擴充套件型別等消費者方面是易用的,但是建立或生產新型別不容易。
- 而 OOP 在擴充套件新型別的生產者方面是易用的,但是消費使用不易用。
突破口:
- 依賴型別程式設計:主要遵循函數語言程式設計模型的依賴型別程式設計可以從結合物件導向原則中受益。函數語言程式設計在型別依賴方面向OOP學習。
函數語言程式設計 vs. 物件導向程式設計:
- 本文將函數語言程式設計定義為使用代數資料型別和模式匹配進行的程式設計,
- 而物件導向程式設計則是針對介面進行程式設計來定義的,對應於型別理論中的共資料和共模式匹配概念。
使用對偶原理從第一原理推匯出依賴型別的物件導向程式設計領域。
- 也就是說,我們不會臨時擴充套件現有的具有依賴型別的物件導向形式,
- 而是從熟悉的面向資料語言開始,透過系統地使用去函式化和重新函式化來獲得其對偶片段。
去函式化和重新函式化:
用於系統地從函式性語言片段派生出面嚮物件語言片段。
- 去函式化透過用資料型別建構函式和頂級應用函式替換高階函式來消除高階函式,
- 而重新函式化則重新引入高階函式。
作者從熟悉的面向資料語言入手,透過系統地使用去函式化和重函式化,推匯出其對偶片段。
- 核心貢獻是一個包含兩個對偶語言片段的依賴型別演算。
- 論文提供了在去函式化和重函式化這兩個語言片段之間的型別和語義保留轉換
作者已經實現了這一語言及其轉換,並利用這一實現解釋了依賴型別程式設計中的構造如何被視為對偶性的特殊例項。
方法論:對偶原理:
- 對偶原理指的是透過某種對應關係,將一種數學結構或概念轉化為另一種結構或概念的方法. 如果A的對偶是B,那麼B的對偶也是A.
- 幾何中的應用:在射影平面上,如果將一個定理中的"點"和"直線"互換,得到的新命題仍然成立,這就是射影幾何中的對偶原則
對偶原理是數學中的一個重要概念,特別是在布林代數和集合論中:
在布林代數中的應用:
- 在布林代數中,語句的對偶是透過將 AND (•) 與 OR (+) 互換,將 0 與 1 互換而得到的。
- 例如,如果 A • 0 = 0 為真,則其對偶 A + 1 = 1 也為真。
集合論應用:
- 在集合論中,並集(∪)與交集(∩)互換,全集(U)與零集(∅)互換。
- 例如,A ∪ (B ∩ A) = A 的對偶是 A ∩ (B ∪ A) = A
對偶原理的意義在於:
- 為原問題提供了一個下界,有助於評估解的質量。
- 在某些情況下,求解對偶問題比原問題更容易。
- 為解決複雜最佳化問題提供了理論基礎和實用工具
對偶原理的重要性在於它提供了一種新的思維方式,讓我們可以從不同的角度看待問題,有時能夠簡化複雜問題的求解過程.