]> matita.cs.unibo.it Git - helm.git/commitdiff
...
authorEnrico Tassi <enrico.tassi@inria.fr>
Mon, 20 Oct 2008 08:12:43 +0000 (08:12 +0000)
committerEnrico Tassi <enrico.tassi@inria.fr>
Mon, 20 Oct 2008 08:12:43 +0000 (08:12 +0000)
helm/software/components/ng_kernel/TODO
helm/software/components/ng_kernel/nCicEnvironment.ml
helm/software/components/ng_kernel/nCicEnvironment.mli
helm/software/components/ng_refiner/.depend.opt
helm/software/components/ng_refiner/check.ml
helm/software/components/ng_refiner/nCicRefiner.ml
helm/software/components/ng_refiner/nCicUnification.ml
helm/software/matita/contribs/dama/dama/ordered_uniform.ma
helm/software/matita/library/depends

index cfe8ca1171b17457c49593d977fde8e018289717..02913a155a14729973b80b7c9c56606a349f3723 100644 (file)
@@ -13,6 +13,8 @@ e la si tagga con bound a seconda del test_eq_only <= k.
 nel vecchio nucleo la height_of di un b-redex fa 0 e quindi riduci in forma
 normale. Spostare la small_delta_step. 
 
+
+@ tra universi senza duplicati
 -------
 ?1 = t
   (?1,?2)::(?2,t)::subst
index 496ae54468471382ede458fc51fdd4c1bc0f96c4..0ddd3601db02f4502f0cc0d9780adaff6b74584a 100644 (file)
@@ -51,6 +51,8 @@ let pp_constraints () =
   String.concat "\n" (List.map (fun (b,x,y) -> pp_constraint b x y) !le_constraints)
 ;;
 
+let universes = ref [];;
+
 let add_constraint strict a b = 
   match a,b with
   | [false,a2],[false,b2] -> 
@@ -58,11 +60,30 @@ let add_constraint strict a b =
         if le_path_uri [] (not strict) b2 a2 then
          (raise(BadConstraint(lazy("universe inconsistency adding "^pp_constraint strict a2 b2
            ^ " to:\n" ^ pp_constraints ()))));
+        universes := a2 :: b2 :: 
+          List.filter (fun x -> not (NUri.eq x a2 || NUri.eq x b2)) !universes;
         le_constraints := (strict,a2,b2) :: !le_constraints)
   | _ -> raise (BadConstraint
           (lazy "trying to add a constraint on an inferred universe"))
 ;;
 
+let sup l =
+  match l with
+  | [false,_] -> Some l
+  | l ->
+   let bigger_than acc (s1,n1) = List.filter (le_path_uri [] s1 n1) acc in
+   let solutions = List.fold_left bigger_than !universes l in
+   let rec aux = function
+     | [] -> None
+     | u :: tl ->
+         if List.exists (fun x -> le_path_uri [] true x u) solutions then aux tl
+         else Some [false,u]
+   in
+    aux solutions
+;;
+
+
+
 let typecheck_obj,already_set = ref (fun _ -> assert false), ref false;;
 let set_typecheck_obj f =
  if !already_set then
index 029cd94d18818a0c3520f0ce0f2360f6829b56ae..758b44be90b8c62096e32e851ad636eef906fde3 100644 (file)
@@ -29,6 +29,7 @@ val universe_leq: NCic.universe -> NCic.universe -> bool
    true -> strict check (<); false -> loose check (<=)
 *)
 val add_constraint: bool -> NCic.universe -> NCic.universe -> unit
+val sup : NCic.universe -> NCic.universe option
 val pp_constraints: unit -> string
 
 val get_checked_def:
index 42a02ebf19445f9c6a7685c7f5caeadde71815b7..863921720bc47e2d2d09c331facf3b38eeda5e80 100644 (file)
@@ -4,5 +4,5 @@ nCicMetaSubst.cmo: nCicMetaSubst.cmi
 nCicMetaSubst.cmx: nCicMetaSubst.cmi 
 nCicUnification.cmo: nCicMetaSubst.cmi nCicUnification.cmi 
 nCicUnification.cmx: nCicMetaSubst.cmx nCicUnification.cmi 
