if BR.are_convertible st m zero u m zero w then f () else
error3 err m v w u
-let assert_applicability err f st m u w v =
- match BR.xwhd st m None u with
+let assert_applicability err f st m x u w v =
+ let mode = if x then None else zero in
+ match BR.xwhd st m mode u with
| _, B.Sort _ ->
error1 err "not a function type" m u
| mu, B.Bind (_, B.Abst (true, n, u), _) ->
error3 err m v w ~mu u
| _ -> assert false (**)
-let rec b_type_of err f st m r =
- if !G.trace >= level then log1 st "Now checking" m r;
- match r with
+let rec b_type_of err f st m y =
+ if !G.ct >= level then log1 st "Now checking" m y;
+ match y with
| B.Sort (a, h) ->
- let h = H.apply h in f r (B.Sort (a, h))
+ let h = H.apply h in f y (B.Sort (a, h))
| B.LRef (_, i) ->
begin match BR.get m i with
| B.Abst (_, _, w) ->
- f r (BS.lift (succ i) (0) w)
+ f y (BS.lift (succ i) (0) w)
| B.Abbr (B.Cast (_, w, _)) ->
- f r (BS.lift (succ i) (0) w)
+ f y (BS.lift (succ i) (0) w)
| B.Abbr _ -> assert false
| B.Void ->
- error1 err "reference to excluded variable" m r
+ error1 err "reference to excluded variable" m y
end
| B.GRef (_, uri) ->
begin match BE.get_entity uri with
- | _, _, _, E.Abst w -> f r w
- | _, _, _, E.Abbr (B.Cast (_, w, _)) -> f r w
+ | _, _, _, E.Abst w -> f y w
+ | _, _, _, E.Abbr (B.Cast (_, w, _)) -> f y w
| _, _, _, E.Abbr _ -> assert false
| _, _, _, E.Void ->
- error1 err "reference to unknown entry" m r
+ error1 err "reference to unknown entry" m y
end
| B.Bind (a, B.Abbr v, t) ->
let f rv rt tt =
- f (S.sh2 v rv t rt r (B.bind_abbr a)) (B.bind_abbr a rv tt)
+ f (S.sh2 v rv t rt y (B.bind_abbr a)) (B.bind_abbr a rv tt)
in
let f rv m = b_type_of err (f rv) st m t in
let f rv = f rv (BR.push m a (B.abbr rv)) in
| _ -> f (B.Cast (E.empty_node, vv, rv))
in
type_of err f st m v
- | B.Bind (a, B.Abst (x, n, u), t) ->
+ | B.Bind (a, B.Abst (r, n, u), t) ->
let f ru rt tt =
- f (S.sh2 u ru t rt r (B.bind_abst x n a)) (B.bind_abst x (N.minus st n 1) a ru tt)
+ f (S.sh2 u ru t rt y (B.bind_abst r n a)) (B.bind_abst r (N.minus st n 1) a ru tt)
in
let f ru m = b_type_of err (f ru) st m t in
- let f ru _ = f ru (BR.push m a (B.abst x n ru)) in
+ let f ru _ = f ru (BR.push m a (B.abst r n ru)) in
type_of err f st m u
| B.Bind (a, B.Void, t) ->
let f rt tt =
- f (S.sh1 t rt r (B.bind_void a)) (B.bind_void a tt)
+ f (S.sh1 t rt y (B.bind_void a)) (B.bind_void a tt)
in
b_type_of err f st (BR.push m a B.Void) t
- | B.Appl (a, v, t) ->
+ | B.Appl (a, x, v, t) ->
let f rv vv rt tt =
- let f _ = f (S.sh2 v rv t rt r (B.appl a)) (B.appl a rv tt) in
- assert_applicability err f st m tt vv rv
+ let f _ = f (S.sh2 v rv t rt y (B.appl a x)) (B.appl a x rv tt) in
+ assert_applicability err f st m x tt vv rv
in
let f rv vv = b_type_of err (f rv vv) st m t in
type_of err f st m v
| B.Cast (a, u, t) ->
let f ru rt tt =
- let f _ = f (S.sh2 u ru t rt r (B.cast a)) ru in
+ let f _ = f (S.sh2 u ru t rt y (B.cast a)) ru in
assert_convertibility err f st m ru tt rt
in
let f ru _ = b_type_of err (f ru) st m t in
(* Interface functions ******************************************************)
-and type_of err f st m r = b_type_of err f st m r
+and type_of err f st m t = b_type_of err f st m t