First part of TD

This commit is contained in:
Yorick Barbanneau 2023-05-03 00:57:37 +02:00
parent 522bdb0218
commit f295671946
3 changed files with 27 additions and 6 deletions

View file

@ -13,6 +13,7 @@
\qformat{\large \textbf{Exercice \thequestion~: \thequestiontitle\hfill}}
\renewcommand{\solutiontitle}{\noindent\textbf{Réponse:}\par\noindent}
\ifdef{\dyslexic}{
\usepackage{fontspec}
@ -20,7 +21,10 @@
\setmainfont{OpenDyslexic}
}{}
\usepackage{fontspec}
\setmainfont{Lato}
\setmonofont{Fira Code}
\begin{document}
\maketitle
@ -174,12 +178,24 @@ int abs2(int n)
Justifiez que la formule obtenue est toujours vraie (on ne demande pas une preuve formelle mais une explication de la raison).
\begin{solutionorbox}
\begin{alignat*}{3}
\WP(\code{abs},\psi) &\equiv && \WP(5,\WP(6,\psi)) \\
& \equiv && \WP(5,\psi[\result \leftarrow n * aux]) \\
& \equiv && n \ge 0 \implies \psi[\result \leftarrow n * aux][aux \leftarrow 1] \\
& && \wedge \lnot (n \ge 0) \implies \psi[\result \leftarrow n * aux][aux \leftarrow -1] \\
& \equiv && n \ge 0 \implies \result \leftarrow n \\
& && \wedge \lnot (n \ge 0) \implies \result - n \\
& \equiv && n \ge 0 \implies \result \ge 0 \\
& && \wedge \lnot (n \ge 0) \implies \result \ge 0 \\
& \equiv && \top \\
\end{alignat*}
\end{solutionorbox}
\part Quelle préconditions faut-il pour ne pas avoir de comportement indéterminé ? Justifiez.
\begin{solutionorbox}
METTEZ VOTRE RÉPONSE ICI.
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}.
\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.

View file

@ -5,13 +5,17 @@
/*@ logic integer abs(integer n) = 0<n?n:-n;*/
/*@ terminates \true;
/*@
requires INT_MIN <= n;
terminates \true;
ensures \result == abs(n);
*/
int abs(int n);
/*@ terminates \true;
/*@
requires INT_MIN <= n * (int)((int)n % 2 + ((int)n +1)%2) <= INT_MAX;
terminates \true;
ensures \result == abs(n);*/
int abs2(int n);
#endif
#endif

View file

@ -1,4 +1,5 @@
\usepackage[utf8x]{inputenc}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{amsmath, amsthm, amsfonts, amssymb}
@ -10,7 +11,7 @@
\lstdefinestyle{clang}{
language=[ANSI]C,
basicstyle=\ttfamily,
basicstyle=\ttfamily\scriptsize,
keywordstyle=\color{blue},
stringstyle=\color{brown},
commentstyle=\bfseries\color{red},
@ -64,4 +65,4 @@
\newcommand{\old}{\mathrm{old}}
\newcommand{\atp}{\mathrm{at}}
\newcommand{\triplet}[3]{\{#2\}#1\{#3\}}
\newcommand{\triplet}[3]{\{#2\}#1\{#3\}}