1 / 10

Föreläsning 12: l -kalkylen

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)?

Télécharger la présentation

Föreläsning 12: l -kalkylen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Föreläsning 12: l-kalkylen • allmänt om l-kalkylen • syntax • semantik • att programmera i l-kalkylen F. Drewes, Inst. f. datavetenskap

  2. 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

  3. 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

  4. 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: exprvar |(exprexpr) |lvar.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

  5. 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

  6. 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

  7. 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 E1a 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 E1b E2. (Om bound(E)free(E')   används a-konversion först.) F. Drewes, Inst. f. datavetenskap

  8. En beräkning i l-kalkylen är en sekvens E1b 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 E1b E' och E2b 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

  9. 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

  10. 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

More Related