Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

Relevanta dokument
Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

BERÄKNINGSBARHET FÖR DATALOGER

LUNDS TEKNISKA HÖGSKOLA Institutionen för Elektro- och Informationsteknik

Tentamen i. TDDC67 Funktionell programmering och Lisp

TDDC74 Programmering, abstraktion och modellering DUGGA 1

Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL2 och Media 1, SF1610 och 5B1118, onsdagen den 17 augusti 2011, kl

BER AKNINGSBARHET F OR DATALOGER. Kent Petersson. Institutionen for Datavetenskap Goteborgs Universitet / Chalmers Goteborg, Sweden

Uppgifter om funktioner

Tentamen i Matematik 2: M0030M.

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

Procedurer och villkor

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering

En bijektion mellan två mängder A och B som har ändligt antal element kan endast finnas om mängderna har samma antal element.

LUNDS TEKNISKA HÖGSKOLA Inst. for Elektro- och Informationsteknik. SIGNALBEHANDLING I MULTIMEDIA, ETI265 Inlämningsuppgift 1 (av 2), Task 1 (out of 2)

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

Primitivt rekursiva funktioner och den aritmetiska hierarkin

Sådana avbildningar kallar vi bijektioner mellan A och B (eller från A till B).

1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)

Tentamen i Matematik 3: M0031M.

Tentamen i Matematik 2: M0030M.

Föreläsning 5: Kardinalitet. Funktioners tillväxt

Övningshäfte 3: Funktioner och relationer

Tentamen TMV210 Inledande Diskret Matematik, D1/DI2

1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)

Matematiska Institutionen KTH. Lösning till tentamensskrivning på kursen Linjär algebra II, SF1604, den 9 juni 2011 kl

Våra enkla funktioner eller procedurer

Chalmers tekniska högskola Datum: kl Telefonvakt: Linnea Hietala MVE480 Linjär algebra S

ÄNDLIGT OCH OÄNDLIGT AVSNITT 4

Explorativ övning 4 ÄNDLIGT OCH OÄNDLIGT. Övning A

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

kvivalenta. Ange rangen för A samt en bas för kolonnrummet för A. och U =

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

Chalmers tekniska högskola Datum: kl Telefonvakt: Christoffer Standar LMA033a Matematik BI

Diskret matematik, lektion 2

Tentamensskrivning i Diskret Matematik för CINTE och CMETE, SF1610, onsdagen den 20 augusti 2014, kl

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

6. Temperaturen u(x) i positionen x av en stav uppfyller värmeledningsekvationen. u (x) + u(x) = f(x), 0 x 2, u(0) = 0 u(2) = 1,

Pre-Test 1: M0030M - Linear Algebra.

DD1361 Programmeringsparadigm. Carina Edlund

Lösningar till utvalda uppgifter i kapitel 3

Lösning till tentamensskrivning på kursen Linjär algebra, SF1604, den 12 mars 2013 kl

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

x +y +z = 2 2x +y = 3 y +2z = 1 x = 1 + t y = 1 2t z = t 3x 2 + 3y 2 y = 0 y = x2 y 2.

Kontinuitet och gränsvärden

En bijektion mellan två mängder A och B som har ändligt antal element kan finnas endast om mängderna har samma antal element.

MVE520 Linjär algebra LMA515 Matematik, del C

Tentamen i. Programmering i språket C

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

TENTAMEN I LINJÄR ALGEBRA OCH NUMERISK ANALYS F1, TMA671

TDDC74 Programmering, abstraktion och modellering. Tentamen

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Tentamen 1 i Matematik 1, HF okt 2018, Skrivtid: 14:00-18:00 Examinator: Armin Halilovic

Övningshäfte 2: Induktion och rekursion

denna del en poäng. 1. (Dugga 1.1) och v = (a) Beräkna u (2u 2u v) om u = . (1p) och som är parallell

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

TDDC74 Programmering, abstraktion och modellering. Tentamen

6. a) Visa att följande vektorer är egenvektorer till matrisen A = , och ange motsvarande

Mängder och kardinalitet

Försättsblad till skriftlig tentamen vid Linköpings universitet

DEL I. Matematiska Institutionen KTH. Lösning till tentamensskrivning på kursen Linjär algebra II, SF1604 för D, den 5 juni 2010 kl

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

