Fix Type Substitution
This commit is contained in:
parent
cec613b875
commit
495e37b370
67
unify.tex
67
unify.tex
@ -579,34 +579,6 @@ $
|
|||||||
\end{array}
|
\end{array}
|
||||||
\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{tabular}}
|
||||||
\end{center}
|
\end{center}
|
||||||
\caption{Constraint reduce rules}\label{fig:reduce-rules}
|
\caption{Constraint reduce rules}\label{fig:reduce-rules}
|
||||||
@ -728,10 +700,9 @@ To only rename the respective wildcards the reduce rule renames wildcards up to
|
|||||||
\begin{align*}
|
\begin{align*}
|
||||||
[\type{A}/\type{B}]\type{B} &= \type{A} \\
|
[\type{A}/\type{B}]\type{B} &= \type{A} \\
|
||||||
[\type{A}/\type{B}]\type{C} &= \type{C} & \text{if}\ \type{B} \neq \type{C}\\
|
[\type{A}/\type{B}]\type{C} &= \type{C} & \text{if}\ \type{B} \neq \type{C}\\
|
||||||
[\type{A}/\type{B}]\wcNtype{\Delta}{N} &= \wcNtype{\Delta}{[\type{A}/\type{B}]N} & \text{if}\ \type{B} \notin \Delta \\
|
[\type{A}/\type{B}]\wcNtype{\overline{\wildcard{X}{\type{U}}{\type{L}}}}{N} &= \wcNtype{\overline{\wildcard{X}{[\type{A}/\type{B}]\type{U}}{[\type{A}/\type{B}]\type{L}}}}{[\type{A}/\type{B}]N} & \text{if}\ \type{B} \notin \overline{\rwildcard{X}} \\
|
||||||
[\type{A}/\type{B}]\wcNtype{\Delta}{N} &= \wcNtype{\Delta}{N} & \text{if}\ \type{B} \in \Delta \\
|
[\type{A}/\type{B}]\wcNtype{\overline{\wildcard{X}{\type{U}}{\type{L}}}}{N} &= \wcNtype{\overline{\wildcard{X}{\type{U}}{\type{L}}}}{N} & \text{if}\ \type{B} \in \overline{\rwildcard{X}} \\
|
||||||
\end{align*}
|
\end{align*}
|
||||||
|
|
||||||
\item[Free Variables:]
|
\item[Free Variables:]
|
||||||
The $\text{fv}$ function assumes every wildcard type variable to be a free variable aswell.
|
The $\text{fv}$ function assumes every wildcard type variable to be a free variable aswell.
|
||||||
|
|
||||||
@ -1195,3 +1166,37 @@ Every constraint that is not in solved form and is not able to be processed by a
|
|||||||
|
|
||||||
The new constraint generated by the adopt rule may be eliminated by the match rule.
|
The new constraint generated by the adopt rule may be eliminated by the match rule.
|
||||||
The adopt rule still needs to be applied only once per constraint.
|
The adopt rule still needs to be applied only once per constraint.
|
||||||
|
|
||||||
|
Two additional rules can be added to remove clutter in the output.
|
||||||
|
Wildcards with same upper and lower bounds can be replaced with their upper bound.
|
||||||
|
|
||||||
|
\begin{tabular}[t]{l@{~}l}
|
||||||
|
\\\\
|
||||||
|
\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}
|
Loading…
Reference in New Issue
Block a user