În logica matematică , logica combinațională este o logică teoretică introdusă de Moses Schönfinkel în 1920 la o conferință din 1929 și dezvoltată de Haskell Brooks Curry pentru a elimina necesitatea variabilelor în matematică pentru a formaliza strict noțiunea de funcție și pentru a minimiza numărul de operatori necesari pentru a defini calculul predicatelor după Henry M. Sheffer . Mai recent, a fost folosit în informatică ca model teoretic de calcul și ca bază pentru proiectarea limbajelor de programare funcționale .
Conceptul de bază al logicii combinatorii este cel al combinatorului care este o funcție de ordin superior ; utilizează doar aplicația funcțională și, eventual, alte combinatoare pentru a defini noi funcții de ordin superior. Fiecare combinator simplu tipabil este o demonstrație pentru Hilbert în logica intuiționistă și invers. Numim asta corespondența Curry-Howard
Logica combinatorie se bazează pe două „operații” de bază (spunem și două „combinatoare”) S și K pe care le vom defini mai târziu; mai precis îi vom defini comportamentul sau „intenția”, deoarece logica combinatorie este o abordare a logicii care arată mai degrabă cum funcționează lucrurile decât cum pot fi descrise obiectele, spunem atunci că este o abordare intenționată a logicii. Dacă vrem să definim funcția pe care o vom numi C și care ia trei parametri și returnează ca rezultat primul aplicat la al treilea, întregul fiind aplicat celui de-al doilea, îl putem scrie:
C ≡ S ((S (KS) K) (S (KS) K) S) (KK)care, după cum putem vedea, nu include o variabilă. Putem regreta că avantajul neutilizării variabilelor este plătit de lungimea expresiilor și de o anumită ilizibilitate. Astăzi, logica combinatorie este utilizată în principal de logicieni pentru a răspunde pozitiv la întrebarea „Este posibil să se facă fără variabile?” »Și de către informaticieni pentru a compila limbaje funcționale.
Logica combinatorie este un sistem de rescriere de prim ordin . Adică, spre deosebire de calculul lambda , acesta nu include nicio variabilă legată, ceea ce permite o teorie mult mai simplă. Are doar trei operatori: un operator binar și două constante.
Parantezare Pentru a simplifica scrierea, logica combinatorie elimină anumite paranteze și adoptă prin convenție asociativitatea din stânga. Cu alte cuvinte, (abcd ... z) este o prescurtare pentru (... (((ab) c) d) ... z).Combinatorul de identitate, notat I , este definit de
I x = x .Un alt combinator, notat cu K , face funcții constante: ( K x ) este funcția care, pentru orice parametru, returnează x , cu alte cuvinte
( K x ) y = xpentru toți termenii x și y . Ca și în lambda-calculus , asociem aplicațiile de la stânga la dreapta, ceea ce face posibilă eliminarea parantezelor, așa că scriem
K x y = x .Un alt combinator, notat S , distribuie parametrul (aici z ) aplicațiilor componente:
S x yz = xz ( yz )S aplică rezultatul aplicării lui x la z la rezultatul aplicării lui y la z .
I pot fi construite din S și K , într - adevăr:
( S K K ) x = S K K x = K x ( K x ) = x .Prin urmare, decretăm că I este un combinator derivat și că I = SKK și decidem să descriem toți combinatorii folosind S și K , ceea ce este rezonabil, deoarece putem arăta că acest lucru este suficient pentru a descrie „toate” funcțiile unei anumite forme. .
De fapt, transformările funcționează ca reduceri și pentru asta le scriem →. Prin urmare, obținem cele două reguli de reducere de bază ale logicii combinatorii.
K xy → x, S xyz → xz (yz).Un tip poate fi asociat cu fiecare dintre combinatoare. Tipul unui combinator spune cum ia în considerare tipul parametrilor săi pentru a produce un obiect de un anumit tip. Astfel combinatorul I își schimbă parametrul în sine; dacă atribuim tipul α acestui parametru x, atunci putem spune că I x are tipul α și că I are tipul α → α. Aici săgeata → denotă constructorul de tip funcțional, aproximativ α → α este tipul clasei de funcții de la α la α, → a construit un nou tip α → α din tipul α.
K ia un parametru, să zicem de tipul α și redă o funcție a unui parametru de tipul β care redă primul parametru, tipul acestei ultime funcții este deci β → α și tipul lui K este astfel α → (β → α) , pe care scriem α → β → α. S ia trei parametri x, y și z; dați tipul α la al treilea parametru z și tipul γ la rezultatul final, al doilea parametru y ia un parametru de tip α și returnează un parametru de tip spunem β (tipul său este deci α → β), primul parametru x ia un parametru de tip α și returnează o funcție de tip β → γ, tipul său este deci α → (β → γ), pe care îl scriem α → β → γ. Să rezumăm, avem az: α, y: β → α și x: α → β → γ și S xyz: γ, concluzionăm că S are tipul (α → β → γ) → (α → β) → α → γ.
Rezultatul MN care constă în aplicarea lui M la N este tipabil dacă M are un tip funcțional, să zicem α → β și dacă N are tip α. MN are apoi tipul β.
Tipul de B este (α → β) → (γ → α) → γ → β. Fi văzut arătând că B xyz → * x (yz), sau prin aplicarea regulii compoziției la S ( KS ) K .
Tip C este (α → β → γ) → β → α → γ, pentru aceleași motive ca și indicate pentru B .
W, pe de altă parte, nu este tipabil. Putem vedea acest lucru amintind că S : (α → β → γ) → (α → β) → α → γ și I : (α → α). Dacă aplicăm S la I trebuie să avem α = β → γ, atunci dacă aplicăm SI la I trebuie să avem α = β, deci β = β → γ. Această ecuație nu are nicio soluție. Deci SII = W nu este tipabil.
În concluzie:
K : α → β → α S : (α → β → γ) → (α → β) → α → γ I : α → α B : (α → β) → (γ → α) → γ → β C : (α → β → γ) → β → α → γDacă M este un combinator tipizat, atunci orice lanț de reducere care începe de la M este finit. Această proprietate se numește normalizare puternică .
Se poate observa că modus ponens
seamănă cu regula de conservare a tipului atunci când aplicăm un combinator de tip α → β unui combinator de tip α. Să examinăm, de asemenea, primele două axiome ale prezentării în stil hilbertian a logicii propoziționale, și anume:
K : P → Q → P S ( P → Q → R ) → ( P → Q ) → P → R .Să ne amintim că permit formalizarea calculului propozițional intuiționist. Observăm că prima axiomă este identică cu tipul de K și că a doua axiomă este identică cu tipul de S dacă înlocuim propoziția P cu α, propoziția Q cu β și propoziția R cu γ. Această corespondență între propunere și tip și între combinator și demonstrație se numește corespondență Curry-Howard. Pune în paralel sistemul de deducție à la Hilbert pentru logica propozițională intuiționistă și logica combinatorie care, ar trebui remarcat, au fost descoperite independent.
Formula
B : (α → β) → (γ → α) → γ → βînseamnă (în limbajul Coq , de exemplu) că B este o dovadă (oricare a priori) a formulei propoziționale (α → β) → (γ → α) → γ → β.
B ≡ S (KS) Kapoi oferă o dovadă eficientă a formulei din teoria lui Hilbert care utilizează doar modus ponens și axiomele K și S.
Acest lucru necesită o mică lucrare de rescriere: mai întâi, restaurăm parantezele
B ≡ (S (KS)) Kapoi, introducem operatorul ⇒
B ≡ (S ⇒ (K ⇒ S)) ⇒ Kîn cele din urmă, folosim notația postfix :
B ≡ KSK ⇒ S ⇒ ⇒Apoi, această formulă oferă pașii demonstrației în direcția deducției. ⇒ denotă utilizarea modus ponens; K și S, utilizarea axiomelor K și S. Mai precis Q ≡ IP ⇒ înseamnă că dacă eu este demonstrarea P → Q și P demonstrarea P , atunci IP ⇒ este aceea de Q . Din păcate, această formulă nu oferă operații de substituții care trebuie utilizate în introducerea axiomelor.
Notația prefixată,
B ≡ ⇒ ⇒ S ⇒ KSKreprezintă semnificația probei în limba Coq. Aici, informațiile lipsă sunt formulele P utilizate în modus ponens.
DemonstrațiePentru a ușura scrierea, notăm
Prin urmare, scopul este
Orice expresie a logicii combinatorii admite o expresie echivalentă λ-calcul și orice expresie a λ-calcul admite o expresie logică combinatorie echivalentă.
Rețineți traducerea combinatorilor la calculul λ, este definită de:
Înainte de a defini reprezentarea calculului λ în logica combinatorie, trebuie să definim o abstracție în logica combinatorială. Dacă este un termen, definim cine va juca rolul .
Definim interpretarea termenilor calculului λ în termenii logicii combinatorii:
Punctul fix combinat al lui Turing , notat, este exprimat în calculul λ . Apoi putem calcula:
atunci
Apoi definim doi combinatori A și Θ
A : = S (S (KS) (KI)) (SII)
Θ : = AA
Θ este un combinator cu punct fix.
Observăm că, indiferent dacă este termenul λ sau traducerea lui ca combinator, avem
O formă normală este un combinator în care combinatorii primitivi nu sunt aplicați la suficiente argumente pentru a putea fi simplificate. Este indecidabil să știi
dacă un combinator general are o formă normală, dacă doi combinatori sunt echivalenți, etc.Acest lucru este echivalent cu indecidabilitatea problemelor corespunzătoare ale calculului lambda .