File: Mathlib/Algebra/Order/Floor/Div.lean

full_name: FloorDiv.floorDiv_gc
code: /-- Typeclass for division rounded down. For each `a > 0`, this asserts the existence of a right
adjoint to the map `b ↦ a • b : β → β`. -/
class FloorDiv where
  /-- Flooring division. If `a > 0`, then `b ⌊/⌋ a` is the greatest `c` such that `a • c ≤ b`. -/
  floorDiv : β → α → β
  /-- Do not use this. Use `gc_floorDiv_smul` or `gc_floorDiv_mul` instead. -/
  protected floorDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (a • ·) (floorDiv · a)
  /-- Do not use this. Use `floorDiv_nonpos` instead. -/
  protected floorDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, floorDiv b a = 0
  /-- Do not use this. Use `zero_floorDiv` instead. -/
  protected zero_floorDiv (a) : floorDiv 0 a = 0
goal: 0 < a → GaloisConnection (fun x => a • x) fun x => x ⌊/⌋ a

full_name: FloorDiv
code: /-- Typeclass for division rounded down. For each `a > 0`, this asserts the existence of a right
adjoint to the map `b ↦ a • b : β → β`. -/
class FloorDiv where
  /-- Flooring division. If `a > 0`, then `b ⌊/⌋ a` is the greatest `c` such that `a • c ≤ b`. -/
  floorDiv : β → α → β
  /-- Do not use this. Use `gc_floorDiv_smul` or `gc_floorDiv_mul` instead. -/
  protected floorDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (a • ·) (floorDiv · a)
  /-- Do not use this. Use `floorDiv_nonpos` instead. -/
  protected floorDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, floorDiv b a = 0
  /-- Do not use this. Use `zero_floorDiv` instead. -/
  protected zero_floorDiv (a) : floorDiv 0 a = 0
goal: Type (max u_2 u_3)

full_name: FloorDiv.floorDiv
code: /-- Typeclass for division rounded down. For each `a > 0`, this asserts the existence of a right
adjoint to the map `b ↦ a • b : β → β`. -/
class FloorDiv where
  /-- Flooring division. If `a > 0`, then `b ⌊/⌋ a` is the greatest `c` such that `a • c ≤ b`. -/
  floorDiv : β → α → β
  /-- Do not use this. Use `gc_floorDiv_smul` or `gc_floorDiv_mul` instead. -/
  protected floorDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (a • ·) (floorDiv · a)
  /-- Do not use this. Use `floorDiv_nonpos` instead. -/
  protected floorDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, floorDiv b a = 0
  /-- Do not use this. Use `zero_floorDiv` instead. -/
  protected zero_floorDiv (a) : floorDiv 0 a = 0
goal: β → α → β

full_name: FloorDiv.floorDiv_nonpos
code: /-- Typeclass for division rounded down. For each `a > 0`, this asserts the existence of a right
adjoint to the map `b ↦ a • b : β → β`. -/
class FloorDiv where
  /-- Flooring division. If `a > 0`, then `b ⌊/⌋ a` is the greatest `c` such that `a • c ≤ b`. -/
  floorDiv : β → α → β
  /-- Do not use this. Use `gc_floorDiv_smul` or `gc_floorDiv_mul` instead. -/
  protected floorDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (a • ·) (floorDiv · a)
  /-- Do not use this. Use `floorDiv_nonpos` instead. -/
  protected floorDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, floorDiv b a = 0
  /-- Do not use this. Use `zero_floorDiv` instead. -/
  protected zero_floorDiv (a) : floorDiv 0 a = 0
goal: a ≤ 0 → ∀ (b : β), b ⌊/⌋ a = 0

full_name: FloorDiv.zero_floorDiv
code: /-- Typeclass for division rounded down. For each `a > 0`, this asserts the existence of a right
adjoint to the map `b ↦ a • b : β → β`. -/
class FloorDiv where
  /-- Flooring division. If `a > 0`, then `b ⌊/⌋ a` is the greatest `c` such that `a • c ≤ b`. -/
  floorDiv : β → α → β
  /-- Do not use this. Use `gc_floorDiv_smul` or `gc_floorDiv_mul` instead. -/
  protected floorDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (a • ·) (floorDiv · a)
  /-- Do not use this. Use `floorDiv_nonpos` instead. -/
  protected floorDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, floorDiv b a = 0
  /-- Do not use this. Use `zero_floorDiv` instead. -/
  protected zero_floorDiv (a) : floorDiv 0 a = 0
