Calcul Lambda

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Litera lambda minusculă, unsprezecea din alfabetul grecesc este simbolul calculului lambda.

Calculul Lambda sau λ-calculul este un sistem formal definit de matematicianul Alonzo Church , dezvoltat pentru a analiza formal funcțiile și calculul acestora. Primele sunt exprimate prin intermediul unui limbaj formal , care stabilește regulile pentru formarea unui termen, acesta din urmă cu un sistem de rescriere , care definește modul în care termenii pot fi reduși și simplificați.

Descriere

Combinația de simplitate și expresivitate a făcut din calculul lambda un instrument frecvent în mai multe domenii științifice:

Termeni

Termenul calculului lambda sau, mai pe scurt, termenul lambda sau expresia lambda este definit ca orice șir bine format care începe de la următoarea gramatică , în forma Backus-Naur :

unde metavariabila denotă o variabilă aparținând unui set infinit de variabile numărabile .

Parafrazând definiția formală, un termen lambda poate fi, respectiv, un nume de variabilă , abstractizarea unui termen față de o variabilă sau aplicarea unui termen ca argument (sau parametru real) al altuia.

Variabile

Având un termen generic lambda , este definit setul care conține toate variabilele menționate în . Dintre acestea distingem două partiții : setul de variabile libere, scrise , și setul de variabile legate, indicate cu . Setul de variabile libere este definit recursiv după cum urmează:

  1. ;
  2. ;
  3. .

Prin urmare, setul de variabile legate poate fi obținut prin diferență:

.

Punctul 2 al definiției implică faptul că construcția sintactică a abstractizării este un liant variabil: dacă , asa de .

Un nume de variabilă se spune că este proaspăt , relativ la un termen, dacă nu este inclus în numele variabilelor din același termen.

Câteva exemple care se obțin pur și simplu prin aplicarea definițiilor date mai sus:

;
;
;

Rescrie reguli

Înlocuire

O substituție este înlocuirea tuturor aparițiilor unui sub-termen cu altul, într-un al treilea termen care reprezintă contextul substituției în sine. Este indicat cu înlocuirea termenului in loc de în termen : orice apariție liberă a variabilei în este înlocuit cu . Un exemplu simplu de înlocuire este după cum urmează:

.

O definiție recursivă a algoritmului de înlocuire este următoarea:

  1. ;
  2. , de sine ;
  3. ;
  4. , de sine Și ;
  5. , de sine , , Și este un nume mișto;
  6. .

Câteva exemple de substituție:

;
;
, unde este este un nume mișto.

Verificările de apariție din punctele 4 și 5 sunt necesare pentru a evita un fenomen nedorit numit captură variabilă . Fără aceste controale, operațiunea de substituție ar duce la o variabilă liberă a unui termen ca legătură ca urmare a substituției în sine, ceea ce este, de asemenea, intuitiv incorect.

Conversia alfa

.

Conversia alfa se aplică termenilor care sunt abstracții. Având în vedere o abstracție, este posibilă rescrierea acesteia prin înlocuirea variabilei abstracte ( ) cu altul ( ), cu condiția ca, în întregul sub-termen, în loc de fiecare apariție a primului, să scrie al doilea.

Regula de conversie alfa nu se preocupă de a face nicio distincție între aparițiile libere sau legate de variabile, deoarece operațiunea de substituire face deja acest lucru. Câteva exemple de conversie alfa:

Reducerea beta

Reducerea beta este cea mai importantă regulă de rescriere a calculului lambda, deoarece implementează etapa de calcul. Prescripția sa este definită după cum urmează, în cazul în care orice context actual este omis:

.

(Înlocuiți N, pentru aparițiile variabilelor legate, în M)

Regula are ca obiect aplicarea unei abstracții lambda în formă la un al doilea termen . Configurația sintactică reductibilă se numește tocmai redex , o contracție a englezei "red-ucible ex -pression", la rândul său rar trasată în italiană ca "redesso", rezultatul său fiind numit redus.

Continuând analogia cu limbajele de programare, regula se referă la o funcție aplicată unui argument. Prin urmare, corespunde unei etape de calcul, care returnează corpul funcției unde parametrul curent (efectiv) este substituit parametrului formal a funcției. În acest context, prin urmare, substituția reprezintă tocmai trecerea parametrului .

Câteva exemple de reducere beta sunt:

Conversia vârstei

, de sine .

Intuitiv, importanța acestei reguli constă în faptul că permite declararea a doi termeni lambda identici pe baza principiului că, dacă aceștia se comportă în același mod (odată aplicat unui parametru), trebuie, prin urmare, să fie considerați, exact, identici .

