if delta > height then config else
let _,_,body,_,_,_ = NCicEnvironment.get_checked_def refer in
aux (0, [], body, s)
+ | (_, _, NCic.Const (NReference.Ref (_,_,
+ (NReference.Decl|NReference.Ind _|NReference.Con _|NReference.CoFix _))), _) as config -> config
| (_, _, NCic.Const (NReference.Ref
(height,_,NReference.Fix (fixno,recindex)) as refer),s) as config ->
if delta > height then config else
let _,_,_,_,body = List.nth fixes fixno in
aux (0, [], body, new_s)
| _ -> config)
- | (_, _, NCic.Const _, _) as config -> config
| (k, e, NCic.Match (_,_,term,pl),s) as config ->
let decofix = function
| (_,_,NCic.Const(NReference.Ref(_,_,NReference.CoFix c)as refer),s)->
module C = NCic
(* t1, t2 must be well-typed *)
-let are_convertible whd ?(subst=[]) ?(metasenv=[]) =
+let are_convertible whd ?(subst=[]) =
let rec aux test_equality_only context t1 t2 =
let rec aux2 test_equality_only t1 t2 =
if t1 === t2 then
prerr_endline (PP.ppterm ~subst ~metasenv ~context
(S.subst ~avoid_beta_redexes:true arg t));
*)
- if R.are_convertible ~subst ~metasenv context ty_arg s then
+ if R.are_convertible ~subst context ty_arg s then
aux (S.subst ~avoid_beta_redexes:true arg t) tl
else
raise
| C.LetIn (n,ty,t,bo) ->
let ty_t = typeof_aux context t in
let _ = typeof_aux context ty in
- if not (R.are_convertible ~subst ~metasenv context ty ty_t) then
+ if not (R.are_convertible ~subst context ty ty_t) then
raise
(TypeCheckerFailure
(lazy (Printf.sprintf
let ty_branch =
type_of_branch ~subst context leftno outtype cons ty_cons 0
in
- j+1, R.are_convertible ~subst ~metasenv context ty_p ty_branch,
+ j+1, R.are_convertible ~subst context ty_p ty_branch,
ty_p, ty_branch
else
j,false,old_p_ty,old_exp_p_ty
(_,C.Decl t1), (_,C.Decl t2)
| (_,C.Def (t1,_)), (_,C.Def (t2,_))
| (_,C.Def (_,t1)), (_,C.Decl t2) ->
- if not (R.are_convertible ~subst ~metasenv tl t1 t2) then
+ if not (R.are_convertible ~subst tl t1 t2) then
raise
(TypeCheckerFailure
(lazy (Printf.sprintf
with Failure _ -> t)
| _ -> t
in
- if not (R.are_convertible ~subst ~metasenv context optimized_t ct)
+ if not (R.are_convertible ~subst context optimized_t ct)
then
raise
(TypeCheckerFailure
(PP.ppterm ~subst ~metasenv ~context t))))
| t, (_,C.Decl ct) ->
let type_t = typeof_aux context t in
- if not (R.are_convertible ~subst ~metasenv context type_t ct) then
+ if not (R.are_convertible ~subst context type_t ct) then
raise (TypeCheckerFailure
(lazy (Printf.sprintf
("Not well typed metavariable local context: "^^
let arity2 = R.whd ~subst context arity2 in
match arity1,arity2 with
| C.Prod (name,so1,de1), C.Prod (_,so2,de2) ->
- if not (R.are_convertible ~subst ~metasenv context so1 so2) then
+ if not (R.are_convertible ~subst context so1 so2) then
raise (TypeCheckerFailure (lazy (Printf.sprintf
"In outtype: expected %s, found %s"
(PP.ppterm ~subst ~metasenv ~context so1)
aux ((name, C.Decl so1)::context)
(mkapp (S.lift 1 ind) (C.Rel 1)) de1 de2
| C.Sort _, C.Prod (name,so,ta) ->
- if not (R.are_convertible ~subst ~metasenv context so ind) then
+ if not (R.are_convertible ~subst context so ind) then
raise (TypeCheckerFailure (lazy (Printf.sprintf
"In outtype: expected %s, found %s"
(PP.ppterm ~subst ~metasenv ~context ind)
| C.Constant (_,_,Some te,ty,_) ->
let _ = typeof ~subst ~metasenv [] ty in
let ty_te = typeof ~subst ~metasenv [] te in
- if not (R.are_convertible ~subst ~metasenv [] ty_te ty) then
+ if not (R.are_convertible ~subst [] ty_te ty) then
raise (TypeCheckerFailure (lazy (Printf.sprintf (
"the type of the body is not convertible with the declared one.\n"^^
"inferred type:\n%s\nexpected type:\n%s")
in
List.iter2 (fun (_,name,x,ty,_) bo ->
let ty_bo = typeof ~subst ~metasenv types bo in
- if not (R.are_convertible ~subst ~metasenv types ty_bo ty)
+ if not (R.are_convertible ~subst types ty_bo ty)
then raise (TypeCheckerFailure (lazy ("(Co)Fix: ill-typed bodies")))
else
if inductive then begin