goal: 0 ⌊/⌋ a = 0

full_name: CeilDiv.ceilDiv
code: /-- Typeclass for division rounded up. For each `a > 0`, this asserts the existence of a left
adjoint to the map `b ↦ a • b : β → β`. -/
class CeilDiv where
  /-- Ceiling division. If `a > 0`, then `b ⌈/⌉ a` is the least `c` such that `b ≤ a • c`. -/
  ceilDiv : β → α → β
  /-- Do not use this. Use `gc_smul_ceilDiv` or `gc_mul_ceilDiv` instead. -/
  protected ceilDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (ceilDiv · a) (a • ·)
  /-- Do not use this. Use `ceilDiv_nonpos` instead. -/
  protected ceilDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, ceilDiv b a = 0
  /-- Do not use this. Use `zero_ceilDiv` instead. -/
  protected zero_ceilDiv (a) : ceilDiv 0 a = 0
goal: β → α → β

full_name: CeilDiv.ceilDiv_nonpos
code: /-- Typeclass for division rounded up. For each `a > 0`, this asserts the existence of a left
adjoint to the map `b ↦ a • b : β → β`. -/
class CeilDiv where
  /-- Ceiling division. If `a > 0`, then `b ⌈/⌉ a` is the least `c` such that `b ≤ a • c`. -/
  ceilDiv : β → α → β
  /-- Do not use this. Use `gc_smul_ceilDiv` or `gc_mul_ceilDiv` instead. -/
  protected ceilDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (ceilDiv · a) (a • ·)
  /-- Do not use this. Use `ceilDiv_nonpos` instead. -/
  protected ceilDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, ceilDiv b a = 0
  /-- Do not use this. Use `zero_ceilDiv` instead. -/
  protected zero_ceilDiv (a) : ceilDiv 0 a = 0
goal: a ≤ 0 → ∀ (b : β), b ⌈/⌉ a = 0

full_name: CeilDiv.ceilDiv_gc
code: /-- Typeclass for division rounded up. For each `a > 0`, this asserts the existence of a left
adjoint to the map `b ↦ a • b : β → β`. -/
class CeilDiv where
  /-- Ceiling division. If `a > 0`, then `b ⌈/⌉ a` is the least `c` such that `b ≤ a • c`. -/
  ceilDiv : β → α → β
  /-- Do not use this. Use `gc_smul_ceilDiv` or `gc_mul_ceilDiv` instead. -/
  protected ceilDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (ceilDiv · a) (a • ·)
  /-- Do not use this. Use `ceilDiv_nonpos` instead. -/
  protected ceilDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, ceilDiv b a = 0
  /-- Do not use this. Use `zero_ceilDiv` instead. -/
  protected zero_ceilDiv (a) : ceilDiv 0 a = 0
goal: 0 < a → GaloisConnection (fun x => x ⌈/⌉ a) fun x => a • x

full_name: CeilDiv.zero_ceilDiv
code: /-- Typeclass for division rounded up. For each `a > 0`, this asserts the existence of a left
adjoint to the map `b ↦ a • b : β → β`. -/
class CeilDiv where
  /-- Ceiling division. If `a > 0`, then `b ⌈/⌉ a` is the least `c` such that `b ≤ a • c`. -/
  ceilDiv : β → α → β
  /-- Do not use this. Use `gc_smul_ceilDiv` or `gc_mul_ceilDiv` instead. -/
  protected ceilDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (ceilDiv · a) (a • ·)
  /-- Do not use this. Use `ceilDiv_nonpos` instead. -/
  protected ceilDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, ceilDiv b a = 0
  /-- Do not use this. Use `zero_ceilDiv` instead. -/
  protected zero_ceilDiv (a) : ceilDiv 0 a = 0
goal: 0 ⌈/⌉ a = 0

