(* Specifications: *)
Theorem plus_2_2_is_4 : 2 + 2 = 4.
Theorem mult_0_r' : forall n:nat, n * 0 = 0.
Theorem plus_one_r' : forall n:nat, n + 1 = S n.
Theorem beq_nat_sym : forall (n m : nat), beq_nat n m = beq_nat m n.
Theorem beq_nat_trans : forall n m p, beq_nat n m = true -> beq_nat m p = true -> beq_nat n p = true.
Theorem ev_4 : ev 4.
Theorem ev_4': ev 4.
Theorem ev_4'' : ev 4.
Theorem foo : forall (x y: nat) , x = y -> x = 0.
Lemma has_black_height : forall t h c, is_redblack' t c h -> black_height_bool t = Some h.
Lemma is_redblackP t : reflect (is_redblack t) (is_redblack_bool t).
Lemma vars_with_type_shift: forall e x tau n, In (Id (S x)) (map (fun p : type * var => Id (snd p)) (filter (fun p : type * nat => proj1_sig (Sumbool.bool_of_sumbool (type_eq_dec tau (fst p)))) (combine e (seq (S n) (length e))))) <-> In (Id x) (map (fun p : type * var => Id (snd p)) (filter (fun p : type * nat => proj1_sig (Sumbool.bool_of_sumbool (type_eq_dec tau (fst p)))) (combine e (seq n (length e))))).
Lemma vars_with_type_le: forall e x tau n, In (Id x) (map (fun p : type * var => Id (snd p)) (filter (fun p : type * nat => proj1_sig (Sumbool.bool_of_sumbool (type_eq_dec tau (fst p)))) (combine e (seq n (length e))))) -> n <= x.
Lemma vars_with_type_le_length_aux: forall e x tau n, In (Id x) (map (fun p : type * var => Id (snd p)) (filter (fun p : type * nat => proj1_sig (Sumbool.bool_of_sumbool (type_eq_dec tau (fst p)))) (combine e (seq n (length e))))) -> x < n + (length e).
Lemma vars_with_type_le_length: forall e x tau, In (Id x) (vars_with_type e tau) -> x < (length e).
Lemma vars_with_type_Id : forall e tau t, In t (vars_with_type e tau) -> exists x, t = Id x.
Lemma type_var : forall e x tau, In (Id x) (vars_with_type e tau) <-> typing e (Id x) tau.
Lemma app_free_app_no_0 : forall (t : term), app_free t <-> app_no t = 0.
Theorem silly3_firsttry : forall (n : nat), n = 5 -> (* true = beq_nat n 5 -> *) beq_nat (S (S n)) 7 = true.
Theorem rev_exercise1 : forall (l l' : list nat), l = rev l' -> l' = rev l.
Theorem trans_eq : forall (X:Type) (n m o : X), n = m -> m = o -> n = o.
Theorem plus_n_O_firsttry : forall n:nat, n = n + 0.
Theorem minus_diag : forall n, minus n n = 0.
Theorem mult_0_r : forall n:nat, n * 0 = 0.
Theorem plus_n_Sm : forall n m : nat, S (n + m) = n + (S m).
Theorem plus_comm : forall n m : nat, n + m = m + n.
Theorem plus_assoc : forall n m p : nat, n + (m + p) = (n + m) + p.
Lemma max_lub_l_ssr n m p: max n m < p -> n < p.
Lemma max_lub_r_ssr n m p: max n m < p -> m < p.
Lemma max_lub_ssr n m p : n < p -> m < p -> max n m < p.
Lemma lt0_False : forall n, ~ n < 0.
Lemma plus_leq_compat_l n m k : n <= m -> n <= m + k.
Lemma plus_leq_compat_r n m k : n <= k -> n <= m + k.
Lemma leq_refl: forall n, n <= n.
Lemma succ_neq_zero : forall x, S x <> 0.
Lemma isSomeSome {A : Type} (y : A) : Some y.
Lemma eq_symm {A : Type} (x y : A) : x = y -> y = x.
Lemma nthE T (def : T) s i : List.nth i s def = nth def s i.
Lemma not_digit_when (c : ascii) (x : nat) : (nat_of_ascii c < 48) \/ (57 < nat_of_ascii c) -> unit_digit x <> c.
Lemma unit_digit_ascii : forall n, digit_of_ascii (unit_digit n) = Some (n mod 10).
Lemma decimal_thousand : forall n, n < 256 -> (n / 100) mod 10 * 100 + (n / 10) mod 10 * 10 + n mod 10 = n.
Lemma ascii_256 : forall c, nat_of_ascii c < 256.
Lemma unthree_three_digit (c : ascii) : let n := nat_of_ascii c in unthree_digit (unit_digit (n / 100)) (unit_digit (n / 10)) (unit_digit n) = Some (ascii_of_nat n).
Lemma read_show_quoted_string : forall (s : string), read_quoted_string (show_quoted_string s) = Some s.
Lemma read_show_string : forall (s : string), read_string (show s) = Some s.