-nCicRefiner.cmo: nCicRefiner.cmi 
-nCicRefiner.cmx: nCicRefiner.cmi 
+nCicRefiner.cmo: nCicUnification.cmi nCicMetaSubst.cmi nCicRefiner.cmi 
+nCicRefiner.cmx: nCicUnification.cmx nCicMetaSubst.cmx nCicRefiner.cmi 
index 3b951bec268157e8903d1c8d81364a82c9a16c4f..bc22a21608c1042ea20cbe3cd4d6bf582097056e 100644 (file)
@@ -169,6 +169,17 @@ let _ =
   in
   prerr_endline "ranked....";
   prerr_endline (NCicEnvironment.pp_constraints ());
+(*
+  let [_,type0_uri] = mk_type 0 in
+  let [_,type1_uri] = mk_type 1 in
+  let [_,type2_uri] = mk_type 2 in
+  prerr_endline 
+   ("Min:" ^ 
+   (match NCicEnvironment.sup [true,type0_uri;true,type2_uri] with
+       | None -> "NO SUP"
+       | Some t -> NCicPp.ppterm ~metasenv:[] ~subst:[] ~context:[] 
+          (NCic.Sort (NCic.Type t))));
+*)
   HExtlib.profiling_enabled := false;
   List.iter (fun uu ->
     let uu= OCic2NCic.nuri_of_ouri uu in
index 10eff13b41734ae7b192c0d3b3408139c3fc8090..253af6f37cdec2cefea9deed14191e7e166f2346 100644 (file)
@@ -94,29 +94,33 @@ let check_allowed_sort_elimination localise r orig =
    let rec aux metasenv subst context ind arity1 arity2 =
      (*D*)inside 'S'; try let rc = 
      let arity1 = NCicReduction.whd ~subst context arity1 in
+     pp (lazy(NCicPp.ppterm ~subst ~metasenv ~context arity1 ^ " ... " ^
+        NCicPp.ppterm ~subst ~metasenv ~context arity2 ^ "\nNEV:"^
+NCicPp.ppmetasenv ~subst metasenv
+));
      match arity1 with
      | C.Prod (name,so1,de1) (* , t ==?== C.Prod _ *) ->
         let metasenv, meta, _ = 
-          NCicMetaSubst.mk_meta metasenv ((name,C.Decl so1)::context) `Typeless 
+          NCicMetaSubst.mk_meta metasenv ((name,C.Decl so1)::context) `Type 
         in
         let metasenv, subst = 
           try NCicUnification.unify metasenv subst context 
-                (C.Prod (name, so1, meta)) arity2 
+                arity2 (C.Prod (name, so1, meta)) 
           with exc -> raise (wrap_exc (lazy (localise orig, Printf.sprintf
             "expected %s, found %s" (* XXX localizzare meglio *)
-            (NCicPp.ppterm ~subst ~metasenv ~context arity1)
+            (NCicPp.ppterm ~subst ~metasenv ~context (C.Prod (name, so1, meta)))
             (NCicPp.ppterm ~subst ~metasenv ~context arity2))) exc)
         in
         aux metasenv subst ((name, C.Decl so1)::context)
          (mkapp (NCicSubstitution.lift 1 ind) (C.Rel 1)) de1 meta
      | C.Sort _ (* , t ==?== C.Prod _ *) ->
-        let metasenv, meta, _ = NCicMetaSubst.mk_meta metasenv [] `Typeless in
+        let metasenv, meta, _ = NCicMetaSubst.mk_meta metasenv [] `Type in
         let metasenv, subst = 
           try NCicUnification.unify metasenv subst context 
-                (C.Prod ("_", ind, meta)) arity2 
+                arity2 (C.Prod ("_", ind, meta)) 
           with exc -> raise (wrap_exc (lazy (localise orig, Printf.sprintf
             "expected %s, found %s" (* XXX localizzare meglio *)
-            (NCicPp.ppterm ~subst ~metasenv ~context arity1)
+            (NCicPp.ppterm ~subst ~metasenv ~context (C.Prod ("_", ind, meta)))
             (NCicPp.ppterm ~subst ~metasenv ~context arity2))) exc)
         in
         (try NCicTypeChecker.check_allowed_sort_elimination
index 24ab7b4afbf1129cafb2d0462a169bf26ca42913..d3c86d2816c2c9bd050bbe1b336d033d95e4c8dd 100644 (file)
@@ -72,13 +72,23 @@ let indent = ref "";;
 let inside c = indent := !indent ^ String.make 1 c;;
 let outside () = indent := String.sub !indent 0 (String.length !indent -1);;
 
-(*
 let pp s = 
   prerr_endline (Printf.sprintf "%-20s" !indent ^ " " ^ Lazy.force s)
 ;;  
-*)
 
-let pp _ = ();;
+(* let pp _ = ();; *)
+
+let fix_sorts metasenv subst context meta t =
+  let rec aux () = function
+    | NCic.Sort (NCic.Type u) as orig ->
+       (match NCicEnvironment.sup u with
+       | None ->  raise (fail_exc metasenv subst context meta t)
+       | Some u1 -> if u = u1 then orig else NCic.Sort (NCic.Type u1))
+    | NCic.Meta _ as orig -> orig
+    | t -> NCicUtils.map (fun _ _ -> ()) () aux t
+  in
+    aux () t
+;;
 
 let rec beta_expand num test_eq_only swap metasenv subst context t arg =
   let rec aux (n,context,test_eq_only as k) (metasenv, subst as acc) t' =
@@ -142,28 +152,44 @@ and beta_expand_many test_equality_only swap metasenv subst context t args =
 (* (*D*)  in outside (); rc with exn -> outside (); raise exn *)
 
 and instantiate test_eq_only metasenv subst context n lc t swap =
-(* (*D*)  inside 'I'; try let rc =  *)
+ (*D*)  inside 'I'; try let rc =  
   let unify test_eq_only m s c t1 t2 = 
     if swap then unify test_eq_only m s c t2 t1 
     else unify test_eq_only m s c t1 t2
   in
+  let fix_sorts t = 
+    if swap then fix_sorts metasenv subst context (NCic.Meta (n,lc)) t
+    else 
+      NCic.Sort (NCic.Type (
+        match NCicEnvironment.sup NCicEnvironment.type0 with Some x ->x| _ ->
+                assert false))
+  in
   let name, ctx, ty = NCicUtils.lookup_meta n metasenv in
-  let metasenv, subst = 
+  let metasenv, subst, t = 
     match ty with 
-    | NCic.Implicit (`Typeof _) -> metasenv, subst
+    | NCic.Implicit (`Typeof _) -> metasenv, subst, fix_sorts t
     | _ ->
-       let lty = NCicSubstitution.subst_meta lc ty in
-       let ty_t = 
-         try NCicTypeChecker.typeof ~subst ~metasenv context t 
-         with NCicTypeChecker.TypeCheckerFailure msg -> 
-           prerr_endline (NCicPp.ppterm ~metasenv ~subst ~context t);
-           prerr_endline (Lazy.force msg);
-           assert false
+       pp (lazy ("typeof: " ^ NCicPp.ppterm ~metasenv ~subst ~context t));
+       let t, ty_t = 
+         try t, NCicTypeChecker.typeof ~subst ~metasenv context t 
+         with NCicTypeChecker.TypeCheckerFailure _ -> 
+           let ft = fix_sorts t in
+           if ft == t then assert false else
+            try 
+              pp (lazy ("typeof: " ^ 
+                NCicPp.ppterm ~metasenv ~subst ~context ft));
+              ft, NCicTypeChecker.typeof ~subst ~metasenv context ft 
+            with NCicTypeChecker.TypeCheckerFailure msg -> 
+              prerr_endline (NCicPp.ppterm ~metasenv ~subst ~context ft);
+              prerr_endline (Lazy.force msg);
+              assert false
        in
+       let lty = NCicSubstitution.subst_meta lc ty in
        pp (lazy("On the types: " ^
         NCicPp.ppterm ~metasenv ~subst ~context lty ^ " === "
          ^ NCicPp.ppterm ~metasenv ~subst ~context ty_t)); 
-       unify test_eq_only metasenv subst context lty ty_t 
+       let metasenv,subst= unify test_eq_only metasenv subst context lty ty_t in
+       metasenv, subst, t
   in
   let (metasenv, subst), t = 
     try NCicMetaSubst.delift metasenv subst context n lc t
@@ -187,16 +213,14 @@ and instantiate test_eq_only metasenv subst context n lc t swap =
       List.filter (fun (m,_) -> not (n = m)) metasenv 
     in
     metasenv, subst
-(* (*D*)  in outside(); rc with exn -> outside (); raise exn *)
+ (*D*)  in outside(); rc with exn -> outside (); raise exn 
 
 and unify test_eq_only metasenv subst context t1 t2 =
-(* (*D*) inside 'U'; try let rc = *)
+ (*D*) inside 'U'; try let rc = 
    let fo_unif test_eq_only metasenv subst t1 t2 =
-(*    (*D*) inside 'F'; try let rc =  *)
-(*
+    (*D*) inside 'F'; try let rc =  
      pp (lazy("  " ^ NCicPp.ppterm ~metasenv ~subst ~context t1 ^ " === " ^ 
          NCicPp.ppterm ~metasenv ~subst ~context t2));
-*)
      if t1 === t2 then
        metasenv, subst
      else
@@ -380,7 +404,7 @@ and unify test_eq_only metasenv subst context t1 t2 =
                raise (uncert_exc metasenv subst context t1 t2))
        | (C.Implicit _, _) | (_, C.Implicit _) -> assert false
        | _ -> raise (uncert_exc metasenv subst context t1 t2)
-(*     (*D*)  in outside(); rc with exn -> outside (); raise exn *)
+     (*D*)  in outside(); rc with exn -> outside (); raise exn 
     in
     let height_of = function
      | NCic.Const (Ref.Ref (_,Ref.Def h)) 
@@ -411,7 +435,7 @@ and unify test_eq_only metasenv subst context t1 t2 =
     let rec unif_machines metasenv subst = 
       function
       | ((k1,e1,t1,s1),norm1 as m1),((k2,e2,t2,s2),norm2 as m2) ->
-(*     (*D*) inside 'M'; try let rc = *)
+     (*D*) inside 'M'; try let rc = 
 (*
          pp (lazy((if are_normal then "*" else " ") ^ " " ^
            NCicPp.ppterm ~metasenv ~subst ~context (NCicReduction.unwind m1) ^
@@ -446,7 +470,7 @@ and unify test_eq_only metasenv subst context t1 t2 =
         try check_stack (List.rev s1) (List.rev s2) relevance (metasenv,subst)
         with UnificationFailure _ | Uncertain _ when not (norm1 && norm2) ->
            unif_machines metasenv subst (small_delta_step m1 m2)
-(*      (*D*)  in outside(); rc with exn -> outside (); raise exn *)
+      (*D*)  in outside(); rc with exn -> outside (); raise exn 
      in
      try fo_unif test_eq_only metasenv subst t1 t2
      with UnificationFailure msg | Uncertain msg as exn -> 
@@ -456,7 +480,7 @@ and unify test_eq_only metasenv subst context t1 t2 =
        with 
        | UnificationFailure _ -> raise (UnificationFailure msg)
        | Uncertain _ -> raise exn
-(* (*D*)  in outside(); rc with exn -> outside (); raise exn *)
+ (*D*)  in outside(); rc with exn -> outside (); raise exn 
 ;;
 
 let unify = 
index 0bc8a32255cde1804c708a588c4f25f772215ed6..e724dc2e6ba4b7613b011973f483f89109096b63 100644 (file)
@@ -36,7 +36,7 @@ record ordered_uniform_space : Type ≝ {
   ous_stuff :> ordered_uniform_space_;
   ous_convex: ∀U.us_unifbase ous_stuff U → convex ous_stuff U
 }.   
-
+(*
 definition Type_of_ordered_uniform_space : ordered_uniform_space → Type.
 intro; compose ordered_set_OF_ordered_uniform_space with os_l.
 apply (hos_carr (f o));
@@ -47,9 +47,9 @@ intro; compose ordered_set_OF_ordered_uniform_space with os_r.
 apply (hos_carr (f o));
 qed.
 
-coercion Type_of_ordered_uniform_space.
 coercion Type_of_ordered_uniform_space_dual.
-
+coercion Type_of_ordered_uniform_space.
+*)
 definition half_ordered_set_OF_ordered_uniform_space : ordered_uniform_space → half_ordered_set.
 intro; compose ordered_set_OF_ordered_uniform_space with os_l. apply (f o);
 qed.
@@ -143,39 +143,39 @@ intros (O l r); apply mk_ordered_uniform_space;
         [1: intros (U H); intro x; simplify; 
             cases H (w Hw); cases Hw (Gw Hwp); clear H Hw; intro Hm;
             lapply (us_phi1 O w Gw x Hm) as IH;
-            apply (restrict ? l r ??? Hwp IH); STOP
+            apply (restrict ? l r ??? Hwp IH); 
         |2: intros (U V HU HV); cases HU (u Hu); cases HV (v Hv); clear HU HV;
             cases Hu (Gu HuU); cases Hv (Gv HvV); clear Hu Hv;
-            cases (us_phi2 ??? Gu Gv) (w HW); cases HW (Gw Hw); clear HW;
-            exists; [apply (λb:{[l,r]} square.w b)] split;
+            cases (us_phi2 O u v Gu Gv) (w HW); cases HW (Gw Hw); clear HW;
+            exists; [apply (λb:{[l,r]} squareB.w b)] split;
             [1: unfold f; simplify; clearbody f;
                 exists; [apply w]; split; [assumption] intro b; simplify;
                 unfold segment_square_of_ordered_set_square;
                 cases b; intros; split; intros; assumption;
             |2: intros 2 (x Hx); cases (Hw ? Hx); split;
-                [apply (restrict ?????? HuU H)|apply (restrict ?????? HvV H1);]]
+                [apply (restrict O l r ??? HuU H)|apply (restrict O l r ??? HvV H1);]]
         |3: intros (U Hu); cases Hu (u HU); cases HU (Gu HuU); clear Hu HU;
-            cases (us_phi3 ?? Gu) (w HW); cases HW (Gw Hwu); clear HW;
-            exists; [apply (λx:{[l,r]} square.w x)] split;
+            cases (us_phi3 O u Gu) (w HW); cases HW (Gw Hwu); clear HW;
+            exists; [apply (λx:{[l,r]} squareB.w x)] split;
             [1: exists;[apply w];split;[assumption] intros; simplify; intro;
                 unfold segment_square_of_ordered_set_square;
                 cases b; intros; split; intro; assumption;
-            |2: intros 2 (x Hx); apply (restrict ?????? HuU); apply Hwu; 
+            |2: intros 2 (x Hx); apply (restrict O l r ??? HuU); apply Hwu; 
                 cases Hx (m Hm); exists[apply (\fst m)] apply Hm;]
         |4: intros (U HU x); cases HU (u Hu); cases Hu (Gu HuU); clear HU Hu;
-            cases (us_phi4 ?? Gu x) (Hul Hur);
+            cases (us_phi4 O u Gu x) (Hul Hur);
             split; intros; 
-            [1: lapply (invert_restriction_agreement ????? HuU) as Ra;
-                apply (restrict ????? x Ra);
-                apply Hul; apply (unrestrict ?????? HuU H);
-            |2: apply (restrict ?????? HuU); apply Hur; 
-                apply (unrestrict ?????? (invert_restriction_agreement ????? HuU) H);]]
+            [1: lapply (invert_restriction_agreement O l r ?? HuU) as Ra;
+                apply (restrict O l r ?? x Ra);
+                apply Hul; apply (unrestrict O l r ??? HuU H);
+            |2: apply (restrict O l r ??? HuU); apply Hur; 
+                apply (unrestrict O l r ??? (invert_restriction_agreement O l r ?? HuU) H);]]
     |2: simplify; reflexivity;]
 |2: simplify; unfold convex; intros;
     cases H (u HU); cases HU (Gu HuU); clear HU H; 
-    lapply (ous_convex ?? Gu (bs_of_ss ? l r p) ? H2 (bs_of_ss ? l r y) H3) as Cu;
-    [1: apply (unrestrict ?????? HuU); apply H1;
-    |2: apply (restrict ?????? HuU Cu);]]
+    lapply (ous_convex ?? Gu p ? H2 y H3) as Cu;
+    [1: apply (unrestrict O l r ??? HuU); apply H1;
+    |2: apply (restrict O l r ??? HuU Cu);]]
 qed.
 
 interpretation "Ordered uniform space segment" 'segment_set a b = 
