Documentation

Mathlib.Algebra.Order.Floor.Ring

Lemmas on Int.floor, Int.ceil and Int.fract #

This file contains basic results on the integer-valued floor and ceiling functions, as well as the fractional part operator.

TODO #

LinearOrderedRing can be relaxed to OrderedRing in many lemmas.

Tags #

rounding, floor, ceil

theorem Mathlib.Meta.Positivity.int_floor_nonneg {ฮฑ : Type u_1} [Ring ฮฑ] [LinearOrder ฮฑ] [FloorRing ฮฑ] {a : ฮฑ} (ha : 0 โ‰ค a) :
theorem Mathlib.Meta.Positivity.int_floor_nonneg_of_pos {ฮฑ : Type u_1} [Ring ฮฑ] [LinearOrder ฮฑ] [FloorRing ฮฑ] {a : ฮฑ} (ha : 0 < a) :

Extension for the positivity tactic: Int.floor is nonnegative if its input is.

Instances For
    theorem Mathlib.Meta.Positivity.nat_ceil_pos {ฮฑ : Type u_1} [Semiring ฮฑ] [LinearOrder ฮฑ] [FloorSemiring ฮฑ] {a : ฮฑ} :
    0 < a โ†’ 0 < โŒˆaโŒ‰โ‚Š

    Extension for the positivity tactic: Nat.ceil is positive if its input is.

    Instances For
      theorem Mathlib.Meta.Positivity.int_ceil_pos {ฮฑ : Type u_1} [Ring ฮฑ] [LinearOrder ฮฑ] [FloorRing ฮฑ] {a : ฮฑ} :
      0 < a โ†’ 0 < โŒˆaโŒ‰

      Extension for the positivity tactic: Int.ceil is positive/nonnegative if its input is.

      Instances For

        Floor rings #

        Floor #

        theorem Int.floor_le_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
        โŒŠaโŒ‹ โ‰ค z โ†” a < โ†‘z + 1
        theorem Int.lt_floor_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
        z < โŒŠaโŒ‹ โ†” โ†‘z + 1 โ‰ค a
        @[deprecated Int.floor_lt (since := "2025-12-26")]
        theorem Int.floor_le_sub_one_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
        โŒŠaโŒ‹ โ‰ค z - 1 โ†” a < โ†‘z
        @[simp]
        theorem Int.floor_le_neg_one_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} :
        โŒŠaโŒ‹ โ‰ค -1 โ†” a < 0
        @[simp]
        theorem Int.lt_floor_add_one {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (a : R) :
        a < โ†‘โŒŠaโŒ‹ + 1
        theorem Int.floor_pos {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} :
        0 < โŒŠaโŒ‹ โ†” 1 โ‰ค a
        theorem Int.floor_eq_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
        โŒŠaโŒ‹ = z โ†” โ†‘z โ‰ค a โˆง a < โ†‘z + 1
        @[simp]
        theorem Int.floor_eq_zero_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} :
        โŒŠaโŒ‹ = 0 โ†” a โˆˆ Set.Ico 0 1
        theorem Int.floor_eq_on_Ico {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (n : โ„ค) (a : R) :
        a โˆˆ Set.Ico (โ†‘n) (โ†‘n + 1) โ†’ โŒŠaโŒ‹ = n
        theorem Int.floor_eq_on_Ico' {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (n : โ„ค) (a : R) :
        a โˆˆ Set.Ico (โ†‘n) (โ†‘n + 1) โ†’ โ†‘โŒŠaโŒ‹ = โ†‘n
        @[simp]
        theorem Int.preimage_floor_singleton {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (m : โ„ค) :
        floor โปยน' {m} = Set.Ico (โ†‘m) (โ†‘m + 1)
        @[simp]
        theorem Int.sub_one_lt_floor {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) :
        a - 1 < โ†‘โŒŠaโŒ‹
        @[simp]
        theorem Int.floor_intCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (z : โ„ค) :
        โŒŠโ†‘zโŒ‹ = z
        @[simp]
        theorem Int.floor_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) :
        โŒŠโ†‘nโŒ‹ = โ†‘n
        @[simp]
        theorem Int.floor_ofNat {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) [n.AtLeastTwo] :
        โŒŠOfNat.ofNat nโŒ‹ = OfNat.ofNat n
        @[simp]
        theorem Int.floor_add_intCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (z : โ„ค) :
        โŒŠa + โ†‘zโŒ‹ = โŒŠaโŒ‹ + z
        @[simp]
        theorem Int.floor_intCast_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (z : โ„ค) (a : R) :
        โŒŠโ†‘z + aโŒ‹ = z + โŒŠaโŒ‹
        @[simp]
        theorem Int.floor_add_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) :
        โŒŠa + โ†‘nโŒ‹ = โŒŠaโŒ‹ + โ†‘n
        @[simp]
        theorem Int.floor_add_ofNat {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) [n.AtLeastTwo] :
        โŒŠa + OfNat.ofNat nโŒ‹ = โŒŠaโŒ‹ + OfNat.ofNat n
        @[simp]
        theorem Int.floor_natCast_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) (a : R) :
        โŒŠโ†‘n + aโŒ‹ = โ†‘n + โŒŠaโŒ‹
        @[simp]
        theorem Int.floor_ofNat_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) [n.AtLeastTwo] (a : R) :
        โŒŠOfNat.ofNat n + aโŒ‹ = OfNat.ofNat n + โŒŠaโŒ‹
        @[simp]
        theorem Int.floor_sub_intCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (z : โ„ค) :
        โŒŠa - โ†‘zโŒ‹ = โŒŠaโŒ‹ - z
        @[simp]
        theorem Int.floor_sub_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) :
        โŒŠa - โ†‘nโŒ‹ = โŒŠaโŒ‹ - โ†‘n
        @[simp]
        theorem Int.floor_sub_ofNat {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) [n.AtLeastTwo] :
        โŒŠa - OfNat.ofNat nโŒ‹ = โŒŠaโŒ‹ - OfNat.ofNat n
        theorem Int.floor_eq_self_iff_mem {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) :
        โ†‘โŒŠaโŒ‹ = a โ†” a โˆˆ Set.range Int.cast
        theorem Int.floor_lt_self_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] {a : R} :
        โ†‘โŒŠaโŒ‹ < a โ†” a โˆ‰ Set.range Int.cast
        theorem Int.mul_cast_floor_div_cancel_of_pos {R : Type u_4} [Ring R] [LinearOrder R] [IsStrictOrderedRing R] [FloorRing R] {n : โ„ค} (hn : 0 < n) (a : R) :
        โŒŠa * โ†‘nโŒ‹ / n = โŒŠaโŒ‹
        theorem Int.mul_natCast_floor_div_cancel {R : Type u_4} [Ring R] [LinearOrder R] [IsStrictOrderedRing R] [FloorRing R] {n : โ„•} (hn : n โ‰  0) (a : R) :
        โŒŠa * โ†‘nโŒ‹ / โ†‘n = โŒŠaโŒ‹
        theorem Int.mul_fract_eq_one_iff_exists_int {R : Type u_4} [Ring R] [LinearOrder R] [IsStrictOrderedRing R] [FloorRing R] {x k : R} (hk : 1 < k) :
        k * fract x = 1 โ†” โˆƒ (n : โ„ค), k * x = k * โ†‘n + 1
        theorem Int.cast_mul_floor_div_cancel_of_pos {R : Type u_4} [CommRing R] [LinearOrder R] [IsStrictOrderedRing R] [FloorRing R] {n : โ„ค} (hn : 0 < n) (a : R) :
        โŒŠโ†‘n * aโŒ‹ / n = โŒŠaโŒ‹
        theorem Int.natCast_mul_floor_div_cancel {R : Type u_4} [CommRing R] [LinearOrder R] [IsStrictOrderedRing R] [FloorRing R] {n : โ„•} (hn : n โ‰  0) (a : R) :
        โŒŠโ†‘n * aโŒ‹ / โ†‘n = โŒŠaโŒ‹
        theorem Int.floor_div_cast_of_nonneg {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] {n : โ„ค} (hn : 0 โ‰ค n) (a : k) :
        โŒŠa / โ†‘nโŒ‹ = โŒŠaโŒ‹ / n
        theorem Int.floor_div_natCast {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] (a : k) (n : โ„•) :
        โŒŠa / โ†‘nโŒ‹ = โŒŠaโŒ‹ / โ†‘n

        Fractional part #

        @[simp]
        theorem Int.self_sub_floor {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (a : R) :
        a - โ†‘โŒŠaโŒ‹ = fract a
        @[simp]
        theorem Int.floor_add_fract {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (a : R) :
        โ†‘โŒŠaโŒ‹ + fract a = a
        @[simp]
        theorem Int.fract_add_floor {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (a : R) :
        fract a + โ†‘โŒŠaโŒ‹ = a
        @[simp]
        theorem Int.self_sub_fract {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (a : R) :
        a - fract a = โ†‘โŒŠaโŒ‹
        @[simp]
        theorem Int.fract_sub_self {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (a : R) :
        fract a - a = -โ†‘โŒŠaโŒ‹
        theorem Int.fract_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (a b : R) :
        โˆƒ (z : โ„ค), fract (a + b) - fract a - fract b = โ†‘z
        @[simp]
        theorem Int.fract_add_intCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (m : โ„ค) :
        fract (a + โ†‘m) = fract a
        @[simp]
        theorem Int.fract_add_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (m : โ„•) :
        fract (a + โ†‘m) = fract a
        @[simp]
        theorem Int.fract_add_one {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) :
        fract (a + 1) = fract a
        @[simp]
        theorem Int.fract_add_ofNat {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) [n.AtLeastTwo] :
        fract (a + OfNat.ofNat n) = fract a
        @[simp]
        theorem Int.fract_intCast_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (m : โ„ค) (a : R) :
        fract (โ†‘m + a) = fract a
        @[simp]
        theorem Int.fract_natCast_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) (a : R) :
        fract (โ†‘n + a) = fract a
        @[simp]
        theorem Int.fract_one_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) :
        fract (1 + a) = fract a
        @[simp]
        theorem Int.fract_ofNat_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) [n.AtLeastTwo] (a : R) :
        fract (OfNat.ofNat n + a) = fract a
        @[simp]
        theorem Int.fract_sub_intCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (m : โ„ค) :
        fract (a - โ†‘m) = fract a
        @[simp]
        theorem Int.fract_sub_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) :
        fract (a - โ†‘n) = fract a
        @[simp]
        theorem Int.fract_sub_one {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) :
        fract (a - 1) = fract a
        @[simp]
        theorem Int.fract_sub_ofNat {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) [n.AtLeastTwo] :
        fract (a - OfNat.ofNat n) = fract a
        theorem Int.fract_pos {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} [IsStrictOrderedRing R] :
        0 < fract a โ†” a โ‰  โ†‘โŒŠaโŒ‹

        The fractional part of a is positive if and only if a โ‰  โŒŠaโŒ‹.

        @[simp]
        theorem Int.abs_one_sub_fract {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} [IsStrictOrderedRing R] :
        |1 - fract a| = 1 - fract a
        @[simp]
        theorem Int.fract_intCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (z : โ„ค) :
        fract โ†‘z = 0
        @[simp]
        theorem Int.fract_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) :
        fract โ†‘n = 0
        @[simp]
        theorem Int.fract_ofNat {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) [n.AtLeastTwo] :
        fract (OfNat.ofNat n) = 0
        theorem Int.fract_eq_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] {a b : R} :
        fract a = b โ†” 0 โ‰ค b โˆง b < 1 โˆง โˆƒ (z : โ„ค), a - b = โ†‘z
        theorem Int.fract_eq_fract {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] {a b : R} :
        fract a = fract b โ†” โˆƒ (z : โ„ค), a - b = โ†‘z
        @[simp]
        theorem Int.fract_eq_self {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] {a : R} :
        fract a = a โ†” 0 โ‰ค a โˆง a < 1
        @[simp]
        theorem Int.fract_fract {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) :
        fract (fract a) = fract a
        theorem Int.fract_eq_zero_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] {a : R} :
        fract a = 0 โ†” a โˆˆ Set.range Int.cast
        theorem Int.fract_ne_zero_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] {a : R} :
        fract a โ‰  0 โ†” a โˆ‰ Set.range Int.cast
        theorem Int.fract_neg {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] {x : R} (hx : fract x โ‰  0) :
        fract (-x) = 1 - fract x
        @[simp]
        theorem Int.fract_neg_eq_zero {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] {x : R} :
        fract (-x) = 0 โ†” fract x = 0
        theorem Int.fract_mul_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (b : โ„•) :
        โˆƒ (z : โ„ค), fract a * โ†‘b - fract (a * โ†‘b) = โ†‘z
        theorem Int.preimage_fract {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (s : Set R) :
        fract โปยน' s = โ‹ƒ (m : โ„ค), (fun (x : R) => x - โ†‘m) โปยน' (s โˆฉ Set.Ico 0 1)
        theorem Int.image_fract {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (s : Set R) :
        fract '' s = โ‹ƒ (m : โ„ค), (fun (x : R) => x - โ†‘m) '' s โˆฉ Set.Ico 0 1
        theorem Int.fract_div_mul_self_mem_Ico {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] (a b : k) (ha : 0 < a) :
        fract (b / a) * a โˆˆ Set.Ico 0 a
        theorem Int.fract_div_mul_self_add_zsmul_eq {k : Type u_4} [Field k] [LinearOrder k] [FloorRing k] (a b : k) (ha : a โ‰  0) :
        fract (b / a) * a + โŒŠb / aโŒ‹ โ€ข a = b
        theorem Int.sub_floor_div_mul_nonneg {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] {b : k} (a : k) (hb : 0 < b) :
        0 โ‰ค a - โ†‘โŒŠa / bโŒ‹ * b
        theorem Int.sub_floor_div_mul_lt {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] {b : k} (a : k) (hb : 0 < b) :
        a - โ†‘โŒŠa / bโŒ‹ * b < b
        theorem Int.fract_div_natCast_eq_div_natCast_mod {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] {m n : โ„•} :
        fract (โ†‘m / โ†‘n) = โ†‘(m % n) / โ†‘n
        theorem Int.fract_div_intCast_eq_div_intCast_mod {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] {m : โ„ค} {n : โ„•} :
        fract (โ†‘m / โ†‘n) = โ†‘(m % โ†‘n) / โ†‘n

        Ceil #

        theorem Int.le_ceil_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
        z โ‰ค โŒˆaโŒ‰ โ†” โ†‘z - 1 < a
        theorem Int.ceil_lt_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
        โŒˆaโŒ‰ < z โ†” a โ‰ค โ†‘z - 1
        @[deprecated Int.lt_ceil (since := "2025-12-26")]
        theorem Int.add_one_le_ceil_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
        z + 1 โ‰ค โŒˆaโŒ‰ โ†” โ†‘z < a
        @[simp]
        theorem Int.one_le_ceil_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} :
        1 โ‰ค โŒˆaโŒ‰ โ†” 0 < a
        theorem Int.ceil_eq_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
        โŒˆaโŒ‰ = z โ†” โ†‘z - 1 < a โˆง a โ‰ค โ†‘z
        @[simp]
        theorem Int.ceil_eq_zero_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} :
        โŒˆaโŒ‰ = 0 โ†” a โˆˆ Set.Ioc (-1) 0
        theorem Int.ceil_eq_on_Ioc {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (z : โ„ค) (a : R) :
        a โˆˆ Set.Ioc (โ†‘z - 1) โ†‘z โ†’ โŒˆaโŒ‰ = z
        @[simp]
        theorem Int.preimage_ceil_singleton {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] (m : โ„ค) :
        ceil โปยน' {m} = Set.Ioc (โ†‘m - 1) โ†‘m
        @[simp]
        theorem Int.ceil_intCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (z : โ„ค) :
        โŒˆโ†‘zโŒ‰ = z
        @[simp]
        theorem Int.ceil_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) :
        โŒˆโ†‘nโŒ‰ = โ†‘n
        @[simp]
        theorem Int.ceil_ofNat {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) [n.AtLeastTwo] :
        โŒˆOfNat.ofNat nโŒ‰ = OfNat.ofNat n
        @[simp]
        theorem Int.ceil_add_intCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (z : โ„ค) :
        โŒˆa + โ†‘zโŒ‰ = โŒˆaโŒ‰ + z
        @[simp]
        theorem Int.ceil_intCast_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (z : โ„ค) (a : R) :
        โŒˆโ†‘z + aโŒ‰ = z + โŒˆaโŒ‰
        @[simp]
        theorem Int.ceil_add_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) :
        โŒˆa + โ†‘nโŒ‰ = โŒˆaโŒ‰ + โ†‘n
        @[simp]
        theorem Int.ceil_natCast_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) (a : R) :
        โŒˆโ†‘n + aโŒ‰ = โ†‘n + โŒˆaโŒ‰
        @[simp]
        theorem Int.ceil_add_ofNat {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) [n.AtLeastTwo] :
        โŒˆa + OfNat.ofNat nโŒ‰ = โŒˆaโŒ‰ + OfNat.ofNat n
        @[simp]
        theorem Int.ceil_ofNat_add {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) [n.AtLeastTwo] (a : R) :
        โŒˆOfNat.ofNat n + aโŒ‰ = OfNat.ofNat n + โŒˆaโŒ‰
        @[simp]
        theorem Int.ceil_sub_intCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (z : โ„ค) :
        โŒˆa - โ†‘zโŒ‰ = โŒˆaโŒ‰ - z
        @[simp]
        theorem Int.ceil_sub_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) :
        โŒˆa - โ†‘nโŒ‰ = โŒˆaโŒ‰ - โ†‘n
        @[simp]
        theorem Int.ceil_sub_ofNat {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) [n.AtLeastTwo] :
        โŒˆa - OfNat.ofNat nโŒ‰ = โŒˆaโŒ‰ - OfNat.ofNat n
        theorem Int.ceil_eq_on_Ioc' {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (z : โ„ค) (a : R) :
        a โˆˆ Set.Ioc (โ†‘z - 1) โ†‘z โ†’ โ†‘โŒˆaโŒ‰ = โ†‘z
        theorem Int.ceil_eq_self_iff_mem {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) :
        โ†‘โŒˆaโŒ‰ = a โ†” a โˆˆ Set.range Int.cast
        theorem Int.fract_eq_zero_or_add_one_sub_ceil {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) :
        fract a = 0 โˆจ fract a = a + 1 - โ†‘โŒˆaโŒ‰
        theorem Int.ceil_eq_add_one_sub_fract {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} [IsStrictOrderedRing R] (ha : fract a โ‰  0) :
        โ†‘โŒˆaโŒ‰ = a + 1 - fract a
        theorem Int.ceil_sub_self_eq {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} [IsStrictOrderedRing R] (ha : fract a โ‰  0) :
        โ†‘โŒˆaโŒ‰ - a = 1 - fract a
        theorem Int.mul_lt_floor {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] {a b : k} (hbโ‚€ : 0 < b) (hb : b < 1) (hba : โ†‘โŒˆb / (1 - b)โŒ‰ โ‰ค a) :
        b * a < โ†‘โŒŠaโŒ‹
        theorem Int.ceil_lt_mul {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] {a b : k} (hb : 1 < b) (hba : โ†‘โŒˆ(b - 1)โปยนโŒ‰ / b < a) :
        โ†‘โŒˆaโŒ‰ < b * a
        theorem Int.ceil_le_mul {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] {a b : k} (hb : 1 < b) (hba : โ†‘โŒˆ(b - 1)โปยนโŒ‰ / b โ‰ค a) :
        โ†‘โŒˆaโŒ‰ โ‰ค b * a
        theorem Int.div_two_lt_floor {k : Type u_4} [Field k] [LinearOrder k] [IsStrictOrderedRing k] [FloorRing k] {a : k} (ha : 1 โ‰ค a) :
        a / 2 < โ†‘โŒŠaโŒ‹

        Intervals #

        theorem Int.floor_congr {R : Type u_2} {S : Type u_3} [Ring R] [LinearOrder R] [Ring S] [LinearOrder S] [FloorRing R] [FloorRing S] {a : R} {b : S} (h : โˆ€ (n : โ„ค), โ†‘n โ‰ค a โ†” โ†‘n โ‰ค b) :
        theorem Int.ceil_congr {R : Type u_2} {S : Type u_3} [Ring R] [LinearOrder R] [Ring S] [LinearOrder S] [FloorRing R] [FloorRing S] {a : R} {b : S} (h : โˆ€ (n : โ„ค), a โ‰ค โ†‘n โ†” b โ‰ค โ†‘n) :
        theorem Int.map_floor {F : Type u_1} {R : Type u_2} {S : Type u_3} [Ring R] [LinearOrder R] [Ring S] [LinearOrder S] [FloorRing R] [FloorRing S] [FunLike F R S] [RingHomClass F R S] (f : F) (hf : StrictMono โ‡‘f) (a : R) :
        theorem Int.map_ceil {F : Type u_1} {R : Type u_2} {S : Type u_3} [Ring R] [LinearOrder R] [Ring S] [LinearOrder S] [FloorRing R] [FloorRing S] [FunLike F R S] [RingHomClass F R S] (f : F) (hf : StrictMono โ‡‘f) (a : R) :
        theorem Int.map_fract {F : Type u_1} {R : Type u_2} {S : Type u_3} [Ring R] [LinearOrder R] [Ring S] [LinearOrder S] [FloorRing R] [FloorRing S] [FunLike F R S] [RingHomClass F R S] (f : F) (hf : StrictMono โ‡‘f) (a : R) :
        fract (f a) = f (fract a)
        theorem Nat.ceil_lt_add_one_of_gt_neg_one {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] {a : R} (ha : -1 < a) :
        โ†‘โŒˆaโŒ‰โ‚Š < a + 1

        a variant of Nat.ceil_lt_add_one with its condition 0 โ‰ค a generalized to -1 < a

        A floor ring as a floor semiring #

        theorem subsingleton_floorRing {R : Type u_4} [Ring R] [LinearOrder R] :
        Subsingleton (FloorRing R)

        There exists at most one FloorRing structure on a given linear ordered ring.