Local Notation "{ k ~> u } t" := (open_rec k u t) (at level 67).(*************************************************************************)
(*                                                                       *)
(*  Coffee break                                                         *)
(*                                                                       *)
(*************************************************************************)


(*************************************************************************)
(** * Typing environments *)
(*************************************************************************)

(** We represent environments as association lists (lists of pairs of
    keys and values) whose keys are [atom]s.
*)

Notation env := (list (atom * typ)).

(* Specifications: *)
Lemma append_assoc_demo : forall (E0 E1 E2 E3:env), E0 ++ (E1 ++ E2) ++ E3 = E0 ++ E1 ++ E2 ++ E3.
Lemma typing_weakening_0 : forall E F e T, typing_c E e T -> uniq (F ++ E) -> typing_c (F ++ E) e T.
Lemma typing_weakening_strengthened_0 : forall (E F G : env) e T, typing_c (G ++ E) e T -> uniq (G ++ F ++ E) -> typing_c (G ++ F ++ E) e T.
Lemma typing_c_weakening_strengthened : forall (E F G : env) e T, typing_c (G ++ E) e T -> uniq (G ++ F ++ E) -> typing_c (G ++ F ++ E) e T.
Lemma typing_c_weakening : forall (E F : env) e T, typing_c E e T -> uniq (F ++ E) -> typing_c (F ++ E) e T.
Lemma typing_c_to_lc_c : forall E e T, typing_c E e T -> lc_c e.
Lemma append_assoc_demo : forall (E0 E1 E2 E3:env), E0 ++ (E1 ++ E2) ++ E3 = E0 ++ E1 ++ E2 ++ E3.
Lemma typing_weakening_0 : forall E F e T, typing_c E e T -> uniq (F ++ E) -> typing_c (F ++ E) e T.
Lemma typing_weakening_strengthened_0 : forall (E F G : env) e T, typing_c (G ++ E) e T -> uniq (G ++ F ++ E) -> typing_c (G ++ F ++ E) e T.
Lemma typing_c_weakening_strengthened : forall (E F G : env) e T, typing_c (G ++ E) e T -> uniq (G ++ F ++ E) -> typing_c (G ++ F ++ E) e T.
Lemma typing_c_weakening : forall (E F : env) e T, typing_c E e T -> uniq (F ++ E) -> typing_c (F ++ E) e T.
Lemma typing_c_to_lc_c : forall E e T, typing_c E e T -> lc_c e.