@@ -185,9 +185,10 @@ interpretation "Ordered uniform space segment" 'segment_set a b =
 alias symbol "pi1" = "exT \fst".
 lemma restric_uniform_convergence:
  ∀O:ordered_uniform_space.∀l,u:O.
-  ∀x:{[l,u]}.
-   ∀a:sequence {[l,u]}.
-     ⌊n,\fst (a n)⌋ uniform_converges (\fst x) → 
+  ∀x:(segment_ordered_uniform_space O l u).
+   ∀a:sequence (segment_ordered_uniform_space O l u).
+     uniform_converge (segment_ordered_uniform_space O l u) 
+     (mk_seq O (λn:nat.\fst (a n))) (\fst x) → True. 
       a uniform_converges x.
 intros 8; cases H1; cases H2; clear H2 H1;
 cases (H ? H3) (m Hm); exists [apply m]; intros; 
index bcf68a660897f4888c8bd2830009db88408cecf1..ae3231d916de92f1151bec2d1096d3882ce48d74 100644 (file)
@@ -1,6 +1,6 @@
+Z/times.ma Z/plus.ma nat/lt_arith.ma
 list/sort.ma datatypes/bool.ma datatypes/constructors.ma list/in.ma
 list/list.ma datatypes/bool.ma higher_order_defs/functions.ma logic/equality.ma nat/nat.ma nat/orders.ma nat/plus.ma
