100 likes | 224 Vues
Föreläsning 12: l -kalkylen. allmänt om l -kalkylen syntax semantik att programmera i l -kalkylen. Allmänt om l -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)?
E N D
Föreläsning 12: l-kalkylen • allmänt om l-kalkylen • syntax • semantik • att programmera i l-kalkylen F. Drewes, Inst. f. datavetenskap
Allmänt om l-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 enmodell. Samma år (1939) definierade Alonzo Churchl-kalkylen – ett enkelt system i vilket beräkningsbara funktioner kan definieras och evalueras. F. Drewes, Inst. f. datavetenskap
Turingmaskin l-kalkyl imperativ funktionell Allmänt om l-kalkylen (2) • Medan Turings maskinmodell liknar imperativa språk, är l-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 F. Drewes, Inst. f. datavetenskap
l-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 l-uttryck definieras med hjälp av följande kontextfria regler: exprvar |(exprexpr) |lvar.expr lx.(y x) x (y x) (lx.(y x) y) ly.(lx.(y x) y) (lx.ly.(lx.x (x x)) lx.(x y)) F. Drewes, Inst. f. datavetenskap
Funktionsapplikation och funktionsdefinition Tanken bakom syntaxen är… • (E1 E2) står för funktionsapplikation: E1 appliceras till E2 • lx.E beskriver en funktion: x är den (enda) formella parametern och E är bodyn. Uttrycket lx.E kallas l-abstraktion Vanlig programspråkssyntax för lx.E vore t.ex. fun f(x) = E. Den viktigaste skillnaden är att l-kalkylens funktioner är anonyma – de bär inga namn! F. Drewes, Inst. f. datavetenskap
fri (lx.ly.(lx.x (x x)) lx.(x y)) (lx.ly.(lx.x (x x))lx.(x y)) (lx.ly.(lx.x (x x)) lx.(x y)) (lx.ly.(lx.x (x x))lx.(x y)) (lx.ly.(lx.x (x x)) lx.(x y)) Bundna och fria variabler • I lx.E är lx. ”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. (lx.ly.(lx.x (x x)) lx.(x y)) (lx.ly.(lx.x (x x))lx.(x y)) bound(E) = {x,y}och free(E) = {y}i det här fallet F. Drewes, Inst. f. datavetenskap
a-konversion och b-reduktion • Notation: Att ersätta alla fria förekomster av x i E1 med E2 skrivs som E1[x := E2]. • a-konversionFormella parametrar får alltid döpas om, dvs varje underuttryck lx.E får bytas ut mot ly.E[x := y]om y inte är fri i E. Man skriver E1a E2. • b-reduktionGenom att använda b-reduktion evalueras l-uttryck. Varje underuttryck (lx.E E') får bytas ut mot E[x := E']om bound(E)free(E') = . Man skriver E1b E2. (Om bound(E)free(E') används a-konversion först.) F. Drewes, Inst. f. datavetenskap
En beräkning i l-kalkylen är en sekvens E1b E2 avb-reduktioner (och eventuella a-konversioner). Church-Rosser-teorem Om E b E1 och E b E2 så finns det ett uttryck E' sådant att både E1b E' och E2b E'. E E1 E2 E' Church-Rosser-teoremet • E2 är på normalform om inga fler b-reduktioner är möjliga (E2 betraktas som beräkningens resultat, dvs E1s värde) • Men kan ett uttryck inte ha flera olika värden då??? F. Drewes, Inst. f. datavetenskap
Att programmera i l-kalkylen Hur kan de vanliga datatyperna definieras i l-kalkylen? • operationer är l-uttryck • dataelement är också l-uttryck Datatyp boolean TRUE = lx.ly.x FALSE = lx.ly.y IF B THEN E ELSE E' = ((B E) E') B AND B' = ((B B') FALSE) ... F. Drewes, Inst. f. datavetenskap
Att programmera i l-kalkylen (2) Datatyp pair PAIR E E' = lx.IF x THEN E ELSE E' FIRST P = (P TRUE) SECOND P = (P FALSE) Datatyp integer 0 = lx.x SUCC N = PAIR FALSE N IS_ZERO N = FIRST N PRED N = IFIS_ZERO N THEN 0 ELSESECOND N F. Drewes, Inst. f. datavetenskap