UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF 3230/4230 Formell modellering og analyse av kommuniserende systemer Eksamensdag: 24. mars 2006 Tid for eksamen: 13.30 16.30 Oppgavesettet er på 7 sider. Vedlegg: Ingen Tillatte hjelpemidler: Alle trykte og skrevne Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Oppgavene og deloppgavene kan til en stor grad løses uavhengig av hverandre. Om det er en deloppgave du ikke har løst, så kan du anta at du har løst den og kan prøve å gå videre i settet. Legg vekt på å finne enkle og elegante løsninger (selv om dette skulle gå på bekostning av effektivitet)! Poengtallene angitt i parentes for hver deloppgave er veiledende. Alle svar skal begrunnes. English! This exam is given in English after the Norwegian part, from page 5 onwards. (Fortsettes på side 2.)
Eksamen i INF 3230/4230, 24. mars 2006 Side 2 Oppgave 1 Konfluens (6 poeng) Gitt systemet {f (a) = b, f (f (x)) = x}. 1. Bevis at systemet ikke er konfluent. 2. Legg til én ligning, slik at systemet blir konfluent og terminerende, og slik at ikke fler termer blir like enn i den opprinnelige spesifikasjonen (d.v.s. t = u kan utledes i det nye systemet hvis og bare hvis det kunne utledes i det opprinnelige systemet). Bevis at den nye spesifikasjonen er konfluent. Oppgave 2 Terminering (17 poeng) Gitt systemet {f (g(x)) = h(x), h(x) = g(f (x)), a = b}. 1. Kan systemet bevises terminerende med vektings-teknikker? Hvis ja : bruk vekting til å bevise at systemet terminerer; hvis nei : bevis hvorfor det ikke finnes noen vektingsfunksjon som kan bevise terminering av systemet. 2. Kan systemet bevises terminerende med den leksikografiske stiordningen eller med multisett stiordningen? 3. Fins det noen forenklingsordning som kan bevise terminering av systemet? Begrunn godt! Oppgave 3 Merge-sort (16 poeng) Vi skal i denne oppgaven rett og slett sortere en liste av naturlige tall med sorteringsalgoritmen merge-sort. Gitt en liste som skal sorteres, så blir denne algoritmen beskrevet som som følger (i boken Data Structures and Problem Solving Using Java av M. A. Weiss): 1. Dersom antall elementer å sortere er 0 eller 1, så skal man returnere (listen er allerede ferdigsortert). 2. Ellers: del opp listen i to like store deler 1 og sorter rekursivt de to delene hver for seg (med bruk av merge-sort, selvfølgelig). 3. Flett sammen de to ferdig-sorterte halve listene fra punktet over til en hel ferdigsortert liste. 1 eller hvor den første halvparten har ett element mer enn den andre halvparten (Fortsettes på side 3.)
Eksamen i INF 3230/4230, 24. mars 2006 Side 3 For eksempel, for å sortere listen 4 2 3 1, så tar vi først og deler denne i de to delene 4 2 og 3 1. Hver av disse skal nå sorteres. Listen 4 2 deles nå opp i de to listene 4 og 2. Disse to listene flettes nå sammen i stigende rekkefølge, og resultatet av flettingen er den sorterte listen 2 4. Denne skal altså nå flettes sammen med resultatet av å sortere sammen del-listen 3 1, som må være 1 3. Resultatet av å flette sammen 2 4 og 1 3 er den sorterte listen 1 2 3 4. 3a Merge-sort funksjonen (13 poeng) Gitt vår gamle gode spesifikasjon av lister av heltall fmod LIST-INT is protecting INT. sorts List NeList. subsorts Int < NeList < List. *** Constructors op nil : -> List [ctor]. op : List List -> List [assoc id: nil ctor]. op : NeList NeList -> NeList [assoc id: nil ctor]. op length : List -> Nat. var I : Int. var L : List. eq length(nil) = 0. eq length(i L) = 1 + length(l). endfm så skal du rett og slett definere/programmere funksjonen op mergesort : List -> List. slik at mergesort(l) sorterer listen l etter algoritmen merge-sort beskrevet over. Eksempelvis så skal Maude kommandoen Maude> red mergesort(6 5 89 12-5 33 2 5 2 5 8 1 0). returnere svaret result NeList: -5 0 1 2 2 5 5 5 6 8 12 33 89 (Fortsettes på side 4.)
Eksamen i INF 3230/4230, 24. mars 2006 Side 4 3b Induktive teoremer (3 poeng) Anta nå at det er bevist at funksjonen quicksort fra kompendiet er korrekt, dvs. at den sorterer en liste korrekt. Man kunne tenke seg at man ønsket å bevise at din mergesort funksjon også er korrekt. Angi nøyaktig hvilken egenskap/teorem man må bevise for å bevise at din mergesort funksjon er korrekt. Merk: du trenger ikke å foreta selve beviset for korrekthet, men bare formelt angi hvilken egenskap man skulle ønske å bevise! Lykke til! Peter C. Ølveczky (Fortsettes på side 5.)
Eksamen i INF 3230/4230, 24. mars 2006 Side 5 The exam in English The following pages present the (same!) exam exercises in English. The exercises can, to a certain degree, be solved independently of each other. If you have not solved an exercise, you may assume that you have solved it and can continue with other exercises. Emphasize simplicity and elegance in your solutions (even at the cost of computational efficiency of your specifications)! All answers should be explained/justified. Exercise 1 Confluence (6 points) Given the specification {f (a) = b, f (f (x)) = x}. 1. Prove that the system is not confluent. 2. Add one equation to the system so that it becomes terminating and confluent, and so that no more terms are equivalent in the new specification than in the old one (that is, t = u should hold in the new specification if and only if it holds in the old one). Prove that the new specification is confluent. Exercise 2 Termination (17 points) Consider the specification {f (g(x)) = h(x), h(x) = g(f (x)), a = b}. 1. Can the system be proved to terminate using weight functions? If yes : use weight function techniques to prove termination of the system; if no : prove why there cannot exist any weight function that can prove that the specification above is terminating. 2. Can the system be proved to be terminating using the lexicographic path ordering or the multiset path ordering? Explain. 3. Does there exist a simplification ordering that can be used to prove that the system is terminating. Justify your answer well. (Fortsettes på side 6.)
Eksamen i INF 3230/4230, 24. mars 2006 Side 6 Exercise 3 Merge-Sort (16 points) In this exercise we define/program the well-known merge-sort algorithm for sorting lists. Given a list to sort, this algorithm is described as follows (in the book Data Structures and Problem Solving Using Java by M. A. Weiss): 1. If the number of items to sort is 0 or 1, return (such a list is of course already sorted). 2. Otherwise: split the list into two halves with the same number of elements in each half 2, and recursively sort the first and second halves separately. 3. Merge the two sorted halves into a sorted group. For example, to sort the list 4 2 3 1, we first split it into the two halves 4 2 and 3 1. Each of these must now be sorted. The list 4 2 is now split into the two lists 4 and 2. These are now merged together in increasing order, and the result of this merger is the list 2 4. This one should now be merged with the result of sorting 3 1, that should be 1 3. The result of merging 2 4 and 1 3 is then the sorted list 1 2 3 4. Exercise 3a Defining the mergesort Function (13 points) Given the following good old specification of lists of natural numbers: fmod LIST-INT is protecting INT. sorts List NeList. subsorts Int < NeList < List. *** Constructors op nil : -> List [ctor]. op : List List -> List [assoc id: nil ctor]. op : NeList NeList -> NeList [assoc id: nil ctor]. op length : List -> Nat. var I : Int. var L : List. eq length(nil) = 0. eq length(i L) = 1 + length(l). endfm 2 or such that the first part has one more element than the second part (Fortsettes på side 7.)
Eksamen i INF 3230/4230, 24. mars 2006 Side 7 you should define/program the function op mergesort : List -> List. such that mergesort(l) sorts the list l according to the algorithm merge-sort described above. For example, the Maude command Maude> red mergesort(6 5 89 12-5 33 2 5 2 5 8 1 0). should return the result result NeList: -5 0 1 2 2 5 5 5 6 8 12 33 89 Exercise 3b Inductive Theorems (3 points) Of course, we would like to argue that our mergesort is correct. Assume that it has somehow been proved that the quicksort function in the lecture notes is correct; that is, that is correctly sorts a list. In this exercise you should state precisely and formally the property that states that mergesort correctly sorts a list. Note: you should just state formally the property that we would like to prove; you do not need to prove it! Good luck! Peter C. Ølveczky