-Z/times.ma Z/plus.ma nat/lt_arith.ma
 nat/factorial.ma nat/le_arith.ma
 nat/sigma_and_pi.ma nat/exp.ma nat/factorial.ma nat/lt_arith.ma
 nat/compare.ma datatypes/bool.ma datatypes/compare.ma nat/orders.ma
@@ -8,41 +8,41 @@ nat/neper.ma nat/binomial.ma nat/chebyshev.ma nat/div_and_mod_diseq.ma nat/itera
 Q/ratio/rtimes.ma Q/fraction/ftimes.ma Q/ratio/rinv.ma
 nat/lt_arith.ma nat/div_and_mod.ma
 nat/exp.ma nat/div_and_mod.ma nat/lt_arith.ma
+nat/binomial.ma nat/factorial2.ma nat/iteration2.ma
 Q/q/qtimes.ma Q/q/qinv.ma Q/ratio/rtimes.ma
 nat/euler_theorem.ma nat/map_iter_p.ma nat/nat.ma nat/totient.ma
-nat/binomial.ma nat/factorial2.ma nat/iteration2.ma
 Z/orders.ma Z/z.ma nat/orders.ma
 datatypes/subsets.ma datatypes/categories.ma logic/cprop_connectives.ma
-nat/factorization2.ma list/list.ma nat/factorization.ma nat/sieve.ma
 logic/connectives2.ma higher_order_defs/relations.ma