Datalogi, grundkurs 1

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen: Programutveckling ht 2015

Tentamen i. TDDA 69 Data och programstrukturer

Tenta i Grundläggande programmering DD klockan

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Att skriva till och läsa från terminalfönstret

2. (a) Skissa grafen till funktionen f(x) = e x 2 x. Ange eventuella extremvärden, inflektionspunkter

Föreläsning 9 Exempel

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

TDDC74 Programmering, abstraktion och modellering. Tentamen

Klassdeklaration. Metoddeklaration. Parameteröverföring

Tentamen: Lösningsförslag

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

1 Konvexa optimeringsproblem grundläggande egenskaper

Betygsgränser: För. Skriv endast på en. Denna. Uppgift. 1. (2p) 2. (2p) Uppgift. Uppgift 1) 4. Var god. vänd.

Tentamen i Introduktion till programmering

Chalmers tekniska högskola Datum: kl Telefonvakt: Jonny Lindström MVE475 Inledande Matematisk Analys

Programkonstruktion. Tentamen,

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

MITTUNIVERSITETET TFM. Modelltenta Algebra och Diskret Matematik. Skrivtid: 5 timmar. Datum: 1 oktober 2007

Diskret Matematik A för CVI 4p (svenska)

Algebra och Diskret Matematik A (svenska)

MITTUNIVERSITETET TFM. Tentamen Algebra och Diskret Matematik A (svenska) Skrivtid: 5 timmar. Datum: 9 januari 2007

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Grundläggande programmering

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

TMV142/186 Linjär algebra Z/TD

Transkript:

Göteborgs Universitet och Chalmers Tekniska Högskola 16 januari 2007 Datavetenskap TDA180/TDA181/INN110 Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180) Onsdagen den 17 januari 2007, kl 14.00 17.00 i V-huset. Ansvarig lärare: Bengt Nordström, tel 0730-79 42 89. Tillåtna hjälpmedel: Inga. Börja varje uppgift på nytt blad. Skriv endast på en sida av papperet. Varje svar skall motiveras! Svar utan motivering ger inga poäng. Komplicerade lösningar och motiveringar kan ge poängavdrag. Frågor om tentan kommer endast att besvaras via telefon (0730-79 42 89). Poäng från hemuppgifter inlämnade under 2006 kan tillgodoräknas. Kursen är värd 4 p vid Chalmers och 5 p vid universitetet. Detta förklarar följande betygsgränser: CTH: 3=80p, 4=100p, 5=120p, GU: G=100p, VG=150p. Det finns ett fåtal elever på Chalmers som läste motsvarande 3p-kurs. För dem är poänggränserna 3=60p, 4=75p, 5=90p. Examensvisning kommer att äga rum fredagen den 19 januari kl 14.45 i Bengt Nordströms tjänsterum. Lösningar till tentan kommer att finnas tillgängliga från kursen Beräkningsmodellers hemsida. 1. Bevisa eller motbevisa följande påståenden: (a) Funktionen som är odefinierad för varje argument är beräkningsbar. (5) Svar: Funktionen är beräkningsbar eftersom den kan beräknas av ett icke terminerande program, t.ex. (λx.(x x)(x x))(λx.(x x)(x x)) i lambda-kalkyl. (b) Om M är normalformen av N (i lambda-kalkyl) och N är öppet, så är M öppet. (5) Svar: Detta gäller inte, låt N vara det öppna uttrycket (λ x.(λ y.y))z, som har variabeln z fri. Då blir M uttrycket λ y.y som är slutet. (Vi låter allstå N vara en funktion som inte beror på sitt argument, och applicerar det på ett öppet uttryck.) (c) Alla slutna uttryck i lambda-kalkyl har en normalform och denna normalform är unik. (5) Svar: Nej, det finns ju uttryck i lambda-kalkyl som inte terminerar, t.ex. T T, där T är uttrycket λx.(x x) 1

