Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 2 Allmänt om -kalkylen På 1930-talet besvarades några grundläggande frågor Vilka principiella begränsningar gäller för formella bevissystem och deras härledningar (Gödel 1936)? Hur kan begreppet algoritm formaliseras (Turing 1939)? Var ligger gränsen mellan algoritmisk lösbarhet och olösbarhet (Turing 1939)? Men det var inte bara Turing som föreslog en modell. Samma år (1939) definierade Alonzo Church -kalkylen – ett enkelt system i vilket beräkningsbara funktioner kan definieras och evalueras.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 3 Allmänt om -kalkylen (2) Medan Turings maskinmodell liknar imperativa språk, är -kalkylen ett abstrakt sätt att definiera och kombinera funktioner, liknar alltså funktionella språk Det överraskande är att båda är precis lika kraftfulla Church-Turing-tes funktionellimperativ -kalkyl Turingmaskin
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 4 -kalkylens syntax Låt var stå för en oändlig mängd av variabler (vanligtvis används små bokstäver). Mängden av alla -uttryck definieras med hjälp av följande kontextfria regler: expr var | ( expr expr ) | var . expr x (y x) x.(y x) y) x.(y x) y. x.(y x) y) ( x. y.( x.x (x x)) x.(x y))
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 5 Funktionsapplikation och funktionsdefinition Tanken bakom syntaxen är… (E 1 E 2 )står för funktionsapplikation: E 1 appliceras på E 2 x.Ebeskriver en funktion: x är den (enda) formella parametern och E är kroppen. Uttrycket x.E kallas -abstraktion Vanlig programspråkssyntax för x.E vore t.ex. fun f(x) = E. Den viktigaste skillnaden är att -kalkylens funktioner är anonyma – de har inga namn!
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 6 Bundna och fria variabler I x.E är x. ”funktionshuvudet” som ”deklarerar” en formell parameter x. Där x förekommer i E används alltså funktionens formella parameter – x sägs vara bunden. Variabler som förekommer i ett uttryck på ställen där de inte är bundna är fria variabler. ( x. y.( x.x (x x)) x.(x y)) bound(E) = {x,y} och free(E) = {y} i det här fallet ( x. y.( x.x (x x)) x.(x y)) fri
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 7 -konversion och -reduktion Notation: Att ersätta alla fria förekomster av x i E 1 med E 2 skrivs som E 1 [x E 2 ]. Substitution. -konversion Formella parametrar får alltid döpas om, dvs varje underuttryck x.E får bytas ut mot y.E[x y] om y inte är fri i E. Man skriver E 1 E 2. -reduktion Genom att använda -reduktion evalueras -uttryck. Varje underuttryck ( x.E E') får bytas ut mot E[x := E'] om bound(E) free(E') = . Man skriver E 1 E 2. (Om bound(E) free(E') används -konversion först.)
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 8 Church-Rosser-teoremet En beräkning i -kalkylen är en sekvens E 1 E 2 av -reduktioner (och eventuella -konversioner). E 2 är på normalform om inga fler -reduktioner är möjliga (E 2 betraktas som beräkningens resultat, dvs E 1 s värde) Men kan ett uttryck inte ha flera olika värden då??? Church-Rosser-teorem Om E E 1 och E E 2 så finns det ett uttryck E' sådant att både E 1 E' och E 2 E'. E E2E2 E1E1 E'
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 9 Att programmera i -kalkylen Hur kan de vanliga datatyperna definieras i -kalkylen? operationer är -uttryck dataelement är också -uttryck TRUE = x. y.x FALSE = x. y.y IF B THEN E ELSE E' = ((B E) E') B AND B' = ((B B') FALSE ) Datatyp boolean
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 10 Att programmera i -kalkylen (2) PAIR E E' = x. IF x THEN E ELSE E' FIRST P = (P TRUE ) SECOND P = (P FALSE ) Datatyp pair Datatyp integer 0 = x.x SUCC N = PAIR FALSE N IS_ZERO N = FIRST N PRED N = IF IS_ZERO N THEN 0 ELSE SECOND N
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 11 Rekursion Hur kan vi definiera rekursion utan att ge funktionen ett namn för att kunna referera till sig själv?? Ex: Q M N = if iszero M then N else succ (Q (pred M) N) Y-kombinatorn Y = f.( x.(f (x x)) x.(f (x x))) (Y F) = (F (Y F)) !! Gör Q till en parameter P= Q. M. N. if iszero M then N else succ (Q (pred M) N) Definiera PLUS = Y P Det medför PLUS = P (Y P) = (P PLUS) o.s.v