+nat/factorization2.ma list/list.ma nat/factorization.ma nat/sieve.ma
 Q/ratio/rinv.ma Q/fraction/finv.ma Q/ratio/ratio.ma
 nat/o.ma nat/binomial.ma nat/sqrt.ma
-Q/q/qinv.ma Q/q/q.ma Q/ratio/rinv.ma
 nat/permutation.ma nat/compare.ma nat/sigma_and_pi.ma
-Q/fraction/fraction.ma Z/compare.ma nat/factorization.ma
+Q/q/qinv.ma Q/q/q.ma Q/ratio/rinv.ma
 nat/plus.ma nat/nat.ma
+Q/fraction/fraction.ma Z/compare.ma nat/factorization.ma
 formal_topology/saturations_reductions.ma datatypes/subsets.ma
 algebra/finite_groups.ma algebra/groups.ma nat/relevant_equations.ma
 Z/dirichlet_product.ma Z/sigma_p.ma Z/times.ma nat/primes.ma
 datatypes/categories.ma logic/cprop_connectives.ma
 nat/chinese_reminder.ma nat/congruence.ma nat/exp.ma nat/gcd.ma nat/permutation.ma
 nat/fermat_little_theorem.ma nat/congruence.ma nat/exp.ma nat/gcd.ma nat/permutation.ma
