summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid A. Madore <david+git@madore.org>2023-12-16 18:15:02 +0100
committerDavid A. Madore <david+git@madore.org>2023-12-16 18:15:02 +0100
commit1e96977f087cde0421cef6466e08540ac562b2dd (patch)
tree2f47ca681e8174ea87674cc8f596efacd0aaf7a1
parent65c7a5fae077f4737be6de653a48f6d4234d32d9 (diff)
downloadinf110-lfi-1e96977f087cde0421cef6466e08540ac562b2dd.tar.gz
inf110-lfi-1e96977f087cde0421cef6466e08540ac562b2dd.tar.bz2
inf110-lfi-1e96977f087cde0421cef6466e08540ac562b2dd.zip
Summarize properties of Hindley-Milner.
-rw-r--r--transp-inf110-02-typage.tex46
1 files changed, 46 insertions, 0 deletions
diff --git a/transp-inf110-02-typage.tex b/transp-inf110-02-typage.tex
index d27fac7..422ad34 100644
--- a/transp-inf110-02-typage.tex
+++ b/transp-inf110-02-typage.tex
@@ -4945,4 +4945,50 @@ Finalement, on a typé : $\vdash (\lambda (x:\eta_3 \to \eta_4 \to
\end{frame}
%
+\begin{frame}
+\frametitle{Propriétés de l'algorithme de Hindley-Milner}
+
+La difficulté concerne essentiellement la seconde phase (résolution
+des contraintes par unification). On peut prouver :
+
+\medskip
+
+\itempoint\textbf{L'algorithme termine} (il est même p.r. et mieux).
+
+\smallskip
+
+{\footnotesize\underline{Idée de la preuve :} double récurrence, sur
+ le nombre de variables de type (récurrence principale) et sur le
+ degré total des formules dans les contraintes.\par}
+
+\medskip
+
+\itempoint\textbf{L'algorithme est correct} : s'il retourne une
+substitution, celle-ci résout les contraintes. {\footnotesize (C'est à
+ peu près évident.)\par}
+
+\medskip
+
+\itempoint (Damas) \textbf{L'algorithme est « complet » :} toute autre
+solution des contraintes $\mathscr{C}$ s'obtient en effectuant une
+substitution sur celle retournée par l'algorithme : on dit qu'il
+trouve la \textbf{solution principale} {\footnotesize (notamment,
+ celle-ci existe !)}.
+
+\smallskip
+
+{\footnotesize\underline{Idée de la preuve :} récurrence sur le nombre
+ d'appels récursifs à la fonction d'unification.\par}
+
+\medskip
+
+\centerline{*}
+
+\itempoint L'algorithme \alert{se généralise sans problème} à l'ajout
+de types produits, sommes, $1$ et $0$ ($\rightarrow$ nvx cas d'échecs
+d'unification, p.ex., si $\zeta_1 = ({?} \rightarrow {?})$ et $\zeta_2
+= ({?} \times {?})$).
+
+\end{frame}
+%
\end{document}