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)

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

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

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

Pre-Test 1: M0030M - Linear Algebra.

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

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

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

BERÄKNINGSBARHET FÖR DATALOGER

Tentamen i Matematik 2: M0030M.

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

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

Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik

COMPUTABILITY BERÄKNINGSBARHET. Källa: Goldschlager, Lister: Computer Science A Modern Introduction 2. upplaga 1988, Prentice Hall

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

Tentamen i Introduktion till programmering

Kompletteringsmaterial. K2 Något om modeller, kompakthetssatsen

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Tentamen i Matematik 3: M0031M.

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

K2 Något om modeller, kompakthetssatsen

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

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

and u = och x + y z 2w = 3 (a) Finn alla lösningar till ekvationssystemet

Föreläsning 5. Deduktion

DD1350 Logik för dataloger. Fö 7 Predikatlogikens semantik

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Tentamen Datastrukturer D DAT 035/INN960

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Programmering II (ID1019)

Programkonstruktion. Tentamen,

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

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

Programkonstruktion. Tentamen,

Tenta i Grundläggande programmering DD klockan

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

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Tentamen Grundläggande programmering

Programkonstruktion. Tentamen,

FÖRBERED UNDERLAG FÖR BEDÖMNING SÅ HÄR

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

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

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

TDDC74 Programmering, abstraktion och modellering. Tentamen

Föreläsning 3: Booleans, if, switch

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

DD1361 Programmeringsparadigm. Carina Edlund

Kurskod: TAMS28 MATEMATISK STATISTIK Provkod: TEN1 05 June 2017, 14:00-18:00. English Version

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Tentamen: Programutveckling ht 2015

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 4 Om rekursion. PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad

Om semantisk följd och bevis

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?

TDDC74 Programmering: Abstraktion och modellering Datortenta

Tentamen i. Programmering i språket C

Algebra och Diskret Matematik A (svenska)

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

Kurskod: TAIU06 MATEMATISK STATISTIK Provkod: TENA 17 August 2015, 8:00-12:00. English Version

Tentamen i Matematik 2: M0030M.

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

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

Primitivt rekursiva funktioner och den aritmetiska hierarkin

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

Datalogi, grundkurs 1

MVE520 Linjär algebra LMA515 Matematik, del C

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

2 (6) k 0 2 (7) n 1 F k F n. k F k F n F k F n F n 1 2 (8)

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

Tentamen TMV210 Inledande Diskret Matematik, D1/DI2

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Logik och kontrollstrukturer

Hjälpmedel: Inga, inte ens miniräknare Göteborgs Universitet Datum: 2018 kl Telefonvakt: Jonatan Kallus Telefon: ankn 5325

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

Tentamen i Grundläggande programmering STS, åk 1 lördag

1 Find the area of the triangle with vertices A = (0,0,1), B = (1,1,0) and C = (2,2,2). (6p)

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

Matematikens grundvalar och programmering av datorer

OBS!! Detta är DEL 2 av tentan. För att få ut denna måste du ha lämnat in del 1. Om du inte fått ut del 1 bör du meddela skrivningsvakten. OBS!!

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Systemutvecklare SU13, Malmö

Tentamen i. TDDA 69 Data och programstrukturer

LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P

Tentamen TMV210/MMGD10 Inledande Diskret Matematik, D1/GU

Grundläggande datalogi - Övning 9

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

Styrteknik: Binära tal, talsystem och koder D3:1

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

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

Visual Basic, en snabbgenomgång

Webbreg öppen: 26/ /

Övningshäfte 2: Induktion och rekursion

Transkript:

Göteborgs Universitet och Chalmers Tekniska Högskola 19 januari 2005 Datavetenskap TDA180/TDA181/INN110 Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180) Onsdagen den 12 Januari 2005, kl 14.00 18.00 i V-huset. Ansvarig lärare: Bengt Nordström, tel 0730-79 42 89 (fram till kl 16.45). Tillåtna hjälpmedel: Inga. Börja varje uppgift på nytt blad. Skriv endast på en sida av papperet. Varje svar skall motiveras! Komplicerade lösningar och motiveringar kan ge poängavdrag. 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. Elever vid universitetet kan tillgodogöra sig poäng från hemuppgifter inlämnade under 2004. Examensvisning kommer att äga rum måndagen den 24 januari kl 11.00 i Bengt Nordströms tjänsterum. Lösningar till tentan kommer att finnas tillgängliga från kursen Beräkningsmodellers hemsida. 1. Vad säger Churchs tes? Varför heter den inte Churchs sats? Ge några skäl för att tro att den är sann! (10) 2. (a) Ge ett exempel på ett program i λ-kalkyl som inte terminerar. (10) (b) Fungerar det exemplet i Haskell? (5) Ett exempel på ett program som inte terminerar är (λx.x x) (λx.x x). Det har ett redex och det reducerar till sig själv. Det programmet är inte typbart i Haskell, eftersom argumentet x både används som argument och funktion, om andra förekomsten av x har typ A så måste första förekomsten ha typ A B för något B. Men båda förekomsterna av x måste ju ha samma typ och därför måste A = A B, vilket är omöjligt. 3. Ange om följande påståenden är sanna eller falska samt ge ett bevis för detta! 1