-higher_order_defs/ordering.ma logic/equality.ma
-nat/count.ma nat/permutation.ma nat/relevant_equations.ma nat/sigma_and_pi.ma
 nat/div_and_mod.ma datatypes/constructors.ma nat/minus.ma
-Q/q.ma Q/fraction/fraction.ma Z/compare.ma Z/plus.ma nat/factorization.ma
+nat/count.ma nat/permutation.ma nat/relevant_equations.ma nat/sigma_and_pi.ma
+higher_order_defs/ordering.ma logic/equality.ma
 datatypes/constructors.ma logic/equality.ma
+Q/q.ma Q/fraction/fraction.ma Z/compare.ma Z/plus.ma nat/factorization.ma
 Z/compare.ma Z/orders.ma nat/compare.ma
-Q/fraction/numerator_denominator.ma Q/fraction/finv.ma
 Q/q/q.ma Q/fraction/numerator_denominator.ma Q/ratio/ratio.ma
+Q/fraction/numerator_denominator.ma Q/fraction/finv.ma
 nat/log.ma datatypes/constructors.ma nat/div_and_mod_diseq.ma nat/iteration2.ma nat/minimization.ma nat/primes.ma nat/relevant_equations.ma
-decidable_kit/list_aux.ma decidable_kit/eqtype.ma list/list.ma nat/plus.ma
-Q/ratio/ratio.ma Q/fraction/fraction.ma
 datatypes/bool.ma higher_order_defs/functions.ma logic/equality.ma
