| C.Axiom (_,ty,_) ->
(* only to check that ty is well-typed *)
let _ = type_of ty in ()
- | C.CurrentProof (_,_,te,ty) ->
- let _ = type_of ty in
- if not (R.are_convertible (type_of te) ty) then
+ | C.CurrentProof (_,conjs,te,ty) ->
+ let _ = type_of_aux' conjs [] ty in
+ if not (R.are_convertible (type_of_aux' conjs [] te) ty) then
raise (NotWellTyped ("CurrentProof" ^ (U.string_of_uri uri)))
| _ -> raise (WrongUriToConstant (U.string_of_uri uri))
) ;
(* type_of_aux' is just another name (with a different scope) for type_of_aux *)
-and type_of_aux' env t =
+and type_of_aux' metasenv env t =
let rec type_of_aux env =
let module C = Cic in
let module R = CicReduction in
let ty = type_of_variable uri in
decr fdebug ;
ty
- | C.Meta n -> raise NotImplemented
+ | C.Meta n -> List.assoc n metasenv
| C.Sort s -> C.Sort C.Type (*CSC manca la gestione degli universi!!! *)
| C.Implicit -> raise (Impossible 21)
| C.Cast (te,ty) ->
let module C = Cic in
match CicReduction.whd c with
C.Prod (_,so,de) ->
- let s = type_of_aux' env so in
+ (*CSC: [] is an empty metasenv. Is it correct? *)
+ let s = type_of_aux' [] env so in
(s = C.Sort C.Prop || s = C.Sort C.Set) &&
is_small_aux (so::env) de
| _ -> true (*CSC: we trust the type-checker *)
is_small_aux (List.rev sx) dx
and type_of t =
- type_of_aux' [] t
+ type_of_aux' [] [] t
;;
let typecheck uri =
| C.Axiom (_,ty,_) ->
(* only to check that ty is well-typed *)
let _ = type_of ty in ()
- | C.CurrentProof (_,_,te,ty) ->
- (*CSC [] wrong *)
- let _ = type_of ty in
- debug (type_of te) [] ;
- if not (R.are_convertible (type_of te) ty) then
- raise (NotWellTyped ("CurrentProof" ^ (U.string_of_uri uri)))
+ | C.CurrentProof (_,conjs,te,ty) ->
+ (*CSC [] wrong *)
+ let _ = type_of_aux' conjs [] ty in
+ debug (type_of_aux' conjs [] te) [] ;
+ if not (R.are_convertible (type_of_aux' conjs [] te) ty) then
+ raise (NotWellTyped ("CurrentProof" ^ (U.string_of_uri uri)))
| C.Variable (_,bo,ty) ->
(* only to check that ty is well-typed *)
let _ = type_of ty in
CicEnvironment.set_type_checking_info uri ;
log (`Type_checking_completed uri)
;;
+