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:4 [2025/10/27 17:47]
dmihai
aa:lab:sol:4 [2025/10/27 23:23] (current)
rares_stefan.balcan
Line 1: Line 1:
-====== Soluții ​inducție structurală ​======+====== Soluții ​Laboratorul 4 ======
  
-1.+===== Enunțuri =====
  
-** Cazul de bază **+Demonstrați următoarele proprietăți folosind inducție structurală:​
  
-<​code>​ +  - **1.** ∀l∈List.reverse(reverse(l))=
-reverse(reverse(Void)) =(REV1) reverse(Void) =(REV1Void +  - **2.** ∀r∈Ring,​size(move(r))=size(r  
-</​code>​+  - **3.** ∀i∈N,​∀r∈Ring,​element(i,​move(r))=element(i+1,​r)
  
-**Pas de inducție**+===== Soluții =====
  
-Presupunem:+==== 1. ∀l∈List.reverse(reverse(l))=l ====
  
-<​code>​ +**Cazul de bază:** 
-reverse(reverse(l)) = l + 
-</​code>​+\[ 
 +\mathsf{reverse}(\mathsf{reverse}(\mathsf{Void}))  
 +\overset{(\text{REV1})}{=}  
 +\mathsf{reverse}(\mathsf{Void})  
 +\overset{(\text{REV1})}{=}  
 +\mathsf{Void} 
 +\] 
 + 
 +**Pas de inducție:​** 
 + 
 +Presupunem:​ 
 +\[ 
 +\mathsf{reverse}(\mathsf{reverse}(l)) = l 
 +\]
  
 Arătăm: Arătăm:
 +\[
 +\mathsf{reverse}(\mathsf{reverse}(\mathsf{Cons}(x,​ l))) = \mathsf{Cons}(x,​ l)
 +\]
  
-<​code>​ +\[ 
-reverse(reverse(Cons(x,​ l)) =( Cons(x, l) +\begin{aligned} 
-</​code>​+\mathsf{reverse}(\mathsf{reverse}(\mathsf{Cons}(x, l))
 +&​\overset{(\text{REV2})}{=}  
 +\mathsf{reverse}(\mathsf{append}(\mathsf{reverse}(l),​ \mathsf{Cons}(x, \mathsf{Void}))) \\ 
 +&​\overset{(\text{L1})}{=} 
 +\mathsf{append}(\mathsf{reverse}(\mathsf{Cons}(x,​ \mathsf{Void})),​ \mathsf{reverse}(\mathsf{reverse}(l))) \\ 
 +&​\overset{(\text{II})}{=} 
 +\mathsf{append}(\mathsf{reverse}(\mathsf{Cons}(x,​ \mathsf{Void})),​ l) \\ 
 +&​\overset{(\text{REV2})}{=} 
 +\mathsf{append}(\mathsf{Cons}(x,​ \mathsf{reverse}(\mathsf{Void})),​ l) \\ 
 +&​\overset{(\text{REV1})}{=} 
 +\mathsf{append}(\mathsf{Cons}(x,​ \mathsf{Void}),​ l) \\ 
 +&​\overset{(\text{APP2})}{=} 
 +\mathsf{Cons}(x,​ \mathsf{append}(\mathsf{Void},​ l)) \\ 
 +&​\overset{(\text{APP1})}{=} 
 +\mathsf{Cons}(x,​ l) 
 +\end{aligned} 
 +\]
  
-<​code>​ +Unde **L1** este lema: 
-reverse(reverse(Cons(xl)) =(REV2) ​reverse(append(reverse(l), Cons(xVoid)) =(L1) append(reverse(Cons(x, Void)), reverse(reverse(l))) =(II) append(reverse(Cons(x,​ Void)), l) =(REV2) append(Cons(x,​ reverse(Void)),​ l) =(REV1) append(Cons(x,​ Void), l) =(APP2) Cons(x, append(Void,​ l)) =(APP1) Cons(x, l+\[ 
-</​code>​+\forall l_1l_2 \in \mathsf{List},​\  
 +\mathsf{reverse}(\mathsf{append}(l_1l_2)) = \mathsf{append}(\mathsf{reverse}(l_2), \mathsf{reverse}(l_1)) 
 +\]
  
-Unde ''​L1''​ este lemma: $ \forall l1, l2 \in List, reverse(append(l1,​ l2)) = append(reverse(l2),​ reverse(l1))$, ​care necesită o demonstrație separată, tot prin inducție structurală după ''​l1''​.+care necesită o demonstrație separată, tot prin inducție structurală după \(l_1\).
  
-**Caz de bază**:+=== Demonstrația lemei L1 ===
  
-<​code>​ +**Caz de bază:**
-reverse(append(Void,​ l2)) =(APP1) = reverse(l2) =(L3) reverse(append(l2,​ Void)) +
-</​code>​+
  
-(''​L3''​ este propoziția $ \forall l \in List, append(l, Void) = l$, cu o demonstrație ușoară, omisă aici; vă recomandăm să explicitați voi demonstrația,​ prin inducție structurală după $ l$).+\[ 
 +\mathsf{reverse}(\mathsf{append}(\mathsf{Void}l_2)) 
 +\overset{(\text{APP1})}{=} 
 +\mathsf{reverse}(l_2) 
 +\overset{(\text{L3})}{=} 
 +\mathsf{reverse}(\mathsf{append}(l_2\mathsf{Void})) 
 +\]
  
-**Pas de inducție**:+unde **L3** este propoziția: 
 +\[ 
 +\forall l \in \mathsf{List},​\ \mathsf{append}(l,​ \mathsf{Void}) = l 
 +\]
  
-Presupunem:+cu o demonstrație ușoară (omisă aici), ce se poate face prin inducție structurală după \(l\).
  
-<​code>​ +**Pas de inducție:​** 
-reverse(append(l, ​l2)) = append(reverse(l2), reverse(l)) + 
-</​code>​+Presupunem:​ 
 +\[ 
 +\mathsf{reverse}(\mathsf{append}(l, l_2))  
 + 
 +\mathsf{append}(\mathsf{reverse}(l_2), \mathsf{reverse}(l)) 
 +\]
  
 Arătăm: Arătăm:
 +\[
 +\mathsf{reverse}(\mathsf{append}(\mathsf{Cons}(x,​ l), l_2)) 
 +
 +\mathsf{append}(\mathsf{reverse}(l_2),​ \mathsf{reverse}(\mathsf{Cons}(x,​ l)))
 +\]
  
-<​code>​ +\[ 
-reverse(append(Cons(x,​ l), l2)) = append(reverse(l2), reverse(Cons(x,​ l))) +\begin{aligned} 
-</​code>​+\mathsf{reverse}(\mathsf{append}(\mathsf{Cons}(x, l), l_2)) 
 +&​\overset{(\text{APP2})}{=
 +\mathsf{reverse}(\mathsf{Cons}(x,​ \mathsf{append}(l, l_2))) \\ 
 +&​\overset{(\text{REV2})}{=} 
 +\mathsf{append}(\mathsf{reverse}(\mathsf{append}(l,​ l_2)), \mathsf{Cons}(x,​ \mathsf{Void})) \\ 
 +&​\overset{(\text{II})}{=} 
 +\mathsf{append}(\mathsf{append}(\mathsf{reverse}(l_2), \mathsf{reverse}(l)),​ \mathsf{Cons}(x, \mathsf{Void})) \\ 
 +&​\overset{(\text{Asoc.})}{=} 
 +\mathsf{append}(\mathsf{reverse}(l_2),​ \mathsf{append}(\mathsf{reverse}(l), \mathsf{Cons}(x,​ \mathsf{Void}))) \\ 
 +&​\overset{(\text{REV2})}{=} 
 +\mathsf{append}(\mathsf{reverse}(l_2),​ \mathsf{reverse}(\mathsf{Cons}(x,​ l))) 
 +\end{aligned} 
 +\]
  
-<code+<note important
-reverse(append(Cons(x, l), l2)) =(APP2reverse(Cons(xappend(ll2)) =(REV2) append(reverse(append(ll2)), Cons(x, Void))) =(II) append(append(reverse(l2)reverse(l)), Cons(x, Void)) =(Asocativitate append) ​append(reverse(l2), append(reverse(l), Cons(xVoid)) =(REV2append(reverse(l2), reverse(Cons(x,​ l))) +**Asociativitatea** operației \(\mathsf{append}\) (i.e. \(\forall l_1l_2l_3,\ \mathsf{append}(\mathsf{append}(l_1l_2), l_3) = \mathsf{append}(l_1\mathsf{append}(l_2l_3))\)) este tot o teoremă care trebuie demonstrată prin inducție structurală. Deși laborioasăea este esențial simplă. Vă recomandăm să o redactați explicit. 
-</code>+</note>
  
 <​note>​ <​note>​
-Asociativitatea operației ''​append''​ (i.e$ \forall l1l2l3, append(append(l1, l2), l3) = append(l1, append(l2l3))$este tot o teoremă care trebuie demonstrată prin inducție structurală;​ deși laborioasăeste în esență simplă. Vă recomandăm să o redactați explicit.+**Notă:** Într-un sens computațional, axiomele noastre reprezintă //reguli de derivare// care ne spun că putem înlocui expresia din stânga cu cea din dreaptaAstfelun simbol simetric ca „=" nu este perfect potrivitiar expresii precum \(1 + \mathsf{size}(l\overset{(\text{SZ2})}{=} \mathsf{size}(\mathsf{Cons}(el))\sunt abuzuri de notație, deoarece folosim derivarea „în sens invers"​. 
 + 
 +Totuși, chiar și cu acest abuz, demonstrațiile rămân corecte și riguroase: putem rescrie separat pentru a arăta că ambele părți ale egalității se pot deriva în aceeașexpresie.
 </​note>​ </​note>​
  
 +==== 2. ∀r∈Ring,​size(move(r))=size(r) ====
  
 +**Cazuri de bază:**
  
-<​note>​ +\[ 
-**Notă*: Într-un sens computațional,​ axiomele noastre reprezintă *reguli de derivare* care ne spun că putem înlocui expresia din stânga cu cea din dreapta. Astfel, un simbol simetric ca ''​=''​ nu pare foarte potrivit, iar expresii de forma ''​1 + size(l=(SZ2) size(Cons(e, l))''​ sunt abuzuri de notație, deoarece folosim derivarea "în sens invers"​.+\mathsf{size}(\mathsf{move}(\mathsf{Empty})
 +\overset{(\text{MOV1})}{=} 
 +\mathsf{size}(\mathsf{Empty}) 
 +\]
  
-Totuși, chiar și cu această interpretare, în afară de abuzul notațional, ​demonstrațiile noastre sunt corecte și riguroase: putem să le rescriem pentru a arăta separat că, din egalitatea ce trebuie demonstrată, și partea stângă și partea dreapta, pot fi derivate separat în aceași expresie.+\[ 
 +\forall x,\  
 +\mathsf{size}(\mathsf{move}(\mathsf{Push}(x,​ \mathsf{Empty}))) 
 +
 +\mathsf{size}(\mathsf{Push}(x,​ \mathsf{Empty})) 
 +\] 
 + 
 +Rezultă direct din axioma \(\text{MOV2}\). 
 + 
 +<​note>​ 
 +Considerând ​și \(\mathsf{Push}(x\mathsf{Empty})\) un caz de bază, putem ca în demonstrația următoare ​să folosim doar forma generală \(\mathsf{Push}(er)\) ca ipoteză de inducție.
 </​note>​ </​note>​
  
 +**Pas de inducție:​**
  
-2. +Presupunem:​ 
 +\[ 
 +\forall e,\  
 +\mathsf{size}(\mathsf{move}(\mathsf{Push}(e,​ r)))  
 +=  
 +\mathsf{size}(\mathsf{Push}(e,​ r)) 
 +\]
  
-**Cazuri de bază**:+Arătăm: 
 +\[ 
 +\forall x,\forall e,\  
 +\mathsf{size}(\mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(e,​ r))))  
 +=  
 +\mathsf{size}(\mathsf{Push}(x,​ \mathsf{Push}(e,​ r))) 
 +\]
  
-<​code>​ +\[ 
-size(move(Empty)) =(MOV1) size(Empty)+\begin{aligned} 
 +\mathsf{size}(\mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(e,​ r))))  
 +&​\overset{(\text{MOV3})}{=
 +\mathsf{size}(\mathsf{Push}(e,​ \mathsf{move}(\mathsf{Push}(x,​ r)))) \\ 
 +&​\overset{(\text{SZ2})}{=} 
 +1 + \mathsf{size}(\mathsf{move}(\mathsf{Push}(x,​ r))) \\ 
 +&​\overset{(\text{II})}{=} 
 +1 + \mathsf{size}(\mathsf{Push}(x,​ r)) \\ 
 +&​\overset{(\text{SZ2})}{=} 
 +2 + \mathsf{size}(r) \\ 
 +&​\overset{(\text{SZ2})}{=} 
 +1 + \mathsf{size}(\mathsf{Push}(e,​ r)) \\ 
 +&​\overset{(\text{SZ2})}{=} 
 +\mathsf{size}(\mathsf{Push}(x,​ \mathsf{Push}(e,​ r))) 
 +\end{aligned} 
 +\]
  
-xsize(move(Push(x, Empty)) = size(Push(xEmpty))+==== 3. i∈N,∀r∈Ring,​element(i,move(r))=element(i+1,r====
  
-Rezultă direct din axioma MOV2+\[ 
-</​code>​+\forall r,\forall i.\  
 +\mathsf{size}(r) \ge 2  
 +\Rightarrow  
 +\mathsf{element}(i,​ \mathsf{move}(r))  
 +=  
 +\mathsf{element}(i+1,​ r) 
 +\]
  
-<​notes>​ +Vom face o demonstrație prin **inducție matematică** după \(i\).
-Considerând și ''​Push(x,​ Empty)''​ un caz de bază ne permite ca în demonstrația următoare să folosim doar ''​Push(e, r)''​ ca inel. +
-</​code>​+
  
-**Pas de inducție**:+=== Cazul de bază (i = 0) === 
 + 
 +Luăm \(i = 0\) și vrem să arătăm: 
 +\[ 
 +\mathsf{element}(0,​ \mathsf{move}(r)) = \mathsf{element}(1,​ r) 
 +\] 
 + 
 +Aceasta trebuie să fie adevărată pentru orice inel \(r\) cu \(\mathsf{size}(r) \ge 2\). 
 +Pentru a o demonstra, facem **inducție structurală** după \(r\). 
 + 
 +**Caz de bază:** 
 + 
 +\[ 
 +\begin{aligned} 
 +\mathsf{element}(0,​ \mathsf{move}(\mathsf{Push}(e,​ \mathsf{Push}(f,​ \mathsf{Empty})))) 
 +&​\overset{(\text{MOV3})}{=} 
 +\mathsf{element}(0,​ \mathsf{Push}(f,​ \mathsf{move}(\mathsf{Push}(e,​ \mathsf{Empty})))) \\ 
 +&​\overset{(\text{MOV2})}{=} 
 +\mathsf{element}(0,​ \mathsf{Push}(f,​ \mathsf{Push}(e,​ \mathsf{Empty}))) \\ 
 +&​\overset{(\text{ELEM})}{=} 
 +\mathsf{elm}(0 \bmod 2, \mathsf{Push}(f,​ \mathsf{Push}(e,​ \mathsf{Empty}))) \\ 
 +&​\overset{(\text{ELM1})}{=} f 
 +\end{aligned} 
 +\] 
 + 
 +\[ 
 +\begin{aligned} 
 +\mathsf{element}(1,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ \mathsf{Empty}))) 
 +&​\overset{(\text{ELEM})}{=} 
 +\mathsf{elm}(1 \bmod 2, \mathsf{Push}(e,​ \mathsf{Push}(f,​ \mathsf{Empty}))) \\ 
 +&​\overset{(\text{ELM2})}{=} 
 +\mathsf{elm}(0,​ \mathsf{Push}(f,​ \mathsf{Empty})) \\ 
 +&​\overset{(\text{ELM1})}{=} f 
 +\end{aligned} 
 +\] 
 + 
 +**Pas de inducție:**
  
 Presupunem: Presupunem:
 +\[
 +\mathsf{element}(0,​ \mathsf{move}(\mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))) 
 +
 +\mathsf{element}(1,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))
 +\]
  
-<​code>​ 
-∀e, size(move(Push(e,​ r))) = size(Push(e,​ r)) 
-</​code>​ 
 Arătăm: Arătăm:
 +\[
 +\mathsf{element}(0,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))))
 +
 +\mathsf{element}(1,​ \mathsf{Push}(x,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r))))
 +\]
 +
 +\[
 +\begin{aligned}
 +\mathsf{element}(0,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))))
 +&​\overset{(\text{MOV3})}{=}
 +\mathsf{element}(0,​ \mathsf{Push}(e,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r))))) \\
 +&​\overset{(\text{ELEM})}{=}
 +\mathsf{elm}(0,​ \mathsf{Push}(e,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r))))) \\
 +&​\overset{(\text{ELM1})}{=} e
 +\end{aligned}
 +\]
 +
 +\[
 +\begin{aligned}
 +\mathsf{element}(1,​ \mathsf{Push}(x,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r))))
 +&​\overset{(\text{ELEM})}{=}
 +\mathsf{elm}(1,​ \mathsf{Push}(x,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))) \\
 +&​\overset{(\text{ELM2})}{=}
 +\mathsf{elm}(0,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r))) \\
 +&​\overset{(\text{ELM1})}{=} e
 +\end{aligned}
 +\]
 +
 +Astfel se încheie demonstrația prin inducție structurală — deci cazul de bază al demonstrației principale (\(i = 0\)) este rezolvat.
 +
 +=== Pas de inducție (pe i) ===
 +
 +Presupunem:
 +\[
 +\mathsf{element}(i,​ \mathsf{move}(r)) = \mathsf{element}(i + 1, r)
 +\]
 +
 +Arătăm:
 +\[
 +\mathsf{element}(i + 1, \mathsf{move}(r)) = \mathsf{element}(i + 2, r)
 +\]
 +
 +Vom face din nou o **inducție structurală** după \(r\).
 +
 +**Caz de bază:**
 +
 +\[
 +\begin{aligned}
 +\mathsf{element}(i + 1, \mathsf{move}(\mathsf{Push}(e,​ \mathsf{Push}(f,​ \mathsf{Empty}))))
 +&​\overset{(\text{MOV3})}{=}
 +\mathsf{element}(i + 1, \mathsf{Push}(f,​ \mathsf{move}(\mathsf{Push}(e,​ \mathsf{Empty})))) \\
 +&​\overset{(\text{MOV2})}{=}
 +\mathsf{element}(i + 1, \mathsf{Push}(f,​ \mathsf{Push}(e,​ \mathsf{Empty}))) \\
 +&​\overset{(\text{ELEM})}{=}
 +\mathsf{elm}((i + 1) \bmod 2, \mathsf{Push}(f,​ \mathsf{Push}(e,​ \mathsf{Empty})))
 +\end{aligned}
 +\]
 +
 +  * Dacă \(i\) este impar, atunci \((i + 1) \bmod 2 = 0\): \[\mathsf{elm}(0,​ \mathsf{Push}(f,​ \mathsf{Push}(e,​ \mathsf{Empty}))) \overset{(\text{ELM1})}{=} f\]
 +iar în partea dreaptă: \[\begin{aligned} \mathsf{element}(i + 2, \mathsf{Push}(e,​ \mathsf{Push}(f,​ \mathsf{Empty}))) &​\overset{(\text{ELEM})}{=} \mathsf{elm}((i + 2) \bmod 2, \mathsf{Push}(e,​ \mathsf{Push}(f,​ \mathsf{Empty}))) \\ &​\text{(deoarece } i \text{ impar } \Rightarrow i+2 \text{ impar } \Rightarrow (i+2) \bmod 2 = 1) \\ &​\overset{(\text{ELM2})}{=} \mathsf{elm}(0,​ \mathsf{Push}(f,​ \mathsf{Empty})) \\ &​\overset{(\text{ELM1})}{=} f \end{aligned}\]
 +
 +  * Dacă \(i\) este par, atunci \((i + 1) \bmod 2 = 1\): \[\mathsf{elm}(1,​ \mathsf{Push}(f,​ \mathsf{Push}(e,​ \mathsf{Empty}))) \overset{(\text{ELM2})}{=} \mathsf{elm}(0,​ \mathsf{Push}(e,​ \mathsf{Empty})) \overset{(\text{ELM1})}{=} e\]
 +iar în partea dreaptă: \[\begin{aligned} \mathsf{element}(i + 2, \mathsf{Push}(e,​ \mathsf{Push}(f,​ \mathsf{Empty}))) &​\overset{(\text{ELEM})}{=} \mathsf{elm}((i + 2) \bmod 2, \mathsf{Push}(e,​ \mathsf{Push}(f,​ \mathsf{Empty}))) \\ &​\text{(deoarece } i \text{ par } \Rightarrow i+2 \text{ par } \Rightarrow (i+2) \bmod 2 = 0) \\ &​\overset{(\text{ELM1})}{=} e \end{aligned}\]
 +
 +**Pas de inducție:​**
 +
 +Presupunem:
 +\[
 +\mathsf{element}(i + 1, \mathsf{move}(\mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))) 
 +
 +\mathsf{element}(i + 2, \mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))
 +\]
 +
 +Arătăm:
 +\[
 +\mathsf{element}(i + 1, \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))))
 +
 +\mathsf{element}(i + 2, \mathsf{Push}(x,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r))))
 +\]
 +
 +Din ipoteza de inducție \(\mathsf{element}(i,​ \mathsf{move}(r)) = \mathsf{element}(i + 1, r)\), aplicată pentru \(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r))\), obținem:
 +\[
 +\mathsf{element}(i,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r)))) 
 +
 +\mathsf{element}(i + 1, \mathsf{Push}(x,​ \mathsf{Push}(f,​ r)))
 +\]
 +
 +Calculul complet pentru partea stângă:
 +\[
 +\begin{aligned}
 +\mathsf{element}(i + 1, \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))))
 +&​\overset{(\text{MOV3})}{=}
 +\mathsf{element}(i + 1, \mathsf{Push}(e,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r))))) \\
 +&​\overset{(\text{ELEM})}{=}
 +\mathsf{elm}((i + 1) \bmod \mathsf{size}(\mathsf{Push}(e,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r))))), \\
 +&​\quad\quad\mathsf{Push}(e,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r)))))
 +\end{aligned}
 +\]
 +
 +Pentru \((i + 1) \bmod \mathsf{size}(\mathsf{Push}(e,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r)))))\), știind că \(\mathsf{size}(\mathsf{move}(r)) = \mathsf{size}(r)\) (din exercițiul 2), avem:
 +\[
 +\mathsf{size}(\mathsf{Push}(e,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r))))) = 1 + \mathsf{size}(\mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r)))) = 3 + \mathsf{size}(r)
 +\]
 +
 +Notăm \(n = 3 + \mathsf{size}(r)\).
 +
 +Dacă \((i + 1) \bmod n = 0\), atunci:
 +\[
 +\mathsf{element}(i + 1, \mathsf{move}(...)) = \mathsf{elm}(0,​ \mathsf{Push}(e,​ ...)) = e
 +\]
 +
 +\[
 +\begin{aligned}
 +\mathsf{element}(i + 2, \mathsf{Push}(x,​ \mathsf{Push}(e,​ \mathsf{Push}(f,​ r))))
 +&​\overset{(\text{ELEM})}{=}
 +\mathsf{elm}((i + 2) \bmod n, \mathsf{Push}(x,​ ...)) \\
 +&​\overset{(\text{ELM2})}{=}
 +\mathsf{elm}((i + 1) \bmod (n-1), \mathsf{Push}(e,​ \mathsf{Push}(f,​ r))) \\
 +&= \mathsf{elm}(0,​ \mathsf{Push}(e,​ ...)) = e
 +\end{aligned}
 +\]
 +
 +Dacă \((i+1) \bmod n \neq 0\), folosim axioma ELM2 și reducem problema:
 +\[
 +\begin{aligned}
 +\mathsf{element}(i + 1, \mathsf{move}(...))
 +&= \mathsf{elm}((i+1) \bmod n, \mathsf{Push}(e,​ \mathsf{move}(...))) \\
 +&​\overset{(\text{ELM2})}{=}
 +\mathsf{elm}(i \bmod (n-1), \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r)))) \\
 +&= \mathsf{element}(i,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r))))
 +\end{aligned}
 +\]
 +
 +Prin ipoteza de inducție pe \(i\):
 +\[
 +\mathsf{element}(i,​ \mathsf{move}(\mathsf{Push}(x,​ \mathsf{Push}(f,​ r))))) = \mathsf{element}(i+1,​ \mathsf{Push}(x,​ \mathsf{Push}(f,​ r)))
 +\]
  