full_name: CeilDiv
code: /-- Typeclass for division rounded up. For each `a > 0`, this asserts the existence of a left
adjoint to the map `b ↦ a • b : β → β`. -/
class CeilDiv where
  /-- Ceiling division. If `a > 0`, then `b ⌈/⌉ a` is the least `c` such that `b ≤ a • c`. -/
  ceilDiv : β → α → β
  /-- Do not use this. Use `gc_smul_ceilDiv` or `gc_mul_ceilDiv` instead. -/
  protected ceilDiv_gc ⦃a⦄ : 0 < a → GaloisConnection (ceilDiv · a) (a • ·)
  /-- Do not use this. Use `ceilDiv_nonpos` instead. -/
  protected ceilDiv_nonpos ⦃a⦄ : a ≤ 0 → ∀ b, ceilDiv b a = 0
  /-- Do not use this. Use `zero_ceilDiv` instead. -/
  protected zero_ceilDiv (a) : ceilDiv 0 a = 0
goal: Type (max u_2 u_3)

full_name: _aux_Mathlib_Algebra_Order_Floor_Div___unexpand_FloorDiv_floorDiv_1
code: @[inherit_doc] infixl:70 " ⌊/⌋ "   => FloorDiv.floorDiv
goal: Lean.PrettyPrinter.Unexpander

full_name: «_aux_Mathlib_Algebra_Order_Floor_Div___macroRules_term_⌊/⌋__1»
code: @[inherit_doc] infixl:70 " ⌊/⌋ "   => FloorDiv.floorDiv
goal: Lean.Macro

full_name: «_aux_Mathlib_Algebra_Order_Floor_Div___macroRules_term_⌈/⌉__1»
code: @[inherit_doc] infixl:70 " ⌈/⌉ "   => CeilDiv.ceilDiv
goal: Lean.Macro

full_name: _aux_Mathlib_Algebra_Order_Floor_Div___unexpand_CeilDiv_ceilDiv_1
code: @[inherit_doc] infixl:70 " ⌈/⌉ "   => CeilDiv.ceilDiv
goal: Lean.PrettyPrinter.Unexpander

full_name: gc_floorDiv_smul
code: lemma gc_floorDiv_smul (ha : 0 < a) : GaloisConnection (a • · : β → β) (· ⌊/⌋ a) 
goal: GaloisConnection (fun x => a • x) fun x => x ⌊/⌋ a

full_name: le_floorDiv_iff_smul_le
code: @[simp] lemma le_floorDiv_iff_smul_le (ha : 0 < a) : c ≤ b ⌊/⌋ a ↔ a • c ≤ b 
goal: c ≤ b ⌊/⌋ a ↔ a • c ≤ b

full_name: floorDiv_of_nonpos
code: @[simp] lemma floorDiv_of_nonpos (ha : a ≤ 0) (b : β) : b ⌊/⌋ a = 0 
goal: b ⌊/⌋ a = 0

full_name: floorDiv_zero
code: lemma floorDiv_zero (b : β) : b ⌊/⌋ (0 : α) = 0 
goal: b ⌊/⌋ 0 = 0

full_name: zero_floorDiv
code: @[simp] lemma zero_floorDiv (a : α) : (0 : β) ⌊/⌋ a = 0 
goal: 0 ⌊/⌋ a = 0

full_name: smul_floorDiv_le
code: lemma smul_floorDiv_le (ha : 0 < a) : a • (b ⌊/⌋ a) ≤ b 
goal: a • (b ⌊/⌋ a) ≤ b

full_name: gc_smul_ceilDiv
code: lemma gc_smul_ceilDiv (ha : 0 < a) : GaloisConnection (· ⌈/⌉ a) (a • · : β → β) 
goal: GaloisConnection (fun x => x ⌈/⌉ a) fun x => a • x

full_name: ceilDiv_le_iff_le_smul
code: @[simp]
lemma ceilDiv_le_iff_le_smul (ha : 0 < a) : b ⌈/⌉ a ≤ c ↔ b ≤ a • c 
goal: b ⌈/⌉ a ≤ c ↔ b ≤ a • c

