227 lines
8.9 KiB
TeX
Executable File
227 lines
8.9 KiB
TeX
Executable File
\documentclass[a4paper,french,12pt]{article}
|
|
\usepackage{geometry}
|
|
\geometry{a4paper, top=2cm, bottom=2.0cm, left=2.4cm, right=2.47cm}
|
|
\usepackage[frenchb]{babel}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{amsmath}
|
|
\usepackage{amssymb}
|
|
\usepackage{enumerate}
|
|
%\usepackage{centernot}
|
|
\usepackage{multirow}
|
|
\usepackage{graphicx}
|
|
\usepackage{tikz}
|
|
\usetikzlibrary{positioning,calc,chains}
|
|
\def\P{\mathcal{P}}
|
|
\def\GUi{G \cup \{i\}}
|
|
\def\nottransition#1{\stackrel{#1}{\not\longrightarrow}}%\centernot\longrightarrow}}
|
|
\def\transition#1{\stackrel{#1}{\longrightarrow}}
|
|
\def\Transition#1{\stackrel{#1}{\Longrightarrow}}
|
|
\def\forte{\sim}
|
|
\def\observationnelle{\approx}
|
|
\def\conf{\ \text{conf}\ }
|
|
\DeclareMathOperator{\Tr}{Tr}
|
|
\DeclareMathOperator{\Acc}{Acc}
|
|
\DeclareMathOperator{\Ref}{Ref}
|
|
\def\si{\quad\text{si}\quad}
|
|
\let\simule\gtrsim
|
|
\let\simuleobs\gtrapprox
|
|
\let\estsimulepar\gtrsim
|
|
\begin{document}
|
|
|
|
\section{Files d'attente et équivalences}
|
|
\subsection{$B2err\simule B1$}
|
|
|
|
$B2err$ simule $B1$ car~:
|
|
\begin{itemize}
|
|
\item $B2err \simule B1$~:
|
|
\begin{itemize}
|
|
\item $B1\transition{inp} outp;B1$, et il existe $B2err\transition{inp}outp;B2err$.
|
|
\item Il faut donc que $outp;B2err \simule outp;B1$.
|
|
\end{itemize}
|
|
\item $outp;B2err \simule outp;B1$~:
|
|
\begin{itemize}
|
|
\item $outp;B1\transition{outp}B1$, et il existe $outp;B2err\transition{outp}B2err$.
|
|
\item Il faut donc que $B2err \simule B1$, ce qui est notre premier point.
|
|
\end{itemize}
|
|
\end{itemize}
|
|
|
|
\subsection{$\neg\ B2err\conf B1$}
|
|
$B2err$ n'est pas conforme à $B1$ car $Ref(B2err, inp) = \{\{inp\}, \{outp\}\}$, alors que $Ref(B1,inp) = \{\{outp\}\}$,
|
|
et donc on n'a pas $Ref(B2err, inp) \subseteq Ref(B1, inp)$.
|
|
|
|
\subsection{$B2par$ respecte-t-il la spécification $B_20$ ?}
|
|
$B2par$ respecte la spécification $B_20$~:
|
|
\begin{enumerate}[i)]
|
|
\item Un message émis a toujours été reçu : pour qu'un message soit
|
|
émis par la porte $outp$ du $B1$ de droite, il faut qu'il ait été
|
|
reçu par la porte $mid$ du $B1$ de droite, synchronisé sur la porte
|
|
$mid$ du $B1$ de gauche. Pour que le message soit émis sur la porte
|
|
$mid$ du $B1$ de gauche, il faut qu'il ait au préalable été reçu sur
|
|
la porte $inp$ du $B1$ de gauche.
|
|
\item Lorsqu'un $B1$ reçoit un message, il refuse les $inp$ jusqu'à ce
|
|
qu'il ait effectué un $outp$. Comme la porte $outp$ du $B1$ de
|
|
gauche est synchronisée sur la porte $inp$ du $B1$ de droite, cela
|
|
signifie que si les deux $B1$ «contiennent» un message, celui de
|
|
droite n'accepera pas d'$inp$ tant qu'il n'aura pas effectué
|
|
d'$outp$, et en cascade, celui de gauche ne pourra pas faire
|
|
d'$outp$ tant que celui de droite n'aura pas été «vidé», et donc
|
|
celui de gauche refusera les $inp$. On ne pourra donc pas effectuer
|
|
un $inp$ sur le $B1$ de gauche tant que les deux $B1$ «contiendront»
|
|
un message, et il ne pourra donc pas y avoir plus de deux messages
|
|
dans la file.
|
|
\end{enumerate}
|
|
|
|
\subsection{$B2seq \observationnelle B2par$}
|
|
|
|
{\raggedright
|
|
$B2seq$ et $B2par$ sont observationnellement équivalents car~:
|
|
\begin{itemize}
|
|
\item $B2s \observationnelle B2par$~:
|
|
\begin{itemize}
|
|
\item $B2s\transition{inp} B21$,
|
|
et il existe $B2par \Transition{\hat{inp}} (i;B1[inp,i] \ |[i]|\ B1[i,outp])$
|
|
et $B2par \Transition{\hat{inp}} (B1[inp,i] \ |[i]|\ outp;B1[i,outp])$.
|
|
\item Dans l'autre sens,
|
|
$B2par \transition{inp} (i;B1[inp,i] \ |[i]|\ B1[i,outp])$
|
|
et il existe $B2s\transition{inp} B21$.
|
|
\item Il faut donc que $B21 \observationnelle (i;B1[inp,i] \ |[i]|\ B1[i,outp])$.
|
|
\end{itemize}
|
|
\item $B21 \observationnelle (i;B1[inp,i] \ |[i]|\ B1[i,outp])$~:
|
|
\begin{itemize}
|
|
\item $B21 \transition{inp} outp;B21$,
|
|
et il existe
|
|
$(i;B1[inp,i] \ |[i]|\ B1[i,outp]) \Transition{\hat{inp}} (i;B1[inp,i] \ |[i]|\ outp;B1[i,outp])$
|
|
\item $B21 \transition{outp} B2s$, et
|
|
et il existe
|
|
$(i;B1[inp,i] \ |[i]|\ B1[i,outp]) \Transition{\hat{outp}} (B1[inp,i] \ |[i]|\ B1[i,outp])$,
|
|
autrement dit
|
|
$(i;B1[inp,i] \ |[i]|\ B1[i,outp]) \Transition{\hat{outp}} B2par$
|
|
\item Dans l'autre sens,
|
|
$(i;B1[inp,i] \ |[i]|\ B1[i,outp]) \transition{i} (B1[inp,i] \ |[i]|\ outp;B1[i,outp])$,
|
|
mais comme on $\hat{i}$ est le chemin vide, on n'aura rien à vérifier sur $B21$.
|
|
\item Il faut donc que $outp;B21 \observationnelle (i;B1[inp,i] \ |[i]|\ outp;B1[i,outp])$,
|
|
et que $B2s \observationnelle B2par$. Cette deuxième condition est en fait notre premier point.
|
|
\end{itemize}
|
|
\item $outp;B21 \observationnelle (i;B1[inp,i] \ |[i]|\ outp;B1[i,outp])$~:
|
|
\begin{itemize}
|
|
\item $outp;B21 \transition{outp}B21$,
|
|
et il existe
|
|
$(i;B1[inp,i] \ |[i]|\ outp;B1[i,outp]) \Transition{\hat{outp}} (i;B1[inp,i] \ |[i]|\ B1[i,outp])$.
|
|
\item Il faut donc que $B21 \observationnelle (i;B1[inp,i] \ |[i]|\ B1[i,outp])$, ce qui est notre deuxième point.
|
|
\end{itemize}
|
|
\end{itemize}
|
|
}
|
|
|
|
\subsection{$B2ent = B2par$}
|
|
|
|
Étant donné que $B2ent$ et $B2par$ ne commencent pas par l'action
|
|
interne, tester leur égalité au sens de la congruence observationnelle
|
|
revient à tester s'ils sont observationnellement équivalents.
|
|
|
|
On applique donc la même méthode que dans la section précédente, avec
|
|
les équivalences suivantes~:
|
|
|
|
{\raggedright
|
|
\begin{itemize}
|
|
\item Pour que $B2ent = B2par$, il faut qu'après $inp$ (la seule
|
|
action que les systèmes peuvent exécuter dans leurs états respectifs),
|
|
$(outp;B1[inp;outp] ||| B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ B1[i,outp])$.
|
|
\item Pour cela, il faut qu'après $outp$,
|
|
$(B1[inp;outp] ||| B1[inp;outp]) \observationnelle (B1[inp;i]\ |[i]|\ B1[i,outp])$,
|
|
autrement dit $B2ent = B2par$, ce qui est une condition plus faible que le premier point.
|
|
|
|
Il faut aussi qu'après $inp$,
|
|
$(outp;B1[inp;outp] ||| outp;B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ outp;B1[i,outp])$.
|
|
|
|
Dans l'autre sens, on peut ignorer ce qui se passe après le $i$ de
|
|
$(i;B1[inp;i]\ |[i]|\ B1[i,outp])$, car $\hat{i}$ est le chemin vide,
|
|
donc pas de conditions sur $(outp;B1[inp;outp] ||| B1[inp;outp])$.
|
|
\item Occupons-nous de
|
|
$(outp;B1[inp;outp] ||| outp;B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ outp;B1[i,outp])$.
|
|
Dans ces états, les systèmes ne peuvent faire qu'$outp$. Il faut donc qu'après $outp$,
|
|
$(outp;B1[inp;outp] ||| B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ B1[i,outp])$,
|
|
ce qui correspond au deuxième point.
|
|
\end{itemize}
|
|
}
|
|
|
|
\subsection{$B2par \simuleobs B1$}
|
|
|
|
$B2par$ simule observationnellement $B1$ car~:
|
|
|
|
\begin{itemize}
|
|
\item $B1\transition{inp}outp;B1$, et il existe
|
|
$B2par\Transition{\hat{inp}}(i;B1[inp,i]\ |[i]| B1[i;outp])$ et
|
|
$B2par\Transition{\hat{inp}}(B1[inp,i]\ |[i]| outp;B1[i;outp])$.
|
|
Il suffit donc que soit $(i;B1[inp,i]\ |[i]| B1[i;outp]) \simuleobs outp;B1$,
|
|
soit $(B1[inp,i]\ |[i]| outp;B1[i;outp]) \simuleobs outp;B1$. On prend
|
|
\item On prend cette deuxième possibilité.
|
|
$outp;B1 \transition{outp} B1$, et il existe
|
|
$(B1[inp,i]\ |[i]| outp;B1[i;outp])\Transition{\hat{outp}}(B1[inp,i]\ |[i]| B1[i;outp])$,
|
|
autrement dit
|
|
$(B1[inp,i]\ |[i]| outp;B1[i;outp])\Transition{\hat{outp}}B2par$, notre premier point.
|
|
\end{itemize}
|
|
|
|
\subsection{$\not B2par \conf B1$}
|
|
|
|
Pour que $B2par$ soit conforme à $B1$, car pour toute trace $t$ de $B1$,
|
|
$\Acc(B2par) \subset\subset \Ref(B1)$.
|
|
|
|
\begin{itemize}
|
|
\item Pour la trace $\emptyset$, $\Acc(B2par) = \Acc(B1) = \{\{inp\}\}$.
|
|
\item Pour la trace $inp$, $\Acc(B2par) = \{\{\}, \{inp,outp\}\}$, mais $\Acc(B1) = \{\{outp\}\}$.
|
|
\item Pour la trace $inp;outp$, on est revenu aux mêmes états que la trace $\emptyset$.
|
|
\end{itemize}
|
|
Pour le point 2 $\forall X \in \{\{\}, \{inp,outp\}\},\quad \{outp\} \not\subseteq X$, et donc $\neg(B2par \conf B1)$
|
|
|
|
\section{Exercice de l'atelier}
|
|
|
|
\subsection{Question 1}
|
|
|
|
\begin{figure}[h]
|
|
\centering
|
|
\includegraphics[width=15cm]{question1}
|
|
\end{figure}
|
|
|
|
\subsection{Question 2}
|
|
|
|
\begin{verbatim}
|
|
Maillet[prendM,poseM] := prendM;MailletOcc[prendM,poseM]
|
|
MailletOcc[prendM,poseM] := poseM;Maillet[prendM,poseM]
|
|
\end{verbatim}
|
|
|
|
\subsection{Question 3}
|
|
|
|
\begin{verbatim}
|
|
UtiliseMarteau[ent,sortie,prend,pose,prendM,poseM](travail:TRAVAIL) :=
|
|
prend;sortie!fait(travail);pose;
|
|
Ouvrier[ent,sortie,prend,pose,prendM,poseM]
|
|
\end{verbatim}
|
|
|
|
\begin{verbatim}
|
|
UtiliseMaillet[ent,sortie,prend,pose,prendM,poseM](travail:TRAVAIL) :=
|
|
prendM;sortie!fait(travail);poseM;
|
|
Ouvrier[ent,sortie,prend,pose,prendM,poseM]
|
|
\end{verbatim}
|
|
|
|
\begin{verbatim}
|
|
Commence[ent,sortie,prend,pose,prendM,poseM](travail:TRAVAIL) :=
|
|
[facile(travail)] ->
|
|
sortie!fait(travail);
|
|
Ouvrier[ent,sortie,prend,pose,prendM,poseM]
|
|
[]
|
|
[difficile(travail)] ->
|
|
UtiliseMarteau[ent,sortie,prend,pose,prendM,poseM](travail)
|
|
[]
|
|
[(not(facile(travail)) and not(difficile(travail)))] ->
|
|
UtiliseOutil[ent,sortie,prend,pose,prendM,poseM](travail)
|
|
\end{verbatim}
|
|
|
|
\begin{verbatim}
|
|
Ouvrier[ent,sortie,prend,pose,prendM,poseM] :=
|
|
ent?travail:TRAVAIL;
|
|
Commence[ent,sortie,prend,pose,prendM,poseM](travail)
|
|
\end{verbatim}
|
|
|
|
\end{document}
|