-
Notifications
You must be signed in to change notification settings - Fork 83
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Change of approach for dealing with value restriction + inference com…
…pleteness The weakening theorems needed to prove type soundness aren't true if you check for multiple possible types on a non-value definition. For example, in the following v has type int -> int structure M :> sig val f : int -> int end = struct fun f x = x end; val v = (fn y => y) M.f; However, if you drop the signature (which is something has to happen in the type soundness proof), then you get M.f : 'a -> 'a and since the value restriction prevents v : 'a -> 'a, there are many choices for v : int -> int, v : bool -> bool, etc. So now I've added a flag to type_d (and type_ds, etc) to indicate whether to do the check. So the semantics can do the check, and the inferencer can be complete with respect to that, but the type soundness proof can turn off the check (since if something types with the check on it will still type with it off).
- Loading branch information
Showing
7 changed files
with
143 additions
and
236 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.