exception TO_DO;;
-let proof2cic term2cic p =
+let proof2cic deannotate p =
let rec proof2cic premise_env p =
let module C = Cic in
let module Con = Content in
`Declaration d ->
(match d.Con.dec_name with
Some s ->
- C.Lambda (C.Name s, term2cic d.Con.dec_type, target)
+ C.Lambda (C.Name s, deannotate d.Con.dec_type, target)
| None ->
- C.Lambda (C.Anonymous, term2cic d.Con.dec_type, target))
+ C.Lambda (C.Anonymous, deannotate d.Con.dec_type, target))
| `Hypothesis h ->
(match h.Con.dec_name with
Some s ->
- C.Lambda (C.Name s, term2cic h.Con.dec_type, target)
+ C.Lambda (C.Name s, deannotate h.Con.dec_type, target)
| None ->
- C.Lambda (C.Anonymous, term2cic h.Con.dec_type, target))
+ C.Lambda (C.Anonymous, deannotate h.Con.dec_type, target))
| `Proof p ->
(match p.Con.proof_name with
Some s ->
bo.Con.proof_name
with
Some ty, Some name ->
- (name,n,term2cic ty,proof2cic premise_env bo)
+ (name,n,deannotate ty,
+ proof2cic premise_env bo)
| _,_ -> assert false)
| _ -> assert false)
l defs in
bo.Con.proof_name
with
Some ty, Some name ->
- (name,term2cic ty,proof2cic premise_env bo)
+ (name,deannotate ty,
+ proof2cic premise_env bo)
| _,_ -> assert false)
| _ -> assert false)
defs in
[Con.Premise prem] ->
(try List.assoc prem.Con.premise_xref premise_env
with Not_found ->
- prerr_endline ("Not_found: " ^ prem.Con.premise_xref);
+ prerr_endline
+ ("Not_found in BU_Conversion: " ^ prem.Con.premise_xref);
raise Not_found)
| _ -> prerr_endline "2"; assert false)
else if conclude.Con.conclude_method = "Exact" then
(match conclude.Con.conclude_args with
- [Con.Term t] -> term2cic t
+ [Con.Term t] -> deannotate t
| [Con.Premise prem] ->
(match prem.Con.premise_n with
None -> assert false
Con.Term (C.AAppl
id ((C.AConst(idc,uri,exp_named_subst))::params_and_IP))::args ->
let subst =
- List.map (fun (u,t) -> (u, term2cic t)) exp_named_subst in
+ List.map (fun (u,t) -> (u, deannotate t)) exp_named_subst in
let cargs = args2cic premise_env args in
- let cparams_and_IP = List.map term2cic params_and_IP in
+ let cparams_and_IP = List.map deannotate params_and_IP in
C.Appl (C.Const(uri,subst)::cparams_and_IP@cargs)
| _ -> prerr_endline "5"; assert false)
else if (conclude.Con.conclude_method = "Rewrite") then
(match conclude.Con.conclude_args with
Con.Term (C.AConst (sid,uri,exp_named_subst))::args ->
let subst =
- List.map (fun (u,t) -> (u, term2cic t)) exp_named_subst in
+ List.map (fun (u,t) -> (u, deannotate t)) exp_named_subst in
let cargs = args2cic premise_env args in
C.Appl (C.Const(uri,subst)::cargs)
| _ -> prerr_endline "6"; assert false)
Con.Aux n -> prerr_endline "8"; assert false
| Con.Premise prem ->
(match prem.Con.premise_n with
- Some n ->
- C.Rel n
- | _ ->
+ Some n -> C.Rel n
+ | None ->
(try List.assoc prem.Con.premise_xref premise_env
with Not_found ->
- prerr_endline ("Not_found: " ^ prem.Con.premise_xref);
+ prerr_endline ("Not_found in arg2cic: premise " ^ (match prem.Con.premise_binder with None -> "previous" | Some p -> p) ^ ", xref=" ^ prem.Con.premise_xref);
raise Not_found))
| Con.Term t ->
- term2cic t
+ deannotate t
| Con.ArgProof p ->
proof2cic [] p (* empty! *)
| Con.ArgMethod s -> raise TO_DO
in proof2cic [] p
;;
-let proof2cic = proof2cic Deannotate.deannotate_term;;
+exception ToDo;;
+
+let cobj2obj deannotate (id,params,metasenv,obj) =
+ let module K = Content in
+ match obj with
+ `Def (Content.Const,ty,`Proof bo) ->
+ (match metasenv with
+ None ->
+ Cic.Constant
+ (id, Some (proof2cic deannotate bo), deannotate ty, params)
+ | Some metasenv' ->
+ let metasenv'' =
+ List.map
+ (function (_,i,canonical_context,term) ->
+ let canonical_context' =
+ List.map
+ (function
+ _,None -> None
+ | _,Some (`Declaration d)
+ | _,Some (`Hypothesis d) ->
+ (match d with
+ {K.dec_name = Some n ; K.dec_type = t} ->
+ Some (Cic.Name n, Cic.Decl (deannotate t))
+ | _ -> assert false)
+ | _,Some (`Definition d) ->
+ (match d with
+ {K.def_name = Some n ; K.def_term = t} ->
+ Some (Cic.Name n, Cic.Def (deannotate t))
+ | _ -> assert false)
+ | _,Some (`Proof d) ->
+ (match d with
+ {K.proof_name = Some n } ->
+ Some (Cic.Name n, Cic.Def (proof2cic deannotate d))
+ | _ -> assert false)
+ ) canonical_context
+ in
+ (i,canonical_context',deannotate term)
+ ) metasenv'
+ in
+ Cic.CurrentProof
+ (id, metasenv'', proof2cic deannotate bo, deannotate ty, params))
+ | _ -> raise ToDo
+;;
+
+let cobj2obj = cobj2obj Deannotate.deannotate_term;;