Definition AnnGood G D := Good (erase_context G) D.

(* Specifications: *)
Lemma AnnGoodIsGood : forall G D, AnnGood G D -> Good (erase_context G) D.
Lemma AnnGoodnil : AnnGood nil AtomSetImpl.empty.
Lemma AnnDefEq_consistent : forall S D g A B, AnnDefEq S D g A B -> AnnGood S D -> consistent (erase A) (erase B).
Lemma Paths_are_DataTy : forall T a, Path T a -> Value a -> forall G A, AnnTyping G a A -> DataTy A a_Star.
Lemma Paths_have_value_types : forall T a, Path T a -> Value a -> forall G A, AnnTyping G a A -> value_type A.
Lemma values_have_value_types : forall G D a A, AnnGood G D -> AnnTyping G a A -> Value a -> value_type A.
Lemma canonical_forms_a_Pi : forall G D a rho A B, AnnGood G D -> AnnTyping G a (a_Pi rho A B) -> Value a -> (exists a', a = a_Abs rho A a') \/ (exists T, Path T a).
Lemma canonical_forms_a_CPi : forall G D a phi B, AnnGood G D -> AnnTyping G a (a_CPi phi B) -> Value a -> (exists a', a = a_CAbs phi a') \/ (exists T, Path T a).
Lemma consistent_a_Pi : forall G A B C g rho, AnnGood G (dom G) -> value_type C -> AnnDefEq G (dom G) g C (a_Pi rho A B) -> exists A' B', C = a_Pi rho A' B'.
Lemma consistent_a_CPi : forall G phi B C g, AnnGood G (dom G) -> value_type C -> AnnDefEq G (dom G) g C (a_CPi phi B) -> exists phi' B', C = a_CPi phi' B'.
Lemma progress : forall G a A, irrelevant G (dom G) a -> AnnTyping G a A -> CoercedValue a \/ exists a', head_reduction G a a'.