(*************************************************************************)
(** * Decidability of Typechecking *)
(*************************************************************************)
(* Finally, we give another example of a proof that makes use of the renaming lemma. We show that determining whether a program type checks is decidable. *)

(* Specifications: *)
(** Equality on types is decidable *)
Lemma eq_typ_dec : forall (T T' : typ),
{ T = T' } + { T <> T' }.
(** Take-home exercise.  To prove that ill-formed terms cannot be typechecked, we will need an auxiliary lemma that says that each term only has a single type.  HINT: to prove this lemma you will need to generalize the induction hypothesis for T2 and use the lemma [binds_unique] from [AtomEnv.v]. *)
Lemma typing_c_unique : forall E e T1 T2,
typing_c E e T1 ->
typing_c E e T2 ->
T1 = T2.