Documentation

Mathlib.Algebra.Order.Ring.Archimedean

Archimedean classes of a linearly ordered ring #

The archimedean classes of a linearly ordered ring can be given the structure of an AddCommMonoid, by defining

For a linearly ordered field, we can define a negative as

which turns them into a LinearOrderedAddCommGroupWithTop.

Implementation notes #

We give Archimedean class an additive structure, rather than a multiplicative one, for the following reasons:

@[instance_reducible]

Multiplication in R transfers to addition in ArchimedeanClass R.

Equations
@[simp]
theorem ArchimedeanClass.mk_mul {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] (x y : R) :
mk (x * y) = mk x + mk y
@[instance_reducible]
Equations
@[simp]
theorem ArchimedeanClass.mk_pow {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] (n : ℕ) (x : R) :
mk (x ^ n) = n • mk x
@[instance_reducible]
Equations
  • One or more equations did not get rendered due to their size.
@[instance_reducible]
Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem ArchimedeanClass.orderHom_zero {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] (f : S →+o R) :
(orderHom f) 0 = mk (f 1)
@[simp]
theorem ArchimedeanClass.mk_map_of_archimedean {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] [Archimedean S] (f : S →+o R) {x : S} (h : x ≠ 0) :
mk (f x) = mk (f 1)

See mk_map_of_archimedean' for a version taking M →+*o R.

theorem ArchimedeanClass.mk_map_of_archimedean' {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] [Archimedean S] (f : S →+*o R) {x : S} (h : x ≠ 0) :
mk (f x) = 0

See mk_map_of_archimedean for a version taking M →+o R.

theorem ArchimedeanClass.mk_le_mk_add_of_archimedean {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] [Archimedean S] (f : S →+*o R) (x : R) (y : S) :
mk x ≤ mk (f y) + mk x
theorem ArchimedeanClass.mk_le_add_mk_of_archimedean {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] [Archimedean S] (f : S →+*o R) (x : R) (y : S) :
mk x ≤ mk x + mk (f y)
theorem ArchimedeanClass.lt_of_pos_of_archimedean {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] [Archimedean S] (f : S →+*o R) {x : R} (hx : 0 < mk x) {y : S} (hy : 0 < y) :
x < f y
theorem ArchimedeanClass.lt_of_neg_of_archimedean {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] [Archimedean S] (f : S →+*o R) {x : R} (hx : 0 < mk x) {y : S} (hy : y < 0) :
f y < x
@[simp]
theorem ArchimedeanClass.mk_intCast {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] {n : ℤ} (h : n ≠ 0) :
mk ↑n = 0
@[simp]
theorem ArchimedeanClass.mk_natCast {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] {n : ℕ} :
n ≠ 0 → mk ↑n = 0
theorem ArchimedeanClass.exists_nat_ge_of_mk_nonneg {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {x : R} (hx : 0 ≤ mk x) :
∃ (n : ℕ), x ≤ ↑n
theorem ArchimedeanClass.exists_nat_gt_of_mk_nonneg {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {x : R} (hx : 0 ≤ mk x) :
∃ (n : ℕ), x < ↑n
theorem ArchimedeanClass.exists_int_ge_of_mk_nonneg {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {x : R} (hx : 0 ≤ mk x) :
∃ (n : ℤ), x ≤ ↑n
theorem ArchimedeanClass.exists_int_gt_of_mk_nonneg {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {x : R} (hx : 0 ≤ mk x) :
∃ (n : ℤ), x < ↑n
theorem ArchimedeanClass.exists_int_le_of_mk_nonneg {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {x : R} (hx : 0 ≤ mk x) :
∃ (n : ℤ), ↑n ≤ x
theorem ArchimedeanClass.exists_int_lt_of_mk_nonneg {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {x : R} (hx : 0 ≤ mk x) :
∃ (n : ℤ), ↑n < x
theorem ArchimedeanClass.mk_nonneg_of_le_of_le_of_archimedean {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {S : Type u_3} [LinearOrder S] [CommRing S] [IsStrictOrderedRing S] [Archimedean S] (f : S →+*o R) {x : R} {r s : S} (hr : f r ≤ x) (hs : x ≤ f s) :
0 ≤ mk x
theorem ArchimedeanClass.add_left_cancel_of_ne_top {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {x y z : ArchimedeanClass R} (hx : x ≠ ⊤) (h : x + y = x + z) :
y = z
theorem ArchimedeanClass.add_right_cancel_of_ne_top {R : Type u_1} [LinearOrder R] [CommRing R] [IsStrictOrderedRing R] {x y z : ArchimedeanClass R} (hx : x ≠ ⊤) (h : y + x = z + x) :
y = z
theorem ArchimedeanClass.mk_le_mk_iff_denselyOrdered {R : Type u_1} {S : Type u_2} [LinearOrder R] [LinearOrder S] [CommRing R] [IsStrictOrderedRing R] [Ring S] [IsStrictOrderedRing S] [DenselyOrdered R] [Archimedean R] {x y : S} (f : R →+* S) (hf : StrictMono ⇑f) :
mk x ≤ mk y ↔ ∃ (q : R), 0 < f q ∧ f q * |y| ≤ |x|
@[instance_reducible]
Equations
@[simp]
theorem ArchimedeanClass.mk_inv {R : Type u_1} [LinearOrder R] [Field R] [IsOrderedRing R] (x : R) :
@[instance_reducible]
Equations
@[simp]
theorem ArchimedeanClass.mk_zpow {R : Type u_1} [LinearOrder R] [Field R] [IsOrderedRing R] (n : ℤ) (x : R) :
mk (x ^ n) = n • mk x
@[instance_reducible]
Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem ArchimedeanClass.mk_div {R : Type u_1} [LinearOrder R] [Field R] [IsOrderedRing R] (x y : R) :
mk (x / y) = mk x - mk y
@[simp]
theorem ArchimedeanClass.mk_ratCast {R : Type u_1} [LinearOrder R] [Field R] [IsOrderedRing R] {q : ℚ} (h : q ≠ 0) :
mk ↑q = 0
theorem ArchimedeanClass.mk_le_mk_iff_ratCast {R : Type u_1} [LinearOrder R] [Field R] [IsOrderedRing R] {x y : R} :
mk x ≤ mk y ↔ ∃ (q : ℚ), 0 < q ∧ ↑q * |y| ≤ |x|