ฉันได้พบกับCurry-Howard Isomorphismในช่วงชีวิตการเขียนโปรแกรมของฉันค่อนข้างช้าและบางทีสิ่งนี้อาจทำให้ฉันรู้สึกทึ่งกับมันมาก มันหมายความว่าสำหรับทุกแนวคิดการเขียนโปรแกรมมีอะนาล็อกที่แม่นยำในตรรกะที่เป็นทางการและในทางกลับกัน นี่คือรายการ "พื้นฐาน" ของการเปรียบเทียบดังกล่าวที่อยู่เหนือหัวของฉัน:
program/definition | proof
type/declaration | proposition
inhabited type | theorem/lemma
function | implication
function argument | hypothesis/antecedent
function result | conclusion/consequent
function application | modus ponens
recursion | induction
identity function | tautology
non-terminating function | absurdity/contradiction
tuple | conjunction (and)
disjoint union | disjunction (or) -- corrected by Antal S-Z
parametric polymorphism | universal quantification
ดังนั้นสำหรับคำถามของฉัน: อะไรคือผลกระทบที่น่าสนใจ / คลุมเครือของ isomorphism นี้? ฉันไม่ใช่นักตรรกวิทยาดังนั้นฉันแน่ใจว่าฉันได้ขีดข่วนพื้นผิวด้วยรายการนี้เท่านั้น
ตัวอย่างเช่นต่อไปนี้เป็นแนวคิดในการเขียนโปรแกรมที่ฉันไม่รู้ชื่อที่มีเหตุผลในตรรกะ:
currying | "((a & b) => c) iff (a => (b => c))"
scope | "known theory + hypotheses"
และนี่คือแนวคิดเชิงตรรกะที่ฉันไม่ได้ตรึงไว้ในเงื่อนไขการเขียนโปรแกรม:
primitive type? | axiom
set of valid programs? | theory
แก้ไข:
นี่คือความเท่าเทียมกันเพิ่มเติมที่รวบรวมจากคำตอบ:
function composition | syllogism -- from Apocalisp
continuation-passing | double negation -- from camccann