Antwoorden bij het herkansingstentamen ‘Structuren van de Informatica’ 28 augustus 2003 Vraag 1 1. p ⊕ ⊥ ≡ p 2. p ⊕ p ≡ ⊥ 3. p ∧ ⊥ ≡ ⊥ 4. p ∧ p ≡ p 5. p ∧ > ≡ p Vraag 2 1. Voor elke verzameling A geldt dat A ∩ {∅} = ∅. Dit is onjuist. Neem A = {∅}. Dan A ∩ {∅} = {∅} 6= ∅. 2. Voor elke deelverzameling X van A geldt dat X ∩ (A − X) 6= X. Dit is onjuist. Neem X = ∅. Dan X ∩ (A − X) = ∅ ∩ A = ∅ = X. 3. Als A ⊇ B en f : A → B is injectief, dan is A = B. Dit is onjuist. Neem A = N, B = {2n | n ∈ N} (de even natuurlijke getallen). en beschouw (λn.2n) : A → B. Deze functie is zeker een injectie, maar A 6= B. 4. Elke asymmetrische relatie R ⊆ A2 is bevat in een reflexieve, antisymmetrische relatie. Dit is juist. Neem de reflexieve afsluiting van R. Die is zowel reflexief als antisymmetrisch. Vraag 3 Elk priemgetal groter dan 2 is oneven, en heeft dus de vorm p = 2q + 1. Dus p 3 + 3 = (2q + 1)3 + 3 = (8q 3 + 12q 2 + 6q + 1) + 3 = 8q 3 + 12q 2 + 6q + 4 is even, dus niet priem. Vraag 4 Laat A en B verzamelingen zijn met |A| = m en |B| = n. 1. Als m > n zijn er geen injecties van A naar B. 2. Als m = n zijn er m! injecties van A naar B: laat A = {a1 , . . . , am }, en B = {b1 , . . . , bm }. Dan zijn er m manieren om het beeld bi van a1 te kiezen uit B , m − 1 manieren om het beeld van a2 te kiezen uit B − {bi }, enzovoorts. Vraag 5 Gegeven: R is een symmetrische en transitieve relatie is op A, en er is voor elke x ∈ A een y ∈ A met xRy. Te bewijzen: R is een equivalentie op A. Bewijs: dat R symmetrisch en transitief is is gegeven. We hoeven dus alleen nog te laten zien dat R reflexief is. Neem c ∈ A willekeurig. Dan is er volgens het gegeven een y ∈ A met cRy. Noem dit object d. We hebben dus cRd. Wegens symmetrie van R volgt hieruit dat dRc. Wegens transitiviteit van R volgt uit cRd en dRc dat cRc. Dus R is reflexief. Vraag 6 1. De laatste lijst in de uitvoer van ballgame [1] bevat 1 één. De laatste lijst in de uitvoer van ballgame [2] bevat 3 enen. De laatste lijst in de uitvoer van ballgame [3] bevat 9 enen. De laatste lijst in de uitvoer van ballgame [4] bevat 27 enen. 2. De laatste lijst in de uitvoer van ballgame [n] bevat 3n−1 enen. Hier is een bewijs met inductie. Basisgeval n = 1: De aanroep ballgame [1] geeft uitvoer [[1]], dus een slotlijst met 3 0 = 1 één. Inductiestap: Stel dat de slotlijst in de uitvoer van ballgame [n] bestaat uit 3 n−1 enen. Omdat de eerste stap in de reductie van [n+1] de lijst [n, n, n] is, bevat dd slotlijst van ballgame [n+1] de concatenatie van drie reducties van n. Volgens de inductiehypothese zijn dit dus samen 3·3 n−1 = 3n enen. 1 3. De uitvoer van ballgame [8] produceert 37 lijsten, waarvan de laatste uit 37 enen bestaat. 37 = 6561. Voor een computer is dat niet verschrikkelijk veel. De berekening van ballgame [8] termineert na een aantal seconden of hooguit minuten, afhankelijk van de snelheid van de processor. Vraag 7 1. De lege lijst voldoet aan de bittest, dus er is 1 lijst van lengte 0 die eraan voldoet. Zowel [1] als [0] voldoet aan de bittest, dus er zijn 2 lijsten van lengte 1 die eraan voldoen. [1, 1], [1, 0], [0, 1] zijn de lijsten van lengte 2 die voldoen aan de bittest, dat zijn er 3. [0, 1, 1], [0, 1, 0, [1, 1, 1], [1, 1, 0], [1, 0, 1] zijn de bitlijsten van lengte 3 die aan de bittest voldoen: dat zijn er 5. 2. Basisgeval: a0 = 1 = F2 , a1 = 2 = F3 . Inductiestap: Stel dat an = Fn+2 en an+1 = Fn+3 . We moeten laten zien dat an+2 = Fn+4 . Uit de bittest zien we dat we de bitlijsten van lengte n + 2 die aan de test voldoen kunnen krijgen door ofwel een 1 te zetten voor een bitlijst van lengte n + 1 die aan de test voldoet, ofwel een 0, 1 te zetten voor een bitlijst van lengte n die aan de test voldoet. Dat eerste kan volgens de inductiehypothese of an+1 = Fn+3 manieren, het tweede op an = Fn+2 manieren. Samen geeft dit an+2 = Fn+3 + Fn+2 = Fn+4 manieren. Vraag 8 data Tr a = Nil | T a (Tr a) (Tr a) deriving (Eq,Show) split :: [a] -> ([a],a,[a]) split xs = (ys1,y,ys2) where ys1 = take n xs (y:ys2) = drop n xs n = length xs ‘div‘ 2 buildTree :: [a] -> Tr a buildTree [] = Nil buildTree xs = T m (buildTree left) (buildTree right) where (left,m,right) = split xs 2