(* Specifications: *)
Lemma natSRth : semi_ring_theory O (S O) plus mult (@eq nat).
Lemma nat_morph_N : semi_morph 0 1 plus mult (eq (A:=nat)) 0%N 1%N N.add N.mul N.eqb N.to_nat.
Lemma Rsth : Setoid_Theory R (@eq R).
Lemma BoolTheory : ring_theory false true xorb andb xorb (fun b:bool => b) (eq(A:=bool)).
Lemma RTheory : ring_theory 0 1 Rplus Rmult Rminus Ropp (eq (A:=R)).
Lemma Rfield : field_theory 0 1 Rplus Rmult Rminus Ropp Rdiv Rinv (eq(A:=R)).
Lemma Rlt_n_Sn : forall x, x < x + 1.
Lemma of_IQmake_to_hexadecimal num den : match IQmake_to_hexadecimal num den with | None => True | Some (HexadecimalExp _ _ _) => False | Some (Hexadecimal i f) => of_hexadecimal (Hexadecimal i f) = IRQ (QArith_base.Qmake num den) end.
Lemma of_to (q:IR) : forall d, to_hexadecimal q = Some d -> of_hexadecimal d = q.
Lemma to_of (d:hexadecimal) : to_hexadecimal (of_hexadecimal d) = Some (dnorm d).
Lemma to_hexadecimal_inj q q' : to_hexadecimal q <> None -> to_hexadecimal q = to_hexadecimal q' -> q = q'.
Lemma to_hexadecimal_surj d : exists q, to_hexadecimal q = Some (dnorm d).
Lemma of_hexadecimal_dnorm d : of_hexadecimal (dnorm d) = of_hexadecimal d.
Lemma of_inj d d' : of_hexadecimal d = of_hexadecimal d' -> dnorm d = dnorm d'.
Lemma of_iff d d' : of_hexadecimal d = of_hexadecimal d' <-> dnorm d = dnorm d'.
Lemma of_to (n:N) : N.of_hex_uint (N.to_hex_uint n) = n.
Lemma to_of (d:uint) : N.to_hex_uint (N.of_hex_uint d) = unorm d.
Lemma to_uint_inj n n' : N.to_hex_uint n = N.to_hex_uint n' -> n = n'.
Lemma to_uint_surj d : exists p, N.to_hex_uint p = unorm d.
Lemma of_uint_norm d : N.of_hex_uint (unorm d) = N.of_hex_uint d.
Lemma of_inj d d' : N.of_hex_uint d = N.of_hex_uint d' -> unorm d = unorm d'.
Lemma of_iff d d' : N.of_hex_uint d = N.of_hex_uint d' <-> unorm d = unorm d'.
Lemma of_to (n:N) : N.of_hex_int (N.to_hex_int n) = Some n.
Lemma to_of (d:int)(n:N) : N.of_hex_int d = Some n -> N.to_hex_int n = norm d.
Lemma to_int_inj n n' : N.to_hex_int n = N.to_hex_int n' -> n = n'.
Lemma to_int_pos_surj d : exists n, N.to_hex_int n = norm (Pos d).
Lemma of_int_norm d : N.of_hex_int (norm d) = N.of_hex_int d.
Lemma of_inj_pos d d' : N.of_hex_int (Pos d) = N.of_hex_int (Pos d') -> unorm d = unorm d'.
Lemma of_IQmake_to_decimal num den : match IQmake_to_decimal num den with | None => True | Some (DecimalExp _ _ _) => False | Some (Decimal i f) => of_decimal (Decimal i f) = IQmake (IZ_of_Z num) den end.
Lemma IZ_of_Z_IZ_to_Z z z' : IZ_to_Z z = Some z' -> IZ_of_Z z' = z.
Lemma of_IQmake_to_decimal' num den : match IQmake_to_decimal' num den with | None => True | Some (DecimalExp _ _ _) => False | Some (Decimal i f) => of_decimal (Decimal i f) = IQmake num den end.
Lemma of_to (q:IQ) : forall d, to_decimal q = Some d -> of_decimal d = q.
Lemma of_to (n:N) : N.of_uint (N.to_uint n) = n.
Lemma to_of (d:uint) : N.to_uint (N.of_uint d) = unorm d.
Lemma to_uint_inj n n' : N.to_uint n = N.to_uint n' -> n = n'.
Lemma to_uint_surj d : exists p, N.to_uint p = unorm d.
Lemma of_uint_norm d : N.of_uint (unorm d) = N.of_uint d.
Lemma of_inj d d' : N.of_uint d = N.of_uint d' -> unorm d = unorm d'.
Lemma of_iff d d' : N.of_uint d = N.of_uint d' <-> unorm d = unorm d'.
Lemma of_to (n:N) : N.of_int (N.to_int n) = Some n.
Lemma to_of (d:int)(n:N) : N.of_int d = Some n -> N.to_int n = norm d.
Lemma to_int_inj n n' : N.to_int n = N.to_int n' -> n = n'.
Lemma to_int_pos_surj d : exists n, N.to_int n = norm (Pos d).
Lemma of_int_norm d : N.of_int (norm d) = N.of_int d.
Lemma of_inj_pos d d' : N.of_int (Pos d) = N.of_int (Pos d') -> unorm d = unorm d'.
Lemma of_IQmake_to_hexadecimal num den : match IQmake_to_hexadecimal num den with | None => True | Some (HexadecimalExp _ _ _) => False | Some (Hexadecimal i f) => of_hexadecimal (Hexadecimal i f) = IQmake (IZ_of_Z num) den end.
Lemma IZ_of_Z_IZ_to_Z z z' : IZ_to_Z z = Some z' -> IZ_of_Z z' = z.
Lemma of_IQmake_to_hexadecimal' num den : match IQmake_to_hexadecimal' num den with | None => True | Some (HexadecimalExp _ _ _) => False | Some (Hexadecimal i f) => of_hexadecimal (Hexadecimal i f) = IQmake num den end.
Lemma of_to (q:IQ) : forall d, to_hexadecimal q = Some d -> of_hexadecimal d = q.
Lemma of_IQmake_to_decimal num den : match IQmake_to_decimal num den with | None => True | Some (DecimalExp _ _ _) => False | Some (Decimal i f) => of_decimal (Decimal i f) = IRQ (QArith_base.Qmake num den) end.
Lemma of_to (q:IR) : forall d, to_decimal q = Some d -> of_decimal d = q.
Lemma to_of (d:decimal) : to_decimal (of_decimal d) = Some (dnorm d).
Lemma to_decimal_inj q q' : to_decimal q <> None -> to_decimal q = to_decimal q' -> q = q'.
Lemma to_decimal_surj d : exists q, to_decimal q = Some (dnorm d).
Lemma of_decimal_dnorm d : of_decimal (dnorm d) = of_decimal d.
Lemma of_inj d d' : of_decimal d = of_decimal d' -> dnorm d = dnorm d'.
Lemma of_iff d d' : of_decimal d = of_decimal d' <-> dnorm d = dnorm d'.
Lemma of_to (z:Z) : Z.of_hex_int (Z.to_hex_int z) = z.
Lemma to_of (d:int) : Z.to_hex_int (Z.of_hex_int d) = norm d.
Lemma to_int_inj n n' : Z.to_hex_int n = Z.to_hex_int n' -> n = n'.
Lemma to_int_surj d : exists n, Z.to_hex_int n = norm d.
Lemma of_int_norm d : Z.of_hex_int (norm d) = Z.of_hex_int d.
Lemma of_inj d d' : Z.of_hex_int d = Z.of_hex_int d' -> norm d = norm d'.
Lemma of_iff d d' : Z.of_hex_int d = Z.of_hex_int d' <-> norm d = norm d'.
Lemma of_hex_uint_iter_D0 d n : Z.of_hex_uint (app d (Nat.iter n D0 Nil)) = Nat.iter n (Z.mul 0x10) (Z.of_hex_uint d).
Lemma of_hex_int_iter_D0 d n : Z.of_hex_int (app_int d (Nat.iter n D0 Nil)) = Nat.iter n (Z.mul 0x10) (Z.of_hex_int d).
Lemma of_to (z:Z) : Z.of_int (Z.to_int z) = z.
Lemma to_of (d:int) : Z.to_int (Z.of_int d) = norm d.
Lemma to_int_inj n n' : Z.to_int n = Z.to_int n' -> n = n'.
Lemma to_int_surj d : exists n, Z.to_int n = norm d.
Lemma of_int_norm d : Z.of_int (norm d) = Z.of_int d.
Lemma of_inj d d' : Z.of_int d = Z.of_int d' -> norm d = norm d'.
Lemma of_iff d d' : Z.of_int d = Z.of_int d' <-> norm d = norm d'.
Lemma of_uint_iter_D0 d n : Z.of_uint (app d (Nat.iter n D0 Nil)) = Nat.iter n (Z.mul 10) (Z.of_uint d).
Lemma of_int_iter_D0 d n : Z.of_int (app_int d (Nat.iter n D0 Nil)) = Nat.iter n (Z.mul 10) (Z.of_int d).
Lemma nztail_to_uint_pow10 n : Decimal.nztail (Pos.to_uint (Nat.iter n (Pos.mul 10) 1%positive)) = (D1 Nil, n).
Theorem square_lt_mono : forall n m, n < m <-> n * n < m * m.
Theorem square_le_mono : forall n m, n <= m <-> n * n <= m * m.
Theorem mul_le_mono_l : forall n m p, n <= m -> p * n <= p * m.
Theorem mul_le_mono_r : forall n m p, n <= m -> n * p <= m * p.
Theorem le_mul_l : forall n m, m ~= 0 -> n <= m * n.
Theorem le_mul_r : forall n m, m ~= 0 -> n <= n * m.
Theorem mul_lt_mono : forall n m p q, n < m -> p < q -> n * p < m * q.
Theorem mul_le_mono : forall n m p q, n <= m -> p <= q -> n * p <= m * q.
Theorem lt_0_mul' : forall n m, n * m > 0 <-> n > 0 /\ m > 0.
Theorem neq_succ_0 : forall n, S n ~= 0.
Theorem neq_0_succ : forall n, 0 ~= S n.
Theorem le_0_l : forall n, 0 <= n.
Theorem induction : forall A : N.t -> Prop, Proper (N.eq==>iff) A -> A 0 -> (forall n, A n -> A (S n)) -> forall n, A n.
Theorem lt_wf_0 : well_founded lt.
Theorem nlt_0_r : forall n, ~ n < 0.
Theorem nle_succ_0 : forall n, ~ (S n <= 0).
Theorem le_0_r : forall n, n <= 0 <-> n == 0.
Theorem lt_0_succ : forall n, 0 < S n.
Theorem le_1_succ : forall n, 1 <= S n.
Theorem neq_0_lt_0 : forall n, n ~= 0 <-> 0 < n.
Theorem neq_0_le_1 : forall n, n ~= 0 <-> 1 <= n.
Theorem eq_0_gt_0_cases : forall n, n == 0 \/ 0 < n.
Theorem zero_one : forall n, n == 0 \/ n == 1 \/ 1 < n.
Theorem lt_1_r : forall n, n < 1 <-> n == 0.
Theorem le_1_r : forall n, n <= 1 <-> n == 0 \/ n == 1.
Theorem lt_lt_0 : forall n m, n < m -> 0 < m.
Theorem lt_1_l' : forall n m p, n < m -> m < p -> 1 < p.
Theorem le_ind_rel : (forall m, R 0 m) -> (forall n m, n <= m -> R n m -> R (S n) (S m)) -> forall n m, n <= m -> R n m.
Theorem lt_ind_rel : (forall m, R 0 (S m)) -> (forall n m, n < m -> R n m -> R (S n) (S m)) -> forall n m, n < m -> R n m.
Theorem succ_pred_pos : forall n, 0 < n -> S (P n) == n.
Theorem le_pred_l : forall n, P n <= n.
Theorem lt_pred_l : forall n, n ~= 0 -> P n < n.
Theorem le_le_pred : forall n m, n <= m -> P n <= m.
Theorem lt_lt_pred : forall n m, n < m -> P n < m.
Theorem lt_le_pred : forall n m, n < m -> n <= P m.
Theorem lt_pred_le : forall n m, P n < m -> n <= m.
Theorem lt_pred_lt : forall n m, n < P m -> n < m.
Theorem le_pred_le : forall n m, n <= P m -> n <= m.
Theorem pred_le_mono : forall n m, n <= m -> P n <= P m.
Theorem pred_lt_mono : forall n m, n ~= 0 -> (n < m <-> P n < P m).
Theorem lt_succ_lt_pred : forall n m, S n < m <-> n < P m.
Theorem le_succ_le_pred : forall n m, S n <= m -> n <= P m.
Theorem lt_pred_lt_succ : forall n m, P n < m -> n < S m.
Theorem le_pred_le_succ : forall n m, P n <= m <-> n <= S m.
Lemma measure_induction : forall (X : Type) (f : X -> t) (A : X -> Type), (forall x, (forall y, f y < f x -> A y) -> A x) -> forall x, A x.
Theorem Private_strong_induction_le {A : t -> Prop} : Proper (eq ==> iff) A -> A 0 -> (forall n, ((forall m, m <= n -> A m) -> A (S n))) -> (forall n, A n).
Theorem le_add_r : forall n m, n <= n + m.
Theorem le_add_l : forall n m, n <= m + n.
Theorem lt_lt_add_r : forall n m p, n < m -> n < m + p.
Theorem lt_lt_add_l : forall n m p, n < m -> n < p + m.
Theorem add_pos_l : forall n m, 0 < n -> 0 < n + m.
Theorem add_pos_r : forall n m, 0 < m -> 0 < n + m.
Theorem eq_add_0 : forall n m, n + m == 0 <-> n == 0 /\ m == 0.
Theorem eq_add_succ : forall n m, (exists p, n + m == S p) <-> (exists n', n == S n') \/ (exists m', m == S m').
Theorem eq_add_1 : forall n m, n + m == 1 -> n == 1 /\ m == 0 \/ n == 0 /\ m == 1.
Theorem succ_add_discr : forall n m, m ~= S (n + m).
Theorem add_pred_l : forall n m, n ~= 0 -> P n + m == P (n + m).
Theorem add_pred_r : forall n m, m ~= 0 -> n + P m == P (n + m).
Theorem neg_pos_cases : forall n, n ~= 0 <-> n < 0 \/ n > 0.
Theorem nonpos_pos_cases : forall n, n <= 0 \/ n > 0.
Theorem neg_nonneg_cases : forall n, n < 0 \/ n >= 0.
Theorem nonpos_nonneg_cases : forall n, n <= 0 \/ n >= 0.
Theorem mul_pred_r : forall n m, n * (P m) == n * m - n.
Theorem mul_pred_l : forall n m, (P n) * m == n * m - m.
Theorem mul_opp_l : forall n m, (- n) * m == - (n * m).
Theorem mul_opp_r : forall n m, n * (- m) == - (n * m).
Theorem mul_opp_opp : forall n m, (- n) * (- m) == n * m.
Theorem mul_opp_comm : forall n m, (- n) * m == n * (- m).
Theorem mul_sub_distr_l : forall n m p, n * (m - p) == n * m - n * p.
Theorem mul_sub_distr_r : forall n m p, (n - m) * p == n * p - m * p.
Theorem add_neg_neg : forall n m, n < 0 -> m < 0 -> n + m < 0.
Theorem add_neg_nonpos : forall n m, n < 0 -> m <= 0 -> n + m < 0.
Theorem add_nonpos_neg : forall n m, n <= 0 -> m < 0 -> n + m < 0.
Theorem add_nonpos_nonpos : forall n m, n <= 0 -> m <= 0 -> n + m <= 0.
Theorem lt_0_sub : forall n m, 0 < m - n <-> n < m.
Theorem pred_inj : forall n m, P n == P m -> n == m.
Theorem pred_inj_wd : forall n1 n2, P n1 == P n2 <-> n1 == n2.
Lemma succ_m1 : S (-1) == 0.
Theorem add_pred_l n m : P n + m == P (n + m).
Theorem add_pred_r n m : n + P m == P (n + m).
Theorem add_opp_r n m : n + (- m) == n - m.
Theorem sub_0_l n : 0 - n == - n.
Theorem sub_succ_l n m : S n - m == S (n - m).
Theorem sub_pred_l n m : P n - m == P (n - m).
Theorem sub_pred_r n m : n - (P m) == S (n - m).
Theorem opp_pred n : - (P n) == S (- n).
Theorem sub_diag n : n - n == 0.
Theorem add_opp_diag_l n : - n + n == 0.
Theorem add_opp_diag_r n : n + (- n) == 0.
Theorem add_opp_l n m : - m + n == n - m.
Theorem add_sub_assoc n m p : n + (m - p) == (n + m) - p.
Theorem opp_involutive n : - (- n) == n.
Theorem opp_add_distr n m : - (n + m) == - n + (- m).
Theorem opp_sub_distr n m : - (n - m) == - n + m.
Theorem opp_inj n m : - n == - m -> n == m.
Theorem opp_inj_wd n m : - n == - m <-> n == m.
Theorem eq_opp_l n m : - n == m <-> n == - m.
Theorem eq_opp_r n m : n == - m <-> - n == m.
Theorem sub_add_distr n m p : n - (m + p) == (n - m) - p.
Theorem sub_sub_distr n m p : n - (m - p) == (n - m) + p.
Theorem sub_opp_l n m : - n - m == - m - n.
Theorem sub_opp_r n m : n - (- m) == n + m.
Theorem add_sub_swap n m p : n + m - p == n - p + m.
Theorem sub_cancel_l n m p : n - m == n - p <-> m == p.
Theorem sub_cancel_r n m p : n - p == m - p <-> n == m.
Theorem add_move_l n m p : n + m == p <-> m == p - n.
Theorem add_move_r n m p : n + m == p <-> n == p - m.
Theorem sub_move_l n m p : n - m == p <-> - m == p - n.
Theorem sub_move_r n m p : n - m == p <-> n == p + m.
Theorem add_move_0_l n m : n + m == 0 <-> m == - n.
Theorem add_move_0_r n m : n + m == 0 <-> n == - m.
Theorem sub_move_0_l n m : n - m == 0 <-> - m == - n.
Theorem sub_move_0_r n m : n - m == 0 <-> n == m.
Theorem add_simpl_l n m : n + m - n == m.
Theorem add_simpl_r n m : n + m - m == n.
Theorem sub_simpl_l n m : - n - m + n == - m.
Theorem sub_simpl_r n m : n - m + m == n.
Theorem sub_add n m : m - n + n == m.
Theorem add_add_simpl_l_l n m p : (n + m) - (n + p) == m - p.
Theorem add_add_simpl_l_r n m p : (n + m) - (p + n) == m - p.
Theorem add_add_simpl_r_l n m p : (n + m) - (m + p) == n - p.
Theorem add_add_simpl_r_r n m p : (n + m) - (p + m) == n - p.
Theorem sub_add_simpl_r_l n m p : (n - m) + (m + p) == n + p.
Theorem sub_add_simpl_r_r n m p : (n - m) + (p + m) == n + p.
Lemma inverse_image_of_equivalence : forall (A B:Type) (f:A -> B) (r:relation B), equivalence B r -> equivalence A (fun x y:A => r (f x) (f y)).
Lemma inverse_image_of_eq : forall (A B:Type) (f:A -> B), equivalence A (fun x y:A => f x = f y).
Lemma shift_value : shift = (2*emax + prec)%Z.
Theorem Z_frexp_spec : forall f, let (m,e) := Z.frexp f in (Prim2SF m, e) = SFfrexp prec emax (Prim2SF f).
Theorem Z_ldexp_spec : forall f e, Prim2SF (Z.ldexp f e) = SFldexp prec emax (Prim2SF f) e.
Theorem setoid_choice : forall A B, forall R : A -> A -> Prop, forall T : A -> B -> Prop, Equivalence R -> (forall x x' y, R x x' -> T x y -> T x' y) -> (forall x, exists y, T x y) -> exists f : A -> B, forall x : A, T x (f x) /\ (forall x' : A, R x x' -> f x = f x').
Theorem representative_choice : forall A (R:A->A->Prop), (Equivalence R) -> exists f : A->A, forall x : A, R x (f x) /\ forall x', R x x' -> f x = f x'.
Lemma not_all_not_ex : forall P:U -> Prop, ~ (forall n:U, ~ P n) -> exists n : U, P n.
Lemma not_all_ex_not : forall P:U -> Prop, ~ (forall n:U, P n) -> exists n : U, ~ P n.
Lemma not_ex_all_not : forall P:U -> Prop, ~ (exists n : U, P n) -> forall n:U, ~ P n.
Lemma not_ex_not_all : forall P:U -> Prop, ~ (exists n : U, ~ P n) -> forall n:U, P n.
Lemma ex_not_not_all : forall P:U -> Prop, (exists n : U, ~ P n) -> ~ (forall n:U, P n).
Lemma all_not_not_ex : forall P:U -> Prop, (forall n:U, ~ P n) -> ~ (exists n : U, P n).
Theorem injection_is_involution_in_Prop (f : Prop -> Prop) (inj : forall A B, (f A <-> f B) -> (A <-> B)) (ext : forall A B, A <-> B -> f A <-> f B) : forall A, f (f A) <-> A.
Lemma eq_rect_eq : forall (U:Type) (p:U) (Q:U -> Type) (x:Q p) (h:p = p), x = eq_rect p Q x p h.
Lemma sin2_bound : forall x, 0 <= (sin x)² <= 1.
Lemma cos2_bound : forall x, 0 <= (cos x)² <= 1.
Lemma cos_sin : forall x, cos x >=0 -> cos x = sqrt(1 - (sin x)²).
Lemma cos_sin_opp : forall x, cos x <=0 -> cos x = - sqrt(1 - (sin x)²).
Lemma cos_sin_Rabs : forall x, Rabs (cos x) = sqrt(1 - (sin x)²).
Lemma sin_cos : forall x, sin x >=0 -> sin x = sqrt(1 - (cos x)²).
Lemma sin_cos_opp : forall x, sin x <=0 -> sin x = - sqrt(1 - (cos x)²).
Lemma sin_cos_Rabs : forall x, Rabs (sin x) = sqrt(1 - (cos x)²).
Lemma tan_sin : forall x, 0 <= cos x -> tan x = sin x / sqrt (1 - (sin x)²).
Lemma tan_sin_opp : forall x, 0 > cos x -> tan x = - (sin x / sqrt (1 - (sin x)²)).
Lemma tan_cos : forall x, 0 <= sin x -> tan x = sqrt (1 - (cos x)²) / cos x.
Lemma tan_cos_opp : forall x, 0 >= sin x -> tan x = - sqrt (1 - (cos x)²) / cos x.
Lemma sin_tan : forall x, 0 < cos x -> sin x = tan x / sqrt (1 + (tan x)²).
Lemma cos_tan : forall x, 0 < cos x -> cos x = 1 / sqrt (1 + (tan x)²).
Lemma sin_pi_minus : forall x, sin (PI - x) = sin x.
Lemma sin_pi_plus : forall x, sin (PI + x) = - sin x.
Lemma cos_pi_minus : forall x, cos (PI - x) = - cos x.
Lemma cos_pi_plus : forall x, cos (PI + x) = - cos x.
Lemma tan_pi_minus : forall x, cos x <> 0 -> tan (PI - x) = - tan x.
Lemma tan_pi_plus : forall x, cos x <> 0 -> tan (PI + x) = tan x.
Local Lemma Qpower_2_neg_eq_natpow_inv : forall n : nat, (2 ^ (- Z.of_nat n) == 1#(Pos.of_nat (2^n)%nat))%Q.
Local Lemma Qpower_2_invneg_le_pow : forall n : Z, (1 # Pos.of_nat (2 ^ Z.to_nat (- n)) <= 2 ^ n)%Q.
Local Lemma Qpower_2_neg_le_one : forall n : nat, (2 ^ (- Z.of_nat n) <= 1)%Q.
Theorem derivable_pt_lim_div : forall (f1 f2:R -> R) (x l1 l2:R), derivable_pt_lim f1 x l1 -> derivable_pt_lim f2 x l2 -> f2 x <> 0 -> derivable_pt_lim (f1 / f2) x ((l1 * f2 x - l2 * f1 x) / Rsqr (f2 x)).
Lemma derivable_pt_div : forall (f1 f2:R -> R) (x:R), derivable_pt f1 x -> derivable_pt f2 x -> f2 x <> 0 -> derivable_pt (f1 / f2) x.
Lemma derivable_div : forall f1 f2:R -> R, derivable f1 -> derivable f2 -> (forall x:R, f2 x <> 0) -> derivable (f1 / f2).
Lemma derive_pt_div : forall (f1 f2:R -> R) (x:R) (pr1:derivable_pt f1 x) (pr2:derivable_pt f2 x) (na:f2 x <> 0), derive_pt (f1 / f2) x (derivable_pt_div _ _ _ pr1 pr2 na) = (derive_pt f1 x pr1 * f2 x - derive_pt f2 x pr2 * f1 x) / Rsqr (f2 x).
Lemma Rrepr_0 : Rrepr 0 == 0.
Lemma Rrepr_1 : Rrepr 1 == 1.
Lemma Rrepr_plus : forall x y:R, Rrepr (x + y) == Rrepr x + Rrepr y.
Lemma Rrepr_opp : forall x:R, Rrepr (- x) == - Rrepr x.
Lemma Rrepr_minus : forall x y:R, Rrepr (x - y) == Rrepr x - Rrepr y.
Lemma Rrepr_mult : forall x y:R, Rrepr (x * y) == Rrepr x * Rrepr y.
Lemma Rrepr_inv : forall (x:R) (xnz : Rrepr x # 0), Rrepr (/ x) == (/ Rrepr x) xnz.
Lemma Rrepr_le : forall x y:R, (x <= y)%R <-> Rrepr x <= Rrepr y.
Lemma Rrepr_appart : forall x y:R, (x <> y)%R -> Rrepr x # Rrepr y.
Lemma Rappart_repr : forall x y:R, Rrepr x # Rrepr y -> (x <> y)%R.
Lemma Rplus_comm : forall r1 r2:R, r1 + r2 = r2 + r1.
Lemma Rplus_assoc : forall r1 r2 r3:R, r1 + r2 + r3 = r1 + (r2 + r3).
Lemma Rplus_opp_r : forall r:R, r + - r = 0.
Lemma Rplus_0_l : forall r:R, 0 + r = r.
Lemma Rmult_comm : forall r1 r2:R, r1 * r2 = r2 * r1.
Lemma Rmult_assoc : forall r1 r2 r3:R, r1 * r2 * r3 = r1 * (r2 * r3).
Lemma Rinv_l : forall r:R, r <> 0 -> / r * r = 1.
Lemma Rmult_1_l : forall r:R, 1 * r = r.
Lemma R1_neq_R0 : 1 <> 0.
Lemma Rmult_plus_distr_l : forall r1 r2 r3:R, r1 * (r2 + r3) = r1 * r2 + r1 * r3.
Lemma Rlt_asym : forall r1 r2:R, r1 < r2 -> ~ r2 < r1.
Lemma Rlt_trans : forall r1 r2 r3:R, r1 < r2 -> r2 < r3 -> r1 < r3.
Lemma Rplus_lt_compat_l : forall r r1 r2:R, r1 < r2 -> r + r1 < r + r2.
Lemma Rmult_lt_compat_l : forall r r1 r2:R, 0 < r -> r1 < r2 -> r * r1 < r * r2.
Lemma sig_forall_dec : {n | ~P n} + {forall n, P n}.
Theorem not_not_archimedean : forall r : R, ~ (forall n : nat, (INR n <= r)%R).
Lemma sig_not_dec : forall P : Prop, {not (not P)} + {not P}.
Lemma derivable_pt_inv : forall (f:R -> R) (x:R), f x <> 0 -> derivable_pt f x -> derivable_pt (/ f) x.
Lemma pr_nu_var : forall (f g:R -> R) (x:R) (pr1:derivable_pt f x) (pr2:derivable_pt g x), f = g -> derive_pt f x pr1 = derive_pt g x pr2.
Lemma pr_nu_var2 : forall (f g:R -> R) (x:R) (pr1:derivable_pt f x) (pr2:derivable_pt g x), (forall h:R, f h = g h) -> derive_pt f x pr1 = derive_pt g x pr2.
Lemma derivable_inv : forall f:R -> R, (forall x:R, f x <> 0) -> derivable f -> derivable (/ f).
Lemma derive_pt_inv : forall (f:R -> R) (x:R) (pr:derivable_pt f x) (na:f x <> 0), derive_pt (/ f) x (derivable_pt_inv f x na pr) = - derive_pt f x pr / Rsqr (f x).
Lemma Rabs_derive_1 : forall x:R, 0 < x -> derivable_pt_lim Rabs x 1.
Lemma Rabs_derive_2 : forall x:R, x < 0 -> derivable_pt_lim Rabs x (-1).
Lemma Rderivable_pt_abs : forall x:R, x <> 0 -> derivable_pt Rabs x.
Lemma Rcontinuity_abs : continuity Rabs.
Lemma continuity_finite_sum : forall (An:nat -> R) (N:nat), continuity (fun y:R => sum_f_R0 (fun k:nat => An k * y ^ k) N).
Lemma derivable_pt_lim_fs : forall (An:nat -> R) (x:R) (N:nat), (0 < N)%nat -> derivable_pt_lim (fun y:R => sum_f_R0 (fun k:nat => An k * y ^ k) N) x (sum_f_R0 (fun k:nat => INR (S k) * An (S k) * x ^ k) (pred N)).
Lemma derivable_pt_lim_finite_sum : forall (An:nat -> R) (x:R) (N:nat), derivable_pt_lim (fun y:R => sum_f_R0 (fun k:nat => An k * y ^ k) N) x match N with | O => 0 | _ => sum_f_R0 (fun k:nat => INR (S k) * An (S k) * x ^ k) (pred N) end.
Lemma derivable_pt_finite_sum : forall (An:nat -> R) (N:nat) (x:R), derivable_pt (fun y:R => sum_f_R0 (fun k:nat => An k * y ^ k) N) x.
Lemma derivable_finite_sum : forall (An:nat -> R) (N:nat), derivable (fun y:R => sum_f_R0 (fun k:nat => An k * y ^ k) N).
Lemma derivable_pt_lim_cosh : forall x:R, derivable_pt_lim cosh x (sinh x).
Lemma derivable_pt_lim_sinh : forall x:R, derivable_pt_lim sinh x (cosh x).
Lemma derivable_pt_exp : forall x:R, derivable_pt exp x.
Lemma derivable_pt_cosh : forall x:R, derivable_pt cosh x.
Lemma derivable_pt_sinh : forall x:R, derivable_pt sinh x.
Lemma derivable_exp : derivable exp.
Lemma derivable_cosh : derivable cosh.
Lemma derivable_sinh : derivable sinh.
Lemma derive_pt_exp : forall x:R, derive_pt exp x (derivable_pt_exp x) = exp x.
Lemma derive_pt_cosh : forall x:R, derive_pt cosh x (derivable_pt_cosh x) = sinh x.
Lemma derive_pt_sinh : forall x:R, derive_pt sinh x (derivable_pt_sinh x) = cosh x.
Lemma sinh_lt : forall x y, x < y -> sinh x < sinh y.
Lemma eps2_Rgt_R0 : forall eps:R, eps > 0 -> eps * / 2 > 0.
Lemma eps2 : forall eps:R, eps * / 2 + eps * / 2 = eps.
Lemma eps4 : forall eps:R, eps * / (2 + 2) + eps * / (2 + 2) = eps * / 2.
Lemma Rlt_eps2_eps : forall eps:R, eps > 0 -> eps * / 2 < eps.
Lemma Rlt_eps4_eps : forall eps:R, eps > 0 -> eps * / (2 + 2) < eps.
Lemma prop_eps : forall r:R, (forall eps:R, eps > 0 -> r < eps) -> r <= 0.
Lemma Alembert_C1 : forall An:nat -> R, (forall n:nat, 0 < An n) -> Un_cv (fun n:nat => Rabs (An (S n) / An n)) 0 -> { l:R | Un_cv (fun N:nat => sum_f_R0 An N) l }.
Lemma Alembert_C2_aux_positivity : forall Xn : nat -> R, let Yn i := (2 * Rabs (Xn i) + Xn i) / 2 in (forall n, Xn n <> 0) -> forall n, 0 < Yn n.
Lemma Alembert_C2_aux_Un_cv : forall Xn : nat -> R, let Yn i := (2 * Rabs (Xn i) + Xn i) / 2 in (forall n, Xn n <> 0) -> Un_cv (fun n:nat => Rabs (Xn (S n) / Xn n)) 0 -> Un_cv (fun n => Rabs (Yn (S n) / Yn n)) 0.
Lemma Alembert_C2 : forall An:nat -> R, (forall n:nat, An n <> 0) -> Un_cv (fun n:nat => Rabs (An (S n) / An n)) 0 -> { l:R | Un_cv (fun N:nat => sum_f_R0 An N) l }.
Lemma AlembertC3_step1 : forall (An:nat -> R) (x:R), x <> 0 -> (forall n:nat, An n <> 0) -> Un_cv (fun n:nat => Rabs (An (S n) / An n)) 0 -> { l:R | Pser An x l }.
Lemma AlembertC3_step2 : forall (An:nat -> R) (x:R), x = 0 -> { l:R | Pser An x l }.
Theorem Alembert_C3 : forall (An:nat -> R) (x:R), (forall n:nat, An n <> 0) -> Un_cv (fun n:nat => Rabs (An (S n) / An n)) 0 -> { l:R | Pser An x l }.
Lemma Alembert_C4 : forall (An:nat -> R) (k:R), 0 <= k < 1 -> (forall n:nat, 0 < An n) -> Un_cv (fun n:nat => Rabs (An (S n) / An n)) k -> { l:R | Un_cv (fun N:nat => sum_f_R0 An N) l }.
Lemma Alembert_C5 : forall (An:nat -> R) (k:R), 0 <= k < 1 -> (forall n:nat, An n <> 0) -> Un_cv (fun n:nat => Rabs (An (S n) / An n)) k -> { l:R | Un_cv (fun N:nat => sum_f_R0 An N) l }.
Lemma Alembert_C6 : forall (An:nat -> R) (x k:R), 0 < k -> (forall n:nat, An n <> 0) -> Un_cv (fun n:nat => Rabs (An (S n) / An n)) k -> Rabs x < / k -> { l:R | Pser An x l }.
Theorem R_complete : forall Un:nat -> R, Cauchy_crit Un -> { l:R | Un_cv Un l } .
Lemma INR_fact_neq_0 : forall n:nat, INR (fact n) <> 0.
Lemma fact_simpl : forall n:nat, fact (S n) = (S n * fact n)%nat.
Lemma simpl_fact : forall n:nat, / INR (fact (S n)) * / / INR (fact n) = / INR (S n).
Lemma Rlt_R0_R2 : 0 < 2.
Lemma CVN_R_cos : forall fn:nat -> R -> R, fn = (fun (N:nat) (x:R) => (-1) ^ N / INR (fact (2 * N)) * x ^ (2 * N)) -> CVN_R fn.
Lemma continuity_cos : continuity cos.
Lemma sin_gt_cos_7_8 : sin (7 / 8) > cos (7 / 8).
Lemma Alembert_exp : Un_cv (fun n:nat => Rabs (/ INR (fact (S n)) * / / INR (fact n))) 0.
Lemma sqrt_var_maj : forall h:R, Rabs h <= 1 -> Rabs (sqrt (1 + h) - 1) <= Rabs h.
Lemma sqrt_continuity_pt_R1 : continuity_pt sqrt 1.
Lemma sqrt_continuity_pt : forall x:R, 0 < x -> continuity_pt sqrt x.
Lemma derivable_pt_lim_sqrt : forall x:R, 0 < x -> derivable_pt_lim sqrt x (/ (2 * sqrt x)).
Lemma derivable_pt_sqrt : forall x:R, 0 < x -> derivable_pt sqrt x.
Lemma derive_pt_sqrt : forall (x:R) (pr:0 < x), derive_pt sqrt x (derivable_pt_sqrt _ pr) = / (2 * sqrt x).
Lemma continuity_pt_sqrt : forall x:R, 0 <= x -> continuity_pt sqrt x.
Lemma Rle_refl : forall r, r <= r.
Lemma tech1 : forall (An:nat -> R) (N:nat), (forall n:nat, (n <= N)%nat -> 0 < An n) -> 0 < sum_f_R0 An N.
Lemma tech2 : forall (An:nat -> R) (m n:nat), (m < n)%nat -> sum_f_R0 An n = sum_f_R0 An m + sum_f_R0 (fun i:nat => An (S m + i)%nat) (n - S m).
Lemma tech3 : forall (k:R) (N:nat), k <> 1 -> sum_f_R0 (fun i:nat => k ^ i) N = (1 - k ^ S N) / (1 - k).
Lemma tech4 : forall (An:nat -> R) (k:R) (N:nat), 0 <= k -> (forall i:nat, An (S i) < k * An i) -> An N <= An 0%nat * k ^ N.
Lemma tech5 : forall (An:nat -> R) (N:nat), sum_f_R0 An (S N) = sum_f_R0 An N + An (S N).
Lemma tech6 : forall (An:nat -> R) (k:R) (N:nat), 0 <= k -> (forall i:nat, An (S i) < k * An i) -> sum_f_R0 An N <= An 0%nat * sum_f_R0 (fun i:nat => k ^ i) N.
Lemma tech7 : forall r1 r2:R, r1 <> 0 -> r2 <> 0 -> r1 <> r2 -> / r1 <> / r2.
Lemma tech11 : forall (An Bn Cn:nat -> R) (N:nat), (forall i:nat, An i = Bn i - Cn i) -> sum_f_R0 An N = sum_f_R0 Bn N - sum_f_R0 Cn N.
Lemma tech12 : forall (An:nat -> R) (x l:R), Un_cv (fun N:nat => sum_f_R0 (fun i:nat => An i * x ^ i) N) l -> Pser An x l.
Lemma scal_sum : forall (An:nat -> R) (N:nat) (x:R), x * sum_f_R0 An N = sum_f_R0 (fun i:nat => An i * x) N.
Lemma decomp_sum : forall (An:nat -> R) (N:nat), (0 < N)%nat -> sum_f_R0 An N = An 0%nat + sum_f_R0 (fun i:nat => An (S i)) (pred N).
Lemma plus_sum : forall (An Bn:nat -> R) (N:nat), sum_f_R0 (fun i:nat => An i + Bn i) N = sum_f_R0 An N + sum_f_R0 Bn N.
Lemma sum_eq : forall (An Bn:nat -> R) (N:nat), (forall i:nat, (i <= N)%nat -> An i = Bn i) -> sum_f_R0 An N = sum_f_R0 Bn N.
Lemma uniqueness_sum : forall (An:nat -> R) (l1 l2:R), infinite_sum An l1 -> infinite_sum An l2 -> l1 = l2.
Lemma minus_sum : forall (An Bn:nat -> R) (N:nat), sum_f_R0 (fun i:nat => An i - Bn i) N = sum_f_R0 An N - sum_f_R0 Bn N.
Lemma sum_decomposition : forall (An:nat -> R) (N:nat), sum_f_R0 (fun l:nat => An (2 * l)%nat) (S N) + sum_f_R0 (fun l:nat => An (S (2 * l))) N = sum_f_R0 An (2 * S N).
Lemma sum_Rle : forall (An Bn:nat -> R) (N:nat), (forall n:nat, (n <= N)%nat -> An n <= Bn n) -> sum_f_R0 An N <= sum_f_R0 Bn N.
Lemma Rsum_abs : forall (An:nat -> R) (N:nat), Rabs (sum_f_R0 An N) <= sum_f_R0 (fun l:nat => Rabs (An l)) N.
Lemma sum_cte : forall (x:R) (N:nat), sum_f_R0 (fun _:nat => x) N = x * INR (S N).
Lemma sum_growing : forall (An Bn:nat -> R) (N:nat), (forall n:nat, An n <= Bn n) -> sum_f_R0 An N <= sum_f_R0 Bn N.
Lemma Rabs_triang_gen : forall (An:nat -> R) (N:nat), Rabs (sum_f_R0 An N) <= sum_f_R0 (fun i:nat => Rabs (An i)) N.
Lemma cond_pos_sum : forall (An:nat -> R) (N:nat), (forall n:nat, 0 <= An n) -> 0 <= sum_f_R0 An N.
Lemma Boule_half_to_interval : forall x, Boule (/2) posreal_half x -> 0 <= x <= 1.
Lemma Boule_lt : forall c r x, Boule c r x -> Rabs x < Rabs c + r.
Lemma Un_cv_ext : forall un vn, (forall n, un n = vn n) -> forall l, Un_cv un l -> Un_cv vn l.
Lemma Alt_first_term_bound : forall f l N n, Un_decreasing f -> Un_cv f 0 -> Un_cv (sum_f_R0 (tg_alt f)) l -> (N <= n)%nat -> Rdist (sum_f_R0 (tg_alt f) n) l <= f N.
Lemma Alt_CVU : forall (f : nat -> R -> R) g h c r, (forall x, Boule c r x ->Un_decreasing (fun n => f n x)) -> (forall x, Boule c r x -> Un_cv (fun n => f n x) 0) -> (forall x, Boule c r x -> Un_cv (sum_f_R0 (tg_alt (fun i => f i x))) (g x)) -> (forall x n, Boule c r x -> f n x <= h n) -> (Un_cv h 0) -> CVU (fun N x => sum_f_R0 (tg_alt (fun i => f i x)) N) g c r.
Lemma pow2_ge_0 : forall x, 0 <= x^2.
Lemma pow2_abs : forall x, Rabs x^2 = x^2.
Lemma derivable_pt_tan : forall x, -PI/2 < x < PI/2 -> derivable_pt tan x.
Lemma derive_pt_tan : forall x, forall (Pr1: -PI/2 < x < PI/2), derive_pt tan x (derivable_pt_tan x Pr1) = 1 + (tan x)^2.
Lemma derive_increasing_interv : forall (a b : R) (f : R -> R), a < b -> forall (pr:forall x, a < x < b -> derivable_pt f x), (forall t:R, forall (t_encad : a < t < b), 0 < derive_pt f t (pr t t_encad)) -> forall x y:R, a < x < b -> a < y < b -> x < y -> f x < f y.
Lemma plus_Rsqr_gt_0 : forall x, 1 + x ^ 2 > 0.
Lemma PI2_lower_bound : forall x, 0 < x < 2 -> 0 < cos x -> x < PI/2.
Lemma PI2_3_2 : 3/2 < PI/2.
Lemma PI2_1 : 1 < PI/2.
Lemma tan_increasing : forall x y, -PI/2 < x -> x < y -> y < PI/2 -> tan x < tan y.
Lemma tan_inj : forall x y, -PI/2 < x < PI/2 -> -PI/2 < y < PI/2 -> tan x = tan y -> x = y.
Lemma tan_PI : tan PI = 0.
Lemma sin_3PI2 : sin (3 * (PI / 2)) = -1.
Lemma tan_2PI : tan (2 * PI) = 0.
Lemma sin_cos_PI4 : sin (PI / 4) = cos (PI / 4).
Lemma sin_PI3_cos_PI6 : sin (PI / 3) = cos (PI / 6).
Lemma sin_PI6_cos_PI3 : cos (PI / 3) = sin (PI / 6).
Lemma PI6_RGT_0 : 0 < PI / 6.
Lemma PI6_RLT_PI2 : PI / 6 < PI / 2.
Lemma sin_PI6 : sin (PI / 6) = 1 / 2.
Lemma sqrt2_neq_0 : sqrt 2 <> 0.
Lemma R1_sqrt2_neq_0 : 1 / sqrt 2 <> 0.
Lemma sqrt3_2_neq_0 : 2 * sqrt 3 <> 0.
Lemma Rlt_sqrt2_0 : 0 < sqrt 2.
Lemma Rlt_sqrt3_0 : 0 < sqrt 3.
Lemma PI4_RGT_0 : 0 < PI / 4.
Lemma cos_PI4 : cos (PI / 4) = 1 / sqrt 2.
Lemma sin_PI4 : sin (PI / 4) = 1 / sqrt 2.
Lemma tan_PI4 : tan (PI / 4) = 1.
Lemma cos_3PI4 : cos (3 * (PI / 4)) = -1 / sqrt 2.
Lemma sin_3PI4 : sin (3 * (PI / 4)) = 1 / sqrt 2.
Lemma cos_PI6 : cos (PI / 6) = sqrt 3 / 2.
Lemma tan_PI6 : tan (PI / 6) = 1 / sqrt 3.
Lemma sin_PI3 : sin (PI / 3) = sqrt 3 / 2.
Lemma cos_PI3 : cos (PI / 3) = 1 / 2.
Lemma tan_PI3 : tan (PI / 3) = sqrt 3.
Lemma sin_2PI3 : sin (2 * (PI / 3)) = sqrt 3 / 2.
Lemma cos_2PI3 : cos (2 * (PI / 3)) = -1 / 2.
Lemma tan_2PI3 : tan (2 * (PI / 3)) = - sqrt 3.
Lemma cos_5PI4 : cos (5 * (PI / 4)) = -1 / sqrt 2.
Lemma sin_5PI4 : sin (5 * (PI / 4)) = -1 / sqrt 2.
Lemma sin_cos5PI4 : cos (5 * (PI / 4)) = sin (5 * (PI / 4)).
Lemma Rgt_3PI2_0 : 0 < 3 * (PI / 2).
Lemma Rgt_2PI_0 : 0 < 2 * PI.
Lemma Rlt_PI_3PI2 : PI < 3 * (PI / 2).
Lemma Rlt_3PI2_2PI : 3 * (PI / 2) < 2 * PI.
Lemma sum_N_predN : forall (An:nat -> R) (N:nat), (0 < N)%nat -> sum_f_R0 An N = sum_f_R0 An (pred N) + An N.
Lemma sum_plus : forall (An Bn:nat -> R) (N:nat), sum_f_R0 (fun l:nat => An l + Bn l) N = sum_f_R0 An N + sum_f_R0 Bn N.
Theorem cauchy_finite : forall (An Bn:nat -> R) (N:nat), (0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k:nat => sum_f_R0 (fun p:nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k:nat => sum_f_R0 (fun l:nat => An (S (l + k)) * Bn (N - l)%nat) (pred (N - k))) (pred N).
Lemma Req_dec : forall r1 r2:R, {r1 = r2} + {r1 <> r2}.
Lemma f_incr_implies_g_incr_interv : forall f g:R->R, forall lb ub, lb < ub -> (forall x y, lb <= x -> x < y -> y <= ub -> f x < f y) -> (forall x, f lb <= x -> x <= f ub -> (comp f g) x = id x) -> (forall x , f lb <= x -> x <= f ub -> lb <= g x <= ub) -> (forall x y, f lb <= x -> x < y -> y <= f ub -> g x < g y).
Lemma derivable_pt_id_interv : forall (lb ub x:R), lb <= x <= ub -> derivable_pt id x.
Lemma pr_nu_var2_interv : forall (f g : R -> R) (lb ub x : R) (pr1 : derivable_pt f x) (pr2 : derivable_pt g x), lb < ub -> lb < x < ub -> (forall h : R, lb < h < ub -> f h = g h) -> derive_pt f x pr1 = derive_pt g x pr2.
Lemma leftinv_is_rightinv : forall (f g:R->R), (forall x y, x < y -> f x < f y) -> (forall x, (comp f g) x = id x) -> (forall x, (comp g f) x = id x).
Lemma leftinv_is_rightinv_interv : forall (f g:R->R) (lb ub:R), (forall x y, lb <= x -> x < y -> y <= ub -> f x < f y) -> (forall y, f lb <= y -> y <= f ub -> (comp f g) y = id y) -> (forall x, f lb <= x -> x <= f ub -> lb <= g x <= ub) -> forall x, lb <= x <= ub -> (comp g f) x = id x.
Lemma IVT_interv_prelim0 : forall (x y:R) (P:R->bool) (N:nat), x < y -> x <= Dichotomy_ub x y P N <= y /\ x <= Dichotomy_lb x y P N <= y.
Lemma IVT_interv_prelim1 : forall (x y x0:R) (D : R -> bool), x < y -> Un_cv (dicho_up x y D) x0 -> x <= x0 <= y.
Lemma IVT_interv : forall (f : R -> R) (x y : R), (forall a, x <= a <= y -> continuity_pt f a) -> x < y -> f x < 0 -> 0 < f y -> {z : R | x <= z <= y /\ f z = 0}.
Lemma RisLinearOrder : isLinearOrder Rlt.
Lemma RdisjunctEpsilon : forall a b c d : R, (a < b)%R \/ (c < d)%R -> (a < b)%R + (c < d)%R.
Lemma continuity_sin : continuity sin.
Lemma CVN_R_sin : forall fn:nat -> R -> R, fn = (fun (N:nat) (x:R) => (-1) ^ N / INR (fact (2 * N + 1)) * x ^ (2 * N)) -> CVN_R fn.
Lemma derivable_pt_lim_sin_0 : derivable_pt_lim sin 0 1.
Lemma derivable_pt_lim_cos_0 : derivable_pt_lim cos 0 0.
Theorem derivable_pt_lim_sin : forall x:R, derivable_pt_lim sin x (cos x).
Lemma derivable_pt_lim_cos : forall x:R, derivable_pt_lim cos x (- sin x).
Lemma derivable_pt_sin : forall x:R, derivable_pt sin x.
Lemma derivable_pt_cos : forall x:R, derivable_pt cos x.
Lemma derivable_sin : derivable sin.
Lemma derivable_cos : derivable cos.
Lemma derive_pt_sin : forall x:R, derive_pt sin x (derivable_pt_sin _) = cos x.
Lemma derive_pt_cos : forall x:R, derive_pt cos x (derivable_pt_cos _) = - sin x.
Lemma sum_maj1 : forall (fn:nat -> R -> R) (An:nat -> R) (x l1 l2:R) (N:nat), Un_cv (fun n:nat => SP fn n x) l1 -> Un_cv (fun n:nat => sum_f_R0 An n) l2 -> (forall n:nat, Rabs (fn n x) <= An n) -> Rabs (l1 - SP fn N x) <= l2 - sum_f_R0 An N.
Lemma Rseries_CV_comp : forall An Bn:nat -> R, (forall n:nat, 0 <= An n <= Bn n) -> { l:R | Un_cv (fun N:nat => sum_f_R0 Bn N) l } -> { l:R | Un_cv (fun N:nat => sum_f_R0 An N) l }.
Lemma Cesaro : forall (An Bn:nat -> R) (l:R), Un_cv Bn l -> (forall n:nat, 0 < An n) -> cv_infty (fun n:nat => sum_f_R0 An n) -> Un_cv (fun n:nat => sum_f_R0 (fun k:nat => An k * Bn k) n / sum_f_R0 An n) l.
Lemma Cesaro_1 : forall (An:nat -> R) (l:R), Un_cv An l -> Un_cv (fun n:nat => sum_f_R0 An (pred n) / INR n) l.
Lemma Rmax_l : forall x y, y<=x -> Rmax x y = x.
Lemma Rmax_r : forall x y, x<=y -> Rmax x y = y.
Lemma Rmin_l : forall x y, x<=y -> Rmin x y = x.
Lemma Rmin_r : forall x y, y<=x -> Rmin x y = y.
Theorem MVT : forall (f g:R -> R) (a b:R) (pr1:forall c:R, a < c < b -> derivable_pt f c) (pr2:forall c:R, a < c < b -> derivable_pt g c), a < b -> (forall c:R, a <= c <= b -> continuity_pt f c) -> (forall c:R, a <= c <= b -> continuity_pt g c) -> exists c : R, (exists P : a < c < b, (g b - g a) * derive_pt f c (pr1 c P) = (f b - f a) * derive_pt g c (pr2 c P)).
Lemma MVT_cor1 : forall (f:R -> R) (a b:R) (pr:derivable f), a < b -> exists c : R, f b - f a = derive_pt f c (pr c) * (b - a) /\ a < c < b.
Theorem MVT_cor2 : forall (f f':R -> R) (a b:R), a < b -> (forall c:R, a <= c <= b -> derivable_pt_lim f c (f' c)) -> exists c : R, f b - f a = f' c * (b - a) /\ a < c < b.
Lemma MVT_cor3 : forall (f f':R -> R) (a b:R), a < b -> (forall x:R, a <= x -> x <= b -> derivable_pt_lim f x (f' x)) -> exists c : R, a <= c /\ c <= b /\ f b = f a + f' c * (b - a).
Lemma Rolle : forall (f:R -> R) (a b:R) (pr:forall x:R, a < x < b -> derivable_pt f x), (forall x:R, a <= x <= b -> continuity_pt f x) -> a < b -> f a = f b -> exists c : R, (exists P : a < c < b, derive_pt f c (pr c P) = 0).
Lemma nonneg_derivative_1 : forall (f:R -> R) (pr:derivable f), (forall x:R, 0 <= derive_pt f x (pr x)) -> increasing f.
Lemma nonpos_derivative_0 : forall (f:R -> R) (pr:derivable f), decreasing f -> forall x:R, derive_pt f x (pr x) <= 0.
Lemma increasing_decreasing_opp : forall f:R -> R, increasing f -> decreasing (- f)%F.
Lemma nonpos_derivative_1 : forall (f:R -> R) (pr:derivable f), (forall x:R, derive_pt f x (pr x) <= 0) -> decreasing f.
Lemma positive_derivative : forall (f:R -> R) (pr:derivable f), (forall x:R, 0 < derive_pt f x (pr x)) -> strict_increasing f.
Lemma strictincreasing_strictdecreasing_opp : forall f:R -> R, strict_increasing f -> strict_decreasing (- f)%F.
Lemma negative_derivative : forall (f:R -> R) (pr:derivable f), (forall x:R, derive_pt f x (pr x) < 0) -> strict_decreasing f.
Lemma null_derivative_0 : forall (f:R -> R) (pr:derivable f), constant f -> forall x:R, derive_pt f x (pr x) = 0.
Lemma increasing_decreasing : forall f:R -> R, increasing f -> decreasing f -> constant f.
Lemma null_derivative_1 : forall (f:R -> R) (pr:derivable f), (forall x:R, derive_pt f x (pr x) = 0) -> constant f.
Lemma derive_increasing_interv_ax : forall (a b:R) (f:R -> R) (pr:derivable f), a < b -> ((forall t:R, a < t < b -> 0 < derive_pt f t (pr t)) -> forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x < f y) /\ ((forall t:R, a < t < b -> 0 <= derive_pt f t (pr t)) -> forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x <= f y).
Lemma derive_increasing_interv : forall (a b:R) (f:R -> R) (pr:derivable f), a < b -> (forall t:R, a < t < b -> 0 < derive_pt f t (pr t)) -> forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x < f y.
Lemma derive_increasing_interv_var : forall (a b:R) (f:R -> R) (pr:derivable f), a < b -> (forall t:R, a < t < b -> 0 <= derive_pt f t (pr t)) -> forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x <= f y.
Theorem IAF : forall (f:R -> R) (a b k:R) (pr:derivable f), a <= b -> (forall c:R, a <= c <= b -> derive_pt f c (pr c) <= k) -> f b - f a <= k * (b - a).
Lemma IAF_var : forall (f g:R -> R) (a b:R) (pr1:derivable f) (pr2:derivable g), a <= b -> (forall c:R, a <= c <= b -> derive_pt g c (pr2 c) <= derive_pt f c (pr1 c)) -> g b - g a <= f b - f a.
Lemma null_derivative_loc : forall (f:R -> R) (a b:R) (pr:forall x:R, a < x < b -> derivable_pt f x), (forall x:R, a <= x <= b -> continuity_pt f x) -> (forall (x:R) (P:a < x < b), derive_pt f x (pr x P) = 0) -> constant_D_eq f (fun x:R => a <= x <= b) (f a).
Lemma antiderivative_Ucte : forall (f g1 g2:R -> R) (a b:R), antiderivative f g1 a b -> antiderivative f g2 a b -> exists c : R, (forall x:R, a <= x <= b -> g1 x = g2 x + c).
Lemma MVT_abs : forall (f f' : R -> R) (a b : R), (forall c : R, Rmin a b <= c <= Rmax a b -> derivable_pt_lim f c (f' c)) -> exists c : R, Rabs (f b - f a) = Rabs (f' c) * Rabs (b - a) /\ Rmin a b <= c <= Rmax a b.
Lemma formule : forall (x h l1 l2:R) (f1 f2:R -> R), h <> 0 -> f2 x <> 0 -> f2 (x + h) <> 0 -> (f1 (x + h) / f2 (x + h) - f1 x / f2 x) / h - (l1 * f2 x - l2 * f1 x) / Rsqr (f2 x) = / f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1) + l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h)) - f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2) + l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x).
Lemma minus_neq_O : forall n i:nat, (i < n)%nat -> (n - i)%nat <> 0%nat.
Lemma le_minusni_n : forall n i:nat, (i <= n)%nat -> (n - i <= n)%nat.
Lemma lt_minus_O_lt : forall m n:nat, (m < n)%nat -> (0 < n - m)%nat.
Lemma even_odd_cor : forall n:nat, exists p : nat, n = (2 * p)%nat \/ n = S (2 * p).
Lemma le_double : forall m n:nat, (2 * m <= 2 * n)%nat -> (m <= n)%nat.
Lemma euclidian_division : forall x y:R, y <> 0 -> exists k : Z, (exists r : R, x = IZR k * y + r /\ 0 <= r < Rabs y).
Lemma tech8 : forall n i:nat, (n <= S n + i)%nat.
Lemma CR_cv_extens : forall {R : ConstructiveReals} (xn yn : nat -> CRcarrier R) (l : CRcarrier R), (forall n:nat, xn n == yn n) -> CR_cv R xn l -> CR_cv R yn l.
Lemma CR_cv_opp : forall {R : ConstructiveReals} (xn : nat -> CRcarrier R) (l : CRcarrier R), CR_cv R xn l -> CR_cv R (fun n => - xn n) (- l).
Lemma CR_cv_plus : forall {R : ConstructiveReals} (xn yn : nat -> CRcarrier R) (a b : CRcarrier R), CR_cv R xn a -> CR_cv R yn b -> CR_cv R (fun n => xn n + yn n) (a + b).
Lemma CR_cv_unique : forall {R : ConstructiveReals} (xn : nat -> CRcarrier R) (a b : CRcarrier R), CR_cv R xn a -> CR_cv R xn b -> a == b.
Lemma CR_cv_eq : forall {R : ConstructiveReals} (v u : nat -> CRcarrier R) (s : CRcarrier R), (forall n:nat, u n == v n) -> CR_cv R u s -> CR_cv R v s.
Lemma CR_cauchy_eq : forall {R : ConstructiveReals} (un vn : nat -> CRcarrier R), (forall n:nat, un n == vn n) -> CR_cauchy R un -> CR_cauchy R vn.
Lemma CR_cv_proper : forall {R : ConstructiveReals} (un : nat -> CRcarrier R) (a b : CRcarrier R), CR_cv R un a -> a == b -> CR_cv R un b.
Lemma Pos_pow_1_r: forall p : positive, (1^p = 1)%positive.
Lemma Pos_le_multiple : forall n p : positive, (n <= p * n)%positive.
Lemma Pos_pow_le_mono_r : forall a b c : positive, (b <= c)%positive -> (a ^ b <= a ^ c)%positive.
Lemma Rlt_mult_inv_pos : forall x y:R, 0 < x -> 0 < y -> 0 < x * / y.
Lemma Rlt_zero_pos_plus1 : forall x:R, 0 < x -> 0 < 1 + x.
Lemma Rle_zero_pos_plus1 : forall x:R, 0 <= x -> 0 <= 1 + x.
Lemma Rle_mult_inv_pos : forall x y:R, 0 <= x -> 0 < y -> 0 <= x * / y.
Lemma eq_incl : forall (x y:Z), x = y -> x <= y /\ y <= x.
Lemma elim_concl_eq : forall x y, (x < y \/ y < x -> False) -> x = y.
Lemma elim_concl_le : forall x y, (y < x -> False) -> x <= y.
Lemma elim_concl_lt : forall x y, (y <= x -> False) -> x < y.
Lemma Zlt_le_add_1 : forall n m : Z, n < m -> n + 1 <= m.
Lemma to_Z_bounded : forall x, (0 <= to_Z x < 9223372036854775808)%Z.
Lemma Qsor : SOR 0 1 Qplus Qmult Qminus Qopp Qeq Qle Qlt.
Lemma QSORaddon : SORaddon 0 1 Qplus Qmult Qminus Qopp Qeq Qle (* ring elements *) 0 1 Qplus Qmult Qminus Qopp (* coefficients *) Qeq_bool Qle_bool (fun x => x) (fun x => x) (pow_N 1 Qmult).
Lemma to_Z_bounded (x : int) : (-4611686018427387904 <= to_Z x <= 4611686018427387903)%Z.
Lemma Acc_incl : inclusion A R1 R2 -> forall z:A, Acc R2 z -> Acc R1 z.
Theorem wf_incl : inclusion A R1 R2 -> well_founded R2 -> well_founded R1.
Lemma id a : N.of_nat (N.to_nat a) = a.
Lemma inj a a' : N.to_nat a = N.to_nat a' -> a = a'.
Lemma inj_iff a a' : N.to_nat a = N.to_nat a' <-> a = a'.
Lemma inj_0 : N.to_nat 0 = 0.
Lemma inj_double a : N.to_nat (N.double a) = 2*(N.to_nat a).
Lemma inj_succ_double a : N.to_nat (N.succ_double a) = S (2*(N.to_nat a)).
Lemma inj_succ a : N.to_nat (N.succ a) = S (N.to_nat a).
Lemma inj_add a a' : N.to_nat (a + a') = N.to_nat a + N.to_nat a'.
Lemma inj_mul a a' : N.to_nat (a * a') = N.to_nat a * N.to_nat a'.
Lemma inj_sub a a' : N.to_nat (a - a') = N.to_nat a - N.to_nat a'.
Lemma inj_pred a : N.to_nat (N.pred a) = Nat.pred (N.to_nat a).
Lemma inj_div2 a : N.to_nat (N.div2 a) = Nat.div2 (N.to_nat a).
Lemma inj_compare a a' : (a ?= a')%N = (N.to_nat a ?= N.to_nat a').
Lemma inj_div n m : N.to_nat (n / m) = N.to_nat n / N.to_nat m.
Lemma inj_mod a a' : N.to_nat (a mod a') = N.to_nat a mod N.to_nat a'.
Lemma inj_pow a a' : N.to_nat (a ^ a') = N.to_nat a ^ N.to_nat a'.
Lemma inj_max a a' : N.to_nat (N.max a a') = Nat.max (N.to_nat a) (N.to_nat a').
Lemma inj_min a a' : N.to_nat (N.min a a') = Nat.min (N.to_nat a) (N.to_nat a').
Lemma inj_iter a {A} (f:A->A) (x:A) : N.iter a f x = Nat.iter (N.to_nat a) f x.
Lemma id n : N.to_nat (N.of_nat n) = n.
Theorem Rstar_imp_coherent : forall (U:Type) (R:Relation U) (x y:U), Rstar U R x y -> coherent U R x y.
Theorem coherent_symmetric : forall (U:Type) (R:Relation U), Symmetric U (coherent U R).
Theorem Strong_confluence : forall (U:Type) (R:Relation U), Strongly_confluent U R -> Confluent U R.
Theorem Strong_confluence_direct : forall (U:Type) (R:Relation U), Strongly_confluent U R -> Confluent U R.
Theorem Noetherian_contains_Noetherian : forall (U:Type) (R R':Relation U), Noetherian U R -> contains U R R' -> Noetherian U R'.
Theorem Newman : forall (U:Type) (R:Relation U), Noetherian U R -> Locally_confluent U R -> Confluent U R.
Lemma cong_congr : forall x y z t:U, cong x y -> cong z t -> cong (op x z) (op y t).
Lemma comm_right : forall x y z:U, cong (op x (op y z)) (op x (op z y)).
Lemma comm_left : forall x y z:U, cong (op (op x y) z) (op (op y x) z).
Lemma perm_right : forall x y z:U, cong (op (op x y) z) (op (op x z) y).
Lemma perm_left : forall x y z:U, cong (op x (op y z)) (op y (op x z)).
Lemma op_rotate : forall x y z t:U, cong (op x (op y z)) (op z (op x y)).
Lemma twist : forall x y z t:U, cong (op x (op (op y z) t)) (op (op y (op x t)) z).
Theorem Rstar_reflexive : forall (U:Type) (R:Relation U), Reflexive U (Rstar U R).
Theorem Rplus_contains_R : forall (U:Type) (R:Relation U), contains U (Rplus U R) R.
Theorem Rstar_contains_R : forall (U:Type) (R:Relation U), contains U (Rstar U R) R.
Theorem Rstar_contains_Rplus : forall (U:Type) (R:Relation U), contains U (Rstar U R) (Rplus U R).
Theorem Rstar_transitive : forall (U:Type) (R:Relation U), Transitive U (Rstar U R).
Theorem Rstar_cases : forall (U:Type) (R:Relation U) (x y:U), Rstar U R x y -> x = y \/ (exists u : _, R x u /\ Rstar U R u y).
Theorem Rstar_equiv_Rstar1 : forall (U:Type) (R:Relation U), same_relation U (Rstar U R) (Rstar1 U R).
Theorem Rsym_imp_Rstarsym : forall (U:Type) (R:Relation U), Symmetric U R -> Symmetric U (Rstar U R).
Theorem Sstar_contains_Rstar : forall (U:Type) (R S:Relation U), contains U (Rstar U S) R -> contains U (Rstar U S) (Rstar U R).
Theorem star_monotone : forall (U:Type) (R S:Relation U), contains U S R -> contains U (Rstar U S) (Rstar U R).
Theorem RstarRplus_RRstar : forall (U:Type) (R:Relation U) (x y z:U), Rstar U R x y -> Rplus U R y z -> exists u : _, R x u /\ Rstar U R u z.
Theorem Lemma1 : forall (U:Type) (R:Relation U), Strongly_confluent U R -> forall x b:U, Rstar U R x b -> forall a:U, R x a -> exists z : _, Rstar U R a z /\ R b z.
Theorem Empty_set_zero : forall X:Ensemble U, Union U (Empty_set U) X = X.
Theorem Empty_set_zero_right : forall X:Ensemble U, Union U X (Empty_set U) = X.
Theorem Empty_set_zero' : forall x:U, Add U (Empty_set U) x = Singleton U x.
Lemma less_than_empty : forall X:Ensemble U, Included U X (Empty_set U) -> X = Empty_set U.
Theorem Union_commutative : forall A B:Ensemble U, Union U A B = Union U B A.
Theorem Union_associative : forall A B C:Ensemble U, Union U (Union U A B) C = Union U A (Union U B C).
Theorem Union_idempotent : forall A:Ensemble U, Union U A A = A.
Lemma Union_absorbs : forall A B:Ensemble U, Included U B A -> Union U A B = A.
Theorem Couple_as_union : forall x y:U, Union U (Singleton U x) (Singleton U y) = Couple U x y.
Theorem Triple_as_union : forall x y z:U, Union U (Union U (Singleton U x) (Singleton U y)) (Singleton U z) = Triple U x y z.
Theorem Triple_as_Couple : forall x y:U, Couple U x y = Triple U x x y.
Theorem Triple_as_Couple_Singleton : forall x y z:U, Triple U x y z = Union U (Couple U x y) (Singleton U z).
Theorem Intersection_commutative : forall A B:Ensemble U, Intersection U A B = Intersection U B A.
Theorem Distributivity : forall A B C:Ensemble U, Intersection U A (Union U B C) = Union U (Intersection U A B) (Intersection U A C).
Lemma Distributivity_l : forall (A B C : Ensemble U), Intersection U (Union U A B) C = Union U (Intersection U A C) (Intersection U B C).
Theorem Distributivity' : forall A B C:Ensemble U, Union U A (Intersection U B C) = Intersection U (Union U A B) (Union U A C).
Theorem Union_add : forall (A B:Ensemble U) (x:U), Add U (Union U A B) x = Union U A (Add U B x).
Theorem Non_disjoint_union : forall (X:Ensemble U) (x:U), In U X x -> Add U X x = X.
Theorem Non_disjoint_union' : forall (X:Ensemble U) (x:U), ~ In U X x -> Subtract U X x = X.
Lemma singlx : forall x y:U, In U (Add U (Empty_set U) x) y -> x = y.
Lemma incl_add : forall (A B:Ensemble U) (x:U), Included U A B -> Included U (Add U A x) (Add U B x).
Lemma incl_add_x : forall (A B:Ensemble U) (x:U), ~ In U A x -> Included U (Add U A x) (Add U B x) -> Included U A B.
Lemma Add_commutative : forall (A:Ensemble U) (x y:U), Add U (Add U A x) y = Add U (Add U A y) x.
Lemma Add_commutative' : forall (A:Ensemble U) (x y z:U), Add U (Add U (Add U A x) y) z = Add U (Add U (Add U A z) x) y.
Lemma Add_distributes : forall (A B:Ensemble U) (x y:U), Included U B A -> Add U (Add U A x) y = Union U (Add U A x) (Add U B y).
Lemma setcover_intro : forall (U:Type) (A x y:Ensemble U), Strict_Included U x y -> ~ (exists z : _, Strict_Included U x z /\ Strict_Included U z y) -> covers (Ensemble U) (Power_set_PO U A) y x.
Lemma Disjoint_Intersection: forall A s1 s2, Disjoint A s1 s2 -> Intersection A s1 s2 = Empty_set A.
Lemma Intersection_Empty_set_l: forall A s, Intersection A (Empty_set A) s = Empty_set A.
Lemma Intersection_Empty_set_r: forall A s, Intersection A s (Empty_set A) = Empty_set A.
Lemma Seminus_Empty_set_l: forall A s, Setminus A (Empty_set A) s = Empty_set A.
Lemma Seminus_Empty_set_r: forall A s, Setminus A s (Empty_set A) = s.
Lemma Setminus_Union_l: forall A s1 s2 s3, Setminus A (Union A s1 s2) s3 = Union A (Setminus A s1 s3) (Setminus A s2 s3).
Lemma Setminus_Union_r: forall A s1 s2 s3, Setminus A s1 (Union A s2 s3) = Setminus A (Setminus A s1 s2) s3.
Lemma Setminus_Disjoint_noop: forall A s1 s2, Intersection A s1 s2 = Empty_set A -> Setminus A s1 s2 = s1.
Lemma Setminus_Included_empty: forall A s1 s2, Included A s1 s2 -> Setminus A s1 s2 = Empty_set A.
Lemma sincl_add_x : forall (A B:Ensemble U) (x:U), ~ In U A x -> Strict_Included U (Add U A x) (Add U B x) -> Strict_Included U A B.
Lemma incl_soustr_in : forall (X:Ensemble U) (x:U), In U X x -> Included U (Subtract U X x) X.
Lemma incl_soustr : forall (X Y:Ensemble U) (x:U), Included U X Y -> Included U (Subtract U X x) (Subtract U Y x).
Lemma incl_soustr_add_l : forall (X:Ensemble U) (x:U), Included U (Subtract U (Add U X x) x) X.
Lemma incl_soustr_add_r : forall (X:Ensemble U) (x:U), ~ In U X x -> Included U X (Subtract U (Add U X x) x).
Lemma add_soustr_2 : forall (X:Ensemble U) (x:U), In U X x -> Included U X (Add U (Subtract U X x) x).
Lemma add_soustr_1 : forall (X:Ensemble U) (x:U), In U X x -> Included U (Add U (Subtract U X x) x) X.
Lemma add_soustr_xy : forall (X:Ensemble U) (x y:U), x <> y -> Subtract U (Add U X x) y = Add U (Subtract U X y) x.
Lemma incl_st_add_soustr : forall (X Y:Ensemble U) (x:U), ~ In U X x -> Strict_Included U (Add U X x) Y -> Strict_Included U X (Subtract U Y x).
Lemma Sub_Add_new : forall (X:Ensemble U) (x:U), ~ In U X x -> X = Subtract U (Add U X x) x.
Lemma Simplify_add : forall (X X0:Ensemble U) (x:U), ~ In U X x -> ~ In U X0 x -> Add U X x = Add U X0 x -> X = X0.
Lemma Included_Add : forall (X A:Ensemble U) (x:U), Included U X (Add U A x) -> Included U X A \/ (exists A' : _, X = Add U A' x /\ Included U A' A).
Lemma setcover_inv : forall A x y:Ensemble U, covers (Ensemble U) (Power_set_PO U A) y x -> Strict_Included U x y /\ (forall z:Ensemble U, Included U x z -> Included U z y -> x = z \/ z = y).
Theorem Add_covers : forall A a:Ensemble U, Included U a A -> forall x:U, In U A x -> ~ In U a x -> covers (Ensemble U) (Power_set_PO U A) (Add U a x) a.
Theorem covers_Add : forall A a a':Ensemble U, Included U a A -> Included U a' A -> covers (Ensemble U) (Power_set_PO U A) a' a -> exists x : _, a' = Add U a x /\ In U A x /\ ~ In U a x.
Theorem covers_is_Add : forall A a a':Ensemble U, Included U a A -> Included U a' A -> (covers (Ensemble U) (Power_set_PO U A) a' a <-> (exists x : _, a' = Add U a x /\ In U A x /\ ~ In U a x)).
Theorem Singleton_atomic : forall (x:U) (A:Ensemble U), In U A x -> covers (Ensemble U) (Power_set_PO U A) (Singleton U x) (Empty_set U).
Lemma less_than_singleton : forall (X:Ensemble U) (x:U), Strict_Included U X (Singleton U x) -> X = Empty_set U.
Lemma not_included_empty_Inhabited : forall A:Ensemble U, ~ Included U A (Empty_set U) -> Inhabited U A.
Lemma not_empty_Inhabited : forall A:Ensemble U, A <> Empty_set U -> Inhabited U A.
Lemma Inhabited_Setminus : forall X Y:Ensemble U, Included U X Y -> ~ Included U Y X -> Inhabited U (Setminus U Y X).
Lemma Strict_super_set_contains_new_element : forall X Y:Ensemble U, Included U X Y -> X <> Y -> Inhabited U (Setminus U Y X).
Lemma Subtract_intro : forall (A:Ensemble U) (x y:U), In U A y -> x <> y -> In U (Subtract U A x) y.
Lemma Subtract_inv : forall (A:Ensemble U) (x y:U), In U (Subtract U A x) y -> In U A y /\ x <> y.
Lemma Included_Strict_Included : forall X Y:Ensemble U, Included U X Y -> Strict_Included U X Y \/ X = Y.
Lemma Strict_Included_inv : forall X Y:Ensemble U, Strict_Included U X Y -> Included U X Y /\ Inhabited U (Setminus U Y X).
Lemma not_SIncl_empty : forall X:Ensemble U, ~ Strict_Included U X (Empty_set U).
Lemma Complement_Complement : forall A:Ensemble U, Complement U (Complement U A) = A.
Lemma Extension : forall B C:Ensemble U, B = C -> Same_set U B C.
Lemma Noone_in_empty : forall x:U, ~ In U (Empty_set U) x.
Lemma Included_Empty : forall A:Ensemble U, Included U (Empty_set U) A.
Lemma Add_intro1 : forall (A:Ensemble U) (x y:U), In U A y -> In U (Add U A x) y.
Lemma Add_intro2 : forall (A:Ensemble U) (x:U), In U (Add U A x) x.
Lemma Inhabited_add : forall (A:Ensemble U) (x:U), Inhabited U (Add U A x).
Lemma Inhabited_not_empty : forall X:Ensemble U, Inhabited U X -> X <> Empty_set U.
Lemma Add_not_Empty : forall (A:Ensemble U) (x:U), Add U A x <> Empty_set U.
Lemma not_Empty_Add : forall (A:Ensemble U) (x:U), Empty_set U <> Add U A x.
Lemma Singleton_inv : forall x y:U, In U (Singleton U x) y -> x = y.
Lemma Singleton_intro : forall x y:U, x = y -> In U (Singleton U x) y.
Lemma Union_inv : forall (B C:Ensemble U) (x:U), In U (Union U B C) x -> In U B x \/ In U C x.
Lemma Add_inv : forall (A:Ensemble U) (x y:U), In U (Add U A x) y -> In U A y \/ x = y.
Lemma Intersection_inv : forall (B C:Ensemble U) (x:U), In U (Intersection U B C) x -> In U B x /\ In U C x.
Lemma Couple_inv : forall x y z:U, In U (Couple U x y) z -> z = x \/ z = y.
Lemma Setminus_intro : forall (A B:Ensemble U) (x:U), In U A x -> ~ In U B x -> In U (Setminus U A B) x.
Lemma Strict_Included_intro : forall X Y:Ensemble U, Included U X Y /\ X <> Y -> Strict_Included U X Y.
Lemma Strict_Included_strict : forall X:Ensemble U, ~ Strict_Included U X X.
Lemma finite_cardinal : forall X:Ensemble U, Finite U X -> exists n : nat, cardinal U X n.
Lemma cardinal_finite : forall (X:Ensemble U) (n:nat), cardinal U X n -> Finite U X.
Theorem Add_preserves_Finite : forall (X:Ensemble U) (x:U), Finite U X -> Finite U (Add U X x).
Theorem Singleton_is_finite : forall x:U, Finite U (Singleton U x).
Theorem Union_preserves_Finite : forall X Y:Ensemble U, Finite U X -> Finite U Y -> Finite U (Union U X Y).
Lemma Finite_downward_closed : forall A:Ensemble U, Finite U A -> forall X:Ensemble U, Included U X A -> Finite U X.
Lemma Intersection_preserves_finite : forall A:Ensemble U, Finite U A -> forall X:Ensemble U, Finite U (Intersection U X A).
Lemma cardinalO_empty : forall X:Ensemble U, cardinal U X 0 -> X = Empty_set U.
Lemma inh_card_gt_O : forall X:Ensemble U, Inhabited U X -> forall n:nat, cardinal U X n -> n > 0.
Lemma card_soustr_1 : forall (X:Ensemble U) (n:nat), cardinal U X n -> forall x:U, In U X x -> cardinal U (Subtract U X x) (pred n).
Lemma cardinal_Empty : forall m:nat, cardinal U (Empty_set U) m -> 0 = m.
Lemma cardinal_is_functional : forall (X:Ensemble U) (c1:nat), cardinal U X c1 -> forall (Y:Ensemble U) (c2:nat), cardinal U Y c2 -> X = Y -> c1 = c2.
Lemma cardinal_unicity : forall (X:Ensemble U) (n:nat), cardinal U X n -> forall m:nat, cardinal U X m -> n = m.
Lemma card_Add_gen : forall (A:Ensemble U) (x:U) (n n':nat), cardinal U A n -> cardinal U (Add U A x) n' -> n' <= S n.
Lemma incl_st_card_lt : forall (X:Ensemble U) (c1:nat), cardinal U X c1 -> forall (Y:Ensemble U) (c2:nat), cardinal U Y c2 -> Strict_Included U X Y -> c2 > c1.
Lemma incl_card_le : forall (X Y:Ensemble U) (n m:nat), cardinal U X n -> cardinal U Y m -> Included U X Y -> n <= m.
Lemma Generalized_induction_on_finite_sets : forall P:Ensemble U -> Prop, (forall X:Ensemble U, Finite U X -> (forall Y:Ensemble U, Strict_Included U Y X -> P Y) -> P X) -> forall X:Ensemble U, Finite U X -> P X.
Lemma le_refl : forall b, b <= b.
Lemma le_trans : forall b1 b2 b3, b1 <= b2 -> b2 <= b3 -> b1 <= b3.
Lemma le_true : forall b, b <= true.
Lemma false_le : forall b, false <= b.
Lemma Dcompare_inf : forall r:comparison, {r = Eq} + {r = Lt} + {r = Gt}.
Lemma Zcompare_rect (P:Type) (n m:Z) : ((n ?= m) = Eq -> P) -> ((n ?= m) = Lt -> P) -> ((n ?= m) = Gt -> P) -> P.
Lemma Zcompare_rec (P:Set) (n m:Z) : ((n ?= m) = Eq -> P) -> ((n ?= m) = Lt -> P) -> ((n ?= m) = Gt -> P) -> P.
Lemma Zcompare_Gt_Lt_antisym : forall n m:Z, (n ?= m) = Gt <-> (m ?= n) = Lt.
Lemma Zcompare_antisym n m : CompOpp (n ?= m) = (m ?= n).
Lemma Zcompare_Lt_trans : forall n m p:Z, (n ?= m) = Lt -> (m ?= p) = Lt -> (n ?= p) = Lt.
Lemma Zcompare_Gt_trans : forall n m p:Z, (n ?= m) = Gt -> (m ?= p) = Gt -> (n ?= p) = Gt.
Lemma Zcompare_opp n m : (n ?= m) = (- m ?= - n).
Lemma Zcompare_Gt_spec n m : (n ?= m) = Gt -> exists h, n + - m = Zpos h.
Lemma Zcompare_plus_compat n m p : (p + n ?= p + m) = (n ?= m).
Lemma Zplus_compare_compat (r:comparison) (n m p q:Z) : (n ?= m) = r -> (p ?= q) = r -> (n + p ?= m + q) = r.
Lemma Zcompare_succ_Gt n : (Z.succ n ?= n) = Gt.
Lemma Zcompare_Gt_not_Lt n m : (n ?= m) = Gt <-> (n ?= m+1) <> Lt.
Lemma Zcompare_succ_compat n m : (Z.succ n ?= Z.succ m) = (n ?= m).
Lemma Zcompare_mult_compat : forall (p:positive) (n m:Z), (Zpos p * n ?= Zpos p * m) = (n ?= m).
Lemma Zmult_compare_compat_l n m p: p > 0 -> (n ?= m) = (p * n ?= p * m).
Lemma Zmult_compare_compat_r n m p : p > 0 -> (n ?= m) = (n * p ?= m * p).
Lemma Zcompare_elim : forall (c1 c2 c3:Prop) (n m:Z), (n = m -> c1) -> (n < m -> c2) -> (n > m -> c3) -> match n ?= m with | Eq => c1 | Lt => c2 | Gt => c3 end.
Lemma Zcompare_eq_case : forall (c1 c2 c3:Prop) (n m:Z), c1 -> n = m -> match n ?= m with | Eq => c1 | Lt => c2 | Gt => c3 end.
Lemma Zle_compare : forall n m:Z, n <= m -> match n ?= m with | Eq => True | Lt => True | Gt => False end.
Lemma Zlt_compare : forall n m:Z, n < m -> match n ?= m with | Eq => False | Lt => True | Gt => False end.
Lemma Zge_compare : forall n m:Z, n >= m -> match n ?= m with | Eq => True | Lt => False | Gt => True end.
Lemma Zgt_compare : forall n m:Z, n > m -> match n ?= m with | Eq => False | Lt => False | Gt => True end.
Theorem Ztrichotomy_inf n m : {n < m} + {n = m} + {n > m}.
Theorem Ztrichotomy n m : n < m \/ n = m \/ n > m.
Lemma nat_N_Z n : Z.of_N (N.of_nat n) = Z.of_nat n.
Lemma N_nat_Z n : Z.of_nat (N.to_nat n) = Z.of_N n.
Lemma positive_nat_Z p : Z.of_nat (Pos.to_nat p) = Zpos p.
Lemma positive_N_Z p : Z.of_N (Npos p) = Zpos p.
Lemma positive_N_nat p : N.to_nat (Npos p) = Pos.to_nat p.
Lemma positive_nat_N p : N.of_nat (Pos.to_nat p) = Npos p.
Lemma Z_N_nat n : N.to_nat (Z.to_N n) = Z.to_nat n.
Lemma Z_nat_N n : N.of_nat (Z.to_nat n) = Z.to_N n.
Lemma Zabs_N_nat n : N.to_nat (Z.abs_N n) = Z.abs_nat n.
Lemma Zabs_nat_N n : N.of_nat (Z.abs_nat n) = Z.abs_N n.
Lemma id n : Z.to_N (Z.of_N n) = n.
Lemma inj n m : Z.of_N n = Z.of_N m -> n = m.
Lemma inj_iff n m : Z.of_N n = Z.of_N m <-> n = m.
Lemma is_nonneg n : 0 <= Z.of_N n.
Lemma inj_0 : Z.of_N 0 = 0.
Lemma inj_pos p : Z.of_N (Npos p) = Zpos p.
Lemma inj_compare n m : (Z.of_N n ?= Z.of_N m) = (n ?= m)%N.
Lemma inj_le n m : (n<=m)%N <-> Z.of_N n <= Z.of_N m.
Lemma inj_lt n m : (n<m)%N <-> Z.of_N n < Z.of_N m.
Lemma inj_ge n m : (n>=m)%N <-> Z.of_N n >= Z.of_N m.
Lemma inj_gt n m : (n>m)%N <-> Z.of_N n > Z.of_N m.
Lemma inj_abs_N z : Z.of_N (Z.abs_N z) = Z.abs z.
Lemma inj_add n m : Z.of_N (n+m) = Z.of_N n + Z.of_N m.
Lemma inj_mul n m : Z.of_N (n*m) = Z.of_N n * Z.of_N m.
Lemma inj_sub_max n m : Z.of_N (n-m) = Z.max 0 (Z.of_N n - Z.of_N m).
Lemma inj_sub n m : (m<=n)%N -> Z.of_N (n-m) = Z.of_N n - Z.of_N m.
Lemma inj_succ n : Z.of_N (N.succ n) = Z.succ (Z.of_N n).
Lemma inj_pred_max n : Z.of_N (N.pred n) = Z.max 0 (Z.pred (Z.of_N n)).
Lemma inj_pred n : (0<n)%N -> Z.of_N (N.pred n) = Z.pred (Z.of_N n).
Lemma inj_min n m : Z.of_N (N.min n m) = Z.min (Z.of_N n) (Z.of_N m).
Lemma inj_max n m : Z.of_N (N.max n m) = Z.max (Z.of_N n) (Z.of_N m).
Lemma inj_div n m : Z.of_N (n/m) = Z.of_N n / Z.of_N m.
Lemma inj_mod n m : Z.of_N (n mod m) = (Z.of_N n) mod (Z.of_N m).
Lemma inj_quot n m : Z.of_N (n/m) = Z.of_N n ÷ Z.of_N m.
Lemma inj_rem n m : Z.of_N (n mod m) = Z.rem (Z.of_N n) (Z.of_N m).
Lemma inj_div2 n : Z.of_N (N.div2 n) = Z.div2 (Z.of_N n).
Lemma inj_quot2 n : Z.of_N (N.div2 n) = Z.quot2 (Z.of_N n).
Lemma inj_pow n m : Z.of_N (n^m) = (Z.of_N n)^(Z.of_N m).
Lemma inj_testbit a n : Z.testbit (Z.of_N a) (Z.of_N n) = N.testbit a n.
Lemma inj_lxor n m : Z.of_N (N.lxor n m) = Z.lxor (Z.of_N n) (Z.of_N m).
Lemma inj_land n m : Z.of_N (N.land n m) = Z.land (Z.of_N n) (Z.of_N m).
Lemma inj_lor n m : Z.of_N (N.lor n m) = Z.lor (Z.of_N n) (Z.of_N m).
Lemma inj_ldiff n m : Z.of_N (N.ldiff n m) = Z.ldiff (Z.of_N n) (Z.of_N m).
Lemma id n : 0<=n -> Z.of_N (Z.to_N n) = n.
Lemma inj n m : 0<=n -> 0<=m -> Z.to_N n = Z.to_N m -> n = m.
Lemma inj_iff n m : 0<=n -> 0<=m -> (Z.to_N n = Z.to_N m <-> n = m).
Lemma inj_0 : Z.to_N 0 = 0%N.
Lemma inj_pos n : Z.to_N (Zpos n) = Npos n.
Lemma inj_neg n : Z.to_N (Zneg n) = 0%N.
Lemma inj_add n m : 0<=n -> 0<=m -> Z.to_N (n+m) = (Z.to_N n + Z.to_N m)%N.
Lemma inj_mul n m : 0<=n -> 0<=m -> Z.to_N (n*m) = (Z.to_N n * Z.to_N m)%N.
Lemma inj_succ n : 0<=n -> Z.to_N (Z.succ n) = N.succ (Z.to_N n).
Lemma inj_sub n m : 0<=m -> Z.to_N (n - m) = (Z.to_N n - Z.to_N m)%N.
Lemma inj_pred n : Z.to_N (Z.pred n) = N.pred (Z.to_N n).
Lemma inj_compare n m : 0<=n -> 0<=m -> (Z.to_N n ?= Z.to_N m)%N = (n ?= m).
Lemma inj_le n m : 0<=n -> 0<=m -> (n<=m <-> (Z.to_N n <= Z.to_N m)%N).
Lemma inj_lt n m : 0<=n -> 0<=m -> (n<m <-> (Z.to_N n < Z.to_N m)%N).
Lemma inj_min n m : Z.to_N (Z.min n m) = N.min (Z.to_N n) (Z.to_N m).
Lemma inj_max n m : Z.to_N (Z.max n m) = N.max (Z.to_N n) (Z.to_N m).
Lemma inj_div n m : 0<=n -> 0<=m -> Z.to_N (n/m) = (Z.to_N n / Z.to_N m)%N.
Lemma inj_mod n m : 0<=n -> 0<=m -> Z.to_N (n mod m) = ((Z.to_N n) mod (Z.to_N m))%N.
Lemma inj_quot n m : 0<=n -> 0<=m -> Z.to_N (n÷m) = (Z.to_N n / Z.to_N m)%N.
Lemma inj_rem n m :0<=n -> 0<=m -> Z.to_N (Z.rem n m) = ((Z.to_N n) mod (Z.to_N m))%N.
Lemma inj_div2 n : Z.to_N (Z.div2 n) = N.div2 (Z.to_N n).
Lemma inj_quot2 n : Z.to_N (Z.quot2 n) = N.div2 (Z.to_N n).
Lemma inj_pow n m : 0<=n -> 0<=m -> Z.to_N (n^m) = ((Z.to_N n)^(Z.to_N m))%N.
Lemma inj_testbit a n : 0<=n -> Z.testbit (Z.of_N a) n = N.testbit a (Z.to_N n).
Lemma inj_shiftl: forall x y, Z.of_N (N.shiftl x y) = Z.shiftl (Z.of_N x) (Z.of_N y).
Lemma inj_shiftr: forall x y, Z.of_N (N.shiftr x y) = Z.shiftr (Z.of_N x) (Z.of_N y).
Lemma abs_N_spec n : Z.abs_N n = Z.to_N (Z.abs n).
Lemma abs_N_nonneg n : 0<=n -> Z.abs_N n = Z.to_N n.
Lemma id_abs n : Z.of_N (Z.abs_N n) = Z.abs n.
Lemma id n : Z.abs_N (Z.of_N n) = n.
Lemma inj_0 : Z.abs_N 0 = 0%N.
Lemma inj_pos p : Z.abs_N (Zpos p) = Npos p.
Lemma inj_neg p : Z.abs_N (Zneg p) = Npos p.
Lemma inj_opp n : Z.abs_N (-n) = Z.abs_N n.
Lemma inj_succ n : 0<=n -> Z.abs_N (Z.succ n) = N.succ (Z.abs_N n).
Lemma inj_add n m : 0<=n -> 0<=m -> Z.abs_N (n+m) = (Z.abs_N n + Z.abs_N m)%N.
Lemma inj_mul n m : Z.abs_N (n*m) = (Z.abs_N n * Z.abs_N m)%N.
Lemma inj_sub n m : 0<=m<=n -> Z.abs_N (n-m) = (Z.abs_N n - Z.abs_N m)%N.
Lemma inj_pred n : 0<n -> Z.abs_N (Z.pred n) = N.pred (Z.abs_N n).
Lemma inj_compare n m : 0<=n -> 0<=m -> (Z.abs_N n ?= Z.abs_N m)%N = (n ?= m).
Lemma inj_le n m : 0<=n -> 0<=m -> (n<=m <-> (Z.abs_N n <= Z.abs_N m)%N).
Lemma inj_lt n m : 0<=n -> 0<=m -> (n<m <-> (Z.abs_N n < Z.abs_N m)%N).
Lemma inj_min n m : 0<=n -> 0<=m -> Z.abs_N (Z.min n m) = N.min (Z.abs_N n) (Z.abs_N m).
Lemma inj_max n m : 0<=n -> 0<=m -> Z.abs_N (Z.max n m) = N.max (Z.abs_N n) (Z.abs_N m).
Lemma inj_quot n m : Z.abs_N (n÷m) = ((Z.abs_N n) / (Z.abs_N m))%N.
Lemma inj_rem n m : Z.abs_N (Z.rem n m) = ((Z.abs_N n) mod (Z.abs_N m))%N.
Lemma inj_pow n m : 0<=m -> Z.abs_N (n^m) = ((Z.abs_N n)^(Z.abs_N m))%N.
Lemma inj_succ_abs n : Z.abs_N (Z.succ (Z.abs n)) = N.succ (Z.abs_N n).
Lemma inj_add_abs n m : Z.abs_N (Z.abs n + Z.abs m) = (Z.abs_N n + Z.abs_N m)%N.
Lemma inj_mul_abs n m : Z.abs_N (Z.abs n * Z.abs m) = (Z.abs_N n * Z.abs_N m)%N.
Lemma inj_0 : Z.of_nat 0 = 0.
Lemma inj_succ n : Z.of_nat (S n) = Z.succ (Z.of_nat n).
Lemma is_nonneg n : 0 <= Z.of_nat n.
Lemma id n : Z.to_nat (Z.of_nat n) = n.
Lemma inj n m : Z.of_nat n = Z.of_nat m -> n = m.
Lemma inj_iff n m : Z.of_nat n = Z.of_nat m <-> n = m.
Lemma inj_compare n m : (Z.of_nat n ?= Z.of_nat m) = (n ?= m)%nat.
Lemma inj_le n m : (n<=m)%nat <-> Z.of_nat n <= Z.of_nat m.
Lemma inj_lt n m : (n<m)%nat <-> Z.of_nat n < Z.of_nat m.
Lemma inj_ge n m : (n>=m)%nat <-> Z.of_nat n >= Z.of_nat m.
Lemma inj_gt n m : (n>m)%nat <-> Z.of_nat n > Z.of_nat m.
Lemma inj_abs_nat z : Z.of_nat (Z.abs_nat z) = Z.abs z.
Lemma inj_add n m : Z.of_nat (n+m) = Z.of_nat n + Z.of_nat m.
Lemma inj_mul n m : Z.of_nat (n*m) = Z.of_nat n * Z.of_nat m.
Lemma inj_sub_max n m : Z.of_nat (n-m) = Z.max 0 (Z.of_nat n - Z.of_nat m).
Lemma inj_sub n m : (m<=n)%nat -> Z.of_nat (n-m) = Z.of_nat n - Z.of_nat m.
Lemma inj_pred_max n : Z.of_nat (Nat.pred n) = Z.max 0 (Z.pred (Z.of_nat n)).
Lemma inj_pred n : (0<n)%nat -> Z.of_nat (Nat.pred n) = Z.pred (Z.of_nat n).
Lemma inj_min n m : Z.of_nat (Nat.min n m) = Z.min (Z.of_nat n) (Z.of_nat m).
Lemma inj_max n m : Z.of_nat (Nat.max n m) = Z.max (Z.of_nat n) (Z.of_nat m).
Lemma inj_div n m : Z.of_nat (n / m) = Z.of_nat n / Z.of_nat m.
Lemma inj_mod n m : Z.of_nat (n mod m) = (Z.of_nat n mod Z.of_nat m)%Z.
Lemma inj_pow n m : Z.of_nat (n^m) = (Z.of_nat n)^(Z.of_nat m).
Lemma inj_div2 n : Z.of_nat (Nat.div2 n) = Z.div2 (Z.of_nat n).
Lemma inj_double n : Z.of_nat (Nat.double n) = Z.double (Z.of_nat n).
Lemma id n : 0<=n -> Z.of_nat (Z.to_nat n) = n.
Lemma inj n m : 0<=n -> 0<=m -> Z.to_nat n = Z.to_nat m -> n = m.
Lemma inj_iff n m : 0<=n -> 0<=m -> (Z.to_nat n = Z.to_nat m <-> n = m).
Lemma inj_0 : Z.to_nat 0 = O.
Lemma inj_pos n : Z.to_nat (Zpos n) = Pos.to_nat n.
Lemma inj_neg n : Z.to_nat (Zneg n) = O.
Lemma inj_add n m : 0<=n -> 0<=m -> Z.to_nat (n+m) = (Z.to_nat n + Z.to_nat m)%nat.
Lemma inj_mul n m : 0<=n -> 0<=m -> Z.to_nat (n*m) = (Z.to_nat n * Z.to_nat m)%nat.
Lemma inj_succ n : 0<=n -> Z.to_nat (Z.succ n) = S (Z.to_nat n).
Lemma inj_sub n m : 0<=m -> Z.to_nat (n - m) = (Z.to_nat n - Z.to_nat m)%nat.
Lemma inj_pred n : Z.to_nat (Z.pred n) = Nat.pred (Z.to_nat n).
Lemma inj_compare n m : 0<=n -> 0<=m -> (Z.to_nat n ?= Z.to_nat m)%nat = (n ?= m).
Lemma inj_le n m : 0<=n -> 0<=m -> (n<=m <-> (Z.to_nat n <= Z.to_nat m)%nat).
Lemma inj_lt n m : 0<=n -> 0<=m -> (n<m <-> (Z.to_nat n < Z.to_nat m)%nat).
Lemma inj_min n m : Z.to_nat (Z.min n m) = Nat.min (Z.to_nat n) (Z.to_nat m).
Lemma inj_max n m : Z.to_nat (Z.max n m) = Nat.max (Z.to_nat n) (Z.to_nat m).
Lemma inj_div n m : 0<=n -> 0<=m -> Z.to_nat (n / m) = (Z.to_nat n / Z.to_nat m)%nat.
Lemma inj_mod n m : 0<=n -> 0<=m -> Z.to_nat (n mod m) = (Z.to_nat n mod Z.to_nat m)%nat.
Lemma inj_pow n m : 0 <= n -> 0 <= m -> Z.to_nat (n ^ m) = (Z.to_nat n ^ Z.to_nat m)%nat.
Lemma abs_nat_spec n : Z.abs_nat n = Z.to_nat (Z.abs n).
Lemma abs_nat_nonneg n : 0<=n -> Z.abs_nat n = Z.to_nat n.
Lemma id_abs n : Z.of_nat (Z.abs_nat n) = Z.abs n.
Lemma id n : Z.abs_nat (Z.of_nat n) = n.
Lemma inj_0 : Z.abs_nat 0 = 0%nat.
Lemma inj_pos p : Z.abs_nat (Zpos p) = Pos.to_nat p.
Lemma inj_neg p : Z.abs_nat (Zneg p) = Pos.to_nat p.
Lemma inj_succ n : 0<=n -> Z.abs_nat (Z.succ n) = S (Z.abs_nat n).
Lemma inj_add n m : 0<=n -> 0<=m -> Z.abs_nat (n+m) = (Z.abs_nat n + Z.abs_nat m)%nat.
Lemma inj_mul n m : Z.abs_nat (n*m) = (Z.abs_nat n * Z.abs_nat m)%nat.
Lemma inj_sub n m : 0<=m<=n -> Z.abs_nat (n-m) = (Z.abs_nat n - Z.abs_nat m)%nat.
Lemma inj_pred n : 0<n -> Z.abs_nat (Z.pred n) = Nat.pred (Z.abs_nat n).
Lemma inj_compare n m : 0<=n -> 0<=m -> (Z.abs_nat n ?= Z.abs_nat m)%nat = (n ?= m).
Lemma inj_le n m : 0<=n -> 0<=m -> (n<=m <-> (Z.abs_nat n <= Z.abs_nat m)%nat).
Lemma inj_lt n m : 0<=n -> 0<=m -> (n<m <-> (Z.abs_nat n < Z.abs_nat m)%nat).
Lemma inj_min n m : 0<=n -> 0<=m -> Z.abs_nat (Z.min n m) = Nat.min (Z.abs_nat n) (Z.abs_nat m).
Lemma inj_max n m : 0<=n -> 0<=m -> Z.abs_nat (Z.max n m) = Nat.max (Z.abs_nat n) (Z.abs_nat m).
Lemma inj_succ_abs n : Z.abs_nat (Z.succ (Z.abs n)) = S (Z.abs_nat n).
Lemma inj_add_abs n m : Z.abs_nat (Z.abs n + Z.abs m) = (Z.abs_nat n + Z.abs_nat m)%nat.
Lemma inj_mul_abs n m : Z.abs_nat (Z.abs n * Z.abs m) = (Z.abs_nat n * Z.abs_nat m)%nat.
Lemma Z_of_nat_complete (x : Z) : 0 <= x -> exists n : nat, x = Z.of_nat n.
Lemma Z_of_nat_complete_inf (x : Z) : 0 <= x -> {n : nat | x = Z.of_nat n}.
Lemma Z_of_nat_prop : forall P:Z -> Prop, (forall n:nat, P (Z.of_nat n)) -> forall x:Z, 0 <= x -> P x.
Lemma Z_of_nat_set : forall P:Z -> Set, (forall n:nat, P (Z.of_nat n)) -> forall x:Z, 0 <= x -> P x.
Lemma natlike_ind : forall P:Z -> Prop, P 0 -> (forall x:Z, 0 <= x -> P x -> P (Z.succ x)) -> forall x:Z, 0 <= x -> P x.
Lemma natlike_rec : forall P:Z -> Set, P 0 -> (forall x:Z, 0 <= x -> P x -> P (Z.succ x)) -> forall x:Z, 0 <= x -> P x.
Lemma diveq_iff c a b : (b = 0 /\ c = 0 \/ c*b <= a < c*b + b \/ c*b + b < a <= c*b) <-> a/b = c.
Lemma mod_diveq_iff c a b : (b = 0 \/ c*b <= a < c*b + b \/ c*b + b < a <= c*b) <-> a mod b = a-b*c.
Lemma Zpower_pos_1_r x : Z.pow_pos x 1 = x.
Lemma Zpower_pos_1_l p : Z.pow_pos 1 p = 1.
Lemma Zpower_pos_0_l p : Z.pow_pos 0 p = 0.
Lemma Zpower_pos_pos x p : 0 < x -> 0 < Z.pow_pos x p.
Theorem Zne_left n m : Zne n m -> Zne (n + - m) 0.
Theorem Zegal_left n m : n = m -> n + - m = 0.
Theorem Zle_left n m : n <= m -> 0 <= m + - n.
Theorem Zle_left_rev n m : 0 <= m + - n -> n <= m.
Theorem Zlt_left_rev n m : 0 < m + - n -> n < m.
Theorem Zlt_left_lt n m : n < m -> 0 < m + - n.
Theorem Zlt_left n m : n < m -> 0 <= m + -1 + - n.
Theorem Zge_left n m : n >= m -> 0 <= n + - m.
Theorem Zgt_left n m : n > m -> 0 <= n + -1 + - m.
Theorem Zgt_left_gt n m : n > m -> n + - m > 0.
Theorem Zgt_left_rev n m : n + - m > 0 -> n > m.
Theorem Zle_mult_approx n m p : n > 0 -> p > 0 -> 0 <= m -> 0 <= m * n + p.
Theorem Zmult_le_approx n m p : n > 0 -> n > p -> 0 <= m * n + p -> 0 <= m.
Lemma mod_0_r_ext x y : y = 0 -> x mod y = x.
Lemma div_0_r_ext x y : y = 0 -> x / y = 0.
Lemma rem_0_r_ext x y : y = 0 -> Z.rem x y = x.
Lemma quot_0_r_ext x y : y = 0 -> Z.quot x y = 0.
Lemma rem_bound_pos_pos x y : 0 < y -> 0 <= x -> 0 <= Z.rem x y < y.
Lemma rem_bound_neg_pos x y : y < 0 -> 0 <= x -> 0 <= Z.rem x y < -y.
Lemma rem_bound_pos_neg x y : 0 < y -> x <= 0 -> -y < Z.rem x y <= 0.
Lemma rem_bound_neg_neg x y : y < 0 -> x <= 0 -> y < Z.rem x y <= 0.
Local Lemma divide_alt x y : Z.divide x y -> exists z, y = x * z.
Theorem Zred_factor0 n : n = n * 1.
Theorem Zred_factor1 n : n + n = n * 2.
Theorem Zred_factor2 n m : n + n * m = n * (1 + m).
Theorem Zred_factor3 n m : n * m + n = n * (1 + m).
Theorem Zred_factor4 n m p : n * m + n * p = n * (m + p).
Theorem Zred_factor5 n m : n * 0 + m = m.
Theorem Zred_factor6 n : n = n + 0.
Lemma new_var : forall x : Z, exists y : Z, x = y.
Lemma OMEGA1 x y : x = y -> 0 <= x -> 0 <= y.
Lemma OMEGA2 x y : 0 <= x -> 0 <= y -> 0 <= x + y.
Lemma OMEGA3 x y k : k > 0 -> x = y * k -> x = 0 -> y = 0.
Lemma OMEGA4 x y z : x > 0 -> y > x -> z * y + x <> 0.
Lemma OMEGA5 x y z : x = 0 -> y = 0 -> x + y * z = 0.
Lemma OMEGA6 x y z : 0 <= x -> y = 0 -> 0 <= x + y * z.
Lemma OMEGA7 x y z t : z > 0 -> t > 0 -> 0 <= x -> 0 <= y -> 0 <= x * z + y * t.
Lemma OMEGA8 x y : 0 <= x -> 0 <= y -> x = - y -> x = 0.
Lemma OMEGA9 x y z t : y = 0 -> x = z -> y + (- x + z) * t = 0.
Lemma OMEGA10 v c1 c2 l1 l2 k1 k2 : (v * c1 + l1) * k1 + (v * c2 + l2) * k2 = v * (c1 * k1 + c2 * k2) + (l1 * k1 + l2 * k2).
Lemma OMEGA11 v1 c1 l1 l2 k1 : (v1 * c1 + l1) * k1 + l2 = v1 * (c1 * k1) + (l1 * k1 + l2).
Lemma OMEGA12 v2 c2 l1 l2 k2 : l1 + (v2 * c2 + l2) * k2 = v2 * (c2 * k2) + (l1 + l2 * k2).
Lemma OMEGA13 (v l1 l2 : Z) (x : positive) : v * Zpos x + l1 + (v * Zneg x + l2) = l1 + l2.
Lemma OMEGA14 (v l1 l2 : Z) (x : positive) : v * Zneg x + l1 + (v * Zpos x + l2) = l1 + l2.
Lemma OMEGA15 v c1 c2 l1 l2 k2 : v * c1 + l1 + (v * c2 + l2) * k2 = v * (c1 + c2 * k2) + (l1 + l2 * k2).
Lemma OMEGA16 v c l k : (v * c + l) * k = v * (c * k) + l * k.
Lemma OMEGA17 x y z : Zne x 0 -> y = 0 -> Zne (x + y * z) 0.
Lemma OMEGA18 x y k : x = y * k -> Zne x 0 -> Zne y 0.
Lemma OMEGA19 x : Zne x 0 -> 0 <= x + -1 \/ 0 <= x * -1 + -1.
Lemma OMEGA20 x y z : Zne x 0 -> y = 0 -> Zne (x + y * z) 0.
Lemma IZR_nz : forall p : positive, IZR (Zpos p) <> 0%R.
Lemma eqR_Qeq : forall x y : Q, Q2R x = Q2R y -> x==y.
Lemma Qeq_eqR : forall x y : Q, x==y -> Q2R x = Q2R y.
Lemma Rle_Qle : forall x y : Q, (Q2R x <= Q2R y)%R -> x<=y.
Lemma Qle_Rle : forall x y : Q, x<=y -> (Q2R x <= Q2R y)%R.
Lemma Rlt_Qlt : forall x y : Q, (Q2R x < Q2R y)%R -> x<y.
Lemma Qlt_Rlt : forall x y : Q, x<y -> (Q2R x < Q2R y)%R.
Lemma Q2R_plus : forall x y : Q, Q2R (x+y) = (Q2R x + Q2R y)%R.
Lemma Q2R_mult : forall x y : Q, Q2R (x*y) = (Q2R x * Q2R y)%R.
Lemma Q2R_opp : forall x : Q, Q2R (- x) = (- Q2R x)%R.
Lemma Q2R_minus : forall x y : Q, Q2R (x-y) = (Q2R x - Q2R y)%R.
Lemma Q2R_inv : forall x : Q, ~ x==0 -> Q2R (/x) = (/ Q2R x)%R.
Lemma Q2R_div : forall x y : Q, ~ y==0 -> Q2R (x/y) = (Q2R x / Q2R y)%R.
Lemma Qpower_positive_1 : forall n, Qpower_positive 1 n == 1.
Lemma Qpower_positive_0 : forall n, Qpower_positive 0 n == 0.
Lemma Qpower_not_0_positive : forall a n, ~a==0 -> ~Qpower_positive a n == 0.
Lemma Qpower_pos_positive : forall p n, 0 <= p -> 0 <= Qpower_positive p n.
Lemma Qmult_power_positive : forall a b n, Qpower_positive (a*b) n == (Qpower_positive a n)*(Qpower_positive b n).
Lemma Qpower_plus_positive : forall a n m, Qpower_positive a (n+m) == (Qpower_positive a n)*(Qpower_positive a m).
Lemma Qinv_power_positive : forall a n, Qpower_positive (/a) n == /(Qpower_positive a n).
Lemma Qpower_minus_positive : forall a (n m:positive), (m < n)%positive -> Qpower_positive a (n-m)%positive == (Qpower_positive a n)/(Qpower_positive a m).
Lemma Qpower_mult_positive : forall a n m, Qpower_positive a (n*m) == Qpower_positive (Qpower_positive a n) m.
Lemma Qpower_decomp_positive p x y : Qpower_positive (x#y) p = x ^ Zpos p # (y ^ p).
Lemma Qred_abs (x : Q) : Qred (Qabs x) = Qabs (Qred x).
Lemma Qcabs_canon (x : Q) : Qred x = x -> Qred (Qabs x) = Qabs x.
Lemma psos_r1b: forall x y:R, x - y == 0 -> x == y.
Lemma psos_r1: forall x y, x == y -> x - y == 0.
Lemma nsatzR_diff: forall x y:R, not (x == y) -> not (x - y == 0).
Lemma Rsth : Setoid_Theory R (@eq R).
Lemma inj_succ p : to_nat (succ p) = S (to_nat p).
Theorem inj_add p q : to_nat (p + q) = to_nat p + to_nat q.
Theorem inj_mul p q : to_nat (p * q) = to_nat p * to_nat q.
Lemma inj_1 : to_nat 1 = 1.
Lemma inj_xO p : to_nat (xO p) = 2 * to_nat p.
Lemma inj_xI p : to_nat (xI p) = S (2 * to_nat p).
Lemma is_succ p : exists n, to_nat p = S n.
Lemma is_pos p : 0 < to_nat p.
Theorem id p : of_nat (to_nat p) = p.
Lemma inj p q : to_nat p = to_nat q -> p = q.
Lemma inj_iff p q : to_nat p = to_nat q <-> p = q.
Lemma inj_compare p q : (p ?= q)%positive = (to_nat p ?= to_nat q).
Lemma inj_lt p q : (p < q)%positive <-> to_nat p < to_nat q.
Lemma inj_le p q : (p <= q)%positive <-> to_nat p <= to_nat q.
Lemma inj_gt p q : (p > q)%positive <-> to_nat p > to_nat q.
Lemma inj_ge p q : (p >= q)%positive <-> to_nat p >= to_nat q.
Theorem inj_sub p q : (q < p)%positive -> to_nat (p - q) = to_nat p - to_nat q.
Theorem inj_sub_max p q : to_nat (p - q) = Nat.max 1 (to_nat p - to_nat q).
Theorem inj_pred p : (1 < p)%positive -> to_nat (pred p) = Nat.pred (to_nat p).
Theorem inj_pred_max p : to_nat (pred p) = Nat.max 1 (Peano.pred (to_nat p)).
Lemma inj_min p q : to_nat (min p q) = Nat.min (to_nat p) (to_nat q).
Lemma inj_max p q : to_nat (max p q) = Nat.max (to_nat p) (to_nat q).
Theorem inj_iter p {A} (f:A->A) (x:A) : Pos.iter f x p = nat_rect _ x (fun _ => f) (to_nat p).
Theorem inj_pow p q : to_nat (p ^ q) = to_nat p ^ to_nat q.
Theorem id (n:nat) : n<>0 -> Pos.to_nat (Pos.of_nat n) = n.
Theorem id_max (n:nat) : Pos.to_nat (Pos.of_nat n) = max 1 n.
Lemma inj (n m : nat) : n<>0 -> m<>0 -> Pos.of_nat n = Pos.of_nat m -> n = m.
Lemma inj_iff (n m : nat) : n<>0 -> m<>0 -> (Pos.of_nat n = Pos.of_nat m <-> n = m).
Lemma inj_0 : Pos.of_nat 0 = 1%positive.
Lemma inj_succ (n:nat) : n<>0 -> Pos.of_nat (S n) = Pos.succ (Pos.of_nat n).
Lemma inj_pred (n:nat) : Pos.of_nat (pred n) = Pos.pred (Pos.of_nat n).
Lemma inj_add (n m : nat) : n<>0 -> m<>0 -> Pos.of_nat (n+m) = (Pos.of_nat n + Pos.of_nat m)%positive.
Lemma inj_mul (n m : nat) : n<>0 -> m<>0 -> Pos.of_nat (n*m) = (Pos.of_nat n * Pos.of_nat m)%positive.
Lemma inj_compare (n m : nat) : n<>0 -> m<>0 -> (n ?= m) = (Pos.of_nat n ?= Pos.of_nat m)%positive.
Lemma inj_sub (n m : nat) : m<>0 -> Pos.of_nat (n-m) = (Pos.of_nat n - Pos.of_nat m)%positive.
Lemma inj_min (n m : nat) : Pos.of_nat (min n m) = Pos.min (Pos.of_nat n) (Pos.of_nat m).
Lemma inj_max (n m : nat) : Pos.of_nat (max n m) = Pos.max (Pos.of_nat n) (Pos.of_nat m).
Theorem inj_pow (n m : nat) : m <> 0 -> Pos.of_nat (n^m) = (Pos.of_nat n ^ Pos.of_nat m)%positive.
Theorem id_succ p : Pos.of_succ_nat (Pos.to_nat p) = Pos.succ p.
Theorem pred_id p : Pos.pred (Pos.of_succ_nat (Pos.to_nat p)) = p.
Theorem id_succ (n:nat) : Pos.to_nat (Pos.of_succ_nat n) = S n.
Theorem pred_id (n:nat) : pred (Pos.to_nat (Pos.of_succ_nat n)) = n.
Lemma inj (n m : nat) : Pos.of_succ_nat n = Pos.of_succ_nat m -> n = m.
Lemma inj_iff (n m : nat) : Pos.of_succ_nat n = Pos.of_succ_nat m <-> n = m.
Theorem inv n p : Pos.to_nat p = S n -> Pos.of_succ_nat n = p.
Lemma inj_succ n : Pos.of_succ_nat (S n) = Pos.succ (Pos.of_succ_nat n).
Lemma inj_compare n m : (n ?= m) = (Pos.of_succ_nat n ?= Pos.of_succ_nat m)%positive.