@@ -143,7 +143,25 @@ module PPEnv = struct
143143 (fun env x -> EcEnv.Mod. bind_param x mty env)
144144 ppe.ppe_env xs; }
145145
146- let p_shorten cond (nm , x ) =
146+ let reverse_theory_alias (ppe : t ) (path : P.path ) : P.path =
147+ let aliases = EcEnv.Theory. aliases ppe.ppe_env in
148+
149+ let rec reverse (suffix : symbol list ) (p : P.path option ) =
150+ Option. bind p (fun prefix ->
151+ match P.Mp. find_opt prefix aliases with
152+ | None -> reverse (P. basename prefix :: suffix) (P. prefix prefix)
153+ | Some prefix -> Some (EcPath. extend prefix suffix)
154+ )
155+ in Option. value ~default: path (reverse [] (Some path))
156+
157+ let p_shorten
158+ ?(alias = true )
159+ ?(istheory = false )
160+ (ppe : t )
161+ (cond : qsymbol -> bool )
162+ (p : qsymbol )
163+ : qsymbol
164+ =
147165 let rec shorten prefix (nm , x ) =
148166 match cond (nm, x) with
149167 | true -> (nm, x)
@@ -154,35 +172,46 @@ module PPEnv = struct
154172 end
155173 in
156174
175+ let p = EcPath. fromqsymbol p in
176+ let p =
177+ if alias then begin
178+ if istheory then
179+ reverse_theory_alias ppe p
180+ else
181+ let thpath, base = P. prefix p, P. basename p in
182+ let thpath = Option. map (reverse_theory_alias ppe) thpath in
183+ P. pqoname thpath base
184+ end else p in
185+ let (nm, x) = EcPath. toqsymbol p in
157186 shorten (List. rev nm) ([] , x)
158187
159188 let ty_symb (ppe : t ) p =
160- let exists sm =
189+ let exists sm =
161190 try EcPath. p_equal (EcEnv.Ty. lookup_path ~unique: true sm ppe.ppe_env) p
162191 with EcEnv. LookupFailure _ -> false
163192 in
164- p_shorten exists (P. toqsymbol p)
193+ p_shorten ppe exists (P. toqsymbol p)
165194
166195 let tc_symb (ppe : t ) p =
167- let exists sm =
196+ let exists sm =
168197 try EcPath. p_equal (EcEnv.TypeClass. lookup_path sm ppe.ppe_env) p
169198 with EcEnv. LookupFailure _ -> false
170199 in
171- p_shorten exists (P. toqsymbol p)
200+ p_shorten ppe exists (P. toqsymbol p)
172201
173202 let rw_symb (ppe : t ) p =
174- let exists sm =
203+ let exists sm =
175204 try EcPath. p_equal (EcEnv.BaseRw. lookup_path sm ppe.ppe_env) p
176205 with EcEnv. LookupFailure _ -> false
177206 in
178- p_shorten exists (P. toqsymbol p)
207+ p_shorten ppe exists (P. toqsymbol p)
179208
180209 let ax_symb (ppe : t ) p =
181- let exists sm =
210+ let exists sm =
182211 try EcPath. p_equal (EcEnv.Ax. lookup_path sm ppe.ppe_env) p
183212 with EcEnv. LookupFailure _ -> false
184213 in
185- p_shorten exists (P. toqsymbol p)
214+ p_shorten ppe exists (P. toqsymbol p)
186215
187216 let op_symb (ppe : t ) p info =
188217 let specs = [1 , EcPath. pqoname (EcPath. prefix EcCoreLib.CI_Bool. p_eq) " <>" ] in
@@ -220,21 +249,21 @@ module PPEnv = struct
220249 (* FIXME: for special operators, do check `info` *)
221250 if List. exists (fun (_ , sp ) -> EcPath. p_equal sp p) specs
222251 then ([] , EcPath. basename p)
223- else p_shorten exists (P. toqsymbol p)
252+ else p_shorten ppe exists (P. toqsymbol p)
224253
225254 let ax_symb (ppe : t ) p =
226255 let exists sm =
227256 try EcPath. p_equal (EcEnv.Ax. lookup_path sm ppe.ppe_env) p
228257 with EcEnv. LookupFailure _ -> false
229258 in
230- p_shorten exists (P. toqsymbol p)
259+ p_shorten ppe exists (P. toqsymbol p)
231260
232- let th_symb (ppe : t ) p =
261+ let th_symb ? alias (ppe : t ) p =
233262 let exists sm =
234263 try EcPath. p_equal (EcEnv.Theory. lookup_path sm ppe.ppe_env) p
235264 with EcEnv. LookupFailure _ -> false
236265 in
237- p_shorten exists (P. toqsymbol p)
266+ p_shorten ?alias ~istheory: true ppe exists (P. toqsymbol p)
238267
239268 let rec mod_symb (ppe : t ) mp : EcSymbols.msymbol =
240269 let (nm, x, p2) =
@@ -360,13 +389,18 @@ module PPEnv = struct
360389end
361390
362391(* -------------------------------------------------------------------- *)
363- let shorten_path (cond : P.path -> qsymbol -> bool ) (p : P.path ) : qsymbol * qsymbol option =
392+ let shorten_path
393+ (ppe : PPEnv.t )
394+ (cond : P.path -> qsymbol -> bool )
395+ (p : P.path )
396+ : qsymbol * qsymbol option
397+ =
364398 let (nm, x) = EcPath. toqsymbol p in
365399 let nm =
366400 match nm with
367401 | top :: nm when top = EcCoreLib. i_top -> nm
368402 | _ -> nm in
369- let nm', x' = PPEnv. p_shorten (cond p) (nm, x) in
403+ let nm', x' = PPEnv. p_shorten ppe (cond p) (nm, x) in
370404 let plong, pshort = (nm, x), (nm', x') in
371405
372406 (plong, if plong = pshort then None else Some pshort)
@@ -445,8 +479,13 @@ let pp_path fmt p =
445479 Format. fprintf fmt " %s" (P. tostring p)
446480
447481(* -------------------------------------------------------------------- *)
448- let pp_shorten_path (cond : P.path -> qsymbol -> bool ) (fmt : Format.formatter ) (p : P.path ) =
449- let plong, pshort = shorten_path cond p in
482+ let pp_shorten_path
483+ (ppe : PPEnv.t )
484+ (cond : P.path -> qsymbol -> bool )
485+ (fmt : Format.formatter )
486+ (p : P.path )
487+ =
488+ let plong, pshort = shorten_path ppe cond p in
450489
451490 match pshort with
452491 | None ->
@@ -507,8 +546,8 @@ let pp_axhnt ppe fmt (p, b) =
507546 Format. fprintf fmt " %a%s" (pp_axname ppe) p b
508547
509548(* -------------------------------------------------------------------- *)
510- let pp_thname ppe fmt p =
511- EcSymbols. pp_qsymbol fmt (PPEnv. th_symb ppe p)
549+ let pp_thname ? alias ppe fmt p =
550+ EcSymbols. pp_qsymbol fmt (PPEnv. th_symb ?alias ppe p)
512551
513552(* -------------------------------------------------------------------- *)
514553let pp_funname (ppe : PPEnv.t ) fmt p =
@@ -3565,6 +3604,9 @@ let rec pp_theory ppe (fmt : Format.formatter) (path, cth) =
35653604 level (odfl " " base)
35663605 (pp_list " @ " (pp_axhnt ppe)) axioms
35673606
3607+ | EcTheory. Th_alias (name , target ) ->
3608+ Format. fprintf fmt " theory %s = %a." name (pp_thname ~alias: false ppe) target
3609+
35683610(* -------------------------------------------------------------------- *)
35693611let pp_stmt_with_nums (ppe : PPEnv.t ) fmt stmt =
35703612 let ppnode = collect2_s ppe stmt.s_node [] in
0 commit comments