-<​code>​ +Partea dreaptă: 
-∀x, ∀e, size(move(Push(x, Push(e, r))))) = size(Push(x, Push(e, r))) +\[ 
-</​code>​+\mathsf{element}(i + 2, \mathsf{Push}(x, \mathsf{Push}(e, \mathsf{Push}(f, r))))) ​ 
 +\overset{(\text{ELM2})}{=
 +\mathsf{element}(i + 1, \mathsf{Push}(e\mathsf{Push}(f, r))) 
 +\]
  
 +Prin ipoteza de inducție structurală:​
 +\[
 +\mathsf{element}(i + 1, \mathsf{move}(\mathsf{Push}(e,​ \mathsf{Push}(f,​ r))))) = \mathsf{element}(i + 2, \mathsf{Push}(e,​ \mathsf{Push}(f,​ r)))
 +\]
  
-<​code>​ +obținem că ambele părți sunt egale.
-size(move(Push(x,​ Push(e, ​r)))) =(MOV3) size(Push(e,​ move(Push(x,​ r)))) =(SZ2) 1 + size(move(Push(x,​ r))) =(II) 1 + size(Push(x,​ r)) =(SZ2) 2 + size(r) =(SZ2) 1 + size(Push(e,​ r)) = size(Push(x,​ Push(e, r)) +
-</​code>​+
  
 +**Prin urmare, prin inducție matematică pe \(i\) și inducție structurală pe \(r\), avem că proprietatea este adevărată pentru toate valorile \(i \in \mathbb{N}\).**