full_name: ceilDiv_of_nonpos
code: @[simp] lemma ceilDiv_of_nonpos (ha : a ≤ 0) (b : β) : b ⌈/⌉ a = 0 
goal: b ⌈/⌉ a = 0

full_name: ceilDiv_zero
code: lemma ceilDiv_zero (b : β) : b ⌈/⌉ (0 : α) = 0 
goal: b ⌈/⌉ 0 = 0

full_name: zero_ceilDiv
code: @[simp] lemma zero_ceilDiv (a : α) : (0 : β) ⌈/⌉ a = 0 
goal: 0 ⌈/⌉ a = 0

full_name: le_smul_ceilDiv
code: lemma le_smul_ceilDiv (ha : 0 < a) : b ≤ a • (b ⌈/⌉ a) 
goal: b ≤ a • (b ⌈/⌉ a)

full_name: floorDiv_le_ceilDiv
code: lemma floorDiv_le_ceilDiv : b ⌊/⌋ a ≤ b ⌈/⌉ a 
goal: b ⌊/⌋ a ≤ b ⌈/⌉ a

full_name: floorDiv_one
code: @[simp] lemma floorDiv_one [Nontrivial α] (b : β) : b ⌊/⌋ (1 : α) = b 
goal: b ⌊/⌋ 1 = b

full_name: smul_floorDiv
code: @[simp] lemma smul_floorDiv [PosSMulMono α β] [PosSMulReflectLE α β] (ha : 0 < a) (b : β) :
    a • b ⌊/⌋ a = b 
goal: a • b ⌊/⌋ a = b

full_name: ceilDiv_one
code: @[simp] lemma ceilDiv_one [Nontrivial α] (b : β) : b ⌈/⌉ (1 : α) = b 
goal: b ⌈/⌉ 1 = b

full_name: smul_ceilDiv
code: @[simp] lemma smul_ceilDiv [PosSMulMono α β] [PosSMulReflectLE α β] (ha : 0 < a) (b : β) :
    a • b ⌈/⌉ a = b 
goal: a • b ⌈/⌉ a = b

full_name: gc_floorDiv_mul
code: lemma gc_floorDiv_mul (ha : 0 < a) : GaloisConnection (a * ·) (· ⌊/⌋ a) 
goal: GaloisConnection (fun x => a * x) fun x => x ⌊/⌋ a

full_name: le_floorDiv_iff_mul_le
code: lemma le_floorDiv_iff_mul_le (ha : 0 < a) : c ≤ b ⌊/⌋ a ↔ a • c ≤ b 
goal: c ≤ b ⌊/⌋ a ↔ a • c ≤ b

full_name: gc_mul_ceilDiv
code: lemma gc_mul_ceilDiv (ha : 0 < a) : GaloisConnection (· ⌈/⌉ a) (a * ·) 
goal: GaloisConnection (fun x => x ⌈/⌉ a) fun x => a * x

full_name: ceilDiv_le_iff_le_mul
code: lemma ceilDiv_le_iff_le_mul (ha : 0 < a) : b ⌈/⌉ a ≤ c ↔ b ≤ a * c 
goal: b ⌈/⌉ a ≤ c ↔ b ≤ a * c

full_name: Nat.instFloorDiv
code: instance instFloorDiv : FloorDiv ℕ ℕ 
goal: FloorDiv ℕ ℕ

full_name: Nat.instCeilDiv
code: instance instCeilDiv : CeilDiv ℕ ℕ 
goal: CeilDiv ℕ ℕ

full_name: Nat.floorDiv_eq_div
code: @[simp] lemma floorDiv_eq_div (a b : ℕ) : a ⌊/⌋ b = a / b 
goal: a ⌊/⌋ b = a / b

full_name: Nat.ceilDiv_eq_add_pred_div
code: lemma ceilDiv_eq_add_pred_div (a b : ℕ) : a ⌈/⌉ b = (a + b - 1) / b 
goal: a ⌈/⌉ b = (a + b - 1) / b

full_name: Pi.instFloorDiv
code: instance instFloorDiv : FloorDiv α (∀ i, π i) 
goal: FloorDiv α ((i : ι) → π i)

