Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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)