Advertisement
Guest User

Untitled

a guest
May 21st, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.32 KB | None | 0 0
  1. Beispiel 1a:
  2.  
  3. Functions:
  4. div(a,b) = divh(a,b,0)
  5. divh(a,b,0) = if lt?(minus(a,b), 0) then c else divh(minus(a,b), b, plus(c,1))
  6.  
  7. Theorem:
  8. forall ω in ENV: I(δ, ω, div(a,b)) = ω(a) / ω(b) (+ R, with R ... Rest of integer division)
  9.  
  10. Proof:
  11. ω(a) = n, with n >= 0
  12. ω(b) = m, with m > 0
  13.  
  14. I(δ, ω, div(a,b))
  15. = I(δ, ω', divh(a, b, 0)) with
  16. ω'(a) = I(δ, ω, a) = ω(a) = n
  17. ω'(b) = I(δ, ω, b) = ω(b) = m
  18. ω'(c) = I(δ, ω, 0) = 0
  19. = ω'(a) / ω'(b) + ω'(c) lr Lemma 1
  20. = n / m + 0
  21. = n / m
  22. q.e.d.
  23.  
  24. Lemma 1:
  25. forall ω in ENV: I(δ, ω, divh(a, b, c)) = ω(a) / ω(b) + ω(c)
  26.  
  27. Base case of Lemma 1:
  28. ω(a) = 0
  29. ω(b) = m, with arbitrary value in N \ {0}
  30. ω(c) = k, with arbitrary value in N^0
  31.  
  32. I(δ, ω, divh(a, b, c))
  33. = I(δ, ω', if lt?(minus(a,b), 0) then c
  34. else divh(minus(a,b), b, plus(c,1)))
  35. with
  36. ω'(a) = I(δ, ω, a) = ω(a) = 0
  37. ω'(b) = I(δ, ω, b) = ω(b) = m
  38. ω'(c) = I(δ, ω, c) = ω(c) = k
  39. = I(δ, ω', c) since I(δ, ω', lt?(minus(a, b), 0)) = T
  40. = ω'(c)
  41. = k
  42. = 0 / m + k
  43. = ω(a) / ω(b) + ω(c)
  44. q.e.d.
  45.  
  46. Induction step of Lemma 1:
  47. ω(a) = n + 1, n >= 0
  48. ω(b) = m, m > 0
  49. ω(c) = k, with arbitrary value in N^0
  50.  
  51. I(δ, ω, divh(a, b, c))
  52. = I(δ, ω', if lt?(minus(a,b), 0) then c
  53. else divh(minus(a,b), b, plus(c,1)))
  54. with
  55. ω'(a) = I(δ, ω, a) = ω(a) = n + 1
  56. ω'(b) = I(δ, ω, b) = ω(b) = m
  57. ω'(c) = I(δ, ω, c) = ω(c) = k
  58.  
  59. CASE I: I(δ, ω', lt?(minus(a,b), 0)) = F => n + 1 > m (ω'(a) >= ω'(b))
  60.  
  61. = I(δ, ω', divh(minus(a,b), b, plus(c,1)))
  62.  
  63. = I(δ, ω'', divh(a, b, c)) with
  64. ω''(a) = I(δ, ω', minus(a, b)) = ω'(a) - ω'(b) = n + 1 - m
  65. ω''(b) = I(δ, ω', b) = ω'(b) = m
  66. ω''(c) = I(δ, ω', plus(c, 1)) = ω'(c) + 1 = k + 1
  67. = ω''(a) / ω''(b) + ω''(c) hypothesis
  68. = (n + 1 - m )/ m + k + 1
  69. = (n + 1) / m + k
  70. = ω(a)/ ω(b) + ω(c)
  71. q.e.d.
  72.  
  73.  
  74. CASE II: I(δ, ω', lt?(minus(a,b), 0)) = T => n + 1 < m (ω'(a) < ω'(b))
  75.  
  76. = I(δ, ω', c)
  77.  
  78. = ω'(c) = I(δ, ω, c) = ω(c) = k
  79. = k
  80. = 0 + k
  81. = n / m + k with n < m (since n+1 < m)
  82. = ω(a) / ω(b) + ω(c)
  83. q.e.d.
  84.  
  85. Beispiel 1b:
  86.  
  87. Functions:
  88. mod(a,b) = if lt?(minus(a, b), 0) then a else mod(minus(a,b), b)
  89.  
  90. #Note: No helper function necessary => proof lemma directly for mod(a,b)
  91.  
  92. Theorem:
  93. forall ω in ENV: I(δ, ω, mod(a,b)) = ω(a) % ω(b)
  94.  
  95. Proof:
  96. ω(a) = n, with n >= 0
  97. ω(b) = m, with m > 0
  98.  
  99. I(δ, ω, mod(a,b))
  100. = I(δ, ω, if lt?(minus(a, b), 0) then a
  101. else mod(minus(a,b), b)) with
  102. ω(a) = n
  103. ω(b) = m
  104. = ω(a) % ω(b) lr Lemma 1
  105. = n % m
  106. q.e.d.
  107.  
  108. Lemma 1:
  109. forall ω in ENV: I(δ, ω, mod(a, b)) = ω(a) % ω(b)
  110.  
  111. Base case of Lemma 1:
  112. ω(a) = 0
  113. ω(b) = m, with arbitrary value in N \ {0}
  114.  
  115. I(δ, ω, mod(a, b))
  116. = I(δ, ω, if lt?(minus(a, b), 0) then a
  117. else mod(minus(a,b), b))
  118. with
  119. ω(a) = 0
  120. ω(b) = m
  121. = I(δ, ω, a) since I(δ, ω, lt?(minus(a, b), 0)) = T
  122. = ω(a)
  123. = 0
  124. = 0 % m
  125. = ω(a) % ω(b)
  126. q.e.d.
  127.  
  128. Induction step of Lemma 1:
  129. ω(a) = n + 1, n >= 0
  130. ω(b) = m, m in N \ {0}
  131.  
  132. I(δ, ω, mod(a, b))
  133. = I(δ, ω, if lt?(minus(a, b), 0) then a
  134. else mod(minus(a,b), b))
  135. with
  136. ω(a) = n + 1
  137. ω(b) = m
  138.  
  139. CASE I: I(δ, ω, lt?(minus(a,b), 0)) = F => n + 1 > m (ω(a) >= ω(b))
  140.  
  141. = I(δ, ω, mod(minus(a,b), b))
  142.  
  143. = I(δ, ω', mod(a, b)) with
  144. ω'(a) = I(δ, ω, minus(a, b)) = ω'(a) - ω'(a) = n + 1 - m
  145. ω'(b) = I(δ, ω, b) = ω(b) = m
  146.  
  147. = ω'(a) % ω'(b) hypothesis
  148. = (n + 1 - m ) % m
  149. = (n + 1) % m
  150. = ω(a) % ω(b)
  151. q.e.d.
  152.  
  153.  
  154. CASE II: I(δ, ω, lt?(minus(a,b), 0)) = T => n + 1 < m (ω'(a) < ω'(b))
  155.  
  156. = I(δ, ω, a)
  157.  
  158. = ω(a) = n + 1
  159. = n + 1
  160. = n + 1 % m since n+1 < m
  161. = ω(a) % ω(b)
  162. q.e.d.
  163.  
  164.  
  165. ------------------------------------------------------------------------------------------
  166.  
  167. Beispiel 3:
  168.  
  169. 1) max(x1, x2) soll immer die Liste mit der größeren Verschachtelungstiefe zurückgeben.
  170. Dafür wird die Funktion rest(x1) benötigt, welche im Übungsskriptum definiert ist.
  171. Die Definition von rest(x1) besagt allerdings, dass wenn x1 eine Liste ist, die
  172. leere Liste [] als Ergebnis von rest zurückgegeben werden soll. Dadurch wird die
  173. eigentliche Tiefe von l in max ignoriert (sofern die Tiefe einer Liste >= 2
  174. und die der anderen > 2 ist).
  175.  
  176. In max wird zunächst überprüft ob einer der zwei Parameter x1, x2 nil ist. In diesem
  177. Fall könnte gleich der jeweils andere Parameter zurückgegeben werden (im Falle,
  178. dass dieser ebenfalls nil ist, stimmt liefert max ebenfalls eine korrekte Lösung).
  179. Sind weder x1, noch x2 nil, wird eine "neue" Liste aufgebaut (mit build), die
  180. mithilfe vom Rekursionsaufruf von max mit den Parametern rest(x1) und rest(x2),
  181. letztendlich dieselbe Verschachtelungstiefe wie die größere der zwei
  182. Eingangslisten aufweisen soll. Da rest aber bei Listen mit
  183. einer Verschachtelungstiefe >= 2 das falsche Ergebnis liefert, kann hat die neue
  184. Liste, die von max zurückgegeben wird, nicht die richtige Tiefe (sondern maximal [],
  185. also "1") haben, sofern eine der Listen eine Tiefe >= 2 und die andere eine Tiefe
  186. von > 2 hat.
  187.  
  188. 2) Beispiel: max([[]], [[[]]])
  189. ω(x1) = [[]]
  190. ω(x2) = [[[]]]
  191. ω(x3) = nil
  192.  
  193. I(δ, ω, max(x1, x2))
  194. = I(δ, ω, if eq?(x1, nil) then x2
  195. else if eq?(x2, nil) then x1
  196. else build(max(rest(x1), rest(x2)), x3)) with
  197. ω(x1) = [[]]
  198. ω(x2) = [[[]]]
  199. ω(x3) = nil
  200. = I(δ, ω, build(max(rest(x1), rest(x2)), x3))
  201.  
  202. = I(δ, ω', build(max(x1, x2), x3)) with
  203. ω'(x1) = I(δ, ω, rest(x1)) = []
  204. ω'(x2) = I(δ, ω, rest(x2)) = [] !Here is the problem!
  205. ω'(x3) = ω(x3) = nil = [] nil = "empty list" = []
  206. = I(δ, ω', if eq?(x1, nil) then x2
  207. else if eq?(x2, nil) then x1
  208. else build(max(rest(x1), rest(x2)), x3))
  209. = I(δ, ω', build(x2, x3)) with
  210. ω'(x2) = []
  211. ω'(x3) = []
  212.  
  213. = [[]] which is obviously wrong.
  214.  
  215. 3) Korrektur von max
  216.  
  217. δmax = if eq?(x1, nil) then x2
  218. else if eq?(x2, nil) then x1
  219. else build(max(first(x1), first(x2)), nil)
  220.  
  221. Durch die Verwendung von first anstelle von rest wird sichergestellt,
  222. dass die Verschachtelungstiefe auch für Listen mit einer Tiefe > 2 korrekt
  223. in max bestimmt wird. Laut der Definition von first im Skriptum wird immer
  224. das erste Element in der mitgegebenen Liste zurückgegeben. Dadurch wird
  225. auch im Falle von einer Listentife > 2 oft genug build aufgerufen, um
  226. die korrekte maximale Verschachtelungstiefe zu bestimmen.
  227.  
  228. 4) Beispiel: max([[]], [[[]]])
  229. ω(x1) = [[]]
  230. ω(x2) = [[[]]]
  231. ω(x3) = nil
  232.  
  233. I(δ, ω, max(x1, x2))
  234. = I(δ, ω, if eq?(x1, nil) then x2
  235. else if eq?(x2, nil) then x1
  236. else build(max(first(x1), first(x2)), x3)) with
  237. ω(x1) = [[]]
  238. ω(x2) = [[[]]]
  239. ω(x3) = nil
  240. = I(δ, ω, build(max(first(x1), first(x2)), x3))
  241.  
  242. = I(δ, ω', build(max(x1, x2), x3)) with
  243. ω'(x1) = I(δ, ω, first(x1)) = []
  244. ω'(x2) = I(δ, ω, first(x2)) = [[]]
  245. ω'(x3) = ω(x3) = nil = [] nil = "empty list" = []
  246. = I(δ, ω', if eq?(x1, nil) then x2
  247. else if eq?(x2, nil) then x1
  248. else build(max(first(x1), first(x2)), x3))
  249. = I(δ, ω', build(x2, x3)) with
  250. ω'(x2) = [[]]
  251. ω'(x3) = []
  252.  
  253. = [[[]]] which is correct.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement