(*****************************************************************************) (* Vers Ctcoq *) open Esyntax open Metasyntax open Printer open Pp open Translate open Ascent open Vtp open Xlate let ct_text x = CT_coerce_ID_to_TEXT (CT_ident x);; let sps s = ct_text s ;; let sphs s = ct_text s ;; let spe = sphs "";; let spb = sps " ";; let spr = sps "Retour chariot pour Show proof";; let spnb n = let s = ref "" in for i=1 to n do s:=(!s)^" "; done; sps !s ;; let rec spclean l = match l with [] -> [] |x::l -> if x=spe then (spclean l) else x::(spclean l) ;; let spnb n = let s = ref "" in for i=1 to n do s:=(!s)^" "; done; sps !s ;; let ct_FORMULA_constr = Hashtbl.create 50;; let stde() = (Global.env()) ;; let spt t = let f = (translate_constr (stde()) t) in Hashtbl.add ct_FORMULA_constr f t; CT_text_formula f ;; let root_of_text_proof t= CT_text_op [ct_text "root_of_text_proof"; t] ;; let spshrink info t = CT_text_op [ct_text "shrink"; CT_text_op [ct_text info; t]] ;; let spuselemma intro x y = CT_text_op [ct_text "uselemma"; ct_text intro; x;y] ;; let sptoprove p t = CT_text_op [ct_text "to_prove"; CT_text_path p; ct_text "goal"; (spt t)] ;; let sphyp p h t = CT_text_op [ct_text "hyp"; CT_text_path p; ct_text h; (spt t)] ;; let sphypt p h t = CT_text_op [ct_text "hyp_with_type"; CT_text_path p; ct_text h; (spt t)] ;; let spwithtac x t = CT_text_op [ct_text "with_tactic"; ct_text t; x] ;; let spv l = let l= spclean l in CT_text_v l ;; let sph l = let l= spclean l in CT_text_h l ;; let sphv l = let l= spclean l in CT_text_hv l ;; let rec prlist_with_sep f g l = match l with [] -> hOV 0 [< >] |x::l1 -> hOV 0 [< (g x); (f ()); (prlist_with_sep f g l1)>] ;; let rec sp_print x = match x with CT_coerce_ID_to_TEXT (CT_ident s) -> (match s with "\n" -> [< 'fNL >] | "Retour chariot pour Show proof" -> [< 'fNL >] |_ -> [< 'sTR s >]) | CT_text_formula f -> [< prterm (Hashtbl.find ct_FORMULA_constr f) >] | CT_text_op [CT_coerce_ID_to_TEXT (CT_ident "to_prove"); CT_text_path (CT_signed_int_list p); CT_coerce_ID_to_TEXT (CT_ident "goal"); g] -> let p=(List.map (fun y -> match y with (CT_coerce_INT_to_SIGNED_INT (CT_int x)) -> x | _ -> raise (Failure "sp_print")) p) in h 0 [< 'sTR ""; sp_print g; 'sTR "">] | CT_text_op [CT_coerce_ID_to_TEXT (CT_ident "uselemma"); CT_coerce_ID_to_TEXT (CT_ident intro); l;g] -> h 0 [< 'sTR ("("^intro^" "); sp_print l; 'sTR ")"; sp_print g>] | CT_text_op [CT_coerce_ID_to_TEXT (CT_ident "hyp"); CT_text_path (CT_signed_int_list p); CT_coerce_ID_to_TEXT (CT_ident hyp); g] -> let p=(List.map (fun y -> match y with (CT_coerce_INT_to_SIGNED_INT (CT_int x)) -> x | _ -> raise (Failure "sp_print")) p) in h 0 [< 'sTR hyp>] | CT_text_op [CT_coerce_ID_to_TEXT (CT_ident "hyp_with_type"); CT_text_path (CT_signed_int_list p); CT_coerce_ID_to_TEXT (CT_ident hyp); g] -> let p=(List.map (fun y -> match y with (CT_coerce_INT_to_SIGNED_INT (CT_int x)) -> x | _ -> raise (Failure "sp_print")) p) in h 0 [< sp_print g; 'sPC; 'sTR "("; 'sTR hyp;'sTR ")">] | CT_text_h l -> h 0 [< prlist_with_sep (fun () -> [< >]) (fun y -> sp_print y) l>] | CT_text_v l -> v 0 [< prlist_with_sep (fun () -> [< >]) (fun y -> sp_print y) l>] | CT_text_hv l -> h 0 [< prlist_with_sep (fun () -> [<>]) (fun y -> sp_print y) l>] | CT_text_op [CT_coerce_ID_to_TEXT (CT_ident "shrink"); CT_text_op [CT_coerce_ID_to_TEXT (CT_ident info); t]] -> h 0 [< 'sTR ("("^info^": "); sp_print t ;'sTR ")" >] | CT_text_op [CT_coerce_ID_to_TEXT (CT_ident "root_of_text_proof"); t]-> sp_print t | _ -> [< 'sTR "..." >] ;;