[Ur] Understanding Ur Inference Failure

Adam Chlipala adamc at csail.mit.edu
Tue Sep 24 17:00:28 EDT 2019


On 9/24/19 4:54 PM, Mario Alvarez wrote:
> Finally, a quick follow-up question: is there any way to convince the 
> Ur inference engine as it currently stands to solve this kind of 
> problem? (For instance, would it be possible to write a type-level 
> function to compute the overlap between the records in my example, or 
> would this just lead to a different version of the same unification 
> problem that the inference engine can't solve?)

I don't know a way to write it in today's Ur/Web, and let me try to 
explain why it is a big departure from existing features, to contemplate 
an extended unification approach.

Faced with a unification like [[A = int] = U1 ++ U2], it is ambiguous 
how to split the record literal among the two unification variables [U1] 
and [U2].  We could try both possibilities, but that would require 
backtracking to undo unification decisions.  As in classic ML type 
inference, Ur/Web's engine never backtracks past variable assignments.  
So we seem to need some unification approach that looks at multiple 
unsolved constraints at once, to make better choices.  Again, it is a 
fundamental design decision in both ML type inference and Ur/Web's to 
consider one unification constraint at a time, communicating between 
them only through side effects to assign values to unification variables.




More information about the Ur mailing list