(d) Mängden av totala funktioner från N till Bool är uppräknelig. (15) Svar: Falskt. Mängden är inte uppräkningsbar, om de vore det skulle det finnas en uppräkning f i av dem. Men uppräkningen kan inte innehålla funktionen d som är definierad av d(n) = f n (n) eftersom den skiljer sig från alla funktioner i uppräkningen. Om den skulle vara lika med funktionen f j skulle d(i) = f j (i) för alla i. Men detta gäller inte för i = j. (e) Mängden av totala funktioner från Bool till N är uppräknelig. (15) Svar: Ja. Intuitionen är att mängen har samma kardinalitet som N N, mängden av par av naturliga tal. Ett element f i funktionsmängden är ju fullständigt beskriven av två tal, funktionens värde för de två boolska elementen. För att bevisa att mängden är uppräkningsbar räcker det att ge en total och injektiv funktion g (Bool N) N. En sådan är: g(f) = 2 f(true)+1 3 f(false)+1 Den är ju total (definitionen gäller för alla f) och injektiv. Om g(f) = g(f ), så gäller 2 f(true)+1 3 f(false)+1 = 2 f (true)+1 3 f (false)+1 Men eftersom primtalsuppdelningen är unik måste f(true) = f (true) och f(false) = f (false), dvs f = f. 2. Enligt läroboken är en icketom mängd A uppräkningsbar om det finns en total surjektiv funktion f N A. (a) Är det väsentligt att funktionen skall vara total? (15) (b) Är det väsentligt att funktionen skall vara surjektiv? (15) Om svaret är ja, skall du motivera det genom att visa att de reella talen skulle vara uppräkneliga om kravet inte finns med i definitionen. Om svaret är nej, skall du visa hur man givet en funktion som inte uppfyller kravet kan konstruera en funktion med kravet uppfyllt. 2

