@@ -370,13 +370,13 @@ $\ifty{\textsf{false}}{\Bool}{\textsf{false}}{\textsf{true}}$): see Appendix~\re

from the mutual dependence of different type checks. In particular, there are two cases

that pose a problem. The first can be shown by two functions $f$ and $g$ both of type $(\Int\to\Int)\wedge(\Any\to\Bool)$, $x$ of type $\Any$ and the test:

If we restrict our language so that the only functional type that can be used in a test is $\arrow\Empty\Any$

and such that there is no negated arrows in the domain of lambda-abstractions,

then the algorithmic type system becomes complete

(i.e. any expression that can be typed in the declarative type system is also typeable in the algorithmic one)

and type schemes can be removed from it (we can use regular types instead).

If we restrict the language to positive expressions $e_+$, the algorithmic type system is complete and type schemes can be removed from it (we can use regular types instead).