summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Auvolat <alex.auvolat@ansys.com>2014-07-23 18:03:28 +0200
committerAlex Auvolat <alex.auvolat@ansys.com>2014-07-23 18:03:28 +0200
commit2073dd00710add906cc94099cd4bfb7aa3a2f85e (patch)
treee4c3ff51a2283b9baa8f148e9b7446add9d99571
parent743f5cd5fb39e3ec58f94e43fe25ae8c25de7443 (diff)
downloadscade-analyzer-2073dd00710add906cc94099cd4bfb7aa3a2f85e.tar.gz
scade-analyzer-2073dd00710add906cc94099cd4bfb7aa3a2f85e.zip
Move README && add stuff ; add presentation.
-rw-r--r--.gitignore8
-rw-r--r--doc/prez/Makefile8
-rw-r--r--doc/prez/alpha-gamma.svg266
-rw-r--r--doc/prez/prez.pdfbin0 -> 259816 bytes
-rw-r--r--doc/prez/prez.tex456
-rw-r--r--doc/prez/property.svg280
-rw-r--r--doc/prez/research.bib21
-rw-r--r--doc/readme.pdf (renamed from readme.pdf)bin236320 -> 236320 bytes
-rw-r--r--doc/readme.tm (renamed from readme.tm)147
9 files changed, 1174 insertions, 12 deletions
diff --git a/.gitignore b/.gitignore
index 5b727b1..4451735 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,11 @@ analyze
# Plots
graphs/*
graphs2/*
+
+# Tex
+doc/prez/*
+!doc/prez/Makefile
+!doc/prez/prez.tex
+!doc/prez/*.svg
+!doc/prez/research.bib
+!doc/prez/prez.pdf
diff --git a/doc/prez/Makefile b/doc/prez/Makefile
new file mode 100644
index 0000000..89cfc3a
--- /dev/null
+++ b/doc/prez/Makefile
@@ -0,0 +1,8 @@
+IMG=alpha-gamma.pdf_tex property.pdf_tex
+
+
+prez.pdf: prez.tex $(IMG)
+ pdflatex prez.tex -halt-on-error -file-line-error
+
+%.pdf_tex: %.svg
+ inkscape -z -D --file=$< --export-pdf=$(basename $@).pdf --export-latex
diff --git a/doc/prez/alpha-gamma.svg b/doc/prez/alpha-gamma.svg
new file mode 100644
index 0000000..320ec14
--- /dev/null
+++ b/doc/prez/alpha-gamma.svg
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="640"
+ height="480"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="alpha-gamma.svg">
+ <defs
+ id="defs4">
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#Strips1_1"
+ id="pattern6471"
+ patternTransform="matrix(3.3572888,4.7975138,-24.733077,17.308148,2.7062925,942.02444)" />
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Mend"
+ style="overflow:visible;">
+ <path
+ id="path5249"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path5243"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#Strips1_1"
+ id="pattern5211"
+ patternTransform="matrix(4.4605668,6.4267909,-14.824062,10.288762,121.21831,211.12188)" />
+ <pattern
+ inkscape:stockid="Stripes 1:1"
+ id="Strips1_1"
+ patternTransform="translate(0,0) scale(10,10)"
+ height="1"
+ width="2"
+ patternUnits="userSpaceOnUse"
+ inkscape:collect="always">
+ <rect
+ id="rect4486"
+ height="2"
+ width="1"
+ y="-0.5"
+ x="0"
+ style="fill:black;stroke:none" />
+ </pattern>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.979899"
+ inkscape:cx="318.87449"
+ inkscape:cy="187.02805"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1021"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-572.36214)">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:12,12;stroke-dashoffset:0"
+ d="m 320,654.36204 0,375.77676"
+ id="path2985"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#008000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="152.12198"
+ y="660.42291"
+ id="text3755"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3757"
+ x="152.12198"
+ y="660.42291">\huge concret</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#800000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="479.52002"
+ y="660.42291"
+ id="text3759"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3761"
+ x="479.52002"
+ y="660.42291">\huge abstrait</tspan></text>
+ <g
+ id="g6449"
+ transform="translate(0,-20.203051)">
+ <path
+ transform="translate(-12.626914,567.81646)"
+ d="m 211.12189,266.85782 c 0,23.43146 -18.99495,42.42641 -42.42641,42.42641 -23.43146,0 -42.42641,-18.99495 -42.42641,-42.42641 0,-23.43146 18.99495,-42.42641 42.42641,-42.42641 23.43146,0 42.42641,18.99495 42.42641,42.42641 z"
+ sodipodi:ry="42.426407"
+ sodipodi:rx="42.426407"
+ sodipodi:cy="266.85782"
+ sodipodi:cx="168.69548"
+ id="path3765"
+ style="fill:url(#pattern5211);fill-opacity:1;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <path
+ transform="translate(18.182746,533.97634)"
+ d="m 549.52299,300.69794 c 0,45.46818 -36.85925,82.32743 -82.32743,82.32743 -45.46819,0 -82.32743,-36.85925 -82.32743,-82.32743 0,-45.46819 36.85924,-82.32743 82.32743,-82.32743 45.46818,0 82.32743,36.85924 82.32743,82.32743 z"
+ sodipodi:ry="82.327431"
+ sodipodi:rx="82.327431"
+ sodipodi:cy="300.69794"
+ sodipodi:cx="467.19556"
+ id="path5214"
+ style="fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <path
+ transform="translate(0,572.36214)"
+ inkscape:connector-curvature="0"
+ id="path5234"
+ d="m 179.80715,295.14208 c 122.22846,88.89343 248.49753,28.28428 248.49753,28.28428"
+ style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" />
+ <path
+ transform="translate(-311.12699,533.97634)"
+ d="m 549.52299,300.69794 c 0,45.46818 -36.85925,82.32743 -82.32743,82.32743 -45.46819,0 -82.32743,-36.85925 -82.32743,-82.32743 0,-45.46819 36.85924,-82.32743 82.32743,-82.32743 45.46818,0 82.32743,36.85924 82.32743,82.32743 z"
+ sodipodi:ry="82.327431"
+ sodipodi:rx="82.327431"
+ sodipodi:cy="300.69794"
+ sodipodi:cx="467.19556"
+ id="path5214-4"
+ style="fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <path
+ transform="translate(0,572.36214)"
+ inkscape:connector-curvature="0"
+ id="path5866"
+ d="m 448.50773,184.0253 c -135.36044,-46.46701 -249.50768,8.08122 -249.50768,8.08122"
+ style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow1Mend)" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text6420"
+ y="939.2251"
+ x="410.64453"
+ style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="939.2251"
+ x="410.64453"
+ id="tspan6422"
+ sodipodi:role="line">\Large $\alpha$</tspan><tspan
+ id="tspan6424"
+ y="989.2251"
+ x="410.64453"
+ sodipodi:role="line" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text6426"
+ y="736.18439"
+ x="232.38661"
+ style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="736.18439"
+ x="232.38661"
+ id="tspan6428"
+ sodipodi:role="line">\Large $\gamma$</tspan></text>
+ </g>
+ <rect
+ style="fill:url(#pattern6471);fill-opacity:1;stroke:#000000;stroke-width:2.63059783;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6461"
+ width="54.917641"
+ height="23.029978"
+ x="8.9066715"
+ y="966.09589" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="71.720833"
+ y="983.67175"
+ id="text6473"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6475"
+ x="71.720833"
+ y="983.67175"
+ style="font-size:12px">\scriptsize Exécutions du programme</tspan></text>
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:2.63059783;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6461-5"
+ width="54.917641"
+ height="23.029978"
+ x="8.9066715"
+ y="1007.5121" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="71.720833"
+ y="1024.0779"
+ id="text6473-8"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6475-4"
+ x="71.720833"
+ y="1024.0779"
+ style="font-size:12px">\scriptsize Sur-approximation</tspan></text>
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:2.63059783;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6461-5-6"
+ width="54.917641"
+ height="23.029978"
+ x="361.95496"
+ y="987.30902" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="424.76917"
+ y="1003.8748"
+ id="text6473-8-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6475-4-3"
+ x="424.76917"
+ y="1003.8748"
+ style="font-size:12px">\scriptsize Représentation abstraite</tspan></text>
+ </g>
+</svg>
diff --git a/doc/prez/prez.pdf b/doc/prez/prez.pdf
new file mode 100644
index 0000000..251c931
--- /dev/null
+++ b/doc/prez/prez.pdf
Binary files differ
diff --git a/doc/prez/prez.tex b/doc/prez/prez.tex
new file mode 100644
index 0000000..905a6b6
--- /dev/null
+++ b/doc/prez/prez.tex
@@ -0,0 +1,456 @@
+\nonstopmode
+
+\documentclass{beamer}
+\usepackage[utf8]{inputenc}
+\usepackage[francais]{babel}
+\usepackage[T1]{fontenc}
+\usepackage{amsmath}
+\usepackage{graphicx}
+\usepackage{hhline}
+\usepackage{caption}
+\usepackage[notocbib]{apacite}
+\usetheme{Luebeck}
+\useoutertheme[footline=authortitle,subsection=false]{miniframes}
+
+\usepackage{tikz}
+\usetikzlibrary{positioning}
+\usetikzlibrary{trees}
+\tikzstyle{level 1}=[level distance=2cm, sibling distance=5.2cm]
+\tikzstyle{level 2}=[level distance=1.7cm, sibling distance=2.6cm]
+\tikzstyle{var}=[circle, draw=black, thick, text centered]
+\tikzstyle{end}=[draw=black, thick, text centered]
+
+\usepackage{tabularx}
+\newcolumntype{b}{X}
+\newcolumntype{s}{>{\hsize=.5\hsize}X}
+\newcolumntype{t}{>{\hsize=.3\hsize}X}
+\newcolumntype{u}{>{\hsize=.1\hsize}X}
+\newcommand{\heading}[1]{\multicolumn{1}{|c}{#1}}
+\newcommand{\llrrbracket}[1]{% \llrrbracket{..}
+ \left[\mkern-3mu\left[#1\right]\mkern-3mu\right]}
+
+\usepackage{multicol}
+
+% -----------------------
+% entete
+
+\title{Analyse statique de SCADE par interprétation abstraite}
+\author{Alex AUVOLAT}
+\date{Juillet 2014}
+
+\begin{document}
+
+\begin{frame}
+\titlepage
+\end{frame}
+
+\begin{frame}\frametitle{Introduction}
+ \begin{itemize}
+ \item On cherche à vérifier des propriétés sur des programmes SCADE (propriétés générales ou propriétés spécifiées dans le code)
+ \item Différentes techniques d'analyse existent~: interprétation abstraite (Astrée), model checking (DV, Kind, GATeL)
+ \item Motivation~: en faisant l'analyse directement sur SCADE, on se passe d'un certain nombre de problèmes spécifiques à C (modèle mémoire, initialisation, ...)
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Plan}
+\tableofcontents
+\end{frame}
+
+% ----------------------
+% contenu
+
+\section{Généralités sur SCADE}
+\frame{\sectionpage}
+\begin{frame}\frametitle{Environnements mémoire}
+ Soit un programme SCADE, on note~:
+ \begin{itemize}
+ \item $\mathbb{X}$ l'ensemble de ses variables ;
+ \item $\mathbb{V}$ l'ensemble des valeurs qu'elles peuvent prendre.
+ \end{itemize}
+ \begin{definition}
+ Un envrionnement mémoire est une fonction de $\mathbb{X}\to\mathbb{V} = \mathbb{M}$
+ \end{definition}
+ Dans notre étude, on est ammené à étudier des ensembles d'environnements mémoire, c'est-à-dire des éléments de $\mathcal{P}(\mathbb{M})$.
+
+ On bénéficie de la structure de treillis de $(\mathcal{P}(\mathbb{M}), \emptyset, \mathbb{M}, \subseteq, \cup, \cap)$.
+\end{frame}
+\begin{frame}\frametitle{Système de transition, fonction de transition}
+ Un programme SCADE représente une fonction de transition~:
+ $$s_0 \xrightarrow{i_1} s_1 \xrightarrow{i_2} s_2 \xrightarrow{i_3} \cdots$$
+ On peut réécrire cette sémantique de transition avec deux fonctions: $c$, qui copie une partie de $s_{n-1}$ dans $s_n$ pour garder des mémoires, et $f$ qui prend ces mémoires ainsi que les entrées pour calculer $s_n$:
+ $$s_n = f(c(s_{n-1}) + i_n)$$
+\end{frame}
+\begin{frame}\frametitle{Sémantique collectrice}
+ On s'intéresse aux états du programme pour toutes les entrées possibles~:
+ $$g(A) = \{ f(c(s) + i), s \in A, i \in \mathbb{I} \}$$
+ Puis on s'intéresse à tous les états du programme, à tous les cycles~:
+ $$S = lfp_{S_0} ( \lambda A. A \cup g(A) )$$
+ $$S \in \mathcal{P}(\mathbb{M})$$
+ Où $S_0$ est l'ensemble des états mémoire initiaux pour le programme.
+\end{frame}
+\begin{frame}\frametitle{Preuve de propriétés}
+ La sémantique collectrice $S$ représente une première abstraction de notre programme~: c'est l'ensemble de tous les états mémoire accessible par notre programme, quelque soient les entrées, et à tout moment de l'exécution.
+
+ Prouver une propriété $P$, c'est montrer que $\forall s \in S, P(S)$.
+\end{frame}
+\section{Interprétation abstraite}
+\frame{\sectionpage}
+\begin{frame}\frametitle{Abstraction}
+ Pour pouvoir travailler sur $\mathcal{P}(\mathbb{M})$ de manière algorithmique, c'est-à-dire faire une analyse qui termine, on procède par abstraction.
+
+ Pour cela on représente les valeurs dans un domaine abstrait $\mathcal{D}^\sharp$.
+ \begin{definition}
+ Fonctions d'abstraction et de concretisation~:
+ $$\alpha: \mathcal{P}(\mathbb{M}) \to \mathcal{D}^\sharp$$
+ $$\gamma: \mathcal{D}^\sharp \to \mathcal{P}(\mathbb{M})$$
+ \end{definition}
+ Pour représenter $s \in \mathcal{P}(\mathbb{M})$, on utilise toujours une valeur abstraite $s^\sharp$ {\em sûre}, c'est-à-dire que $s \subset \gamma(s^\sharp)$.
+\end{frame}
+\begin{frame}\frametitle{Abstraction}
+ \begin{figure}
+ \centering
+ \def\svgwidth{.9\textwidth}
+ \input{alpha-gamma.pdf_tex}
+ \end{figure}
+\end{frame}
+\begin{frame}\frametitle{Structure de treillis}
+ On définit deux valeurs abstraites particulières~:
+ \begin{itemize}
+ \item $\bot$~: $\gamma(\bot) = \emptyset$
+ \item $\top$~: $\gamma(\top) = \mathbb{M}$
+ \end{itemize}
+ On définit également des opérateurs sur nos valeurs abstraites~:
+ \begin{itemize}
+ \item $\sqcup$~: $\gamma(s) \cup \gamma(s') \subset \gamma(s \sqcup s')$
+ \item $\sqcap$~: $\gamma(s) \cap \gamma(s') \subset \gamma(s \sqcap s')$
+ \end{itemize}
+ Ce qui munit $\mathcal{D}^\sharp$ d'une structure de treillis~: $(\mathcal{D}^\sharp, \bot, \top, \sqsubseteq, \sqcup, \sqcap)$.
+
+ On cherche à chaque fois à trouver une meilleure approximation possible de $\gamma(s) \cup \gamma(s')$ ou $\gamma(s) \cap \gamma(s')$, sans jamais rien perdre (propriété de sûreté).
+\end{frame}
+\begin{frame}\frametitle{Abstraction non relationnelle}
+ On peut utiliser une abstraction qui traîte chaque variable séparément, en indiquant dans quel intervalle de valeurs elle évolue~:
+ $$\mathcal{D}^\sharp = \mathbb{X} \to itv(\mathbb{Z})$$
+ ($itv(\mathbb{Z})$ est lui-même muni d'une structure de treillis)
+ \begin{example}
+ Par exemple si on a rencontré les environnements $\{x=0, y=5\}$ et $\{x=1, y=4\}$, on peut les représenter par la valeur abstraite $s$ telle que~:
+ $$s(x) = [0, 1]$$
+ $$s(y) = [4, 5]$$
+ \end{example}
+\end{frame}
+\begin{frame}\frametitle{Abstraction relationnelle}
+ On peut utiliser une abstraction qui mémorise des relations entre les variables. La plus célèbre est l'ensemble des polyèdres convexes, qui représente un ensemble d'environnements comme une conjonction d'égalités ou d'inégalités linéaires sur les variables.
+ \begin{example}
+ Par exemple si on a rencontré les environnements $\{x=0, y=5\}$ et $\{x=1, y=4\}$, on peut les représenter par la valeur abstraite $s$ qui contient les contraintes suivantes~:
+ $$0 \le x \le 1$$
+ $$y = 5 - x$$
+ \end{example}
+\end{frame}
+\begin{frame}\frametitle{Opérateur de widening}
+ L'opérateur de widening, habituellement noté $\nabla$, est un opérateur crucial pour faire terminer l'analyse des boucles.
+
+ Pour les intervalles, il s'agit généralement d'envoyer une borne à l'infini~:
+ $$[1,3] \nabla [1,4] = [1, \infty]$$
+ Pour les polyèdres, c'est plus complexe mais globalement cela peut se comprendre comme la suppression d'une ou de plusieurs contraintes.
+
+ \begin{example}
+ Par exemple si on étudie un compteur qui est incrémenté à chaque tour de boucle, on va rencontrer les valeurs $x=1$, $x=2$, $x=3$, ...
+
+ L'opérateur $\nabla$ permet d'extrapoler pour pouvoir dire~: $x$ varie dans $\mathbb{N}^*$.
+ \end{example}
+\end{frame}
+
+\begin{frame}\frametitle{Abstraction de la sémantique collectrice, preuve de propriétés}
+ Si on souhaite prouver par exemple qu'une variable booléenne $p$ est toujours vraie, alors on a besoin de montrer que~:
+ $$\forall s \in S, s(p)=true$$
+
+ On ne peut pas manipuler $S$ directement, mais on peut en manipuler une abstraction $S^\sharp$ telle que $S \subset \gamma(S^\sharp)$.
+
+ $S^\sharp$ est également défini comme un point fixe~:
+ $$S^\sharp = lfp_{S_0^\sharp} (\lambda s. s^\sharp \sqcup g^\sharp(s))$$
+
+ Si on montre que $p=true$ dans $S^\sharp$, c'est gagné.
+\end{frame}
+\begin{frame}\frametitle{Preuve de propriété}
+ \begin{figure}
+ \centering
+ \def\svgwidth{.75\textwidth}
+ \input{property.pdf_tex}
+ \end{figure}
+\end{frame}
+
+\section{Domaines à disjonction de cas}
+\frame{\sectionpage}
+\begin{frame}\frametitle{Besoin d'une abstraction performante}
+ \begin{itemize}
+ \item On veut être capable de traîter correctement l'initialisation
+ \item On veut être capable d'étudier les états d'automates ou les branches de conditions séparément
+ \item On veut être capable d'utiliser des variables booléennes pour partitionner notre représentation abstraite
+ \end{itemize}
+ Les domaines relationnels à base de polyèdres ou d'octogones ne sont pas à même de représenter des contraintes qui mettent en relation des variables énumérées et des variables numériques.
+
+ Il a donc fallu développer de nouveaux domaines abstraits mieux adaptés.
+\end{frame}
+\begin{frame}[fragile]\frametitle{Un exemple}
+ Étudions un programme simple~:
+ \vspace{7mm}
+
+ \begin{verbatim}
+ lx = 0 -> pre x
+ c = (lx >= 10)
+ x = if c then 0 else lx + 1
+ \end{verbatim}
+ \vspace{7mm}
+
+ On aimerait prouver $x \in [0,10]$
+\end{frame}
+\begin{frame}\frametitle{Itérations sur cet exemple}
+ Dans le cas où l'on ne fait pas de disjonctions, nos itérations vont ressembler à ça~:
+ \vspace{5mm}
+
+ \begin{tabularx}{\linewidth}{|s|b|b|b|b|}
+ \hhline{-----} iter & \begin{bf}init\end{bf} & $\mathbf{lx}$ & $\mathbf{c}$ & $\mathbf{x}$ \\
+ \hhline{|=|=|=|=|=|}
+ 0 & tt & 0 & ff & 1 \\ \hhline{-----}
+ 1 & $\top$ & $[0,1]$ & ff & $[1,2]$ \\ \hhline{-----}
+ 2 & $\top$ & $[0,2]$ & ff & $[1,3]$ \\ \hhline{-----}
+ 3 & $\top$ & $[0,3]$ & ff & $[1,4]$ \\ \hhline{-----}
+ 4 & $\top$ & $[0,\infty[$ & $\top$ & $[0,\infty[$ \\ \hhline{-----}
+ 5 & $\top$ & $[0,\infty[$ & $\top$ & $[0,\infty[$ \\ \hhline{-----}
+ \end{tabularx}
+ \vspace{5mm}
+
+ On n'a pas réussi à prouver une borne supérieure sur $x$ !
+\end{frame}
+\begin{frame}\frametitle{Disjonctions de cas selon des variables}
+ On se done un ensemble $\mathbb{X}_d$ de variables énumérées (prenant leurs valeurs dans $\mathbb{V}_d$ un ensemble fini).
+
+ On note $\mathbb{M}_d = \mathbb{X}_d \to \mathbb{V}_d$.
+ \begin{definition}
+ On définit le domaine abstrait suivant~:
+ $$\mathcal{D}^\sharp_d = \mathbb{M}_d \to \mathcal{D}^\sharp$$
+ \end{definition}
+ Chaque combinaison possible pour les variables de $\mathbb{V}_d$ est traîtée séparément. En pratique tous les cas ne sont pas toujours accessibles.
+\end{frame}
+\begin{frame}\frametitle{Exemple}
+ Une représentation appropriée pour traiter notre exemple serait~:
+ \vspace{5mm}
+
+ \begin{tabularx}{\linewidth}{|s|s|b|}
+ \hline \begin{bf}init\end{bf} & $\mathbf{c}$ & \\
+ \hhline{|=|=|=|}
+ tt & tt & $\bot$ \\ \hline
+ tt & ff & $lx = 0; x = 1$ \\ \hline
+ ff & tt & $lx = 10; x = 0$ \\ \hline
+ ff & ff & $0 \le lx \le 9; x = lx + 1$ \\ \hline
+ \end{tabularx}
+
+\end{frame}
+\begin{frame}\frametitle{Opérateurs correspondants}
+ La fonction de concrétisation donne la sémantique du domaine~:
+ $$\forall s \in \mathcal{D}_d^\sharp, \gamma(s) = \bigcup_{d\in\mathbb{M}_d} \left\{ e \in \gamma(s(d)) \;|\; \forall x \in \mathbb{X}_d, e(x)=d(x) \right\}$$
+
+ Si on considère une contrainte sur des variables énumérées du type $x \equiv y$, on est capable de la traîter comme suit~:
+ $$\llrrbracket{ x \equiv y}(s)
+ = \lambda d.
+ \begin{cases} s(d) & \text{si } d(x) = d(y)
+ \\ \bot & \text{sinon}
+ \end{cases}$$
+ Les opérateurs $\sqcap, \sqcup$ et les valeurs $\top, \bot$ ne posent pas de problème. Par exemple, $s \sqcup s' = \lambda d. s(d) \sqcup s'(d)$.
+\end{frame}
+\begin{frame}\frametitle{Principe d'itération}
+ On pourait faire des itérations globales sur notre environnement de $\mathcal{D}_d^\sharp$ jusqu'à trouver un point fixe, mais pour accélerer l'analyse et pour en améliorer la précision, on considère les cas un par un.
+ \begin{itemize}
+ \item Prendre un cas nouveau
+ \item Rechercher un point fixe pour ce cas-là ; on profite alors des conditions qui font que l'on reste dans ce cas d'un cycle au suivant, à la manière de conditions de sortie de boucle, pour affiner l'analyse
+ \item Effectuer un cycle complet sans restriction, en partant de ce point fixe, et considérer tous les nouveaux cas que l'on a découvert
+ \end{itemize}
+ C'est le principe des {\em itérations chaotiques}.
+\end{frame}
+\begin{frame}\frametitle{Itérations chaotiques sur notre exemple}
+ Reprenons notre exemple. Maintenant, on a~:
+
+ \begin{tabularx}{\linewidth}{|su|b|b|b|b|}
+ \hhline{------} & & \begin{bf}init\end{bf} & $\mathbf{lx}$ & $\mathbf{c}$ & $\mathbf{x}$ \\
+ \hhline{|==|=|=|=|=|}
+ 0 & $\star$ & tt & 0 & ff & 1 \\ \hhline{------}
+ 1 & & $tt$ & $0$ & ff & $1$ \\ \hhline{|~~|----}
+ & $\star$ & $ff$ & $1$ & ff & $2$ \\ \hhline{------}
+ 2 & & $tt$ & $0$ & ff & $1$ \\ \hhline{|~~|----}
+ & & $ff$ & $[1,9]$ & ff & $[2,10]$ \\ \hhline{|~~|----}
+ & $\star$ & $ff$ & $10$ & tt & 0 \\ \hhline{------}
+ 3 & & $tt$ & $0$ & ff & $1$ \\ \hhline{|~~|----}
+ & $\star$ & $ff$ & $[0,9]$ & ff & $[1,10]$ \\ \hhline{|~~|----}
+ & & $ff$ & $10$ & tt & 0 \\ \hhline{------}
+ 4 & & $tt$ & $0$ & ff & $1$ \\ \hhline{|~~|----}
+ & & $ff$ & $[0,9]$ & ff & $[1,10]$ \\ \hhline{|~~|----}
+ & & $ff$ & $10$ & tt & 0 \\ \hhline{------}
+ \end{tabularx}
+\end{frame}
+\begin{frame}\frametitle{Problème d'explosion}
+ On peut avoir à représenter des valeurs abstraites comme la suivante~:
+ \vspace{5mm}
+
+ \begin{tabularx}{\linewidth}{|t|t|t|b|}
+ \hhline{----} \begin{bf}init\end{bf} & $\mathbf{la}$ & $\mathbf{lb}$ & \\
+ \hhline{|=|=|=|=|}
+ tt & tt & tt & $a = 0; b = 0$ \\ \hhline{----}
+ tt & tt & ff & $a = 0; b = 0$ \\ \hhline{----}
+ tt & ff & tt & $a = 0; b = 0$ \\ \hhline{----}
+ tt & ff & ff & $a = 0; b = 0$ \\ \hhline{----}
+ ff & tt & tt & $a = 0; b \in [1, \infty[$ \\ \hhline{----}
+ ff & tt & ff & $a = 1; b \in [1, \infty[$ \\ \hhline{----}
+ ff & ff & tt & $a = -1; b \in [1, \infty[$ \\ \hhline{----}
+ ff & ff & ff & $a = 0; b \in [1, \infty[$ \\ \hhline{----}
+ \end{tabularx}
+ \vspace{5mm}
+
+ Il y a beaucoup de redondance !
+\end{frame}
+\begin{frame}\frametitle{La solution}
+
+ \begin{figure}\centering
+ \begin{tikzpicture}[->]
+ \node[var, text centered] (init) {init};
+ \node[var, below right = .7cm and 1.5cm of init] (la) {la};
+ \node[var, below left = .7cm and .4cm of la] (lb1) {lb};
+ \node[var, below right = .7cm and .4cm of la] (lb2) {lb};
+ \node[end, below left = 1cm and .4cm of lb1] (f2) {$\begin{tabular}{c}a = -1\\b \in [1,\infty[\end{tabular}$};
+ \node[end, right = .5cm of f2] (f3) {$\begin{tabular}{c}a = 0\\b \in [1, \infty[\end{tabular}$};
+ \node[end, below right = 1cm and .4cm of lb2] (f4) {$\begin{tabular}{c}a = 1\\b \in [1, \infty[\end{tabular}$};
+ \node[end, left = .6cm of f2] (f1) {$\begin{tabular}{c}a = 0\\b = 0\end{tabular}$};
+
+ \path[->, thick]
+ (init) edge node [left] {$tt$} (f1)
+ edge node [right] {$ff$} (la)
+ (la) edge node[left] {$ff$} (lb1)
+ edge node[right] {$tt$} (lb2)
+ (lb1) edge node[left] {$tt$} (f2)
+ edge node[right] {$ff$} (f3)
+ (lb2) edge node[left] {$tt$} (f3)
+ edge node[right] {$ff$} (f4)
+ \end{tikzpicture}
+ \end{figure}
+\end{frame}
+
+\begin{frame}\frametitle{Disjonctions de cas avec graphe de décision}
+ On numérote les variables de $\mathbb{V}_d$~: $x_1, x_2, \dots, x_m$.
+
+ On considère un type somme qui représente un graphe de décision~:
+ $$ \begin{tabular}{rcl}
+ T & := & V(s), s \in \mathcal{D}^\sharp \\
+ & | & C(x_i, v_1 \to T_1, \dots, v_k \to T_k)
+ \end{tabular} $$
+ La sémantique est donnée par la fonction de concrétisation~:
+ $$ \begin{tabular}{rcl}
+ \gamma(V(s)) & = & \gamma(s) \\
+ \gamma(C(x, v_1 \to T_1, \dots, v_k \to T_k) & = &
+ \bigcup_{i=1}^k \{ e \in \gamma(T_i) \;|\; e(x) = v_i \}
+ \end{tabular} $$
+ On impose que si un noeud $C(x_i, \dots)$ est parent d'un noeud $C(x_j, \dots)$, alors $i < j$, ce qui implique l'unicité de l'arbre.
+\end{frame}
+\begin{frame}[fragile]\frametitle{Retour à notre exemple}
+ Notre exemple peut être représenté par la structure suivante~:
+ \begin{figure}\centering
+ \begin{tikzpicture}[->,thick]
+ \node[var] {init}
+ child {
+ node[var] {c}
+ child {
+ node[end] {$\bot$}
+ edge from parent
+ node[left]{tt}
+ }
+ child {
+ node[end] {$\begin{tabular}{c}lx = 0 \\ x = 1\end{tabular}$}
+ edge from parent
+ node[right]{ff}
+ }
+ edge from parent
+ node[left] {tt}
+ }
+ child {
+ node[var] {c}
+ child {
+ node[end] {$\begin{tabular}{c}lx = 10 \\ x = 0\end{tabular}$}
+ edge from parent
+ node[left]{tt}
+ }
+ child {
+ node[end] {$\begin{tabular}{c}0 \le lx \le 9 \\ x = lx + 1\end{tabular}$}
+ edge from parent
+ node[right]{ff}
+ }
+ edge from parent
+ node[right] {ff}
+ };
+ \end{tikzpicture}
+ \end{figure}
+\end{frame}
+\begin{frame}\frametitle{Opérateurs correspondants}
+ \begin{itemize}
+ \item On fait du partage sur les feuilles et les sous-arbres identique, ce qui transforme notre structure en un DAG.
+ \item Les opérateurs $\sqcup$ et $\sqcap$ sont implémentés par récurrence, mais il faut utiliser une procédure de mémoisation pour éviter que la complexité soit exponentielle (on profite du partage).
+ \item L'application d'une condition sur les énumérés $x \equiv y$ s'effectue en faisant le $\sqcap$ avec un graphe qui représente cette contrainte.
+ \end{itemize}
+\end{frame}
+\begin{frame}\frametitle{Principe d'itération}
+ On pourait de même faire des itérations globales, mais on a préféré implémenter les itérations chaotiques pour les mêmes raisons.
+
+ Pour identifier les différents cas, on utilise la fonction suivante, qui extrait d'un graphe la fonction booléenne sur les variables énumérées qui mène à une feuille $V(s_0)$ (partagée)~:
+ $$ \begin{tabular}{rcl}
+ \rho(V(s), s_0) & = & \begin{cases} \top & \text{si } s = s_0 \\ \bot & \text{sinon} \end{cases} \\
+ \rho(C(x_i, v_1 \to T_1, \dots), s_0) & = & C(x_i, v_1 \to \rho(T_1, s_0), \dots)
+ \end{tabular}$$
+\end{frame}
+
+
+
+
+
+\section{Résultats et conclusion}
+\frame{\sectionpage}
+\begin{frame}\frametitle{Comparaison avec Astrée}
+ \begin{itemize}
+ \item Astrée implémente un domaine abstrait permettant de traiter différents cas dans un arbre de disjonctions, mais les feuilles de cet arbre ne peuvent être que des intervalles de valeurs (ils ne gèrent pas les relations entre les variables). En conséquence, une propriété comme celle du double updown est difficile à montrer.
+ \item Dans Astrée, les variables sont considérées par {\em packs}. Pour les octogones, des packs sont générés automatiquement. Pour l'arbre de disjonctions, il faut spécifier manuellement que l'on veut que l'analyseur considère un pack comportant telles et telles variables. (L'ensemble des propriétés prouvées est la conjonction des propriétés prouvées à l'aide de chaque pack).
+ \item Astrée travaille sur du C, et se pose des questions inutiles (typiquement les questions d'initialisation ou de bornes)
+ \end{itemize}
+\end{frame}
+\begin{frame}\frametitle{Implémentation}
+ $\exists$ prototype.
+\end{frame}
+\begin{frame}\frametitle{Résultats}
+ Plein de preuves sympathiques~:
+ \begin{itemize}
+ \item compteurs
+ \item updown
+ \item double updown
+ \item suite de cartes
+ \item un train \cite{halbwachs94c}
+ \item un demi-tour pour des rames de metro \cite{lesartse}
+ \end{itemize}
+\end{frame}
+\begin{frame}\frametitle{Limitations}
+ \begin{itemize}
+ \item Pour certains problèmes, il faut rajouter manuellement des variables booléennes pour faire des disjonctions de cas
+ \item On ne sait pas comment ça se comporte sur des gros programmes
+ \item Aucune analyse des propriétés des nombres flottants
+ \item Analyseur non vérifié~: il manque quelques preuves concernant les abstractions (structures de treillis, connection de Galois, correction et terminaison des principes d'itérations chaotiques)
+ \end{itemize}
+\end{frame}
+\begin{frame}\frametitle{Perspectives}
+ \begin{itemize}
+ \item Développement d'une heuristique qui détermine quelles variables représentent la structure de contrôle du programme et sont pertinentes à considérer
+ \item Partitionnement dynamique
+ \item Analyses par packs de variables, comme Astrée
+ \end{itemize}
+\end{frame}
+\begin{frame}\frametitle{Références}
+ \bibliographystyle{apacite}
+ \bibliography{research}
+\end{frame}
+
+
+\end{document}
diff --git a/doc/prez/property.svg b/doc/prez/property.svg
new file mode 100644
index 0000000..a3d085c
--- /dev/null
+++ b/doc/prez/property.svg
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="640px"
+ height="480px"
+ id="svg6553"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="property.svg">
+ <defs
+ id="defs6555">
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#Strips1_1"
+ id="pattern7089"
+ patternTransform="matrix(4.9170391,4.8741499,-32.098984,32.381433,248.23706,146.68553)" />
+ <pattern
+ inkscape:stockid="Stripes 1:1"
+ id="Strips1_1"
+ patternTransform="translate(0,0) scale(10,10)"
+ height="1"
+ width="2"
+ patternUnits="userSpaceOnUse"
+ inkscape:collect="always">
+ <rect
+ id="rect4486"
+ height="2"
+ width="1"
+ y="-0.5"
+ x="0"
+ style="fill:black;stroke:none" />
+ </pattern>
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#Strips1_1-7"
+ id="pattern7089-0"
+ patternTransform="matrix(4.9170391,4.8741499,-32.098984,32.381433,248.23706,146.68553)" />
+ <pattern
+ inkscape:stockid="Stripes 1:1"
+ id="Strips1_1-7"
+ patternTransform="translate(0,0) scale(10,10)"
+ height="1"
+ width="2"
+ patternUnits="userSpaceOnUse"
+ inkscape:collect="always">
+ <rect
+ id="rect4486-1"
+ height="2"
+ width="1"
+ y="-0.5"
+ x="0"
+ style="fill:black;stroke:none" />
+ </pattern>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.095627"
+ inkscape:cx="320"
+ inkscape:cy="281.22383"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ showgrid="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1641"
+ inkscape:window-height="849"
+ inkscape:window-x="183"
+ inkscape:window-y="160"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata6558">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g7124"
+ transform="translate(-30.608532,-104.30486)">
+ <path
+ sodipodi:nodetypes="sssssssss"
+ inkscape:connector-curvature="0"
+ id="path7069"
+ d="m 92.18466,231.74032 c 0,-54.28392 24.52482,-75.75571 79.40659,-75.75571 47.44479,0 47.67731,39.7033 76.21207,39.7033 31.43902,0 31.2808,-40.61602 81.68838,-40.61602 46.59649,0 76.59323,21.89564 76.66843,70.2794 0.0915,58.8704 -29.52809,77.74725 -61.4749,77.74725 -65.82969,0 -65.39144,-31.33223 -96.85544,-31.33223 -28.55406,0 -27.66032,31.16613 -88.1039,31.16613 -43.34073,0 -67.54123,-18.82241 -67.54123,-71.19212 z"
+ style="fill:#d5ffe6;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ transform="matrix(0.88812517,0,0,0.88812517,76.590003,70.465993)"
+ d="m 348.51064,179.89362 c 0,34.21815 -27.73929,61.95744 -61.95745,61.95744 -34.21815,0 -61.95744,-27.73929 -61.95744,-61.95744 0,-34.21816 27.73929,-61.95745 61.95744,-61.95745 34.21816,0 61.95745,27.73929 61.95745,61.95745 z"
+ sodipodi:ry="61.957447"
+ sodipodi:rx="61.957447"
+ sodipodi:cy="179.89362"
+ sodipodi:cx="286.55319"
+ id="path7091"
+ style="fill:#d5e5ff;stroke:#000000;stroke-width:3.37790227;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <g
+ id="g7120">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.49664593;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path7085-2"
+ sodipodi:cx="296.87943"
+ sodipodi:cy="197.31915"
+ sodipodi:rx="34.851063"
+ sodipodi:ry="34.851063"
+ d="m 331.73049,197.31915 c 0,19.24771 -15.60335,34.85107 -34.85106,34.85107 -19.24772,0 -34.85107,-15.60336 -34.85107,-34.85107 0,-19.24771 15.60335,-34.85106 34.85107,-34.85106 19.24771,0 34.85106,15.60335 34.85106,34.85106 z"
+ transform="matrix(0.85796507,0,0,0.85796507,76.372928,60.941104)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#pattern7089);fill-opacity:1;stroke:#000000;stroke-width:3.49664593;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path7085"
+ sodipodi:cx="296.87943"
+ sodipodi:cy="197.31915"
+ sodipodi:rx="34.851063"
+ sodipodi:ry="34.851063"
+ d="m 331.73049,197.31915 c 0,19.24771 -15.60335,34.85107 -34.85106,34.85107 -19.24772,0 -34.85107,-15.60336 -34.85107,-34.85107 0,-19.24771 15.60335,-34.85106 34.85107,-34.85106 19.24771,0 34.85106,15.60335 34.85106,34.85106 z"
+ transform="matrix(0.85796507,0,0,0.85796507,76.372929,60.9411)" />
+ </g>
+ </g>
+ <g
+ id="g7302"
+ transform="translate(-73.204277,11.865352)">
+ <path
+ transform="matrix(1.6068752,0,0,1.6068752,-86.77435,24.422779)"
+ d="m 348.51064,179.89362 c 0,34.21815 -27.73929,61.95744 -61.95745,61.95744 -34.21815,0 -61.95744,-27.73929 -61.95744,-61.95744 0,-34.21816 27.73929,-61.95745 61.95744,-61.95745 34.21816,0 61.95745,27.73929 61.95745,61.95745 z"
+ sodipodi:ry="61.957447"
+ sodipodi:rx="61.957447"
+ sodipodi:cy="179.89362"
+ sodipodi:cx="286.55319"
+ id="path7091-1"
+ style="fill:#f4d7e3;stroke:#000000;stroke-width:1.86697769;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="sssssssss"
+ inkscape:connector-curvature="0"
+ id="path7069-3"
+ d="m 134.78041,314.99564 c 0,-54.28392 24.52482,-75.75571 79.40659,-75.75571 47.44479,0 47.67731,39.7033 76.21207,39.7033 31.43902,0 31.2808,-40.61602 81.68838,-40.61602 46.59649,0 76.59323,21.89564 76.66843,70.2794 0.0915,58.8704 -29.52809,77.74725 -61.4749,77.74725 -65.82969,0 -65.39144,-31.33223 -96.85544,-31.33223 -28.55406,0 -27.66032,31.16613 -88.1039,31.16613 -43.34073,0 -67.54123,-18.82241 -67.54123,-71.19212 z"
+ style="fill:#d5ffe6;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ id="path7069-3-9"
+ d="m 372.09375,238.3125 c -50.40758,0 -50.24848,40.625 -81.6875,40.625 -3.55518,0 -6.67744,-0.60845 -9.5,-1.6875 -4.38635,11.22536 -6.78125,23.47113 -6.78125,36.25 0,15.09681 3.36164,29.39871 9.375,42.21875 2.12423,-0.4429 4.41673,-0.6875 6.9375,-0.6875 31.464,0 31.01406,31.3125 96.84375,31.3125 31.94681,0 61.56025,-18.8796 61.46875,-77.75 -0.0752,-48.38376 -30.05976,-70.28125 -76.65625,-70.28125 z"
+ style="fill:#d5e5ff;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="translate(42.59575,83.255323)"
+ id="g7120-1">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.49664593;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path7085-2-2"
+ sodipodi:cx="296.87943"
+ sodipodi:cy="197.31915"
+ sodipodi:rx="34.851063"
+ sodipodi:ry="34.851063"
+ d="m 331.73049,197.31915 c 0,19.24771 -15.60335,34.85107 -34.85106,34.85107 -19.24772,0 -34.85107,-15.60336 -34.85107,-34.85107 0,-19.24771 15.60335,-34.85106 34.85107,-34.85106 19.24771,0 34.85106,15.60335 34.85106,34.85106 z"
+ transform="matrix(0.85796507,0,0,0.85796507,76.372928,60.941104)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#pattern7089-0);fill-opacity:1;stroke:#000000;stroke-width:3.49664593;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path7085-0"
+ sodipodi:cx="296.87943"
+ sodipodi:cy="197.31915"
+ sodipodi:rx="34.851063"
+ sodipodi:ry="34.851063"
+ d="m 331.73049,197.31915 c 0,19.24771 -15.60335,34.85107 -34.85106,34.85107 -19.24772,0 -34.85107,-15.60336 -34.85107,-34.85107 0,-19.24771 15.60335,-34.85106 34.85107,-34.85106 19.24771,0 34.85106,15.60335 34.85106,34.85106 z"
+ transform="matrix(0.85796507,0,0,0.85796507,76.372929,60.9411)" />
+ </g>
+ <path
+ transform="matrix(1.6068752,0,0,1.6068752,-86.774353,24.422775)"
+ d="m 348.51064,179.89362 c 0,34.21815 -27.73929,61.95744 -61.95745,61.95744 -34.21815,0 -61.95744,-27.73929 -61.95744,-61.95744 0,-34.21816 27.73929,-61.95745 61.95744,-61.95745 34.21816,0 61.95745,27.73929 61.95745,61.95745 z"
+ sodipodi:ry="61.957447"
+ sodipodi:rx="61.957447"
+ sodipodi:cy="179.89362"
+ sodipodi:cx="286.55319"
+ id="path7091-1-7"
+ style="fill:none;stroke:#000000;stroke-width:1.86697769;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text7277"
+ y="359.31992"
+ x="189.8259"
+ style="font-size:10px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="359.31992"
+ x="189.8259"
+ id="tspan7279"
+ sodipodi:role="line">\large $P$</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="116.62163"
+ y="158.96265"
+ id="text7277-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan7279-1"
+ x="116.62163"
+ y="158.96265">\large $P$</tspan></text>
+ <path
+ style="fill:none;stroke:#006700;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 487.78847,137.49463 17.9425,17.62119 44.69885,-43.89838"
+ id="path7313"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#820000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 496.49557,315.2692 51.54828,50.92205 m -0.12331,-51.16864 -52.04158,52.03172"
+ id="path7319"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="309.41187"
+ y="169.6754"
+ id="text7348"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="309.41187"
+ y="169.6754"
+ id="tspan7364">$S$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="333.14258"
+ y="187.92979"
+ id="text7352"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="333.14258"
+ y="187.92979"
+ id="tspan7368">$S^\sharp$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="313.06274"
+ y="371.38641"
+ id="text7356"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan7358"
+ x="313.06274"
+ y="371.38641">$S$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="376.04037"
+ y="406.06973"
+ id="text7360"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan7362"
+ x="376.04037"
+ y="406.06973">$S^\sharp$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/prez/research.bib b/doc/prez/research.bib
new file mode 100644
index 0000000..95acb0c
--- /dev/null
+++ b/doc/prez/research.bib
@@ -0,0 +1,21 @@
+
+ @INPROCEEDINGS{halbwachs94c,
+ AUTHOR={N. Halbwachs},
+ TITLE={About synchronous programming and abstract interpretation},
+ BOOKTITLE={International Symposium on Static Analysis, SAS'94},
+ EDITOR = {B. {LeCharlier}},
+ PUBLISHER = {LNCS 864, Springer Verlag},
+ ADDRESS = {Namur (belgium)},
+ MONTH = {September},
+ YEAR= 1994
+}
+@ARTICLE{lesartse,
+ AUTHOR = {N. Halbwachs and F. Lagnier and C. Ratel },
+ TITLE = {Programming and verifying real-time systems by means of
+ the synchronous data-flow programming language Lustre},
+ JOURNAL = {IEEE Transactions on Software Engineering,
+ Special Issue on the Specification and Analysis
+ of Real-Time Systems},
+ MONTH={September },
+ YEAR=1992
+}
diff --git a/readme.pdf b/doc/readme.pdf
index 4a97029..4a97029 100644
--- a/readme.pdf
+++ b/doc/readme.pdf
Binary files differ
diff --git a/readme.tm b/doc/readme.tm
index 0d6388c..8622a9a 100644
--- a/readme.tm
+++ b/doc/readme.tm
@@ -1441,6 +1441,12 @@
Dans ce cas, on s'arrte si <math|s<rsub|n+1>=s<rsub|n>>.
</itemize>
+ <section|Partitionnement dynamique>
+
+ Une autre approche base de partitionnement dynamique a t tente, mais
+ elle n'a pas donn de trs bons rsultats par manque d'une heuristique sur
+ les partitionnements effectuer. Dtails venir.
+
<section|Implmentation>
Le projet scade-analyzer propose une implmentation simple des composants
@@ -1622,6 +1628,66 @@
<item><verbatim|--ai-max-dp-width> : largeur maximale de partitionnement
(ie nombre maximal de parties considrer)
</itemize>
+
+ <section|Prolongements envisageables>
+
+ <subsection|Analyse des proprits des nombres flottants>
+
+ <\itemize>
+ <item>Implmenter un domaine d'intervalles permettant de grer les
+ rationnels en prcision arbitraire, ou se brancher sur le module Box
+ d'Apron
+
+ <item>Utiliser un oprateur de widening apropri (cf Astre)
+
+ <item>Implmenter la smantique des nombres flottants machine (ce qui
+ n'est pas simple)
+ </itemize>
+
+ <subsection|Analyse de programmes \S taille relle \T>
+
+ <\itemize>
+ <item>Modification du domaine EDD pour pouvoir ne prendre en compte
+ qu'une partie des variables numres (pour l'instant elles sont toutes
+ considres, ce n'est pas paramtrable). Permettre que les feuilles
+ contiennent galement des informations non-relationnelles sur les
+ variables de type numr.
+
+ <item>Analyse de base avec des intervalles, plus des \S packs \T de
+ variables traits avec des domaines plus puissants (octagones,
+ polyhdres, domaines disjonctions)
+
+ <item>Analyse par contrats : abstraire certains noeuds par les garanties
+ que vrifient les sorties, plutt que de considrer le noeud en entre.
+ En change, il faut que l'on vrifie que les proprits en entre
+ (assume) sont bien vraies.
+
+ <item>L'ordre des quations dans le programme semble avoir un impact sur
+ l'analyse : si celles-ci sont crites dans l'ordre o elles seront
+ effectivement excutes (ie tries par ordre de dpendance), l'analyse
+ semble gagner en prcision. Implmenter une passe de scheduling
+ (approximatif : on ne veut pas diviser les automates, les blocs activate,
+ ...) que l'on excuterait comme pr-processing sur le programme.
+ </itemize>
+
+ <section|Rfrences>
+
+ <\itemize>
+ <item><name|N.Halbwachs>, <em|About synchronous programming and abstract
+ interpretation>, International Symposium on Static Analysis, SAS'94.
+
+ <item><name|N.Halbwachs>, <name|F.Lagnier> and <name|C.Ratel>,
+ <em|Programming and verifying real-time systems by means of the
+ synchronous data-flow programming language Lustre>, IEEE Transactions on
+ Software Engineering, Spcial Issue on the Specification and Analysis of
+ Real-Time Systems, Sept. 1992
+
+ <item><name|B.Jeannet>, <name|N.Halbwachs> and <name|P.Raymond>,
+ <em|Dynamic Partitioning in Analyses of Numerical Properties>, Static
+ Analysis Symposium, SAS'99.
+ </itemize>
+
+ \;
</body>
<\initial>
@@ -1658,19 +1724,24 @@
<associate|auto-30|<tuple|5.2.3.3|?>>
<associate|auto-31|<tuple|5.2.5.2|16>>
<associate|auto-32|<tuple|6|16>>
- <associate|auto-33|<tuple|6.1|?>>
- <associate|auto-34|<tuple|6.2|?>>
- <associate|auto-35|<tuple|6.3|?>>
- <associate|auto-36|<tuple|6.3.1|?>>
- <associate|auto-37|<tuple|6.3.1.1|?>>
- <associate|auto-38|<tuple|6.3.1.2|?>>
- <associate|auto-39|<tuple|6.3.2|?>>
+ <associate|auto-33|<tuple|7|?>>
+ <associate|auto-34|<tuple|7.1|?>>
+ <associate|auto-35|<tuple|7.2|?>>
+ <associate|auto-36|<tuple|7.3|?>>
+ <associate|auto-37|<tuple|7.3.1|?>>
+ <associate|auto-38|<tuple|7.3.1.1|?>>
+ <associate|auto-39|<tuple|7.3.1.2|?>>
<associate|auto-4|<tuple|2.2|2>>
- <associate|auto-40|<tuple|6.3.2.1|?>>
- <associate|auto-41|<tuple|6.3.2.2|?>>
- <associate|auto-42|<tuple|6.3.3|?>>
- <associate|auto-43|<tuple|6.3.3.1|?>>
- <associate|auto-44|<tuple|6.3.3.2|?>>
+ <associate|auto-40|<tuple|7.3.2|?>>
+ <associate|auto-41|<tuple|7.3.2.1|?>>
+ <associate|auto-42|<tuple|7.3.2.2|?>>
+ <associate|auto-43|<tuple|7.3.3|?>>
+ <associate|auto-44|<tuple|7.3.3.1|?>>
+ <associate|auto-45|<tuple|7.3.3.2|?>>
+ <associate|auto-46|<tuple|8|?>>
+ <associate|auto-47|<tuple|8.1|?>>
+ <associate|auto-48|<tuple|8.2|?>>
+ <associate|auto-49|<tuple|9|?>>
<associate|auto-5|<tuple|2.3|3>>
<associate|auto-6|<tuple|2.3.1|3>>
<associate|auto-7|<tuple|2.3.2|3>>
@@ -1808,6 +1879,58 @@
<vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|6<space|2spc>Implmentation>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-32><vspace|0.5fn>
+
+ <with|par-left|<quote|1.5fn>|6.1<space|2spc>Parsing et affichage de
+ programmes SCADE <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-33>>
+
+ <with|par-left|<quote|1.5fn>|6.2<space|2spc>Interprte SCADE
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-34>>
+
+ <with|par-left|<quote|1.5fn>|6.3<space|2spc>Analyse statique par
+ interprtation abstraite <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-35>>
+
+ <with|par-left|<quote|3fn>|6.3.1<space|2spc>Domaine disjonctions
+ simples <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-36>>
+
+ <with|par-left|<quote|6fn>|Modes d'analyse
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-37><vspace|0.15fn>>
+
+ <with|par-left|<quote|6fn>|Options de l'analyse
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-38><vspace|0.15fn>>
+
+ <with|par-left|<quote|3fn>|6.3.2<space|2spc>Domaine disjonction par
+ graphe de dcision <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-39>>
+
+ <with|par-left|<quote|6fn>|Modes d'analyse
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-40><vspace|0.15fn>>
+
+ <with|par-left|<quote|6fn>|Options de l'analyse
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-41><vspace|0.15fn>>
+
+ <with|par-left|<quote|3fn>|6.3.3<space|2spc>Analyse par partitionnement
+ dynamique <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-42>>
+
+ <with|par-left|<quote|6fn>|Modes d'analyse
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-43><vspace|0.15fn>>
+
+ <with|par-left|<quote|6fn>|Paramtres de l'analyse
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-44><vspace|0.15fn>>
+
+ <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|Bibliographie>
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-45><vspace|0.5fn>
</associate>
</collection>
</auxiliary> \ No newline at end of file