full_name: Pi.floorDiv_def
code: lemma floorDiv_def (f : ∀ i, π i) (a : α) : f ⌊/⌋ a = fun i ↦ f i ⌊/⌋ a 
goal: f ⌊/⌋ a = fun i => f i ⌊/⌋ a

full_name: Pi.floorDiv_apply
code: @[simp] lemma floorDiv_apply (f : ∀ i, π i) (a : α) (i : ι) : (f ⌊/⌋ a) i = f i ⌊/⌋ a 
goal: (f ⌊/⌋ a) i = f i ⌊/⌋ a

full_name: Pi.instCeilDiv
code: instance instCeilDiv : CeilDiv α (∀ i, π i) 
goal: CeilDiv α ((i : ι) → π i)

full_name: Pi.ceilDiv_def
code: lemma ceilDiv_def (f : ∀ i, π i) (a : α) : f ⌈/⌉ a = fun i ↦ f i ⌈/⌉ a 
goal: f ⌈/⌉ a = fun i => f i ⌈/⌉ a

full_name: Pi.ceilDiv_apply
code: @[simp] lemma ceilDiv_apply (f : ∀ i, π i) (a : α) (i : ι) : (f ⌈/⌉ a) i = f i ⌈/⌉ a 
goal: (f ⌈/⌉ a) i = f i ⌈/⌉ a

full_name: Finsupp.instFloorDiv
code: noncomputable instance instFloorDiv : FloorDiv α (ι →₀ β) 
goal: FloorDiv α (ι →₀ β)

full_name: Finsupp.floorDiv_def
code: lemma floorDiv_def (f : ι →₀ β) (a : α) : f ⌊/⌋ a = f.mapRange (· ⌊/⌋ a) (zero_floorDiv _) 
goal: f ⌊/⌋ a = Finsupp.mapRange (fun x => x ⌊/⌋ a) ⋯ f

full_name: Finsupp.coe_floorDiv
code: @[norm_cast] lemma coe_floorDiv (f : ι →₀ β) (a : α) : f ⌊/⌋ a = fun i ↦ f i ⌊/⌋ a 
goal: ⇑(f ⌊/⌋ a) = fun i => f i ⌊/⌋ a

full_name: Finsupp.floorDiv_apply
code: @[simp] lemma floorDiv_apply (f : ι →₀ β) (a : α) (i : ι) : (f ⌊/⌋ a) i = f i ⌊/⌋ a 
goal: (f ⌊/⌋ a) i = f i ⌊/⌋ a

full_name: Finsupp.support_floorDiv_subset
code: lemma support_floorDiv_subset : (f ⌊/⌋ a).support ⊆ f.support 
goal: (f ⌊/⌋ a).support ⊆ f.support

full_name: Finsupp.instCeilDiv
code: noncomputable instance instCeilDiv : CeilDiv α (ι →₀ β) 
goal: CeilDiv α (ι →₀ β)

full_name: Finsupp.ceilDiv_def
code: lemma ceilDiv_def (f : ι →₀ β) (a : α) : f ⌈/⌉ a = f.mapRange (· ⌈/⌉ a) (zero_ceilDiv _) 
goal: f ⌈/⌉ a = Finsupp.mapRange (fun x => x ⌈/⌉ a) ⋯ f

full_name: Finsupp.coe_ceilDiv_def
code: @[norm_cast] lemma coe_ceilDiv_def (f : ι →₀ β) (a : α) : f ⌈/⌉ a = fun i ↦ f i ⌈/⌉ a 
goal: ⇑(f ⌈/⌉ a) = fun i => f i ⌈/⌉ a

full_name: Finsupp.ceilDiv_apply
code: @[simp] lemma ceilDiv_apply (f : ι →₀ β) (a : α) (i : ι) : (f ⌈/⌉ a) i = f i ⌈/⌉ a 
goal: (f ⌈/⌉ a) i = f i ⌈/⌉ a

full_name: Finsupp.support_ceilDiv_subset
code: lemma support_ceilDiv_subset : (f ⌈/⌉ a).support ⊆ f.support 
goal: (f ⌈/⌉ a).support ⊆ f.support