Svar: Det är inte väsentligt att funktionen är total, om vi har en icke-total surjektiv funktion f N A så kan vi ju alltid konstruera en total funktion g genom: { f(x) om f(x) är definierad, g(x) = (1) a för övrigt där a är ett godtyckligt element i A. Däremot är det viktigt att funktionen är surjektiv. Annars skulle ju identitetsfunktionen räkna upp de reella talen. 3. (a) Vad är en fixpunktskombinator? (5) (b) Ge ett exempel på en fixpunktskombinator och visa att det är en sådan! (5) (c) Varför är fixpunktskombinatorer viktiga? (5) Svar: Se läroboken! 4. Det finns fem programkonstruktioner i språket PRF, de primitivt rekursiva funktionerna. De första fyra har en syntax som kan beskrivas informellt på följande sätt: (40) z PRF 0 s PRF 1 proj(n, i) PRF n+1 if i n comp(g, f 1,..., f m ) PRF n if g PRF m, f i PRF n, 1 i m och semantiken beskrivs informellt som: z() = 0 s(j) = j + 1 proj(n, i)(j 0,..., j n ) = j i comp(g, f 1,..., f m )(j 1,..., j n ) = g(f 1 (j 1,..., j n ),..., f m (j 1,..., j n )) Ge en informell beskrivning av den konstruktion som saknas! Visa också hur man kan uttrycka fakultetsfunktionen som definieras av att f(0) = 1 och f(n) = 1 2 n för alla naturliga tal n > 0. För den sista uppgiften är det viktigt att du motiverar svaret, dvs antingen visa att programmet verkligen uppfyller de ekvationer som skall gälla för 3

fakultetsfunktionen eller också visa att ditt sätt att komma fram till programmet är sådant att programmet är korrekt. Det räcker alltså inte att bara ge programmet. Du kan anta att multiplikationsfunktionen redan är definierad. Svar: Den konstruktion som saknas är operatorn för primitiv rekursion med syntax: rec(g, h) PRF n+1 if g PRF n, h PRF n+2 vars semantik beskrivs informellt som: rec(g, h)(0, j 1,..., j n ) = g(j 1,..., j n ) rec(g, h)(y + 1, j 1,..., j n ) = h(y, rec(g, h)(y, j 1,..., j n ), j 1,..., j n ) Vi ska nu skriva ett program f för fakultetsfunktionen. Om vi försöker uttrycka f på en primitivt rekursiv form ser vi att f(0) = 1 f(n + 1) = (n + 1) f(n) Om vi ansätter f = def rec(g, h) där g PRF 0 och h PRF 2, så vet vi att g[0] = 1 måste gälla. Det är uppfyllt om g = def comp(s, [z]). Vi vet att följande skall gälla för funktionen h: f[n + 1] = rec(g, h)[n + 1] = h[n, f(n)] = (n + 1) f(n) Vi vill alltså konstruera ett program h i PRF 2 så att h[n, f(n)] = (n + 1) f(n). Detta är uppfyllt om funktionen h uppfyller h[n, m] = mul[n + 1, m], där mul är det program som utför multiplikation. 4

Om vi nu försöker ansätta att h måste ha formen h = comp(mul, [e 1, e 2 ]) för några program e 1 och e 2, så vet vi att följande måste gälla: comp(mul, [e 1, e 2 ])[n, m] = mul(e 1 [n, m], e 2 [n, m]) Detta är uppfyllt om e 1 [n, m] = n + 1 e 2 [n, m] = m. = mul(n + 1, m). Detta är uppfyllt om e 2 är en projektion, nämligen e 2 = def proj(, 1) 1 och om e 1 är en komposition: e 1 = def comp(s, proj(, 1) 0 ) ty comp(s, proj(, 1) 0 )[n, m] = s(proj(, 1) 0 [n, m]) = n + 1 För att sammanfatta så kan vi alltså definiera fakultetsfunktionen som f = def rec(comp(s, z), comp(mul, [comp(s, proj(, 1) 0 ), proj(, 1) 1 ])) 5. Lös en av följande uppgifter (beroende på om du studerat χ eller PCF): (a) Följande uppgift är för de som har studerat språket χ: i. Skriv ett program prod i χ (utan syntaktiskt socker) som är definierat så att (8) prod n = (0 + 1) (1 + 2)... (n 1 + n) Du kan anta att vi har definierat funktionerna add och mult som utför additon respektive multiplikation. Förklara hur du representerar de naturliga talen (om du inte vill behöver du inte använda standard-representationen). 5

ii. Bevisa (med induktion) att ovanstående gäller! (12) Svar: Vi använder standard-representationen av tal, dvs talet 0 representeras av zero och talet n + 1 av succ n, där n är representationen av n. Vi ser att programmet skall uppfylla följande ekvationer: prod (zero ) =one prod (succ n ) =(mult (prod n))(add n (succ n)) Låt oss införa förkortingen f m n = (mult m)(add n (succ n)) Vi skall alltså lösa ekvationerna prod (zero ) = one prod (succ n ) = f (prod n) n Vi kan förenkla problemet till att lösa ekvationen prod z = case z of{ vilken löses av zero : one, succ n : f (prod n) n} prod = def rec p = λz case z of{ zero : one, succ n : f (p n) n} vilket utan syntaktiskt socker skrives: prod = def rec p = λz case z of{ zero : λ u one, succ : λ n f (p n.arg1) n.arg1} Denna definition av konstanten prod är korrekt ty, i basfallet får vi: prod (zero <>) = {enl definitionen av prod} (rec p = \z -> case z of { 6

succ: \n -> f (p n.arg1) n.arg1})(zero <>) = {enl beräkningsregel för rec} \z -> case z of { succ:...} (zero <>) = {enl beräkningsregel för applikation} case zero <> of { succ:... }) = {enl beräkningsregel för case} (\u -> one) <> = one I efterföljarfallet får vi följande beräkningar: prod (succ <n>) = {enl definitionen av prod} (rec p = \z -> case z of { succ: \n -> f (p n.arg1) n.arg1})(succ <n>) = {enl beräkningsregel för rec} \z -> case z of { succ: \n -> f (prod n.arg1) n.arg1})(succ <n>) = {enl beräkningsregel för applikation} case succ <n> of { succ: \n -> f (prod n.arg1) n.arg1}) = {enl beräkningsregel för case} (\n -> f (prod n.arg1) n.arg1) <n> = f (prod n) n) (b) Följande uppgift är för de som studerat PCF: i. Define a PCF-program that behaves as prod, for any n > 0 (8) prod n = (0 + 1) (1 + 2)... (n 1 + n) ii. What is the output of your PCF-program when applied to the value Zero? Justify by showing the main steps in the (7) reduction of prod Zero. Explain. Here you should assume that 7

both add and mult have the expected semantics. You can use either big or small semantics. iii. What is the purpose of the fix operator in PCF? (5) Give a PCF-program that contains no fix operator and that does not terminate. Justify! Lycka till! 8