Documentation

Mathlib.Algebra.Order.Floor

Floor and ceil #

Summary #

We define the natural- and integer-valued floor and ceil functions on linearly ordered rings.

Main Definitions #

Notations #

The index ₊₊ in the notations for Nat.floor and Nat.ceil is used in analogy to the notation for nnnorm.

TODO #

LinearOrderedRing/LinearOrderedSemiring can be relaxed to OrderedRing/OrderedSemiring in many lemmas.

Tags #

rounding, floor, ceil

Floor semiring #

class FloorSemiring (α : Type u_1) [inst : OrderedSemiring α] :
Type u_1
  • FloorSemiring.floor a computes the greatest natural n such that (n : α) ≤ a≤ a.

    floor : α
  • FloorSemiring.ceil a computes the least natural n such that a ≤ (n : α)≤ (n : α).

    ceil : α
  • FloorSemiring.floor of a negative element is zero.

    floor_of_neg : ∀ {a : α}, a < 0floor a = 0
  • A natural number n is smaller than FloorSemiring.floor a iff its coercion to α is smaller than a.

    gc_floor : ∀ {a : α} {n : }, 0 a → (n floor a n a)
  • FloorSemiring.ceil is the lower adjoint of the coercion ↑ : ℕ → α↑ : ℕ → α→ α.

    gc_ceil : GaloisConnection ceil Nat.cast

A FloorSemiring is an ordered semiring over α with a function floor : α → ℕ→ ℕ satisfying ∀ (n : ℕ) (x : α), n ≤ ⌊x⌋ ↔ (n : α) ≤ x)∀ (n : ℕ) (x : α), n ≤ ⌊x⌋ ↔ (n : α) ≤ x)≤ ⌊x⌋ ↔ (n : α) ≤ x)↔ (n : α) ≤ x)≤ x). Note that many lemmas require a LinearOrder. Please see the above TODO.

Instances
    Equations
    • One or more equations did not get rendered due to their size.
    def Nat.floor {α : Type u_1} [inst : OrderedSemiring α] [inst : FloorSemiring α] :
    α

    ⌊a⌋₊₊ is the greatest natural n such that n ≤ a≤ a. If a is negative, then ⌊a⌋₊ = 0₊ = 0.

    Equations
    • Nat.floor = FloorSemiring.floor
    def Nat.ceil {α : Type u_1} [inst : OrderedSemiring α] [inst : FloorSemiring α] :
    α

    ⌈a⌉₊₊ is the least natural n such that a ≤ n≤ n

    Equations
    • Nat.ceil = FloorSemiring.ceil
    @[simp]
    theorem Nat.floor_nat :
    Nat.floor = id
    @[simp]
    theorem Nat.ceil_nat :
    Nat.ceil = id

    ⌊a⌋₊₊ is the greatest natural n such that n ≤ a≤ a. If a is negative, then ⌊a⌋₊ = 0₊ = 0.

    Equations
    • One or more equations did not get rendered due to their size.

    ⌈a⌉₊₊ is the least natural n such that a ≤ n≤ n

    Equations
    • One or more equations did not get rendered due to their size.
    theorem Nat.le_floor_iff {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (ha : 0 a) :
    n a⌋₊ n a
    theorem Nat.le_floor {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (h : n a) :
    theorem Nat.floor_lt {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (ha : 0 a) :
    a⌋₊ < n a < n
    theorem Nat.floor_lt_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : 0 a) :
    a⌋₊ < 1 a < 1
    theorem Nat.lt_of_floor_lt {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (h : a⌋₊ < n) :
    a < n
    theorem Nat.lt_one_of_floor_lt_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (h : a⌋₊ < 1) :
    a < 1
    theorem Nat.floor_le {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : 0 a) :
    theorem Nat.lt_succ_floor {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (a : α) :
    theorem Nat.lt_floor_add_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (a : α) :
    a < a⌋₊ + 1
    @[simp]
    theorem Nat.floor_coe {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (n : ) :
    n⌋₊ = n
    @[simp]
    theorem Nat.floor_zero {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] :
    @[simp]
    theorem Nat.floor_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] :
    theorem Nat.floor_of_nonpos {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : a 0) :
    theorem Nat.floor_mono {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] :
    Monotone Nat.floor
    theorem Nat.le_floor_iff' {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (hn : n 0) :
    n a⌋₊ n a
    @[simp]
    theorem Nat.one_le_floor_iff {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (x : α) :
    theorem Nat.floor_lt' {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (hn : n 0) :
    a⌋₊ < n a < n
    theorem Nat.floor_pos {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} :
    theorem Nat.pos_of_floor_pos {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (h : 0 < a⌋₊) :
    0 < a
    theorem Nat.lt_of_lt_floor {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (h : n < a⌋₊) :
    n < a
    theorem Nat.floor_le_of_le {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (h : a n) :
    theorem Nat.floor_le_one_of_le_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (h : a 1) :
    @[simp]
    theorem Nat.floor_eq_zero {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} :
    a⌋₊ = 0 a < 1
    theorem Nat.floor_eq_iff {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (ha : 0 a) :
    a⌋₊ = n n a a < n + 1
    theorem Nat.floor_eq_iff' {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (hn : n 0) :
    a⌋₊ = n n a a < n + 1
    theorem Nat.floor_eq_on_Ico {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (n : ) (a : α) :
    a Set.Ico (n) (n + 1)a⌋₊ = n
    theorem Nat.floor_eq_on_Ico' {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (n : ) (a : α) :
    a Set.Ico (n) (n + 1)a⌋₊ = n
    @[simp]
    theorem Nat.preimage_floor_zero {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] :
    Nat.floor ⁻¹' {0} = Set.Iio 1
    theorem Nat.preimage_floor_of_ne_zero {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {n : } (hn : n 0) :
    Nat.floor ⁻¹' {n} = Set.Ico (n) (n + 1)

    Ceil #

    theorem Nat.gc_ceil_coe {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] :
    GaloisConnection Nat.ceil Nat.cast
    @[simp]
    theorem Nat.ceil_le {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } :
    a⌉₊ n a n
    theorem Nat.lt_ceil {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } :
    n < a⌉₊ n < a
    theorem Nat.add_one_le_ceil_iff {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } :
    n + 1 a⌉₊ n < a
    @[simp]
    theorem Nat.one_le_ceil_iff {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} :
    theorem Nat.ceil_le_floor_add_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (a : α) :
    theorem Nat.le_ceil {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (a : α) :
    @[simp]
    theorem Nat.ceil_intCast {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorSemiring α] (z : ) :
    @[simp]
    theorem Nat.ceil_natCast {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (n : ) :
    n⌉₊ = n
    theorem Nat.ceil_mono {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] :
    Monotone Nat.ceil
    @[simp]
    theorem Nat.ceil_zero {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] :
    @[simp]
    theorem Nat.ceil_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] :
    @[simp]
    theorem Nat.ceil_eq_zero {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} :
    @[simp]
    theorem Nat.ceil_pos {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} :
    0 < a⌉₊ 0 < a
    theorem Nat.lt_of_ceil_lt {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (h : a⌉₊ < n) :
    a < n
    theorem Nat.le_of_ceil_le {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (h : a⌉₊ n) :
    a n
    theorem Nat.floor_le_ceil {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (a : α) :
    theorem Nat.floor_lt_ceil_of_lt_of_pos {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {b : α} (h : a < b) (h' : 0 < b) :
    theorem Nat.ceil_eq_iff {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {n : } (hn : n 0) :
    a⌉₊ = n ↑(n - 1) < a a n
    @[simp]
    theorem Nat.preimage_ceil_zero {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] :
    Nat.ceil ⁻¹' {0} = Set.Iic 0
    theorem Nat.preimage_ceil_of_ne_zero {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {n : } (hn : n 0) :
    Nat.ceil ⁻¹' {n} = Set.Ioc ↑(n - 1) n

    Intervals #

    @[simp]
    theorem Nat.preimage_Ioo {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {b : α} (ha : 0 a) :
    @[simp]
    theorem Nat.preimage_Ico {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {b : α} :
    @[simp]
    theorem Nat.preimage_Ioc {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {b : α} (ha : 0 a) (hb : 0 b) :
    @[simp]
    theorem Nat.preimage_Icc {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} {b : α} (hb : 0 b) :
    @[simp]
    theorem Nat.preimage_Ioi {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : 0 a) :
    @[simp]
    theorem Nat.preimage_Ici {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} :
    @[simp]
    theorem Nat.preimage_Iio {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} :
    @[simp]
    theorem Nat.preimage_Iic {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : 0 a) :
    theorem Nat.floor_add_nat {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : 0 a) (n : ) :
    theorem Nat.floor_add_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : 0 a) :
    theorem Nat.floor_sub_nat {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] [inst : Sub α] [inst : OrderedSub α] [inst : ExistsAddOfLE α] (a : α) (n : ) :
    theorem Nat.ceil_add_nat {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : 0 a) (n : ) :
    theorem Nat.ceil_add_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : 0 a) :
    theorem Nat.ceil_lt_add_one {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] {a : α} (ha : 0 a) :
    a⌉₊ < a + 1
    theorem Nat.ceil_add_le {α : Type u_1} [inst : LinearOrderedSemiring α] [inst : FloorSemiring α] (a : α) (b : α) :
    theorem Nat.sub_one_lt_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorSemiring α] (a : α) :
    a - 1 < a⌋₊
    theorem Nat.floor_div_nat {α : Type u_1} [inst : LinearOrderedSemifield α] [inst : FloorSemiring α] (a : α) (n : ) :
    theorem Nat.floor_div_eq_div {α : Type u_1} [inst : LinearOrderedSemifield α] [inst : FloorSemiring α] (m : ) (n : ) :
    m / n⌋₊ = m / n

    Natural division is the floor of field division.

    There exists at most one FloorSemiring structure on a linear ordered semiring.

    Floor rings #

    class FloorRing (α : Type u_1) [inst : LinearOrderedRing α] :
    Type u_1
    • FloorRing.floor a computes the greatest integer z such that (z : α) ≤ a≤ a.

      floor : α
    • FloorRing.ceil a computes the least integer z such that a ≤ (z : α)≤ (z : α).

      ceil : α
    • FloorRing.ceil is the upper adjoint of the coercion ↑ : ℤ → α↑ : ℤ → α→ α.

      gc_coe_floor : GaloisConnection Int.cast floor
    • FloorRing.ceil is the lower adjoint of the coercion ↑ : ℤ → α↑ : ℤ → α→ α.

      gc_ceil_coe : GaloisConnection ceil Int.cast

    A FloorRing is a linear ordered ring over α with a function floor : α → ℤ→ ℤ satisfying ∀ (z : ℤ) (a : α), z ≤ floor a ↔ (z : α) ≤ a)∀ (z : ℤ) (a : α), z ≤ floor a ↔ (z : α) ≤ a)≤ floor a ↔ (z : α) ≤ a)↔ (z : α) ≤ a)≤ a).

    Instances
      Equations
      • One or more equations did not get rendered due to their size.
      def FloorRing.ofFloor (α : Type u_1) [inst : LinearOrderedRing α] (floor : α) (gc_coe_floor : GaloisConnection Int.cast floor) :

      A FloorRing constructor from the floor function alone.

      Equations
      • One or more equations did not get rendered due to their size.
      def FloorRing.ofCeil (α : Type u_1) [inst : LinearOrderedRing α] (ceil : α) (gc_ceil_coe : GaloisConnection ceil Int.cast) :

      A FloorRing constructor from the ceil function alone.

      Equations
      • One or more equations did not get rendered due to their size.
      def Int.floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      α

      Int.floor a is the greatest integer z such that z ≤ a≤ a. It is denoted with ⌊a⌋.

      Equations
      • Int.floor = FloorRing.floor
      def Int.ceil {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      α

      Int.ceil a is the smallest integer z such that a ≤ z≤ z. It is denoted with ⌈a⌉.

      Equations
      • Int.ceil = FloorRing.ceil
      def Int.fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      α

      Int.fract a, the fractional part of a, is a minus its floor.

      Equations
      @[simp]
      theorem Int.floor_int :
      Int.floor = id
      @[simp]
      theorem Int.ceil_int :
      Int.ceil = id
      @[simp]
      theorem Int.fract_int :
      Int.fract = 0

      Int.floor a is the greatest integer z such that z ≤ a≤ a. It is denoted with ⌊a⌋.

      Equations
      • One or more equations did not get rendered due to their size.

      Int.ceil a is the smallest integer z such that a ≤ z≤ z. It is denoted with ⌈a⌉.

      Equations
      • One or more equations did not get rendered due to their size.

      Floor #

      theorem Int.gc_coe_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      GaloisConnection Int.cast Int.floor
      theorem Int.le_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {z : } {a : α} :
      z a z a
      theorem Int.floor_lt {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {z : } {a : α} :
      a < z a < z
      theorem Int.floor_le {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      a a
      theorem Int.floor_nonneg {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      0 a 0 a
      @[simp]
      theorem Int.floor_le_sub_one_iff {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {z : } {a : α} :
      a z - 1 a < z
      @[simp]
      theorem Int.floor_le_neg_one_iff {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      a -1 a < 0
      theorem Int.floor_nonpos {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} (ha : a 0) :
      theorem Int.lt_succ_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      a < ↑(Int.succ a)
      @[simp]
      theorem Int.lt_floor_add_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      a < a + 1
      @[simp]
      theorem Int.sub_one_lt_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      a - 1 < a
      @[simp]
      theorem Int.floor_intCast {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (z : ) :
      z = z
      @[simp]
      theorem Int.floor_natCast {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (n : ) :
      n = n
      @[simp]
      theorem Int.floor_zero {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      @[simp]
      theorem Int.floor_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      theorem Int.floor_mono {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      Monotone Int.floor
      theorem Int.floor_pos {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      0 < a 1 a
      @[simp]
      theorem Int.floor_add_int {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (z : ) :
      a + z = a + z
      theorem Int.floor_add_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      a + 1 = a + 1
      theorem Int.le_floor_add {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (b : α) :
      theorem Int.le_floor_add_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (b : α) :
      @[simp]
      theorem Int.floor_int_add {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (z : ) (a : α) :
      z + a = z + a
      @[simp]
      theorem Int.floor_add_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (n : ) :
      a + n = a + n
      @[simp]
      theorem Int.floor_nat_add {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (n : ) (a : α) :
      n + a = n + a
      @[simp]
      theorem Int.floor_sub_int {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (z : ) :
      a - z = a - z
      @[simp]
      theorem Int.floor_sub_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (n : ) :
      a - n = a - n
      theorem Int.abs_sub_lt_one_of_floor_eq_floor {α : Type u_1} [inst : LinearOrderedCommRing α] [inst : FloorRing α] {a : α} {b : α} (h : a = b) :
      abs (a - b) < 1
      theorem Int.floor_eq_iff {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {z : } {a : α} :
      a = z z a a < z + 1
      @[simp]
      theorem Int.floor_eq_zero_iff {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      theorem Int.floor_eq_on_Ico {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (n : ) (a : α) :
      a Set.Ico (n) (n + 1)a = n
      theorem Int.floor_eq_on_Ico' {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (n : ) (a : α) :
      a Set.Ico (n) (n + 1)a = n
      @[simp]
      theorem Int.preimage_floor_singleton {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (m : ) :
      Int.floor ⁻¹' {m} = Set.Ico (m) (m + 1)

      Fractional part #

      @[simp]
      theorem Int.self_sub_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      @[simp]
      theorem Int.floor_add_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      @[simp]
      theorem Int.fract_add_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      @[simp]
      theorem Int.fract_add_int {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (m : ) :
      Int.fract (a + m) = Int.fract a
      @[simp]
      theorem Int.fract_add_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (m : ) :
      Int.fract (a + m) = Int.fract a
      @[simp]
      theorem Int.fract_sub_int {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (m : ) :
      Int.fract (a - m) = Int.fract a
      @[simp]
      theorem Int.fract_int_add {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (m : ) (a : α) :
      Int.fract (m + a) = Int.fract a
      @[simp]
      theorem Int.fract_sub_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (n : ) :
      Int.fract (a - n) = Int.fract a
      @[simp]
      theorem Int.fract_int_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (n : ) (a : α) :
      Int.fract (n + a) = Int.fract a
      theorem Int.fract_add_le {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (b : α) :
      theorem Int.fract_add_fract_le {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (b : α) :
      @[simp]
      theorem Int.self_sub_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      @[simp]
      theorem Int.fract_sub_self {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      @[simp]
      theorem Int.fract_nonneg {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      theorem Int.fract_pos {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :

      The fractional part of a is positive if and only if a ≠ ⌊a⌋≠ ⌊a⌋.

      theorem Int.fract_lt_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      @[simp]
      theorem Int.fract_zero {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      @[simp]
      theorem Int.fract_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      theorem Int.abs_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      @[simp]
      theorem Int.abs_one_sub_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      @[simp]
      theorem Int.fract_intCast {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (z : ) :
      Int.fract z = 0
      @[simp]
      theorem Int.fract_natCast {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (n : ) :
      Int.fract n = 0
      theorem Int.fract_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      @[simp]
      theorem Int.floor_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      theorem Int.fract_eq_iff {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} {b : α} :
      Int.fract a = b 0 b b < 1 z, a - b = z
      theorem Int.fract_eq_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} {b : α} :
      Int.fract a = Int.fract b z, a - b = z
      @[simp]
      theorem Int.fract_eq_self {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      Int.fract a = a 0 a a < 1
      @[simp]
      theorem Int.fract_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      theorem Int.fract_add {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (b : α) :
      z, Int.fract (a + b) - Int.fract a - Int.fract b = z
      theorem Int.fract_neg {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {x : α} (hx : Int.fract x 0) :
      @[simp]
      theorem Int.fract_neg_eq_zero {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {x : α} :
      theorem Int.fract_mul_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (b : ) :
      z, Int.fract a * b - Int.fract (a * b) = z
      theorem Int.preimage_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (s : Set α) :
      Int.fract ⁻¹' s = Set.unionᵢ fun m => (fun x => x - m) ⁻¹' (s Set.Ico 0 1)
      theorem Int.image_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (s : Set α) :
      Int.fract '' s = Set.unionᵢ fun m => (fun x => x - m) '' s Set.Ico 0 1
      theorem Int.fract_div_mul_self_mem_Ico {k : Type u_1} [inst : LinearOrderedField k] [inst : FloorRing k] (a : k) (b : k) (ha : 0 < a) :
      Int.fract (b / a) * a Set.Ico 0 a
      theorem Int.fract_div_mul_self_add_zsmul_eq {k : Type u_1} [inst : LinearOrderedField k] [inst : FloorRing k] (a : k) (b : k) (ha : a 0) :
      Int.fract (b / a) * a + b / a a = b
      theorem Int.sub_floor_div_mul_nonneg {k : Type u_1} [inst : LinearOrderedField k] [inst : FloorRing k] {b : k} (a : k) (hb : 0 < b) :
      0 a - a / b * b
      theorem Int.sub_floor_div_mul_lt {k : Type u_1} [inst : LinearOrderedField k] [inst : 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_1} [inst : LinearOrderedField k] [inst : FloorRing k] {m : } {n : } :
      Int.fract (m / n) = ↑(m % n) / n
      theorem Int.fract_div_intCast_eq_div_intCast_mod {k : Type u_1} [inst : LinearOrderedField k] [inst : FloorRing k] {m : } {n : } :
      Int.fract (m / n) = ↑(m % n) / n

      Ceil #

      theorem Int.gc_ceil_coe {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      GaloisConnection Int.ceil Int.cast
      theorem Int.ceil_le {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {z : } {a : α} :
      a z a z
      theorem Int.floor_neg {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      theorem Int.ceil_neg {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      theorem Int.lt_ceil {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {z : } {a : α} :
      z < a z < a
      @[simp]
      theorem Int.add_one_le_ceil_iff {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {z : } {a : α} :
      z + 1 a z < a
      @[simp]
      theorem Int.one_le_ceil_iff {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      1 a 0 < a
      theorem Int.ceil_le_floor_add_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      theorem Int.le_ceil {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      a a
      @[simp]
      theorem Int.ceil_intCast {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (z : ) :
      z = z
      @[simp]
      theorem Int.ceil_natCast {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (n : ) :
      n = n
      theorem Int.ceil_mono {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      Monotone Int.ceil
      @[simp]
      theorem Int.ceil_add_int {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (z : ) :
      a + z = a + z
      @[simp]
      theorem Int.ceil_add_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (n : ) :
      a + n = a + n
      @[simp]
      theorem Int.ceil_add_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      a + 1 = a + 1
      @[simp]
      theorem Int.ceil_sub_int {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (z : ) :
      a - z = a - z
      @[simp]
      theorem Int.ceil_sub_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (n : ) :
      a - n = a - n
      @[simp]
      theorem Int.ceil_sub_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      a - 1 = a - 1
      theorem Int.ceil_lt_add_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      a < a + 1
      theorem Int.ceil_add_le {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (b : α) :
      theorem Int.ceil_add_ceil_le {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) (b : α) :
      @[simp]
      theorem Int.ceil_pos {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      0 < a 0 < a
      @[simp]
      theorem Int.ceil_zero {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      @[simp]
      theorem Int.ceil_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      theorem Int.ceil_nonneg {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} (ha : 0 a) :
      theorem Int.ceil_eq_iff {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {z : } {a : α} :
      a = z z - 1 < a a z
      @[simp]
      theorem Int.ceil_eq_zero_iff {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      a = 0 a Set.Ioc (-1) 0
      theorem Int.ceil_eq_on_Ioc {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (z : ) (a : α) :
      a Set.Ioc (z - 1) za = z
      theorem Int.ceil_eq_on_Ioc' {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (z : ) (a : α) :
      a Set.Ioc (z - 1) za = z
      theorem Int.floor_le_ceil {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      theorem Int.floor_lt_ceil_of_lt {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} {b : α} (h : a < b) :
      @[simp]
      theorem Int.preimage_ceil_singleton {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (m : ) :
      Int.ceil ⁻¹' {m} = Set.Ioc (m - 1) m
      theorem Int.fract_eq_zero_or_add_one_sub_ceil {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      Int.fract a = 0 Int.fract a = a + 1 - a
      theorem Int.ceil_eq_add_one_sub_fract {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} (ha : Int.fract a 0) :
      a = a + 1 - Int.fract a
      theorem Int.ceil_sub_self_eq {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} (ha : Int.fract a 0) :
      a - a = 1 - Int.fract a

      Intervals #

      @[simp]
      theorem Int.preimage_Ioo {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} {b : α} :
      @[simp]
      theorem Int.preimage_Ico {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} {b : α} :
      @[simp]
      theorem Int.preimage_Ioc {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} {b : α} :
      @[simp]
      theorem Int.preimage_Icc {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} {b : α} :
      @[simp]
      theorem Int.preimage_Ioi {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      @[simp]
      theorem Int.preimage_Ici {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      @[simp]
      theorem Int.preimage_Iio {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :
      @[simp]
      theorem Int.preimage_Iic {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} :

      Round #

      def round {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (x : α) :

      round rounds a number to the nearest integer. round (1 / 2) = 1

      Equations
      @[simp]
      theorem round_zero {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      round 0 = 0
      @[simp]
      theorem round_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      round 1 = 1
      @[simp]
      theorem round_natCast {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (n : ) :
      round n = n
      @[simp]
      theorem round_intCast {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (n : ) :
      round n = n
      @[simp]
      theorem round_add_int {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (x : α) (y : ) :
      round (x + y) = round x + y
      @[simp]
      theorem round_add_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      round (a + 1) = round a + 1
      @[simp]
      theorem round_sub_int {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (x : α) (y : ) :
      round (x - y) = round x - y
      @[simp]
      theorem round_sub_one {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      round (a - 1) = round a - 1
      @[simp]
      theorem round_add_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (x : α) (y : ) :
      round (x + y) = round x + y
      @[simp]
      theorem round_sub_nat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (x : α) (y : ) :
      round (x - y) = round x - y
      @[simp]
      theorem round_int_add {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (x : α) (y : ) :
      round (y + x) = y + round x
      @[simp]
      theorem round_nat_add {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (x : α) (y : ) :
      round (y + x) = y + round x
      theorem abs_sub_round_eq_min {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (x : α) :
      abs (x - ↑(round x)) = min (Int.fract x) (1 - Int.fract x)
      theorem round_le {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (x : α) (z : ) :
      abs (x - ↑(round x)) abs (x - z)
      theorem round_eq {α : Type u_1} [inst : LinearOrderedField α] [inst : FloorRing α] (x : α) :
      round x = x + 1 / 2
      @[simp]
      theorem round_two_inv {α : Type u_1} [inst : LinearOrderedField α] [inst : FloorRing α] :
      @[simp]
      theorem round_neg_two_inv {α : Type u_1} [inst : LinearOrderedField α] [inst : FloorRing α] :
      @[simp]
      theorem round_eq_zero_iff {α : Type u_1} [inst : LinearOrderedField α] [inst : FloorRing α] {x : α} :
      round x = 0 x Set.Ico (-(1 / 2)) (1 / 2)
      theorem abs_sub_round {α : Type u_1} [inst : LinearOrderedField α] [inst : FloorRing α] (x : α) :
      abs (x - ↑(round x)) 1 / 2
      theorem abs_sub_round_div_natCast_eq {α : Type u_1} [inst : LinearOrderedField α] [inst : FloorRing α] {m : } {n : } :
      abs (m / n - ↑(round (m / n))) = ↑(min (m % n) (n - m % n)) / n
      theorem Nat.floor_congr {α : Type u_1} {β : Type u_2} [inst : LinearOrderedSemiring α] [inst : LinearOrderedSemiring β] [inst : FloorSemiring α] [inst : FloorSemiring β] {a : α} {b : β} (h : ∀ (n : ), n a n b) :
      theorem Nat.ceil_congr {α : Type u_1} {β : Type u_2} [inst : LinearOrderedSemiring α] [inst : LinearOrderedSemiring β] [inst : FloorSemiring α] [inst : FloorSemiring β] {a : α} {b : β} (h : ∀ (n : ), a n b n) :
      theorem Nat.map_floor {F : Type u_3} {α : Type u_1} {β : Type u_2} [inst : LinearOrderedSemiring α] [inst : LinearOrderedSemiring β] [inst : FloorSemiring α] [inst : FloorSemiring β] [inst : RingHomClass F α β] (f : F) (hf : StrictMono f) (a : α) :
      theorem Nat.map_ceil {F : Type u_3} {α : Type u_1} {β : Type u_2} [inst : LinearOrderedSemiring α] [inst : LinearOrderedSemiring β] [inst : FloorSemiring α] [inst : FloorSemiring β] [inst : RingHomClass F α β] (f : F) (hf : StrictMono f) (a : α) :
      theorem Int.floor_congr {α : Type u_1} {β : Type u_2} [inst : LinearOrderedRing α] [inst : LinearOrderedRing β] [inst : FloorRing α] [inst : FloorRing β] {a : α} {b : β} (h : ∀ (n : ), n a n b) :
      theorem Int.ceil_congr {α : Type u_1} {β : Type u_2} [inst : LinearOrderedRing α] [inst : LinearOrderedRing β] [inst : FloorRing α] [inst : FloorRing β] {a : α} {b : β} (h : ∀ (n : ), a n b n) :
      theorem Int.map_floor {F : Type u_3} {α : Type u_1} {β : Type u_2} [inst : LinearOrderedRing α] [inst : LinearOrderedRing β] [inst : FloorRing α] [inst : FloorRing β] [inst : RingHomClass F α β] (f : F) (hf : StrictMono f) (a : α) :
      f a = a
      theorem Int.map_ceil {F : Type u_3} {α : Type u_1} {β : Type u_2} [inst : LinearOrderedRing α] [inst : LinearOrderedRing β] [inst : FloorRing α] [inst : FloorRing β] [inst : RingHomClass F α β] (f : F) (hf : StrictMono f) (a : α) :
      f a = a
      theorem Int.map_fract {F : Type u_3} {α : Type u_1} {β : Type u_2} [inst : LinearOrderedRing α] [inst : LinearOrderedRing β] [inst : FloorRing α] [inst : FloorRing β] [inst : RingHomClass F α β] (f : F) (hf : StrictMono f) (a : α) :
      Int.fract (f a) = f (Int.fract a)
      theorem Int.map_round {F : Type u_3} {α : Type u_1} {β : Type u_2} [inst : LinearOrderedField α] [inst : LinearOrderedField β] [inst : FloorRing α] [inst : FloorRing β] [inst : RingHomClass F α β] (f : F) (hf : StrictMono f) (a : α) :
      round (f a) = round a

      A floor ring as a floor semiring #

      instance FloorRing.toFloorSemiring {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] :
      Equations
      • One or more equations did not get rendered due to their size.
      theorem Int.floor_toNat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      theorem Int.ceil_toNat {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] (a : α) :
      @[simp]
      theorem Nat.floor_int :
      Nat.floor = Int.toNat
      @[simp]
      theorem Nat.ceil_int :
      Nat.ceil = Int.toNat
      theorem Nat.cast_floor_eq_int_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} (ha : 0 a) :
      theorem Nat.cast_floor_eq_cast_int_floor {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} (ha : 0 a) :
      theorem Nat.cast_ceil_eq_int_ceil {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} (ha : 0 a) :
      theorem Nat.cast_ceil_eq_cast_int_ceil {α : Type u_1} [inst : LinearOrderedRing α] [inst : FloorRing α] {a : α} (ha : 0 a) :

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