-nat/div_and_mod_diseq.ma nat/lt_arith.ma
 nat/chebyshev_teta.ma nat/binomial.ma nat/pi_p.ma
-technicalities/setoids.ma datatypes/constructors.ma logic/coimplication.ma logic/connectives2.ma
+Q/ratio/ratio.ma Q/fraction/fraction.ma
+nat/div_and_mod_diseq.ma nat/lt_arith.ma
+decidable_kit/list_aux.ma decidable_kit/eqtype.ma list/list.ma nat/plus.ma
 logic/connectives.ma 
+technicalities/setoids.ma datatypes/constructors.ma logic/coimplication.ma logic/connectives2.ma
 datatypes/compare.ma 
 nat/orders.ma higher_order_defs/ordering.ma logic/connectives.ma nat/nat.ma
 nat/sqrt.ma nat/compare.ma nat/log.ma nat/times.ma
@@ -50,60 +50,60 @@ nat/relevant_equations.ma nat/gcd.ma nat/minus.ma nat/times.ma
 nat/factorial2.ma nat/exp.ma nat/factorial.ma
 nat/chebyshev_thm.ma nat/neper.ma
 algebra/groups.ma algebra/monoids.ma datatypes/bool.ma logic/connectives.ma nat/compare.ma nat/le_arith.ma
-nat/gcd_properties1.ma nat/gcd.ma
 demo/power_derivative.ma nat/compare.ma nat/nat.ma nat/orders.ma nat/plus.ma
+nat/gcd_properties1.ma nat/gcd.ma
 nat/minimization.ma nat/minus.ma
 decidable_kit/fgraph.ma decidable_kit/fintype.ma
-formal_topology/formal_topologies.ma formal_topology/basic_topologies.ma
 formal_topology/relations.ma datatypes/subsets.ma
+formal_topology/formal_topologies.ma formal_topology/basic_topologies.ma
 Q/fraction/finv.ma Q/fraction/fraction.ma Z/plus.ma
 Z/plus.ma Z/z.ma nat/minus.ma
-Q/Qaxioms.ma Z/compare.ma Z/times.ma nat/iteration2.ma
-nat/generic_iter_p.ma nat/div_and_mod_diseq.ma nat/ord.ma nat/primes.ma
 nat/minus.ma nat/compare.ma nat/le_arith.ma
-formal_topology/concrete_spaces.ma formal_topology/basic_pairs.ma
+nat/generic_iter_p.ma nat/div_and_mod_diseq.ma nat/ord.ma nat/primes.ma
+Q/Qaxioms.ma Z/compare.ma Z/times.ma nat/iteration2.ma
 Z/z.ma datatypes/bool.ma nat/nat.ma
+formal_topology/concrete_spaces.ma formal_topology/basic_pairs.ma
 decidable_kit/streicher.ma logic/connectives.ma logic/equality.ma
 nat/ord.ma datatypes/constructors.ma nat/exp.ma nat/gcd.ma nat/nth_prime.ma nat/relevant_equations.ma
 nat/map_iter_p.ma nat/count.ma nat/permutation.ma
-decidable_kit/eqtype.ma datatypes/constructors.ma decidable_kit/decidable.ma
 demo/realisability.ma datatypes/constructors.ma logic/connectives.ma
 nat/totient1.ma nat/compare.ma nat/gcd_properties1.ma nat/iteration2.ma nat/totient.ma
+decidable_kit/eqtype.ma datatypes/constructors.ma decidable_kit/decidable.ma
 nat/gcd.ma nat/lt_arith.ma nat/primes.ma
 nat/factorization.ma nat/ord.ma
