Curry-Howard korrespondancen ( Curry-Howard isomorphism , engelsk formulæ-as-types fortolkning ) er en observerbar strukturel ækvivalens mellem matematiske beviser og programmer , der kan formaliseres som en isomorfi mellem logiske systemer og maskinskrevne calculi.
Haskell Curry [1] og William Howard2] , at konstruktionen af konstruktivt bevis ligner beskrivelsen af beregninger, og udsagn om konstruktiv logik ligner i deres struktur de typer af beregnede udtryk - programmer til en computer . Tidlige manifestationer af denne forbindelse er Brouwer-Heiting-Kolmogorov-fortolkningen (1925), som definerer den intuitionistiske logiks semantik gennem beregning af beviser, og realiserbarhedsteorien Kleene (1945).
Curry-Howard korrespondance i den moderne opfattelse er ikke begrænset til nogen logik eller type system. For eksempel svarer propositionslogik til en simpelt skrevet λ-regning , andenordens svarer til en λ-regning og prædikatregning svarer til en λ-regning med afhængige typer .
Inden for rammerne af Curry-Howard isomorfismen betragtes følgende strukturelle elementer som ækvivalente:
Logiske systemer | Programmeringssprog |
---|---|
udmelding | Type |
Bevis for erklæringen | Term (udtryk) type |
Udsagnet kan bevises | Type beboet |
implikation | funktionel type |
Konjunktion | Artwork type (par) |
Disjunktion | Sumtype (diskrimineret forening) |
Ægte formel | enkelt type |
Falsk formel | Tom type ( ) |
Universal kvantifier | Afhængig produkttype ( -type) |
Eksistens kvantifier | Afhængig sumtype ( -type) |
Det enkleste eksempel på Curry-Howard-korrespondancen er en isomorfi mellem en simpel maskinskrevet λ-regning og et stykke intuitionistisk propositionel logik , der kun omfatter implikation . For eksempel svarer en type i en simpel maskinskrevet lambdaregning til en proposition af propositionel logik. For at bevise denne erklæring er det nødvendigt at konstruere et udtryk af den specificerede type (hvis dette kan gøres, så siger de om typen, at det er beboet eller beboet ), i dette tilfælde kan du præsentere det ønskede udtryk: , og det betyder, at tautologien er bevist.
Brugen af Curry-Howard isomorfisme har gjort det muligt at skabe en hel klasse af funktionelle programmeringssprog, hvis runtime-miljø også er et automatisk bevissystem , såsom Coq , Agda og Epigram .