diff --git a/unify.tex b/unify.tex index 7db53b6..1017038 100644 --- a/unify.tex +++ b/unify.tex @@ -574,6 +574,34 @@ Their upper and lower bounds are fresh type variables. \end{array} \end{array} $ +\\\\ +\rulename{Crunch} +& $\begin{array}[c]{@{}ll} +\begin{array}[c]{l} +\wildcardEnv \vdash C \cup \, \set{ \tv{a} \doteq \wctype{\Delta', \set{\overline{\wildcard{X}{\type{U}}{\type{L}}}}}{C}{\ol{S}} } \\ +\hline +\vspace*{-0.4cm}\\ +\wildcardEnv \vdash +C \cup \set{ \tv{a} \doteq \wctype{\Delta'}{C}{[\ol{U}/\ol{X}]\ol{S}}} +\end{array} +&\begin{array}[c]{l} + \ol{U} = \ol{L} +\end{array} +\end{array}$ +\\\\ +\rulename{Crunch} +& $\begin{array}[c]{@{}ll} +\begin{array}[c]{l} +\wildcardEnv \vdash C \cup \, \set{ \tv{a} \lessdot \wctype{\Delta', \set{\overline{\wildcard{X}{\type{U}}{\type{L}}}}}{C}{\ol{S}} } \\ +\hline +\vspace*{-0.4cm}\\ +\wildcardEnv \vdash +C \cup \set{ \tv{a} \lessdot \wctype{\Delta'}{C}{[\ol{U}/\ol{X}]\ol{S}}} +\end{array} +&\begin{array}[c]{l} + \ol{U} = \ol{L} +\end{array} +\end{array}$ \end{tabular}} \end{center} \caption{Constraint reduce rules}\label{fig:reduce-rules} @@ -1148,34 +1176,6 @@ C \cup \set{ \tv{a} \doteq \bot } %\text{length}( \overline{\tv{a} \lessdot \type{T}} ) > 1 \end{array} \end{array}$ -\\\\ -\rulename{Crunch} -& $\begin{array}[c]{@{}ll} -\begin{array}[c]{l} -\wildcardEnv \vdash C \cup \, \set{ \tv{a} \doteq \wctype{\Delta', \set{\overline{\wildcard{X}{\type{U}}{\type{L}}}}}{C}{\ol{S}} } \\ -\hline -\vspace*{-0.4cm}\\ -\wildcardEnv \vdash -C \cup \set{ \tv{a} \doteq \wctype{\Delta'}{C}{[\ol{U}/\ol{X}]\ol{S}}} -\end{array} -&\begin{array}[c]{l} - \ol{U} = \ol{L} -\end{array} -\end{array}$ -\\\\ -\rulename{Crunch} -& $\begin{array}[c]{@{}ll} -\begin{array}[c]{l} -\wildcardEnv \vdash C \cup \, \set{ \tv{a} \lessdot \wctype{\Delta', \set{\overline{\wildcard{X}{\type{U}}{\type{L}}}}}{C}{\ol{S}} } \\ -\hline -\vspace*{-0.4cm}\\ -\wildcardEnv \vdash -C \cup \set{ \tv{a} \lessdot \wctype{\Delta'}{C}{[\ol{U}/\ol{X}]\ol{S}}} -\end{array} -&\begin{array}[c]{l} - \ol{U} = \ol{L} -\end{array} -\end{array}$ % \\\\ % The force rule is unnecessary because every type placeholder has an upper bound Object (a <. Object) The match rule eliminates those wildcards % \rulename{Force} &$ % \begin{array}[c]{@{}ll}