(* * Copyright (c) 2009 Robert Dockins and Aquinas Hobor. * *)
(* Coq development: using indirection theory to model types in l-calculus *)
(* Typing rules *)
Fixpoint gamma_sub (G G':etype) {struct G} : Prop :=
match G, G' with
| nil, nil => True
| x::xs, y::ys => TT |-- y >=> x /\ gamma_sub xs ys
| _, _ => False
end.
Definition prim (f:nat -> value) : expr -> expr :=
Prim (val_to_exp oo f).
(* Bounded Universal Quantification *)
Definition AllBnd (T:pred world) (X:pred world -> pred world)
:= ALL tau:pred world, !!(TT |-- tau >=> T) --> X tau.

Lemma T_UnivBoundedI : forall G e T (X:pred world -> pred world),
openValue e ->
(forall tau, TT |-- tau >=> T -> Typ G e (X tau)) ->
Typ G e (AllBnd T X).