@@ -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+
592634let 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" ]
809836let 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
813845type qualified_name = string list
814846
0 commit comments