;;
(* CODICE c&p da NCicPp *)
-let nast_of_cic0
+let nast_of_cic0 status
~(idref:
?reference:NReference.reference -> CicNotationPt.term -> CicNotationPt.term)
- ~output_type ~subst k ~context =
+ ~output_type ~metasenv ~subst k ~context =
function
| NCic.Rel n ->
(try
(match hd with
| NCic.Appl l -> NCic.Appl (l@args)
| _ -> NCic.Appl (hd :: args)))
- | NCic.Appl args -> idref (Ast.Appl (List.map (k ~context) args))
+ | NCic.Appl args as t ->
+ let args =
+ if not !Acic2content.hide_coercions then args
+ else
+ match
+ NCicCoercion.match_coercion status ~metasenv ~context ~subst t
+ with
+ | None -> args
+ | Some (_,sats,cpos) ->
+(* CSC: sats e' il numero di pi, ma non so cosa farmene! voglio il numero di
+ argomenti da saltare, come prima! *)
+ if cpos < List.length args - 1 then
+ List.nth args (cpos + 1) ::
+ try snd (HExtlib.split_nth (cpos+sats+2) args) with Failure _->[]
+ else
+ args
+ in
+ (match args with
+ [arg] -> idref (k ~context arg)
+ | _ -> idref (Ast.Appl (List.map (k ~context) args)))
| NCic.Match (NReference.Ref (uri,_) as r,outty,te,patterns) ->
let name = NUri.name_of_uri uri in
(* CSC
if args = [] then head
else Ast.Appl (head :: List.map instantiate_arg args)
-let rec nast_of_cic1 ~idref ~output_type ~subst ~context term =
+let rec nast_of_cic1 status ~idref ~output_type ~metasenv ~subst ~context term =
match (get_compiled32 ()) term with
| None ->
- nast_of_cic0 ~idref ~output_type ~subst
- (nast_of_cic1 ~idref ~output_type ~subst) ~context term
+ nast_of_cic0 status ~idref ~output_type ~metasenv ~subst
+ (nast_of_cic1 status ~idref ~output_type ~metasenv ~subst) ~context term
| Some (env, ctors, pid) ->
let idrefs =
List.map
List.map
(fun (name, term) ->
name,
- nast_of_cic1 ~idref ~output_type ~subst ~context term
+ nast_of_cic1 status ~idref ~output_type ~subst ~metasenv ~context
+ term
) env
in
let _, symbol, args, _ =
aux appl_pattern
*)
-let nmap_sequent0 ~idref ~subst (i,(n,context,ty):int * NCic.conjecture) =
+let nmap_sequent0 status ~idref ~metasenv ~subst (i,(n,context,ty)) =
let module K = Content in
- let nast_of_cic = nast_of_cic1 ~idref ~output_type:`Term ~subst in
+ let nast_of_cic =
+ nast_of_cic1 status ~idref ~output_type:`Term ~metasenv ~subst in
let context',_ =
List.fold_right
(fun item (res,context) ->
("-1",i,context',nast_of_cic ~context ty)
;;
-let nmap_sequent ~subst metasenv =
+let nmap_sequent status ~metasenv ~subst conjecture =
let module K = Content in
let ids_to_refs = Hashtbl.create 211 in
let register_ref = Hashtbl.add ids_to_refs in
- nmap_sequent0 ~idref:(idref register_ref) ~subst metasenv, ids_to_refs
+ nmap_sequent0 status ~idref:(idref register_ref) ~metasenv ~subst conjecture,
+ ids_to_refs
;;
let object_prefix = "obj:";;
}
;;
-let nmap_obj (uri,_,metasenv,subst,kind) =
+let nmap_obj status (uri,_,metasenv,subst,kind) =
let module K = Content in
let ids_to_refs = Hashtbl.create 211 in
let register_ref = Hashtbl.add ids_to_refs in
let idref = idref register_ref in
let nast_of_cic =
- nast_of_cic1 ~idref ~output_type:`Term ~subst in
+ nast_of_cic1 status ~idref ~output_type:`Term ~metasenv ~subst in
let seed = ref 0 in
let conjectures =
match metasenv with
[] -> None
| _ -> (*Some (List.map (map_conjectures seed) metasenv)*)
(*CSC: used to be the previous line, that uses seed *)
- Some (List.map (nmap_sequent0 ~idref ~subst) metasenv)
+ Some (List.map (nmap_sequent0 status ~idref ~metasenv ~subst) metasenv)
in
let res =
match kind with