annotate exercises/src/Exercise_10.hs @ 24:34fea195e238

beautify layout
author Markus Kaiser <markus.kaiser@in.tum.de>
date Fri, 21 Dec 2012 01:44:45 +0100
parents f9386825bf71
children ce9610f08925
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
1 module Exercise_10 (module Join, module SafeMap) where
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
2
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
3 {- Library DO NOT CHANGE -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
4 import SafeMap (SafeMap, empty, update, lookup)
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
5 import Join (Field, doJoin, doJoinFormat, parseFormat)
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
6 {- End Library -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
7
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
8
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
9 {---------------------------------------------------------------------}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
10 {- Aufgabe G10.1 -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
11
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
12 {-
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
13
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
14 Abstraktionsfunktion alpha:
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
15
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
16 \alpha [] = {} -- alpha_empty
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
17 \alpha (x:xs) = {x} \union \alpha xs -- alpha_cons
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
18
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
19 Simulationseigenschaften:
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
20
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
21 1. \alpha empty = {} -- sim_empty
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
22 2. \alpha (insert x xs) = {x} \union \alpha xs -- sim_insert
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
23 3. isin x xs = x \in \alpha xs -- sim_isin
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
24 4. size xs = |\alpha xs| -- sim_size
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
25
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
26 Implementierung 1 - Listen mit Duplikaten:
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
27
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
28 empty = [] -- imp_empty
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
29 insert x xs = x : xs -- imp_insert
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
30 isin x xs = elem x xs -- imp_isin
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
31 size xs = length (nub xs) -- imp_size
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
32
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
33 elem _ [] = False -- elem_empty
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
34 elem x (y:ys) = x == y || elem x ys -- elem_cons
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
35
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
36 nub [] = [] -- nub_empty
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
37 nub (x:xs) | x `elem` xs = nub xs -- nub_cons_elem
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
38 | otherwise = x : nub xs -- nub_cons_notelem
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
39
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
40 Korrektheitsbeweise:
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
41
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
42 1. \alpha empty
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
43 =
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
44 2. \alpha (insert x xs)
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
45 =
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
46 3. isin x xs
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
47 =
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
48 4. size xs
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
49 =
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
50
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
51 Hilfslemmata:
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
52
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
53 elem x xs = x \in \alpha xs -- lemma_elem
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
54
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
55 Proof by structural induction on xs
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
56
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
57 Base case: lemma_elem([])
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
58 To show:
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
59
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
60 Induction step: lemma_elem(ys) => lemma_elem(y : ys)
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
61 IH:
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
62 To show:
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
63
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
64 length (nub xs) = |\alpha xs| -- lemma_length
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
65
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
66 Proof by structural induction on xs
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
67
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
68 Base case: lemma_length([])
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
69 To show:
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
70
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
71 Induction step: lemma_length(ys) => lemma_length(y : ys)
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
72 IH:
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
73 To show:
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
74
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
75 Proof by cases:
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
76 Case:
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
77
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
78 Case:
23
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
79
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
80 -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
81
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
82
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
83
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
84 {---------------------------------------------------------------------}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
85 {- Aufgabe G10.2 -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
86
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
87 {- siehe SetPairList.hs -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
88
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
89
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
90
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
91 {---------------------------------------------------------------------}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
92 {- Aufgabe G10.3 -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
93
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
94 {- siehe Queue.hs und SuperQueue.hs -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
95
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
96 {-
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
97 Definition von \alpha:
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
98
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
99 \alpha (Queue front kcab) = undefined
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
100
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
101
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
102 Simulationseigenschaften: (5)
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
103
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
104
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
105
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
106 Beweise:
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
107 -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
108
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
109
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
110
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
111 {---------------------------------------------------------------------}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
112 {- Aufgabe H10.1 -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
113
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
114 {- siehe SafeMap.hs -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
115
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
116
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
117
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
118 {---------------------------------------------------------------------}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
119 {- Aufgabe H10.2 -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
120
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
121 {- siehe Join.hs -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
122
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
123
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
124
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
125 {---------------------------------------------------------------------}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
126 {- Aufgabe H10.3 -}
f9386825bf71 week 10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
127
24
34fea195e238 beautify layout
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 23
diff changeset
128 {- siehe Morsi.hs -}