Spune asta Și se comportă la fel, este să spunem că pentru fiecare : . Cu alte cuvinte, conversia eta axiomatizează probabilitatea egalității în - calcul extensional [1] .

Termeni echivalenți

Regulile de conversie pot fi extinse la relații de echivalență reale, presupunând că poate fi rescrisă în sensul săgeților tocmai definite (de la stânga la dreapta) și că rescrierile în direcția opusă sunt, de asemenea, valabile (de la dreapta la stânga, prin urmare) . În mod formal, se aplică următoarele relații:

  • ,
  • , de sine .

Cele două implicații duble se numesc echivalența alfa și, respectiv, echivalența eta. Se spune că doi termeni t și s sunt echivalenți alfa-eta atunci când relația este satisfăcută:

.

Cu alte cuvinte, doi termeni sunt alfa-eta-echivalenți dacă există un lanț finit de rescrieri care utilizează doar regulile alfa-echivalență și echivalență vârstă.

Codificări

Prin calculul λ au fost formulate diferite codificări. Câteva exemple sunt codificarea Bisericii și codificarea Mogensen-Scott . Există, de asemenea, codificări care utilizează calculul lambda tastat, cum ar fi sistemul F.

Numerotare

Numerotarea bisericii poate exprima ansamblul numerelor naturale prin axiomele lui Peano . Fiecare număr este exprimat ca următorul celui precedent, în timp ce zero este singurul care nu este următorul din orice număr.

Toate numerele aparținând setului de naturale pot fi exprimate în mod analog.

Operatii aritmetice

În ceea ce privește numerotarea anterioară a numerelor naturale, este posibil să se exprime unele calcule enumerate mai jos.

Funcţie Definiție aritmetică Definiția according to Church
Succesor
Plus
Multiplicare
Putere

Exemple

Logică booleană

Logica booleană sau algebra booleană este o formalizare a logicii bazată pe două valori, și anume adevărat și fals, care pot fi exprimate după cum urmează.

Rețineți că reprezintă atât valori zero, cât și valori false.

Operații logice

Mai jos, vor fi exprimate câteva dintre operațiile mai simple legate de logica booleană.

Funcția logică Simbol Definiție
E (ȘI)
O (SAU)
NU NU)

Exemple

Forme normale

Un termen al calculului lambda se găsește în formă normală dacă nu este regrababil prin intermediul regulii de reducere beta. Dacă reducerea beta reprezintă un pas de calcul al unui termen lambda care descrie un program, atunci închiderea sa tranzitivă reprezintă orice calcul al acestuia. Când o reducere este finită și maximă , termenul redus în formă normală reprezintă rezultatul final al calculului.

De exemplu, să presupunem că îmbogățiți calculul adăugând numere naturale (pur și simplu notate ca ) și operația de adăugare binară pe ele (scrise în formă prefixată ca ), ambele putând fi codate direct ca termeni lambda. Acum ia în considerare un termen care se adaugă la argumentul său, și anume și folosiți valoarea ca argument . Această aplicație converge la o formă normală , intr-adevar: .

Nu toți termenii lambda au formă normală, iar reducerea beta nu are întotdeauna o lungime finită. Acest fenomen reprezintă faptul că calculul unui program poate continua la nesfârșit și diferă și permite să reprezinte funcții parțiale .

Exemplul clasic de divergență poate fi construit pornind de la termenul de duplicator , care nu face altceva decât să ia un termen limită și să returneze două exemplare, unul aplicat celuilalt. Prin urmare, este posibil să se definească termenul , și observați că se reduce la sine .

Notă

  1. ^ Barendregt, Calculul Lambda

Bibliografie

  • ( EN ) Henk P. Barendregt , The Lambda Calculus, its Syntax and Semantics - Studies in Logic Volume 40, College Publication, Londra, 2012. ISBN 978-1-84890-066-0 . Această carte este o sursă enciclopedică privind calculul lambda netipat. Conține o mulțime de definiții și demonstrații, dar foarte puține explicații cu privire la semnificația și interpretarea rezultatelor prezentate.
  • Maurizio Gabbrielli și Simone Martini, Limbaje de programare: principii și paradigme , ediția a II-a, Milano, McGraw-Hill , 2011. ISBN 978-88-386-6573-8 .
  • ( EN ) Jean-Yves Girard, Dovezi și tipuri , Paul Taylor și Yves Lafont, Cambridge University Press, 2003 [1989] , ISBN 0-521-37181-3 . Adus 24/03/2014 . Carte pe calcul lambda tastat și ordinul doi.

Elemente conexe

linkuri externe

Controlul autorității LCCN (EN) sh85074174 · GND (DE) 4166495-4 · BNF (FR) cb119586908 (data)