]> matita.cs.unibo.it Git - helm.git/commitdiff
- refine's type_of no longer return a substitution
authorStefano Zacchiroli <zack@upsilon.cc>
Mon, 2 Feb 2004 17:01:50 +0000 (17:01 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Mon, 2 Feb 2004 17:01:50 +0000 (17:01 +0000)
helm/ocaml/cic_unification/cicMetaSubst.ml
helm/ocaml/cic_unification/cicMetaSubst.mli
helm/ocaml/cic_unification/cicRefine.ml
helm/ocaml/cic_unification/cicRefine.mli

index a28b853bebabcfe3eb9be907cedd24bda2bff868..ba8ae7d98cd04606ee60fa7cf779f333482e0eca 100644 (file)
@@ -475,6 +475,14 @@ let rec apply_subst_context subst context =
       | None -> None :: context)
     context []
 
+let apply_subst_metasenv subst metasenv =
+  List.map
+    (fun (n, context, ty) ->
+      (n, apply_subst_context subst context, apply_subst subst ty))
+    (List.filter
+      (fun (i, _, _) -> not (List.exists (fun (j, _) -> (j = i)) subst))
+      metasenv)
+
 let ppterm subst term = CicPp.ppterm (apply_subst subst term)
 
 let ppcontext ?(sep = "\n") subst context =
index fd770215a1bb1e42ebf5ef70c830fcac416fc421..730afcd10a23f092c0273adcaad2aa64dc66a625 100644 (file)
@@ -54,6 +54,7 @@ val apply_subst_reducing :
  (int * int) option -> substitution -> Cic.term -> Cic.term
 
 val apply_subst_context : substitution -> Cic.context -> Cic.context
+val apply_subst_metasenv: substitution -> Cic.metasenv -> Cic.metasenv
 
 (** {2 Pretty printers} *)
 
index 3fc0dcf5a4003585b10f17e19240fc0932c04994..a6506d5cacb057c13c0f7de4813364c813922d68 100644 (file)
@@ -460,13 +460,8 @@ and type_of_aux' metasenv context t =
 
  and sort_of_prod subst metasenv context (name,s) (t1, t2) =
   let module C = Cic in
-   (* ti could be a metavariable in the domain of the substitution *)
-   let t1' = CicMetaSubst.apply_subst subst t1 in
-   let t2' = CicMetaSubst.apply_subst subst t2 in
-    let t1'' = CicMetaSubst.whd subst context t1' in
-    let t2'' =
-      CicMetaSubst.whd subst ((Some (name,C.Decl s))::context) t2'
-    in
+    let t1'' = CicMetaSubst.whd subst context t1 in
+    let t2'' = CicMetaSubst.whd subst ((Some (name,C.Decl s))::context) t2 in
     match (t1'', t2'') with
        (C.Sort s1, C.Sort s2)
          when (s2 = C.Prop or s2 = C.Set or s2 = C.CProp) -> (* different than Coq manual!!! *)
@@ -519,24 +514,22 @@ and type_of_aux' metasenv context t =
      (function (i,_,_) -> not (List.exists (function (j,_) -> j=i) subst'))
      metasenv'
    in
-    CicMetaSubst.apply_subst subst' t,
-     CicMetaSubst.apply_subst subst' ty,
-      subst', metasenv''
+   (CicMetaSubst.apply_subst subst' t,
+    CicMetaSubst.apply_subst subst' ty,
+    CicMetaSubst.apply_subst_metasenv subst' metasenv'')
 ;;
 
 (* DEBUGGING ONLY *)
 let type_of_aux' metasenv context term =
  try
-  let (t,ty,s,m) = type_of_aux' metasenv context term in
+  let (t,ty,m) = type_of_aux' metasenv context term in
    debug_print
     ("@@@ REFINE SUCCESSFUL: " ^ CicPp.ppterm t ^ " : " ^ CicPp.ppterm ty);
 (*
-   debug_print
-    ("@@@ REFINE SUCCESSFUL (subst):\n" ^ CicMetaSubst.ppsubst s);
    debug_print
     ("@@@ REFINE SUCCESSFUL (metasenv):\n" ^ CicMetaSubst.ppmetasenv m s);
 *)
-   (t,ty,s,m)
+   (t,ty,m)
  with
  | CicUnification.AssertFailure msg as e ->
      debug_print "@@@ REFINE FAILED: CicUnification.AssertFailure:";
index ce97e8ab7ff178f4222b1c6acc5954139d12411e..28a34f5ff8354762716243f34ef88d17ce07a16a 100644 (file)
@@ -32,7 +32,6 @@ exception WrongUriToMutualInductiveDefinitions of string
 (* type_of_aux' metasenv context term                        *)
 (* refines [term] and returns the refined form of [term],    *)
 (* its type, the computed substitution and the new metasenv. *)
-(* The substitution returned is already unwinded             *)
 val type_of_aux':
  Cic.metasenv -> Cic.context -> Cic.term ->
-  Cic.term * Cic.term * CicMetaSubst.substitution * Cic.metasenv
+  Cic.term * Cic.term * Cic.metasenv