Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
aa:lab:sol:12 [2024/01/15 00:22] stefan.sterea |
aa:lab:sol:12 [2024/01/19 12:21] (current) dmihai |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== TDA-uri și inducție structurală ====== | ||
+ | | ||
+ | |||
1. | 1. | ||
Line 33: | Line 36: | ||
| | ||
ipoteza inductiei: size(l) = size(mirror(l)), size(r) = size(mirror(r)) | ipoteza inductiei: size(l) = size(mirror(l)), size(r) = size(mirror(r)) | ||
- | size(Node(e, l, r)) = size(l) + size(r) + 1 (S2) | + | size(Node(e, l, r)) = 1 + size(l) + size(r) (S2) |
- | = size(r) + size(l) + 1 | + | = 1 + size(r) + size(l) (comutativitatea adunării) |
- | = size(mirror(r)) + size(mirror(l)) + 1 (ipoteza inductiei) | + | = 1 + size(mirror(r)) + size(mirror(l)) (ipoteza inductiei) |
= size(Node(e, mirror(r), mirror(l))) (S2) | = size(Node(e, mirror(r), mirror(l))) (S2) | ||
= size(mirror(Node(e, l, r)) (M2) | = size(mirror(Node(e, l, r)) (M2) | ||
Line 45: | Line 48: | ||
ipoteza inductiei: size(l) = length(flatten(l)), size(r) = length(flatten(r)) | ipoteza inductiei: size(l) = length(flatten(l)), size(r) = length(flatten(r)) | ||
- | size(Node(e, l, r)) = size(l) + size(r) + 1 (S2) | + | size(Node(e, l, r)) = 1 + size(l) + size(r) (S2) |
- | = length(flatten(l)) + length(flatten(r)) + 1 (ipoteza inductiei) | + | = 1 + length(flatten(l)) + length(flatten(r)) (ipoteza inductiei) |
- | = length(append(flatten(l), flatten(r)) + 1 (vom demonstra) | + | = 1 + length(append(flatten(l), flatten(r)) (vom demonstra) |
= length(Cons(e, append(flatten(l), flatten(r))) (L2) | = length(Cons(e, append(flatten(l), flatten(r))) (L2) | ||
= length(flatten(Node(e, l, r))) (F2) | = length(flatten(Node(e, l, r))) (F2) | ||
Line 64: | Line 67: | ||
pasul inductiei: | pasul inductiei: | ||
length(append(Cons(x, xs), b)) = length(Cons(x, append(xs, b))) (APP2) | length(append(Cons(x, xs), b)) = length(Cons(x, append(xs, b))) (APP2) | ||
- | = length(append(xs, b)) + 1 (L2) | + | = 1 + length(append(xs, b)) (L2) |
- | = length(xs) + length(b) + 1 (ip. inductiei) | + | = 1 + length(xs) + length(b) (ip. inductiei) |
- | = length(xs) + 1 + length(b) | + | = length(xs) + 1 + length(b) (comutativitatea adunării) |
+ | | ||
= length(Cons(x, xs)) + length(b) (L2) | = length(Cons(x, xs)) + length(b) (L2) | ||
Line 94: | Line 98: | ||
* $ \forall l_1, l_2 \in \texttt{List}. length(append(l_1, l_2)) = length(append(l_2, l_1)) $ | * $ \forall l_1, l_2 \in \texttt{List}. length(append(l_1, l_2)) = length(append(l_2, l_1)) $ | ||
- | facem inductie structurala dupa l_1 | ||
- | cazul de baza: | ||
- | length(append(Empty, l_2)) = length(l_2) (APP1) | ||
- | = length(append(l_2, Empty)) (4.c) | ||
- | ipoteza inductiei: length(append(l_1, l_2)) = length(append(l_2, l_1)) | + | facem inductie structurala dupa l_1 |
- | pasul inductiei: | + | cazul de baza: |
- | length(append(Cons(x, l_1), l_2)) = length(Cons(x, append(l_1, l_2))) (APP2) | + | length(append(Empty, l_2)) = length(l_2) (APP1) |
- | = length(append(l_1, l_2)) + 1 (L2) | + | = length(append(l_2, Empty)) (4.c) |
- | = length(l_1) + length(l_2) + 1 (LAPP) | + | |
- | = length(l_2) + length(l_1) + 1 | + | ipoteza inductiei: length(append(l_1, l_2)) = length(append(l_2, l_1)) |
- | = length(l_2) + length(Cons(x, l_1)) (L2) | + | pasul inductiei: |
- | = length(append(l_2, Cons(x, l_1))) (LAPP) | + | length(append(Cons(x, l_1), l_2)) = length(Cons(x, append(l_1, l_2))) (APP2) |
+ | = 1 + length(append(l_1, l_2)) (L2) | ||
+ | = 1 + length(l_1) + length(l_2) (LAPP) | ||
+ | = length(l_2) + 1 + length(l_1) (comutativitatea adunării) | ||
+ | = length(l_2) + length(Cons(x, l_1)) (L2) | ||
+ | = length(append(l_2, Cons(x, l_1))) (LAPP) | ||
| | ||
* $ \forall l_1, l_2 \in \texttt{List}. reverse(append(l_1, l_2)) = append(reverse(l_2), reverse(l_1)) $. | * $ \forall l_1, l_2 \in \texttt{List}. reverse(append(l_1, l_2)) = append(reverse(l_2), reverse(l_1)) $. | ||
+ | facem inductie structurala dupa l_1 | ||
+ | cazul de baza: | ||
+ | reverse(append(Empty, l_2)) = reverse(l_2) (APP1) | ||
+ | = append(reverse(l_2), Empty) (4.c) | ||
+ | = append(reverse(l_2), reverse(Empty)) (REV1) | ||
+ | |||
+ | ipoteza inductiei: reverse(append(l_1, l_2)) = append(reverse(l_2), reverse(l_1)) | ||
+ | pasul inductiei: | ||
+ | |||
+ | reverse(append(Cons(x, l_1), l_2)) = reverse(Cons(x, append(l_1, l_2))) (APP2) | ||
+ | = append(reverse(append(l_1, l_2)), Cons(x, Empty)) (REV2) | ||
+ | = append(append(reverse(l_2), reverse(l_1)), Cons(x, Empty)) (ip. inductivă) | ||
+ | = append(reverse(l_2), append(reverse(l_1), Cons(x, Empty))) (4.d) | ||
+ | = append(reverse(l_2), reverse(Cons(x, l_1))) (REV2) | ||