-decidable_kit/fintype.ma decidable_kit/eqtype.ma decidable_kit/list_aux.ma
 algebra/monoids.ma algebra/semigroups.ma
-logic/coimplication.ma logic/connectives.ma
 demo/propositional_sequent_calculus.ma datatypes/constructors.ma list/sort.ma nat/compare.ma nat/plus.ma
-higher_order_defs/functions.ma logic/equality.ma
+logic/coimplication.ma logic/connectives.ma
+decidable_kit/fintype.ma decidable_kit/eqtype.ma decidable_kit/list_aux.ma
 logic/equality.ma higher_order_defs/relations.ma logic/connectives.ma
+higher_order_defs/functions.ma logic/equality.ma
 algebra/semigroups.ma higher_order_defs/functions.ma
-Q/nat_fact/times.ma nat/factorization.ma
-nat/pi_p.ma nat/generic_iter_p.ma nat/iteration2.ma nat/primes.ma
 nat/sieve.ma list/sort.ma nat/primes.ma
+nat/pi_p.ma nat/generic_iter_p.ma nat/iteration2.ma nat/primes.ma
+Q/nat_fact/times.ma nat/factorization.ma
 nat/totient.ma nat/chinese_reminder.ma nat/iteration2.ma
-higher_order_defs/relations.ma logic/connectives.ma
-nat/primes.ma logic/connectives.ma nat/div_and_mod.ma nat/factorial.ma nat/minimization.ma nat/sigma_and_pi.ma
 logic/cprop_connectives.ma logic/connectives.ma
+nat/primes.ma logic/connectives.ma nat/div_and_mod.ma nat/factorial.ma nat/minimization.ma nat/sigma_and_pi.ma
+higher_order_defs/relations.ma logic/connectives.ma
 demo/toolbox.ma logic/cprop_connectives.ma
-Q/inv.ma Q/q/q.ma Q/fraction/finv.ma Q/q.ma
 demo/natural_deduction.ma 
+Q/inv.ma Q/q/q.ma Q/fraction/finv.ma Q/q.ma
 decidable_kit/decidable.ma datatypes/bool.ma decidable_kit/streicher.ma logic/connectives.ma nat/compare.ma
 Z/moebius.ma Z/sigma_p.ma nat/factorization.ma
 Z/inversion.ma Z/dirichlet_product.ma Z/moebius.ma
-Q/frac.ma Q/q/q.ma Q/q/qinv.ma nat/nat.ma nat/factorization.ma
 Q/fraction/ftimes.ma Q/fraction/finv.ma Q/nat_fact/times.ma Q/ratio/ratio.ma Z/times.ma
 Q/q/qplus.ma nat/factorization.ma
+Q/frac.ma Q/q/q.ma Q/q/qinv.ma nat/nat.ma nat/factorization.ma
 Z/sigma_p.ma Z/plus.ma Z/times.ma nat/generic_iter_p.ma nat/ord.ma nat/primes.ma
 nat/bertrand.ma list/in.ma list/sort.ma nat/chebyshev.ma nat/chebyshev_teta.ma nat/o.ma nat/sieve.ma nat/sqrt.ma
 nat/nat.ma higher_order_defs/functions.ma
 formal_topology/basic_topologies.ma datatypes/categories.ma formal_topology/relations.ma formal_topology/saturations_reductions.ma
 nat/chebyshev.ma nat/o.ma nat/factorial2.ma nat/factorization.ma nat/log.ma nat/pi_p.ma
+demo/formal_topology.ma logic/cprop_connectives.ma logic/equality.ma
 nat/congruence.ma nat/primes.ma nat/relevant_equations.ma
 nat/le_arith.ma nat/orders.ma nat/times.ma
-demo/formal_topology.ma logic/cprop_connectives.ma logic/equality.ma
 nat/times.ma nat/plus.ma
 formal_topology/basic_pairs.ma datatypes/categories.ma formal_topology/relations.ma
 list/in.ma datatypes/bool.ma datatypes/constructors.ma list/list.ma
-nat/iteration2.ma nat/count.ma nat/generic_iter_p.ma nat/ord.ma nat/primes.ma
 nat/nth_prime.ma nat/lt_arith.ma nat/primes.ma
+nat/iteration2.ma nat/count.ma nat/generic_iter_p.ma nat/ord.ma nat/primes.ma