Ajout de la preuve de la première propriété.
This commit is contained in:
parent
c6e5368993
commit
396db085ec
@ -483,8 +483,9 @@
|
||||
|
||||
Grâce à ces méthodes, nous pouvons réutiliser les règles de typage de Featherweight Java presque à l'identique, qui sont rappelées \autoref{fig:typti}. Nous avons enlevé la règle de typage \textsc{T-SCast} qui autorisait les casts que les auteurs qualifiaient de \enquote{stupides}, entre deux types qui n'étaient pas parents l'un de l'autre.
|
||||
|
||||
Nous vérifions aussi évidement la \eng{class table} $\mathcal{B}$, en vérifiant que le corps de chaque méthode est bien typé par le type attendu dans la méthode, que les champs de la \eng{class table} ne contredisent pas la \eng{test interface}. On note alors $\mathcal{B} \OKin \mathfrak{T}$. Les seules contradictions sont grammaticales si l'on a déjà vérifié que les applications $\operatorname{fields}$, $\operatorname{construct}$ et $\operatorname{mtype}$ n'étaient pas redéfinies ou mal définies.
|
||||
%TODO prouver l'affirmation
|
||||
Nous vérifions aussi évidement la \eng{class table} $\mathcal{B}$, en vérifiant que le corps de chaque méthode est bien typé par le type attendu dans la méthode, que les champs de la \eng{class table} ne contredisent pas la \eng{test interface}. On note alors $\mathcal{B} \OKin \mathfrak{T}$.
|
||||
%XXX Si le temps, rajouter cette ligne et la prouver
|
||||
%Les seules contradictions sont grammaticales si l'on a déjà vérifié que les applications $\operatorname{fields}$, $\operatorname{construct}$ et $\operatorname{mtype}$ n'étaient pas redéfinies ou mal définies.
|
||||
|
||||
\begin{figure}
|
||||
\begin{tcolorbox}[left=5pt,right=2pt,top=5pt,bottom=5pt,boxrule=1pt,rounded corners=all,colback=white!92!blue]
|
||||
@ -617,11 +618,12 @@
|
||||
Nous allons maintenant étudier les propriétés de cette nouvelle définition du préordre.
|
||||
|
||||
\begin{property}
|
||||
\[\forall \hbar \forall \alpha \quad \hbar\bracket{\alpha}\rightarrow e' \implies \exists \beta\quad e' = \hbar\bracket{\beta}\]
|
||||
\label{thm:hnewnew}
|
||||
\[\forall \hbar \forall \alpha \quad \hbar\bracket{\alpha}\rightarrow^* e' \implies \exists \beta\quad e' = \hbar\bracket{\beta}\]
|
||||
\end{property}
|
||||
|
||||
On peut prouver cette propriété inductivement en montrant qu'une expression ayant un nœud \enquote{\fj{new}} en nœud racine se réduira forcément en une expression ayant un nœud racine du même type, en inversant la relation de réduction.
|
||||
%TODO Preuve complète
|
||||
La preuve complète est présentée \autoref{anx:proofPt1Val}.
|
||||
|
||||
\begin{property}
|
||||
\[\mathcal{A} \pprec \mathcal{B} \implies \mathcal{A} \prec \mathcal{B}\]
|
||||
@ -762,11 +764,11 @@
|
||||
\begin{fjlisting}
|
||||
\fjclass{Optional}{}{
|
||||
\fjmethod{Object}{orElse}{Object e}{e}
|
||||
}
|
||||
}\\
|
||||
\fjclass[Optional]{Some}{\fjattr{value}}{
|
||||
\fjmethod{Object}{orElse}{Object e}{this.value}
|
||||
}\\
|
||||
\fjclass[Optional]{None}{}{}\\
|
||||
\fjclass[Optional]{None}{}{}
|
||||
\end{fjlisting}
|
||||
|
||||
Ces trois classes définissent la notion d'\fj{Optional} qui fonctionne comme \lstinline[language=Caml]|a' option| en OCaml, et qui peut contenir une valeur ou non. La méthode \fj{orElse} permet de récupérer la valeur contenue si elle est présente, ou de renvoyer le paramètre dans le cas contraire.
|
||||
@ -793,7 +795,7 @@
|
||||
|
||||
Notez que le problème est le même sans la présence de la méthode \fj{getList}, on n'aurait alors pas pû discriminer les deux méthodes \fj{contains} pour un même argument, puisqu'il n'aurait alors pas été possible d'instancier un argument.
|
||||
|
||||
Bien sûr, avec une class table de tests, il est possible de créer des objets \fj{IList} de la forme que l'on souhaite, et donc de discriminer ces deux méthodes, par exemple avec une liste infinie de \fj{0}.
|
||||
Bien sûr, avec une \eng{class table} de tests, il est possible de créer des objets \fj{IList} de la forme que l'on souhaite, et donc de discriminer ces deux méthodes, par exemple avec une liste infinie de \fj{0}.
|
||||
|
||||
\section{Preuve du théorème de cohérence du typage des \eng{test interfaces}}
|
||||
\label{anx:proofTyptyp}
|
||||
@ -960,7 +962,52 @@
|
||||
|
||||
\subparagraph{\textnormal{\textsc{\ref{rule:ti:downCast}}}}
|
||||
Exactement la même preuve que le point précédent en appliquant la règle \textsc{T-DCast}
|
||||
|
||||
\section{Preuve de la \autoref{thm:hnewnew} sur les valeurs infinies}
|
||||
\label{anx:proofPt1Val}
|
||||
Nous allons d'abord montrer la propriété sur les expressions suivante:
|
||||
\begin{property}
|
||||
\label{thm:enewnew}
|
||||
Soit $e$ et $f$ des expressions fermées, telles que $e \rightarrow^* f$,
|
||||
|
||||
Alors, si $e = \fj{new C($\overline{e'}$)}$
|
||||
|
||||
On a $f = \fj{new C($\overline{f'}$)}$ et $\overline{e'} \rightarrow^* \overline{f'}$.
|
||||
\end{property}
|
||||
|
||||
Montrons cette propriété par récurrence sur la taille de la relation $e \rightarrow^* f$.
|
||||
\subparagraph{Initialisation}
|
||||
Dans le cas $e = f$, on a simplement $f = \fj{new C($\overline{e'}$)}$ et $\overline{e'} \rightarrow^0 \overline{e'}$.
|
||||
\subparagraph{Hérédité}
|
||||
Nous sommes dans l'hypothèse que $e \rightarrow^n f$
|
||||
Observons la première relation. Elle se fait nécessairement sur un nœud de type \ref{rule:expr:method}, \ref{rule:expr:field} ou \ref{rule:expr:cast}, qui est donc contenu dans l'un des $\overline{e'}$. Donc, on a $e'_i \rightarrow e''_i$. On note $e''_k = e'_k$ pour $k$ différent de $i$, et on obtient que
|
||||
\[e = \fj{new C($\overline{e'}$)} \rightarrow \fj{new C($\overline{e''}$)} \rightarrow^{n-1} f\]
|
||||
On peut donc appliquer l'hypothèse de récurrence à la dernière relation $\rightarrow^{n-1}$, et nous obtenons bien que
|
||||
\[f = \fj{new C($\overline{f'}$)} \quad\text{et}\quad \overline{e'} \rightarrow^* \overline{e''} \rightarrow^* \overline{f'}\]
|
||||
|
||||
La récurrence est bouclée.
|
||||
|
||||
Nous allons donc pouvoir facilement montrer la \autoref{thm:hnewnew} par induction sur le paramètre $\hbar$.
|
||||
|
||||
\subparagraph{$\hbar = \fj{x}$}
|
||||
|
||||
Alors, en notant $\beta$ tel que $\beta(\fj{x}) = e'$.
|
||||
|
||||
Alors,
|
||||
\[\hbar\bracket{\alpha} = \alpha(\fj{x}) \rightarrow e' = \hbar\bracket{\beta}\]
|
||||
|
||||
\subparagraph{$\hbar = \fj{new C($\overline{\hbar'}$)}$}
|
||||
|
||||
Alors, par application de la \autoref{thm:enewnew}, on obtient que
|
||||
\[e' = \fj{new C($\overline{e}$)} \quad\text{et}\quad \overline{\hbar\bracket{\alpha}} \rightarrow^* \overline{e}\]
|
||||
|
||||
On peut alors appliquer l'hypothèse d'induction, et obtenir que
|
||||
\[\overline{e} = \overline{\hbar\bracket{\beta_x}}\]
|
||||
|
||||
Donc, en notant $\beta$ la concaténation des $\beta_x$, qui est possible puisque les noms de variables utilisés dans $\hbar$ sont tous distincts, on obtient le résultat
|
||||
\[e' = \hbar\bracket{\beta}\]
|
||||
|
||||
|
||||
\section{Preuve du \eng{context lemma} avec valeurs infinies}
|
||||
\label{anx:proofHValCL}
|
||||
|
||||
|
||||
@ -70,6 +70,7 @@
|
||||
\renewcommand{\figureautorefname}{\textsc{Figure}}
|
||||
\renewcommand{\appendixautorefname}{Annexe}
|
||||
\renewcommand{\theoremautorefname}{Théorème}
|
||||
\providecommand\propertyautorefname{Propriété}
|
||||
\providecommand\ruleautorefname{règle}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user