let ppterm =
- ref (fun ~context ~subst ~metasenv t -> "Please, set a pp callback")
+ ref (fun ~context ~subst ~metasenv ?inside_fix t -> "Please, set a pp callback")
;;
let set_ppterm f = ppterm := f;;
-let ppterm ~context ~subst ~metasenv t =
- !ppterm ~context ~subst ~metasenv t
+let ppterm ~context ~subst ~metasenv ?inside_fix t =
+ !ppterm ~context ~subst ~metasenv ?inside_fix t
;;
module C = NCic
module R = NReference
-let r2s = function
- | R.Ref (_,u,R.Ind i) ->
- (match snd(NCicEnvironment.get_obj u) with
- | _,_,_,_, C.Inductive (_,_,itl,_) ->
- let _,name,_,_ = List.nth itl i in name
- | _ -> assert false)
- | R.Ref (_,u,R.Con (i,j)) ->
- (match snd(NCicEnvironment.get_obj u) with
- | _,_,_,_, C.Inductive (_,_,itl,_) ->
- let _,_,_,cl = List.nth itl i in
- let _,name,_ = List.nth cl (j-1) in name
- | _ -> assert false)
- | R.Ref (_,u,(R.Decl | R.Def )) ->
- (match snd(NCicEnvironment.get_obj u) with
- | _,_,_,_, C.Constant (_,name,_,_,_) -> name
- | _ -> assert false)
- | R.Ref (_,u,(R.Fix (i,_)|R.CoFix i)) ->
- (match snd(NCicEnvironment.get_obj u) with
- | _,_,_,_, C.Fixpoint (_,fl,_) ->
- let name = NUri.string_of_uri u in
- let name = Filename.basename name in
- let name = Filename.chop_extension name in
- name ^"("^ string_of_int i ^ ")"
- | _ -> assert false)
+let r2s pp_fix_name r =
+ try
+ match r with
+ | R.Ref (_,u,R.Ind i) ->
+ (match snd(NCicEnvironment.get_obj u) with
+ | _,_,_,_, C.Inductive (_,_,itl,_) ->
+ let _,name,_,_ = List.nth itl i in name
+ | _ -> assert false)
+ | R.Ref (_,u,R.Con (i,j)) ->
+ (match snd(NCicEnvironment.get_obj u) with
+ | _,_,_,_, C.Inductive (_,_,itl,_) ->
+ let _,_,_,cl = List.nth itl i in
+ let _,name,_ = List.nth cl (j-1) in name
+ | _ -> assert false)
+ | R.Ref (_,u,(R.Decl | R.Def )) ->
+ (match snd(NCicEnvironment.get_obj u) with
+ | _,_,_,_, C.Constant (_,name,_,_,_) -> name
+ | _ -> assert false)
+ | R.Ref (_,u,(R.Fix (i,_)|R.CoFix i)) ->
+ (match snd(NCicEnvironment.get_obj u) with
+ | _,_,_,_, C.Fixpoint (_,fl,_) ->
+ if pp_fix_name then
+ let _,name,_,_,_ = List.nth fl i in name
+ else
+ let name = NUri.string_of_uri u in
+ let name = Filename.basename name in
+ let name = Filename.chop_extension name in
+ name ^"("^ string_of_int i ^ ")"
+ | _ -> assert false)
+ with exn -> R.string_of_reference r
;;
-let trivial_pp_term ~context ~subst ~metasenv t =
+let trivial_pp_term ~context ~subst ~metasenv ?(inside_fix=false) t =
let buff = Buffer.create 100 in
let f = Format.formatter_of_buffer buff in
let module F = Format in
| C.Rel m ->
(try F.fprintf f "%s" (List.nth ctx (m-1))
with Failure _ -> F.fprintf f " -%d" (m - List.length context))
- | C.Const r -> F.fprintf f "%s" (r2s r)
+ | C.Const r -> F.fprintf f "%s" (r2s inside_fix r)
| C.Prod ("_",s,t) ->
F.fprintf f "@[<hov 1>";
aux ctx s;
F.fprintf f "@]";
| C.Prod (name,s,t) ->
F.fprintf f "@[<hov 1>";
- F.fprintf f "∀%s:" name;
+ F.fprintf f "@[<hov 2>∀%s:@;" name;
aux ctx s;
- F.fprintf f ".@;";
+ F.fprintf f "@].@;";
aux (name::ctx) t;
F.fprintf f "@]";
| C.Lambda (name,s,t) ->
F.fprintf f "@; @[<v>[ ";
if pl <> [] then
begin
- F.fprintf f "%s ⇒ " (r2s (R.mk_constructor 1 r));
+ F.fprintf f "@[<hov 2>%s ⇒@;" (r2s inside_fix (R.mk_constructor 1 r));
aux ctx (List.hd pl);
+ F.fprintf f "@]";
ignore(List.fold_left
(fun i t ->
- F.fprintf f "@;| %s ⇒ " (r2s (R.mk_constructor i r));
- aux ctx t; i+1)
+ F.fprintf f "@;| @[<hov 2>%s ⇒@;" (r2s inside_fix (R.mk_constructor i r));
+ aux ctx t;
+ F.fprintf f "@]";
+ i+1)
2 (List.tl pl));
end;
F.fprintf f "]@] @]";
let ppobj = function
| (u,_,metasenv,subst,NCic.Fixpoint (b, fl, _)) ->
- "let rec "^
+ "{"^NUri.string_of_uri u^"}\n"^
+ "let rec "^
String.concat "\nand " (fst
(List.fold_right (fun (_,name,n,ty,bo) (l,i) ->
- ((Filename.chop_extension (Filename.basename (NUri.string_of_uri u))^
- "("^string_of_int (i-1) ^") aka "^name^
+ ((name^
" on " ^ string_of_int n ^ " : " ^
ppterm ~metasenv ~subst ~context:[] ty ^ " :=\n"^
- ppterm ~metasenv ~subst ~context:[] bo) :: l),i-1) fl
+ ppterm ~metasenv ~subst ~context:[] ~inside_fix:true bo) :: l),i-1) fl
([],List.length fl)))
| (u,_,_,_,NCic.Inductive (b, _,tyl, _)) -> "inductive"
| (u,_,metasenv,subst,NCic.Constant (_,name,None,ty, _)) ->