diff --git a/arduino/led_puzzle/doc/header.tex b/arduino/led_puzzle/doc/header.tex
new file mode 100644
index 0000000000000000000000000000000000000000..e4056791d018a6a52fe8271f3e212ae143e5b169
--- /dev/null
+++ b/arduino/led_puzzle/doc/header.tex
@@ -0,0 +1,253 @@
+% This is "sig-alternate.tex" V2.1 April 2013
+% This file should be compiled with V2.5 of "sig-alternate.cls" May 2012
+%
+% This example file demonstrates the use of the 'sig-alternate.cls'
+% V2.5 LaTeX2e document class file. It is for those submitting
+% articles to ACM Conference Proceedings WHO DO NOT WISH TO
+% STRICTLY ADHERE TO THE SIGS (PUBS-BOARD-ENDORSED) STYLE.
+% The 'sig-alternate.cls' file will produce a similar-looking,
+% albeit, 'tighter' paper resulting in, invariably, fewer pages.
+%
+% ----------------------------------------------------------------------------------------------------------------
+% This .tex file (and associated .cls V2.5) produces:
+%       1) The Permission Statement
+%       2) The Conference (location) Info information
+%       3) The Copyright Line with ACM data
+%       4) NO page numbers
+%
+% as against the acm_proc_article-sp.cls file which
+% DOES NOT produce 1) thru' 3) above.
+%
+% Using 'sig-alternate.cls' you have control, however, from within
+% the source .tex file, over both the CopyrightYear
+% (defaulted to 200X) and the ACM Copyright Data
+% (defaulted to X-XXXXX-XX-X/XX/XX).
+% e.g.
+% \CopyrightYear{2007} will cause 2007 to appear in the copyright line.
+% \crdata{0-12345-67-8/90/12} will cause 0-12345-67-8/90/12 to appear in the copyright line.
+%
+% ---------------------------------------------------------------------------------------------------------------
+% This .tex source is an example which *does* use
+% the .bib file (from which the .bbl file % is produced).
+% REMEMBER HOWEVER: After having produced the .bbl file,
+% and prior to final submission, you *NEED* to 'insert'
+% your .bbl file into your source .tex file so as to provide
+% ONE 'self-contained' source file.
+%
+% ================= IF YOU HAVE QUESTIONS =======================
+% Questions regarding the SIGS styles, SIGS policies and
+% procedures, Conferences etc. should be sent to
+% Adrienne Griscti (griscti@acm.org)
+%
+% Technical questions _only_ to
+% Gerald Murray (murray@hq.acm.org)
+% ===============================================================
+%
+% For tracking purposes - this is V2.0 - May 2012
+
+%\documentclass{sig-alternate-05-2015}
+
+% The following \documentclass options may be useful:
+
+% preprint      Remove this option only once the paper is in final form.
+% 10pt          To set in 10-point type instead of 9-point.
+% 11pt          To set in 11-point type instead of 9-point.
+% authoryear    To obtain author/year citation style instead of numeric.
+
+\usepackage{amsmath}
+%\usepackage{fancyvrb}
+
+
+%\usepackage{makeidx}  % allows for indexgeneration
+%
+%
+%\frontmatter          % for the preliminaries
+%
+%\pagestyle{headings}  % switches on printing of running heads
+
+
+\hypersetup{colorlinks=true,citecolor=blue,linkcolor=blue,filecolor=blue,urlcolor=blue}
+
+\usepackage{color,xcolor,myxcolor}
+\definecolor{grey}{rgb}{0.745,0.745,0.745}
+
+
+%% NEUTRALISER LA GESTION FONTES/COULEURS DE XFIG ?
+\gdef\SetFigFont#1#2#3#4#5#6{#6}
+
+
+%% DIVERS ...
+\usepackage{mathptmx}
+\usepackage{helvet}
+\usepackage{version}
+ \usepackage{ragged2e}
+
+\usepackage{listings}
+\usepackage{wrapfig}
+%\usepackage{listingsutf8}
+
+
+\lstset{
+%  inputencoding=utf8/latin1,
+  captionpos=b,
+  xleftmargin=0pt,
+  xrightmargin=5pt,
+  abovecaptionskip=10pt,
+  framexleftmargin=0pt,
+  framexrightmargin=5pt,
+  framextopmargin=5pt,
+  framexbottommargin=0pt,
+  escapechar={&,<,>},
+  alsoletter={&},
+  escapechar={\&},
+  alsoletter={\&},
+  escapechar={_},
+  alsoletter={_},
+  basicstyle=\scriptsize\ttfamily,
+  keywordstyle=\color{green4},
+  keywordstyle=[2]\color{IndianRed3},
+  keywordstyle=[3]\color{blue4},
+  keywordstyle=[4]\color{DeepPink3},
+  backgroundcolor=\color{LightGray},
+  rulesepcolor=\color{LightGray},
+  stringstyle=\ttfamily\color{red!50!brown},
+  identifierstyle=,
+  numbers=none,
+%  column=fixed,%% XXX keyval package clash 
+  commentstyle=\color{DarkGreen}\itshape,
+  frame=shadowbox,
+  escapeinside={$$},%
+  showstringspaces=false,
+}
+\lstset{}
+
+\lstdefinelanguage{trace}{%
+  morekeywords={call,exit,fail,top},
+  morekeywords=[2]{sat,try},
+  morekeywords=[3]{},
+  morekeywords=[4]{usat},
+  sensitive=false,
+  stringstyle=\color{Orange},
+  numberstyle=\color{LightGray},
+  commentstyle=\color{DarkGreen},
+  morecomment=[s][\color{goldenrod4}]{"}{"},
+  morecomment=[s]{[}{]}
+ }
+\lstdefinelanguage{liosi}{%
+  morekeywords={input,output,sock_addr,sock_port},
+  morekeywords=[2]{int,bool,real},
+}
+\lstdefinelanguage{adacstimu}{%
+  morekeywords={DEBUT_SCENARIO, FIN_SCENARIO},
+  morekeywords=[2]{GEN_MSG, ATTENDRE, CCT},
+  morekeywords=[3]{FAUX,VRAI},
+  morekeywords=[4]{TOR,ANA,VALUE},
+  sensitive=false,
+  moredelim=[l][\ttfamily\green]{CC\ },
+  morecomment=[l]{CM},
+}
+\lstdefinelanguage{rif}{%
+  morekeywords={inputs, outputs, locals},
+  morekeywords=[2]{true,false},
+  morekeywords=[3]{},
+  morekeywords=[4]{bool,int,real},
+  sensitive=false,
+  morecomment=[l]{--},
+  morecomment=[s]{(*}{*)}
+}
+\lstdefinelanguage{lutin}{%
+  morekeywords={assert,exist,run,in,let,node,returns,include},
+  morekeywords=[2]{pre,and,or,not,if,then,else},%XXX'=>'?
+  morekeywords=[3]{exception,raise,try,loop,fby,while,raise,catch,trap,with,do},
+  morekeywords=[4]{bool,int,real},
+  sensitive=false,
+  morecomment=[l]{--},
+  morecomment=[s]{(*}{*)},
+}
+
+\lstdefinelanguage{lustre}{%
+  morekeywords={node,returns,assert,var,const,let,tel,in},
+  morekeywords=[2]{pre,current,merge,when,step,and,or,if,with,then,else,not},%XXX'=>'?
+  morekeywords=[3]{true,false},
+  morekeywords=[4]{bool,int,real},
+  sensitive=false,
+  morecomment=[l]{--},
+  morecomment=[s][\color{goldenrod4}]{<<}{>>},
+  morecomment=[s]{(*}{*)},
+}
+\lstdefinelanguage{tuareg}{%
+  morekeywords={function,fun,match,with,let,in,val,type,and,;;,'=',rec}, % try
+  morekeywords=[2]{if,then,else,ref,not,or,+,raise},%XXX'=>'?
+  morekeywords=[3]{option,list,string,unit,bool,int,float,ct,List,Hashtbl,Not\_found,Filename,Sys,Event},
+  morekeywords=[4]{rdbg},
+  morekeywords=[6]{},
+  morestring=[b]",
+  sensitive=false,
+  morecomment=[l]{--},
+  morecomment=[s]{(*}{*)},
+  escapechar={!},
+  escapeinside=''
+}
+\lstdefinelanguage{custom}{%
+  morestring=[b]",
+  sensitive=false,
+  morecomment=[l]{--},
+  morestring=[b]",
+ escapeinside={(*@}{@*)},
+showspaces=false,               % show spaces adding particular underscores
+showtabs=false,                 % show tabs within strings adding 
+captionpos=b,           % sets the caption-position to bottom
+breakatwhitespace=false,    % sets if automatic breaks should only happen
+commandchars=\\!|,
+}
+
+
+\lstnewenvironment{rif} {\lstset{language=rif}}  {}
+\lstnewenvironment{lutin} {\lstset{language=lutin}}  {}
+\lstnewenvironment{lustre} {\lstset{language=lustre}}  {}
+\lstnewenvironment{tuareg} {\lstset{language=tuareg}}  {}
+
+
+\newcommand{\rdbg}[0]{\textsc{rdbg}}
+\newcommand{\lurette}[0]{\textsc{Lurette}}
+\newcommand{\ocaml}[0]{\textsc{Ocaml}}
+
+\newcommand{\Otawa}[0]{\textsc{Otawa}}
+\newcommand{\OWCET}[0]{\textsc{Otawa}}
+\newcommand{\Ogensim}[0]{\textsc{Osim}}
+\newcommand{\Lustre}[0]{\textsc{Lustre}}
+\newcommand{\Lutin}[0]{\textsc{Lutin}}
+\newcommand{\Lurette}[0]{\textsc{Lurette}}
+\newcommand{\Lesar}[0]{\textsc{Lesar}}
+
+%======================== Commandes spécifiques =========================
+%\input{commandes}
+\newcommand{\blue}[1]{{\color{DarkBlue}#1}}
+\newcommand{\red}[1]{{\color{red}#1}}
+\newcommand{\green}[1]{{\color{DarkGreen}#1}}
+\newcommand{\purple}[1]{{\color{purple2}#1}}
+\newcommand{\decal}{$\hspace*{1cm}$}
+\newcommand{\transTT}[1]{\raisebox{6pt}{$\underrightarrow{~~\mbox{\tt #1}~~}$}}
+\newcommand{\transMTH}[1]{\raisebox{6pt}{$\underrightarrow{~~\mbox{$#1$}~~}$}}
+\newcommand{\hide}[1]{}
+\newcommand{\NN}{\mbox{$\mathrm{I}\!\mathrm{N}$}}
+\newcommand{\MagentaIII}[1]{{\color{magenta3} #1}}
+\newcommand{\GreenIV}[1]{{\color{green4} #1}}
+\newcommand{\RedII}[1]{{\color{red2} #1}}
+\newcommand{\BlueII}[1]{{\color{blue2} #1}}
+\newcommand{\COMM}[1]{\mbox{\blue{// #1}}}
+\newcommand{\kw}[1]{\MagentaIII{\tt #1}}
+\newcommand{\ty}[1]{\GreenIV{\tt #1}}
+\newcommand{\lop}[1]{\BlueII{\tt #1}}
+\newcommand{\prog}[1]{\mbox{\tt #1}}
+\newcommand{\TR}{\mbox{$\cal T$}}
+
+\newcommand{\miparagraph}[1]{{\smallskip \noindent\bf {#1}}}
+\newcommand{\myparagraph}[1]{{\miparagraph {#1}}.}
+
+
+\usepackage{lastpage}
+
+\usepackage{acronym} 
+
+
diff --git a/arduino/led_puzzle/doc/puzzle.org b/arduino/led_puzzle/doc/puzzle.org
index 459eeb6476cd7f7155509935e7df8e06f5535887..53dd398c54281cfd54f13fc2c799d1e77cdefcd8 100644
--- a/arduino/led_puzzle/doc/puzzle.org
+++ b/arduino/led_puzzle/doc/puzzle.org
@@ -10,8 +10,6 @@
 
 Donnons du Lustre aux leds
 
-file:arduino.jpg
-
 
 * Introduction
  
@@ -30,32 +28,32 @@ _corrects_.
   actuellement. Or  un programme de  64 cases  (ou bits) est  un 
   petit programme.
 
-Plusieurs approches sont possibles pour faire face à cette difficulté.
 Au laboratoire Verimag, les axes de recherche visant à résoudre ce type 
 de  problèmes concernent :
 
-- la  conception de  *Langages* de  programmation   empêchant les
-  programmeurs de faire certaines  erreurs;
+- la  conception de  *Langages* de  programmation   empêchant 
+  certaines  erreurs de programmation ;
 - l'*Analyse   de  programmes*   :   conception  d'algorithmes   (des
   programmes aussi)  qui essaient de *prouver*  qu'un autre programme
   est « *correct* ».
-- l'automatisation des *tests* :  conception d'algorithmes qui essaient
-  de prouver qu'un programme n'est *pas* correct.
+- l'automatisation des *tests* :  un test qui échoue prouve  qu'un programme n'est *pas* correct.
 
-Pour illustrer tous ces axes de recherche, nous proposons une petite démonstration
-permettant de montrer
+Pour illustrer tous ces axes de recherche, nous allons vous montrer  :
 1. quelques exemples de programmes écrit en Lustre, un langage inventé
-   au  laboratoire  et  conçu  pour  mettre  en  oeuvre  des  systèmes
+   au  laboratoire  et  conçu  pour  mettre  en  \oeuvre  des  systèmes
    embarqués critiques ;
 2. comment un  tel programme peut-être embarqué sur  un système (ici,
    une carte =Arduino=) ;
 3. comment prouver automatiquement des propriétés sur ces programmes ;
 4. comment tester automatiquement ces programmes.
 
-Il s'agit  donc de valider   un petit système,  composé d'un
-programme  Lustre et  d'une  carte =Arduino=,  comportant 2  entrées,
-contrôllées par  un bouton  rouge et  un bouton  bleu, et  5 sorties,
-représentées par 5 leds.
+Il s'agit donc de valider un petit système, composé d'un programme
+Lustre et d'une carte =Arduino=, comportant 2 entrées, *contrôllées*
+par un bouton rouge et un bouton bleu, et *actionnant* 5 leds.
+
+#+BEGIN_CENTER
+\includegraphics[width=.4\linewidth]{arduino.jpg}
+#+END_CENTER
 
 
 Nous proposons plusieurs programmes. Pour chacun d'entre eux, l'effet
@@ -68,84 +66,41 @@ l'état dangereux.   Nous montrerons ensuite comment  des outils peuvent
 automatiser la réponse à ces petits puzzles.
 
 
-* Puzzle 1
-
-- Bouton bleu : permute circulairement l'allumage des (jolies) leds
-- Bouton rouge  : inverse l'état de la led 5
-
-* Puzzle 2
-
-
-- Bouton bleu : permute circulairement l'allumage des (jolies) leds
-- Bouton rouge  : inverse l'état des leds 2 et 4
-
-#+BEGIN_SRC lustre
-node puzzle1 (red,blue:bool) returns (led1,led2,led3,led4,led5:bool);
-let
-  led1 = true  -> if blue then pre(led5) else pre(led1) ;
-  led2 = false -> if blue then pre(led1) else if red then not(pre(led2)) else pre(led2) ;
-  led3 = false -> if blue then pre(led2) else pre(led3) ;
-  led4 = false -> if blue then pre(led3) else if red then not(pre(led4)) else pre(led4) ;
-  led5 = true  -> if blue then pre(led4) else pre(led5) ;
-tel
-#+END_SRC
+* Puzzles 
 
+- Puzzle 1
+  - Bouton bleu : permute circulairement l'allumage des (jolies) leds
+  - Bouton rouge  : inverse l'état de la led 5 (éteint \rightarrow
+    allumé \rightarrow éteint \rightarrow etc.) 
 
-* Puzzle 3
+- Puzzle 2
+ - Bouton bleu : idem puzzle 1
+ - Bouton rouge  : inverse l'état des leds 2 et 4
 
-- Bouton bleu : idem
-- Bouton rouge  : inverse l'état d'une led qui circule à chaque pression de boutons
 
-* Puzzle 4
 
+- Puzzle 3
+ - Bouton bleu : idem puzzle 1,2
+ - Chaque pression d'un bouton décale la led  « courante » : 1\rightarrow 2\rightarrow 3\rightarrow 4\rightarrow 5\rightarrow 1. 
+ - Bouton rouge : inverse l'état de la led « courante/tournante »
 
-- Bouton  rouge :  inverse l'état  d'une led  qui circule  en montant
-  (=led1=, puis =led2=, etc.) à chaque pression
-- Bouton bleu : permutation circulaire des leds + permutation inverse
-  (en descandant) de la led courante controllée par le bouton rouge
-
-* Puzzle 5 
-
-#+BEGIN_SRC lustre
-true xor false = false xor true = true
-false xor false = true xor true = false
-
-true and true = true
-true and false = false and true = false and false = false
-#+END_SRC
-
-- Bouton  bleu => la led courante devient le « xor » des 2 leds autour 
-- Bouton  red  => la led courante devient le « and » des 2 leds autour
-- la led courante est la première au début, puis la deuxième, etc.  
+- Puzzle 4
+ - idem puzzle 3 + le bleu décale la led courante dans le sens
+   inverse : 5\rightarrow 4\rightarrow 3\rightarrow 2\rightarrow
+   1\rightarrow 5
 
+- Puzzle 5 
+  - Chaque pression d'un bouton décale la led  « courante »    d'un cran (1\rightarrow 2\rightarrow 3\rightarrow 4\rightarrow 5\rightarrow 1). 
+  - Bouton  bleu : la led courante devient le « xor » des 2 leds autour 
+  - Bouton  red  : la led courante devient le « and » des 2 leds autour
+ 
 # Existe-t'il une configuration initiale qui rende le problème impossible ?
 
-* Puzzle 6 
-
-- Bouton  rouge => inverse l'état de la led 1
-- Bouton bleu  => allume la led  suivant la première led  éteinte (en
-  partant de la led1)
-
-#+BEGIN_SRC lustre
-node puzzle6(red,blue:bool)
-returns (led1,led2,led3,led4,led5:bool);
-var
-  --  Xi = je suis la led qui suit la plus petite led eteinte 
-  X2, X3, X4, X5 : bool;
-let
-  X2, X3, X4, X5 = (true, F, F, F) ->  
-        if not(pre(led1)) then (true, F, F, F) else
-        if not(pre(led2)) then (F, true, F, F) else
-        if not(pre(led3)) then (F, F, true, F) else
-        if not(pre(led4)) then (F, F, F, true) else (F, F, F, F);
-  
-  led1 = F -> if red then not(pre(led1)) else pre(led1);
-  led2 = F -> if blue and X2 then not(pre(led2)) else pre(led2);
-  led3 = F -> if blue and X3 then not(pre(led3)) else pre(led3);
-  led4 = F -> if blue and X4 then not(pre(led4)) else pre(led4);
-  led5 = F -> if blue and X5 then not(pre(led5)) else pre(led5);
-tel
-#+END_SRC
+- Puzzle 6 
+  - Bouton  rouge : inverse l'état de la led 1
+  - Bouton bleu : allume la led  suivant la première led  éteinte (en
+    partant de la led1)
+
 
 * Puzzle  : saute mouton :noexport: