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.

Equations
    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.

      Equations
        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.

          Equations
            Instances For

              Floor rings #

              Floor #

              theorem Int.floor_le_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
              theorem Int.lt_floor_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
              @[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} :
              @[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_eq_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
              โŒŠaโŒ‹ = z โ†” โ†‘z โ‰ค a โˆง a < โ†‘z + 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_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) :
              โŒŠโ†‘nโŒ‹ = โ†‘n
              @[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_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_sub_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) :
              โŒŠa - โ†‘nโŒ‹ = โŒŠaโŒ‹ - โ†‘n
              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

              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_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_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
              theorem Int.fract_pos {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {a : R} [IsStrictOrderedRing R] :

              The fractional part of a is positive if and only if a โ‰  โŒŠ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
              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_fract {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) :
              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
              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.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} :
              theorem Int.ceil_lt_iff {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] {z : โ„ค} {a : R} :
              @[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} :
              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
              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_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (n : โ„•) :
              โŒˆโ†‘nโŒ‰ = โ†‘n
              @[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_sub_natCast {R : Type u_2} [Ring R] [LinearOrder R] [FloorRing R] [IsStrictOrderedRing R] (a : R) (n : โ„•) :
              โŒˆa - โ†‘nโŒ‰ = โŒˆaโŒ‰ - โ†‘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.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) :

              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 variant of Nat.ceil_lt_add_one with its condition 0 โ‰ค a generalized to -1 < a

              A floor ring as a floor semiring #

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