Skip to content

Commit 43e706a

Browse files
committed
1 parent 2ef66b2 commit 43e706a

File tree

1 file changed

+50
-18
lines changed

1 file changed

+50
-18
lines changed

src/coq_elpi_utils.ml

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -589,27 +589,55 @@ let detype_primitive_string = function
589589
| _ -> assert false
590590
[%%endif]
591591

592+
[%%if coq = "8.19" || coq = "8.20" ]
593+
let fresh (names, e) sigma name ty =
594+
let open EConstr in
595+
let open Names.Name in
596+
let mk_fresh was =
597+
let id = Namegen.next_name_away was names in
598+
(Name id, (Names.Id.Set.add id names, e))
599+
in
600+
match name with
601+
| Anonymous ->
602+
let noccurs sigma i = function None -> true | Some t -> Vars.noccurn sigma i t in
603+
let name, names = Namegen.compute_displayed_name_in_gen noccurs e sigma names name ty in
604+
(name, (names, e))
605+
| Name id when Names.Id.Set.mem id names -> mk_fresh name
606+
| Name id as x -> (x, (Names.Id.Set.add id names, e))
607+
608+
let names_of_env env =
609+
let namesr = Environ.rel_context env |> Context.Rel.to_vars in
610+
let namesv = Environ.named_context env |> Context.Named.to_vars in
611+
Names.Id.Set.union namesr namesv
612+
[%%else]
613+
let fresh (names, e) sigma name ty =
614+
let open EConstr in
615+
let open Names.Name in
616+
let mk_fresh was =
617+
let id, names = Namegen.Generator.next_name_away Namegen.Generator.fresh was names in
618+
(Name id, (names, e))
619+
in
620+
match name with
621+
| Anonymous ->
622+
let noccurs sigma i = function None -> true | Some t -> Vars.noccurn sigma i t in
623+
let name, names = Namegen.compute_displayed_name_in_gen Namegen.Generator.fresh noccurs e sigma names name ty in
624+
(name, (names, e))
625+
| Name id when Nameops.Fresh.mem id names -> mk_fresh name
626+
| Name id as x -> (x, (Nameops.Fresh.add id names, e))
627+
628+
let names_of_env env =
629+
let namesr = Environ.rel_context env |> Context.Rel.to_vars in
630+
let namesv = Environ.named_context env |> Context.Named.to_vars in
631+
Names.Id.Set.fold (fun id accu -> Nameops.Fresh.add id accu) namesr (Nameops.Fresh.of_set namesv)
632+
[%%endif]
633+
592634
let detype ?(keepunivs = false) env sigma t =
593635
let open Glob_term in
594636
let open EConstr in
595637
let open Context.Rel.Declaration in
596638
debug Pp.(fun () -> str "detype: " ++ Printer.pr_econstr_env env sigma t);
597639

598-
let fresh (names, e) name ty =
599-
let open Names.Name in
600-
let mk_fresh was =
601-
let id = Namegen.next_name_away was names in
602-
(Name id, (Names.Id.Set.add id names, e))
603-
in
604-
match name with
605-
| Anonymous ->
606-
let noccurs sigma i = function None -> true | Some t -> Vars.noccurn sigma i t in
607-
let name, names = Namegen.compute_displayed_name_in_gen noccurs e sigma names name ty in
608-
(name, (names, e))
609-
| Name id when Names.Id.Set.mem id names -> mk_fresh name
610-
| Name id as x -> (x, (Names.Id.Set.add id names, e))
611-
in
612-
640+
let fresh (names, e) name ty = fresh (names, e) sigma name ty in
613641
let push_rel d env c =
614642
let name = Context.Rel.Declaration.get_name d in
615643
let r = Context.Rel.Declaration.get_relevance d in
@@ -801,14 +829,18 @@ let detype ?(keepunivs = false) env sigma t =
801829
buildrec Names.Id.Set.empty [] env (List.length ctx) branch
802830
in
803831

804-
let namesr = Environ.rel_context env |> Context.Rel.to_vars in
805-
let namesv = Environ.named_context env |> Context.Named.to_vars in
806-
let x = aux (Names.Id.Set.union namesr namesv, env) t in
832+
let x = aux (names_of_env env, env) t in
807833
x
808834

835+
[%%if coq = "8.19" || coq = "8.20" ]
809836
let detype_closed_glob env sigma closure =
810837
let gbody = Detyping.detype_closed_glob Names.Id.Set.empty env sigma closure in
811838
fix_detype gbody
839+
[%%else]
840+
let detype_closed_glob env sigma closure =
841+
let gbody = Detyping.detype_closed_glob env sigma closure in
842+
fix_detype gbody
843+
[%%endif]
812844

813845
type qualified_name = string list
814846

0 commit comments

Comments
 (0)