(* ------------------------------------- *)
(* A specialized version of eauto that only uses the most common lc lemmas to cut down the search space. *)
Ltac eauto_lc := simpl; eauto using AnnTyping_lc1, Value_lc,
AnnDefEq_lc3, AnnPropWff_lc.

(* If an annotated term erases to a value, then it evaluates to a coerced value. *)
Lemma erased_Value_reduces_to_CoercedValue :
forall G a0 A,
AnnTyping G a0 A
-> AnnGood G (dom G) -> forall a, erase a0 = a -> Value a
-> exists av, multi (head_reduction G) a0 av /\ CoercedValue av /\ erase av = a.