WIP, part one Done and part 2 most done

This commit is contained in:
Yorick Barbanneau 2023-05-04 14:44:24 +02:00
parent f295671946
commit 4a30965654

View file

@ -190,12 +190,19 @@ int abs2(int n)
& \equiv && \top \\ & \equiv && \top \\
\end{alignat*} \end{alignat*}
Grâce au calcul $n \% 2 + (n + 1) \% 2$ nous obtiendrons 1 si \code{n} est positif et -1 sinon. Attention dans certain langages le modulo 2 d'un nombre négatif impair donne 1 et non pas -1, ce résultat est mathématiquement correct. C'est le cas de Python par exemple.
Nous pouvons en déduire le triplet de Hoare suivant:
$\{\forall n \in \Z\} \text{ abs } \{\result \leftarrow abs(n)\}$
\end{solutionorbox} \end{solutionorbox}
\part Quelle préconditions faut-il pour ne pas avoir de comportement indéterminé ? Justifiez. \part Quelle préconditions faut-il pour ne pas avoir de comportement indéterminé ? Justifiez.
\begin{solutionorbox} \begin{solutionorbox}
Comme pour \code{abs}, nous devons prendre en compte les limites du processeur, mais cette fois \code{n} devra être comprise entre 0 et \code{INT_MAX}.
Notre calcul de \textit{weakest precondition} ci-dessus ne prend pas en compte les limites de notre processeur sur la taille des variables. Ici nous devons nous assurer que le resultat du calcul $n * (n \% 2 + (n + 1)\%2$ soit compris entre \code{INT_MAX et INT_MIN}.
\end{solutionorbox} \end{solutionorbox}
\part Compléter le fichier \texttt{abs.h} de manière à ce que Frama-C puisse démontrer la post-condition fournie, en ajoutant les assertions RTE. Il est bien évidemment possible (et encouragé) de répondre aux questions précédentes grâce à celle-ci. \part Compléter le fichier \texttt{abs.h} de manière à ce que Frama-C puisse démontrer la post-condition fournie, en ajoutant les assertions RTE. Il est bien évidemment possible (et encouragé) de répondre aux questions précédentes grâce à celle-ci.
@ -237,14 +244,21 @@ int abs2(int n)
\part Quelle condition doit-être vraie à la sortie de la boucle (i.e, $\WLP(18,\psi))$, pour $\psi$ la post-condition ? \part Quelle condition doit-être vraie à la sortie de la boucle (i.e, $\WLP(18,\psi))$, pour $\psi$ la post-condition ?
\begin{solutionorbox} \begin{solutionorbox}
METTEZ VOTRE RÉPONSE ICI. La condition $min \le max$ doit être vérifiée à la sortie de la boucle
\end{solutionorbox} \end{solutionorbox}
\part Calculez $\WLP(12-16,I)$ pour un invariant I quelconque. \part Calculez $\WLP(12-16,I)$ pour un invariant I quelconque.
Mettez-la en forme de manière à avoir la conjonction de 4 implications (en appliquant que $P \Rightarrow (Q\wedge R)$ est équivalent à $(P \Rightarrow Q) \wedge (P \Rightarrow R)$, et $P \Rightarrow Q \Rightarrow R$ est équivalent à $(P\wedge Q) \Rightarrow R$). Mettez-la en forme de manière à avoir la conjonction de 4 implications (en appliquant que $P \Rightarrow (Q\wedge R)$ est équivalent à $(P \Rightarrow Q) \wedge (P \Rightarrow R)$, et $P \Rightarrow Q \Rightarrow R$ est équivalent à $(P\wedge Q) \Rightarrow R$).
\begin{solutionorbox} \begin{solutionorbox}
METTEZ VOTRE RÉPONSE ICI. \begin{alignat*}{3}
\WLP(12-16,I) & \equiv && \WLP(12-13,\WLP(14-15,\psi)) \\
& \equiv && \WLP(12-13, i < n \wedge tab[i] < min \implies [tab[i] \leftarrow min ]) \\
& \equiv && ( i < n \wedge tab[i] < min \implies [ min \leftarrow tab[i] ] ) \\
& &&\vee ( i < n \wedge tab[i] > max \implies [ max \leftarrow tab[i] ] ) \\
& \equiv && ( i < n \implies tab[i] < min \implies [ min \leftarrow tab[i] ] ) \\
& &&\vee ( i < n \implies tab[i] > max \implies [ max \leftarrow tab[i] ] ) \\
\end{alignat*}
\end{solutionorbox} \end{solutionorbox}
\part Proposez des invariants de boucle pour votre boucle. \part Proposez des invariants de boucle pour votre boucle.
@ -266,31 +280,56 @@ int abs2(int n)
Pour chacun des invariants, comme elles sont similaires, vous pouvez nexpliquer quune seule des quatre implications Pour chacun des invariants, comme elles sont similaires, vous pouvez nexpliquer quune seule des quatre implications
\begin{solutionorbox} \begin{solutionorbox}
METTEZ VOTRE RÉPONSE ICI. loop invariant $I_1$: $1 \le i < n;$ \\
loop invariant $I_2$: $min \le max;$ \\
loop invariant $I_3$: $\forall j; (0 \le j \le i \implies max \ge tab[j] \ge min) $ \\
loop invariant $I_4$: $\forall j \in \mathbb{N} \exists j, 0 \le j \le i \implies tab[j] == min $ \\
loop invariant $I_5$: $\forall j \in \mathbb{N} \exists j, 0 \le j \le i \implies tab[j] == max $ \\
Pour notre invariant $I_2$, les deux éléments dont égaux au départ (ils sont égaux à $tab[0]$),d'où le signe $\le$. Il est aussi tout à fait possible que tous les éléments du tableaux soient égaux, dans ce cas aussi max et min seront égaux.
Pour les invariants $I_4$ et $I_5$, la logique est la même: il existe un entier naturel $j$ compris entre 0 et $i$ pour llequel $tab[j] == min$.
\end{solutionorbox} \end{solutionorbox}
\part Déduisez-en un triplet de \bsc{Hoare} valide pour votre fonction. \part Déduisez-en un triplet de \bsc{Hoare} valide pour votre fonction.
\begin{solutionorbox} \begin{solutionorbox}
METTEZ VOTRE RÉPONSE ICI. $\{n > 0\}max\_dist\{min \le max\}$
\end{solutionorbox} \end{solutionorbox}
\part Démontrez la terminaison de la fonction en donnant un variant de boucle et en démontrant quil décroît à chaque tour de boucle et quil est toujours positif (vous pouvez utiliser le calcul de la question b). \part Démontrez la terminaison de la fonction en donnant un variant de boucle et en démontrant quil décroît à chaque tour de boucle et quil est toujours positif (vous pouvez utiliser le calcul de la question b).
\begin{solutionorbox} \begin{solutionorbox}
METTEZ VOTRE RÉPONSE ICI. \begin{alignat*}{3}
\WLP(12-16,n-i < at(n - i,12) & \equiv && n - (i + 1) < at(n - i, 12) \\
& \equiv && n - i - 1) < n - i \\
& \equiv && - 1 < 0 \\
& \equiv && \top
\end{alignat*}
\end{solutionorbox} \end{solutionorbox}
\part Quelles sont les valeurs mémoires modifiées par cette fonction (et la boucle) ? Vous répondrez en donnant les clauses assigns et loop assigns correspondantes. \part Quelles sont les valeurs mémoires modifiées par cette fonction (et la boucle) ? Vous répondrez en donnant les clauses assigns et loop assigns correspondantes.
\begin{solutionorbox} \begin{solutionorbox}
METTEZ VOTRE RÉPONSE ICI.
Cette fonction ne nécessite pas de clause \code{assign}, par contre la boucle en nécessite 3 :
\begin{lstlisting}
/*@
loop assign i, min, max;
*/
\end{lstlisting}
\end{solutionorbox} \end{solutionorbox}
\part Que manque-til comme précondition pour que la fonction ne puisse pas faire derreur à lexécution ? \part Que manque-til comme précondition pour que la fonction ne puisse pas faire derreur à lexécution ?
\begin{solutionorbox} \begin{solutionorbox}
METTEZ VOTRE RÉPONSE ICI. Il faut s'assurer :
\begin{itemize}
\item $0 < n \le INT_MAX $
\item les éléments du tableaux existent de 0 à $n - 1 $
\end{itemize}
\end{solutionorbox} \end{solutionorbox}
\part Démontrez que la fonction suivante vérifie le même contrat de fonction : \part Démontrez que la fonction suivante vérifie le même contrat de fonction :