X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_kernel%2FnCicPp.ml;h=7573ad542ed2a6f15e0f84e1e162f431850fe1e4;hb=3199f380051c1475c8e376f5cad44433044747e7;hp=454cc9b586b6b4e806a79e06c7638e18f6b2592f;hpb=d0d82efaff995c566c282af806677bd42d8fd9de;p=helm.git diff --git a/helm/software/components/ng_kernel/nCicPp.ml b/helm/software/components/ng_kernel/nCicPp.ml index 454cc9b58..7573ad542 100644 --- a/helm/software/components/ng_kernel/nCicPp.ml +++ b/helm/software/components/ng_kernel/nCicPp.ml @@ -11,47 +11,118 @@ let ppterm ~context ~subst ~metasenv t = module C = NCic module R = NReference -let trivial_pp_term ~context ~subst ~metasenv = +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 trivial_pp_term ~context ~subst ~metasenv t = + let buff = Buffer.create 100 in + let f = Format.formatter_of_buffer buff in + let module F = Format in let rec aux ctx = function | C.Rel m -> - (try List.nth ctx (m-1) - with Failure _ -> " -" ^ string_of_int (m - List.length context)) - | C.Const r -> R.string_of_reference r - | C.Prod (name,s,t) -> "(\Pi "^name^":"^aux ctx s^"."^aux (name::ctx) t^")" + (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.Prod ("_",s,t) -> + F.fprintf f "@["; + aux ctx s; + F.fprintf f "@;→ "; + aux ("_"::ctx) t; + F.fprintf f "@]"; + | C.Prod (name,s,t) -> + F.fprintf f "@["; + F.fprintf f "∀%s:" name; + aux ctx s; + F.fprintf f ".@;"; + aux (name::ctx) t; + F.fprintf f "@]"; | C.Lambda (name,s,t) -> - "(\lambda "^name^":"^aux ctx s^"."^aux (name::ctx) t^")" + F.fprintf f "@["; + F.fprintf f "λ%s:" name; + aux ctx s; + F.fprintf f ".@;"; + aux (name::ctx) t; + F.fprintf f "@]"; | C.LetIn (name,ty,t,b) -> - "(let "^name^":"^aux ctx ty^":="^aux ctx t^" in "^aux (name::ctx) b^")" - | C.Match (_,oty,t,pl) -> - " match " ^ aux ctx t ^ " return " ^ aux ctx oty ^ "[" ^ - String.concat "|" (List.map (aux ctx) pl) ^ "]" - | C.Appl l -> "("^String.concat " " (List.map (aux ctx) l) ^")" - | C.Implicit _ -> "?" - | C.Meta (n,_) -> "?"^string_of_int n - | C.Sort C.Prop -> "Prop" - | C.Sort C.CProp -> "CProp" - | C.Sort (C.Type n) -> "Type"^string_of_int n + F.fprintf f "let %s:" name; + aux ctx ty; + F.fprintf f "≝@;"; + aux ctx t; + F.fprintf f "in@;"; + (aux (name::ctx) b) + | C.Match (r,oty,t,pl) -> + F.fprintf f "@[match "; + aux ctx t; + F.fprintf f "@;return "; + aux ctx oty; + F.fprintf f "@; @[[ "; + if pl <> [] then + begin + F.fprintf f "%s ⇒ " (r2s (R.mk_constructor 1 r)); + aux ctx (List.hd pl); + ignore(List.fold_left + (fun i t -> + F.fprintf f "@;| %s ⇒ " (r2s (R.mk_constructor i r)); + aux ctx t; i+1) + 2 (List.tl pl)); + end; + F.fprintf f "]@] @]"; + | C.Appl l -> + F.fprintf f "@[("; + aux ctx (List.hd l); + List.iter (fun x -> F.fprintf f "@;";aux ctx x) (List.tl l); + F.fprintf f ")@]" + | C.Implicit _ -> F.fprintf f "?" + | C.Meta (n,_) -> F.fprintf f "?%d" n + | C.Sort C.Prop -> F.fprintf f "Prop" + | C.Sort C.CProp -> F.fprintf f "CProp" + | C.Sort (C.Type n) -> F.fprintf f "Type%d" n in - aux (List.map fst context) + aux (List.map fst context) t; + F.fprintf f "@?"; + Buffer.contents buff ;; let ppobj = function | (u,_,metasenv,subst,NCic.Fixpoint (b, fl, _)) -> - "let rec "^NUri.string_of_uri u^"\n"^ - String.concat "\nand " - (List.map (fun (_,name,n,ty,bo) -> - name ^ " on " ^ string_of_int 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^ + " on " ^ string_of_int n ^ " : " ^ ppterm ~metasenv ~subst ~context:[] ty ^ " :=\n"^ - ppterm ~metasenv ~subst ~context:[] bo) fl) + ppterm ~metasenv ~subst ~context:[] bo) :: l),i-1) fl + ([],List.length fl))) | (u,_,_,_,NCic.Inductive (b, _,tyl, _)) -> "inductive" | (u,_,metasenv,subst,NCic.Constant (_,name,None,ty, _)) -> "axiom " ^ name ^ " : " ^ ppterm ~metasenv ~subst ~context:[] ty ^ "\n" | (u,_,metasenv,subst,NCic.Constant (_,name,Some bo,ty, _)) -> "definition " ^ name ^ " : " ^ - ppterm ~metasenv ~subst ~context:[] ty ^ ":=\n"^ + ppterm ~metasenv ~subst ~context:[] ty ^ " := \n"^ ppterm ~metasenv ~subst ~context:[] bo ^ "\n" ;; - - -