Assertion in `register` always fails
jstolarek opened this issue · 4 comments
jstolarek commented
When I uncomment assertion in register
it causes every single example to fail:
let register state v =
(* assert (U.rank v = no_rank); *)
U.set_rank v state.young;
register_at_rank state v
I remember commenting it temporarily because it tripped some examples. When did some turn into all?
jstolarek commented
jstolarek commented
jstolarek commented
d769f02 breaks behaviour of lift
. In particular this definition of fresh
:
let fresh t =
match t with
| None -> U.fresh t G.no_rank false
| _ -> U.fresh t G.signature false
will cause every variable created via lift
(read: every function application) to be considered coming from a signature. Reverting.
jstolarek commented
The assertion needs to be extended to:
assert (U.rank v = no_rank || U.rank v = signature);
because we now also register variables from signatures. Not sure whether this will be the final design to deal with signatures but that's what the assertion needs to be for now.