Closed gebner closed 1 month ago
According to git bisect
, this was broken by the recent gensym changes:
16b55bffd981546a19ccaa65a6da7998680aa0e5 (https://github.com/FStarLang/FStar/pull/3515)
Ouch. Looks like a name clash right? I remember some discussions about F's gensym and Pulse's gensym clashing, but I forget the exact details. Probably the stabler and smaller F gensym'd numbers now clash more easily?
I think you're right about the name clash. Making the Pulse vars start at 10000 lets the example pass:
diff --git a/src/checker/Pulse.Typing.Env.fst b/src/checker/Pulse.Typing.Env.fst
index c3fad92f1..c5ae01cd9 100644
--- a/src/checker/Pulse.Typing.Env.fst
+++ b/src/checker/Pulse.Typing.Env.fst
@@ -106,7 +106,7 @@ let rec max (bs:list (var & typ)) (current:var)
let fresh g =
match g.bs with
- | [] -> 1
+ | [] -> 10000
| (x, _)::bs_rest ->
let max = max bs_rest x in
max + 1
I'm not sure where we get the F* gensym variables from, though.
I'm not sure where we get the F* gensym variables from, though.
I think that was the wrong question. The question is where F is getting the Pulse gensym variables from and that is easy to answer. We're running the F type-checker on u:f -> stt unit emp (fun r -> ok x y z w u)
, then the F* type-checker creates a new variable to go under this binder, and this new variable clashes with the existing one previously created by Pulse.
This is an interesting one:
w:d
.