X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_kernel%2FnCicEnvironment.ml;h=0ddd3601db02f4502f0cc0d9780adaff6b74584a;hb=ff52cc33b36594d156f8c7d4351ffe0a34730b62;hp=57f130546d9ed4c5a663e88119fba719d6df2e7f;hpb=d3ce67da8c0fc8dc010cb99fb4700e5b803a7c89;p=helm.git diff --git a/helm/software/components/ng_kernel/nCicEnvironment.ml b/helm/software/components/ng_kernel/nCicEnvironment.ml index 57f130546..0ddd3601d 100644 --- a/helm/software/components/ng_kernel/nCicEnvironment.ml +++ b/helm/software/components/ng_kernel/nCicEnvironment.ml @@ -43,17 +43,47 @@ let universe_leq a b = let universe_eq a b = universe_leq b a && universe_leq a b +let pp_constraint b x y = + NUri.name_of_uri x ^ (if b then " < " else " <= ") ^ NUri.name_of_uri y +;; + +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] -> if not (le_path_uri [] strict a2 b2) then ( if le_path_uri [] (not strict) b2 a2 then - (raise (BadConstraint (lazy "universe inconsistency"))); + (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