===== Maurice Lanselle ===== ===== M1-ILC ===== ====== mult sur nat ====== ===== Définition par cas ===== * mult(0, m) = 0 * mult(1, m) = m * mult(n0, m) = add(mult(n,m),mult(n,m)) * mult(n1, m) = add(add(mult(n,m),mult(n,m)), m) Montrons par induction structurelle sur ''nat'' que \forall n \;m : nat, \left[\!| mult\left(n,m\right) |\!\right] = \left[\!| n |\!\right] \times \left[\!| m |\!\right] * Premier cas : \left[\!| mult\left(0,m\right) |\!\right] = 0 = 0 \times \left[\!| m |\!\right] = \left[\!| 0 |\!\right] \times \left[\!| m |\!\right] * Second cas : \left[\!| mult\left(1,m\right) |\!\right] = m = 1 \times \left[\!| m |\!\right] = \left[\!| 1 |\!\right] \times \left[\!| m |\!\right] Hypothèse d'induction : \forall x:nat, n:nat \;\text{fixe}, \left[\!| mult\left(n,x\right) |\!\right] = \left[\!| n |\!\right] \times \left[\!| x |\!\right]. Alors, cas 3 et 4 : * \left[\!|mult(n0, x)|\!\right] = \left[\!|add(mult(n,x),mult(n,x))|\!\right] * = \left[\!|mult(n,x)|\!\right]+\left[\!|mult(n,x) |\!\right] par les propriétés de ''add'' * = \left[\!| n |\!\right] \times \left[\!| x |\!\right] + \left[\!| n |\!\right] \times \left[\!| x |\!\right] // par l'hypothèse d'induction (2 fois)// * = n\times x + n\times x = 2\times n \times x * = \left[\!| n0 |\!\right]_{nat} \times \left[\!| x |\!\right]_{nat} * \left[\!| mult(n1, x) |\!\right] = \left[\!|add(add(mult(n,x),mult(n,x)), x)|\!\right] * = \left[\!|add(mult(n,x),mult(n,x))|\!\right] + \left[\!|x)|\!\right] : prop. de ''add'' * = \left[\!|mult(n,x)|\!\right] +\left[\!|mult(n,x)|\!\right]+ \left[\!|x)|\!\right] : prop. de ''add'' * = \left[\!| n |\!\right] \times \left[\!| x |\!\right] + \left[\!| n |\!\right] \times \left[\!| x |\!\right] + \left[\!|x)|\!\right] : hyp. d'induction (2 fois) * = n \times x + n \times x + 1 \times x : sémantique de ''nat'' * = (2\times n + 1) \times x * = \left[\!| n1 |\!\right]_{nat} \times \left[\!| x |\!\right]_{nat}