let xxx_type_of_aux' m c t =
try
- Some (fst (CicTypeChecker.type_of_aux' m c t CicUniv.empty_ugraph))
+ Some (fst (CicTypeChecker.type_of_aux' m c t CicUniv.oblivion_ugraph))
with
| CicTypeChecker.TypeCheckerFailure _ -> None (* because eta_expansion *)
;;
let module R = CicReduction in
let module U = UriManager in
let cobj =
- match CicEnvironment.is_type_checked CicUniv.empty_ugraph uri with
+ match CicEnvironment.is_type_checked CicUniv.oblivion_ugraph uri with
CicEnvironment.CheckedObj (cobj,_) -> cobj
- | CicEnvironment.UncheckedObj uobj ->
+ | CicEnvironment.UncheckedObj (uobj,_) ->
raise (NotWellTyped "Reference to an unchecked constant")
in
match cobj with
let module C = Cic in
let module R = CicReduction in
let module U = UriManager in
- match CicEnvironment.is_type_checked CicUniv.empty_ugraph uri with
+ match CicEnvironment.is_type_checked CicUniv.oblivion_ugraph uri with
CicEnvironment.CheckedObj ((C.Variable (_,_,ty,_,_)),_) -> ty
- | CicEnvironment.UncheckedObj (C.Variable _) ->
+ | CicEnvironment.UncheckedObj (C.Variable _,_) ->
raise (NotWellTyped "Reference to an unchecked variable")
| _ -> raise (WrongUriToVariable (UriManager.string_of_uri uri))
;;
let module R = CicReduction in
let module U = UriManager in
let cobj =
- match CicEnvironment.is_type_checked CicUniv.empty_ugraph uri with
+ match CicEnvironment.is_type_checked CicUniv.oblivion_ugraph uri with
CicEnvironment.CheckedObj (cobj,_) -> cobj
- | CicEnvironment.UncheckedObj uobj ->
+ | CicEnvironment.UncheckedObj (uobj,_) ->
raise (NotWellTyped "Reference to an unchecked inductive type")
in
match cobj with
let module R = CicReduction in
let module U = UriManager in
let cobj =
- match CicEnvironment.is_type_checked CicUniv.empty_ugraph uri with
+ match CicEnvironment.is_type_checked CicUniv.oblivion_ugraph uri with
CicEnvironment.CheckedObj (cobj,_) -> cobj
- | CicEnvironment.UncheckedObj uobj ->
+ | CicEnvironment.UncheckedObj (uobj,_) ->
raise (NotWellTyped "Reference to an unchecked constructor")
in
match cobj with
| C.Lambda (n,s,t) ->
(* Let's visit all the subterms that will not be visited later *)
let _ = type_of_aux context s None in
- let expected_target_type =
+ let n, expected_target_type =
match expectedty with
- None -> None
+ | None -> n, None
| Some expectedty' ->
- let ty =
+ let n, ty =
match R.whd context expectedty' with
- C.Prod (_,_,expected_target_type) ->
- beta_reduce expected_target_type
+ | C.Prod (n',_,expected_target_type) ->
+ let xtt = beta_reduce expected_target_type in
+ if n <> C.Anonymous then n, xtt else n', xtt
| _ -> assert false
in
- Some ty
+ n, Some ty
in
let type2 =
type_of_aux ((Some (n,(C.Decl s)))::context) t expected_target_type
let (cl,parsno) =
let obj,_ =
try
- CicEnvironment.get_cooked_obj CicUniv.empty_ugraph uri
+ CicEnvironment.get_cooked_obj CicUniv.oblivion_ugraph uri
with Not_found -> assert false
in
match obj with
let uris_and_types =
let obj,_ =
try
- CicEnvironment.get_cooked_obj CicUniv.empty_ugraph uri
+ CicEnvironment.get_cooked_obj CicUniv.oblivion_ugraph uri
with Not_found -> assert false
in
let params = CicUtil.params_of_obj obj in
(function uri ->
let obj,_ =
try
- CicEnvironment.get_cooked_obj CicUniv.empty_ugraph uri
+ CicEnvironment.get_cooked_obj CicUniv.oblivion_ugraph uri
with Not_found -> assert false
in
match obj with
let t1' = CicReduction.whd context t1 in
let t2' = CicReduction.whd ((Some (name,C.Decl s))::context) t2 in
match (t1', t2') with
- (C.Sort _, C.Sort s2)
- when (s2 = C.Prop or s2 = C.Set or s2 = C.CProp) ->
- (* different from Coq manual!!! *)
- C.Sort s2
- | (C.Sort (C.Type t1), C.Sort (C.Type t2)) ->
- C.Sort (C.Type (CicUniv.fresh()))
- | (C.Sort _,C.Sort (C.Type t1)) ->
- (* TASSI: CONSRTAINTS: the same in cictypechecker,cicrefine *)
- C.Sort (C.Type t1) (* c'e' bisogno di un fresh? *)
+ | (C.Sort _, C.Sort s2) when (s2 = C.Prop || s2 = C.Set) -> C.Sort s2
+ | (C.Sort (C.Type t1), C.Sort (C.Type t2)) ->C.Sort(C.Type(CicUniv.fresh()))
+ | (C.Sort _,C.Sort (C.Type t1)) -> C.Sort (C.Type t1)
+ | (C.Sort _,C.Sort (C.CProp t1)) -> C.Sort (C.CProp t1)
| (C.Meta _, C.Sort _) -> t2'
| (C.Meta _, (C.Meta (_,_) as t))
| (C.Sort _, (C.Meta (_,_) as t)) when CicUtil.is_closed t ->