(a) Mängden av alla uttryck i λ-kalkyl som har en normalform är uppräknelig. (15) Sant. Mängden av alla uttryck är uppräknelig, eftersom mängden av alla strängar är uppräknelig. Alla delmängder till en uppräknelig mängd är uppräknelig. (b) Alla positiva rationella tal Q + (mängden av tal som kan skrivas som i j där i och j är naturliga tal, j 0) är uppräkningsbar. (15) Sant. Den här mängden liknar ju mängden N N som är uppräknelig. Skillnaden mellan mängderna är att vissa element saknas i Q + (nämnaren måste vara positiv och det finns flera bråktal som är lika fastän de är uppbyggd av olika talpar). Vi kan använda samma teknik som i övningshäftet sidan 11, eller också kan vi konstruera en total injektiv funktion f Q + N genom f( i j ) = 2i+1 3 j där i och j saknar gemensam delare och j > 0 Denna är total eftersom den avbildar alla bråktal och den är injektiv enligt aritmetikens fundamentalsats. Notera kravet att i och j saknar gemensam delare, annars kommer inte f att vara en funktion (den kommer ju i så fall att avbilda 1 2 och 2 4 på olika tal.) 4. (a) Vad är en fixpunktskombinator? (5) (b) Ge ett exempel på en fixpunktskombinator och visa att det är en sådan! (10) (c) Varför är fixpunktskombinatorer viktiga? (5) 5. En partiell funktion i N N är Turing-beräkningsbar om det finns en Turing-maskin som beräknar den. Ge en förklaring av detta! Dvs förklara vad det betyder att en Turing maskin beräknar en funktion. (10) Se boken sid 205 6. 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) 2

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

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. 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 ])) 4

7. Lös en av följande uppgifter: (a) Följande uppgift är för de som har studerat språket χ: i. Ge ett exempel på ett program i språket χ som terminerar till svag huvud normal form, men vars fullständiga evaluering ej terminerar. Motivera! (10) s Ω, där s är en konstruerare och Ω är ett icketerminerande program ii. Bevisa att man i Haskell (eller något annat funktionellt språk) inte kan skriva en funktion halt :: (Nat -> Nat) -> Nat (15) -> Bool som är sådan att (halt f i) evaluerar till true om (f i) terminerar och annars evaluerar till false. Detta är bara en enkel variant av det extensionella stopp-problemet. Om vi har en funktion halt enl ovan skulle vi kunna definiera en funktion termcnv genom termcnv f i = if (halt f i) then loop else 1 som har egenskapen att termcnv f i terminerar om och endast om f i ej terminerar. Detta gäller för alla funktioner f. Speciellt för den funktion strange som är definierad av strange i = termcnv strange i Definitionen av strange visar att termcnv strange i terminerar samtidigt som strange i, vilket motsäger egenskapen ovan. (b) Följande uppgift är för de som studerat PCF: i. Define a PCF-program that behaves like the following Haskell program: (9) ack 0 m = S m ack (S n) 0 = ack n (S 0) ack (S n) (S m) = ack n (ack (S n) m) ack = fix (\f. \n. \m. if (iszero n) (Succ m) (if (iszero m) (f (pred n) (Succ Zero)) (f (pred n) (f n (pred m))))) 5

ii. Give the small steps semantics rules for fix and if. (6) Remember that there are three rules involving if! Let -> represent 1 step reduction For Fix Points Combinator: fix f -> f (fix f) For Conditionals: b -> b ----------------------- If b d e -> If b d e If True d e -> d If False d e -> e iii. Apply your program to the values Succ Zero and Succ Zero and show, using the small steps semantics of PCF, how to reduce the program to its value. (10) In order to simplify your answer, you can use the normal decimal representation of the Natural numbers, that is, you can simply write 2 instead of Succ(Succ Zero). In addition, you do not have to write all the steps in the reduction sequence but enough steps so that one can still follow the derivation. ack 1 1 ->* if (iszero 1) 2 (if (iszero 1) (ack 0 1) (ack 0 (ack 1 0))) ->* if (iszero 1) (ack 0 1) (ack 0 (ack 1 0)) ->* ack 0 (ack 1 0) ->* if (iszero 0) (Succ (ack 1 0)) (if (iszero (ack 1 0)) 6

(ack 0 1) (ack 0 (ack 0 (pred (ack 1 0))))) ->* Succ (ack 1 0) ->* Succ (if (iszero 1) 1 (if (iszero 0) (ack 0 1) (ack 0 (ack 1 0)))) ->* Succ (if (iszero 0) (ack 0 1) (ack 0 (ack 1 0))) ->* Succ (ack 0 1) ->* Succ (if (iszero 0) 2 (if (iszero 1) (ack 0 1) (ack 0 (ack 0 0)))) ->* Succ 2 -> 3 Lycka till! 7