File: .lake/packages/lean4/src/lean/Init/Data/Int/DivModLemmas.lean

full_name: Int.dvd_def
code: protected theorem dvd_def (a b : Int) : (a ∣ b) = Exists (fun c => b = a * c) 
goal: (a ∣ b) = ∃ c, b = a * c

full_name: Int.dvd_zero
code: protected theorem dvd_zero (n : Int) : n ∣ 0 
goal: n ∣ 0

full_name: Int.dvd_refl
code: protected theorem dvd_refl (n : Int) : n ∣ n 
goal: n ∣ n

full_name: Int.one_dvd
code: protected theorem one_dvd (n : Int) : 1 ∣ n 
goal: 1 ∣ n

full_name: Int.dvd_trans
code: protected theorem dvd_trans : ∀ {a b c : Int}, a ∣ b → b ∣ c → a ∣ c
  
goal: a ∣ b → b ∣ c → a ∣ c

full_name: Int.ofNat_dvd
code: @[norm_cast] theorem ofNat_dvd {m n : Nat} : (↑m : Int) ∣ ↑n ↔ m ∣ n 
goal: ↑m ∣ ↑n ↔ m ∣ n

full_name: Int.dvd_antisymm
code: theorem dvd_antisymm {a b : Int} (H1 : 0 ≤ a) (H2 : 0 ≤ b) : a ∣ b → b ∣ a → a = b 
goal: a ∣ b → b ∣ a → a = b

full_name: Int.zero_dvd
code: @[simp] protected theorem zero_dvd {n : Int} : 0 ∣ n ↔ n = 0 
goal: 0 ∣ n ↔ n = 0

full_name: Int.dvd_mul_right
code: protected theorem dvd_mul_right (a b : Int) : a ∣ a * b 
goal: a ∣ a * b

full_name: Int.dvd_mul_left
code: protected theorem dvd_mul_left (a b : Int) : b ∣ a * b 
goal: b ∣ a * b

full_name: Int.neg_dvd
code: protected theorem neg_dvd {a b : Int} : -a ∣ b ↔ a ∣ b 
goal: -a ∣ b ↔ a ∣ b

full_name: Int.dvd_neg
code: protected theorem dvd_neg {a b : Int} : a ∣ -b ↔ a ∣ b 
goal: a ∣ -b ↔ a ∣ b

full_name: Int.natAbs_dvd_natAbs
code: @[simp] theorem natAbs_dvd_natAbs {a b : Int} : natAbs a ∣ natAbs b ↔ a ∣ b 
goal: a.natAbs ∣ b.natAbs ↔ a ∣ b

full_name: Int.ofNat_dvd_left
code: theorem ofNat_dvd_left {n : Nat} {z : Int} : (↑n : Int) ∣ z ↔ n ∣ z.natAbs 
goal: ↑n ∣ z ↔ n ∣ z.natAbs

full_name: Int.dvd_add
code: protected theorem dvd_add : ∀ {a b c : Int}, a ∣ b → a ∣ c → a ∣ b + c
  
goal: a ∣ b → a ∣ c → a ∣ b + c

full_name: Int.dvd_sub
code: protected theorem dvd_sub : ∀ {a b c : Int}, a ∣ b → a ∣ c → a ∣ b - c
  
goal: a ∣ b → a ∣ c → a ∣ b - c

full_name: Int.dvd_add_left
code: protected theorem dvd_add_left {a b c : Int} (H : a ∣ c) : a ∣ b + c ↔ a ∣ b 
goal: a ∣ b + c ↔ a ∣ b

full_name: Int.dvd_add_right
code: protected theorem dvd_add_right {a b c : Int} (H : a ∣ b) : a ∣ b + c ↔ a ∣ c 
goal: a ∣ b + c ↔ a ∣ c

full_name: Int.dvd_iff_dvd_of_dvd_sub
code: protected theorem dvd_iff_dvd_of_dvd_sub {a b c : Int} (H : a ∣ b - c) : a ∣ b ↔ a ∣ c 
goal: a ∣ b ↔ a ∣ c

full_name: Int.dvd_iff_dvd_of_dvd_add
code: protected theorem dvd_iff_dvd_of_dvd_add {a b c : Int} (H : a ∣ b + c) : a ∣ b ↔ a ∣ c 
goal: a ∣ b ↔ a ∣ c

full_name: Int.le_of_dvd
code: theorem le_of_dvd {a b : Int} (bpos : 0 < b) (H : a ∣ b) : a ≤ b 
goal: a ≤ b

full_name: Int.natAbs_dvd
code: theorem natAbs_dvd {a b : Int} : (a.natAbs : Int) ∣ b ↔ a ∣ b 
goal: ↑a.natAbs ∣ b ↔ a ∣ b

full_name: Int.dvd_natAbs
code: theorem dvd_natAbs {a b : Int} : a ∣ b.natAbs ↔ a ∣ b 
goal: a ∣ ↑b.natAbs ↔ a ∣ b

full_name: Int.natAbs_dvd_self
code: theorem natAbs_dvd_self {a : Int} : (a.natAbs : Int) ∣ a 
goal: ↑a.natAbs ∣ a

full_name: Int.dvd_natAbs_self
code: theorem dvd_natAbs_self {a : Int} : a ∣ (a.natAbs : Int) 
goal: a ∣ ↑a.natAbs

full_name: Int.ofNat_dvd_right
code: theorem ofNat_dvd_right {n : Nat} {z : Int} : z ∣ (↑n : Int) ↔ z.natAbs ∣ n 
goal: z ∣ ↑n ↔ z.natAbs ∣ n

full_name: Int.eq_one_of_dvd_one
code: theorem eq_one_of_dvd_one {a : Int} (H : 0 ≤ a) (H' : a ∣ 1) : a = 1 
goal: a = 1

full_name: Int.eq_one_of_mul_eq_one_right
code: theorem eq_one_of_mul_eq_one_right {a b : Int} (H : 0 ≤ a) (H' : a * b = 1) : a = 1 
goal: a = 1

full_name: Int.eq_one_of_mul_eq_one_left
code: theorem eq_one_of_mul_eq_one_left {a b : Int} (H : 0 ≤ b) (H' : a * b = 1) : b = 1 
goal: b = 1

full_name: Int.zero_ediv
code: @[simp] theorem zero_ediv : ∀ b : Int, 0 / b = 0
  
goal: 0 / b = 0

full_name: Int.ediv_zero
code: @[simp] protected theorem ediv_zero : ∀ a : Int, a / 0 = 0
  
goal: a / 0 = 0

full_name: Int.zero_div
code: @[simp] protected theorem zero_div : ∀ b : Int, div 0 b = 0
  
goal: Int.div 0 b = 0

full_name: Int.div_zero
code: @[simp] protected theorem div_zero : ∀ a : Int, div a 0 = 0
  
goal: a.div 0 = 0

full_name: Int.zero_fdiv
code: @[simp] theorem zero_fdiv (b : Int) : fdiv 0 b = 0 
goal: Int.fdiv 0 b = 0

full_name: Int.fdiv_zero
code: @[simp] protected theorem fdiv_zero : ∀ a : Int, fdiv a 0 = 0
  
goal: a.fdiv 0 = 0

full_name: Int.div_eq_ediv
code: theorem div_eq_ediv : ∀ {a b : Int}, 0 ≤ a → 0 ≤ b → a.div b = a / b
  
goal: 0 ≤ a → 0 ≤ b → a.div b = a / b

full_name: Int.fdiv_eq_ediv
code: theorem fdiv_eq_ediv : ∀ (a : Int) {b : Int}, 0 ≤ b → fdiv a b = a / b
  
goal: 0 ≤ b → a.fdiv b = a / b

full_name: Int.fdiv_eq_div
code: theorem fdiv_eq_div {a b : Int} (Ha : 0 ≤ a) (Hb : 0 ≤ b) : fdiv a b = div a b 
goal: a.fdiv b = a.div b

full_name: Int.zero_emod
code: @[simp] theorem zero_emod (b : Int) : 0 % b = 0 
goal: 0 % b = 0

full_name: Int.emod_zero
code: @[simp] theorem emod_zero : ∀ a : Int, a % 0 = a
  
goal: a % 0 = a

full_name: Int.zero_mod
code: @[simp] theorem zero_mod (b : Int) : mod 0 b = 0 
goal: Int.mod 0 b = 0

full_name: Int.mod_zero
code: @[simp] theorem mod_zero : ∀ a : Int, mod a 0 = a
  
goal: a.mod 0 = a

full_name: Int.zero_fmod
code: @[simp] theorem zero_fmod (b : Int) : fmod 0 b = 0 
goal: Int.fmod 0 b = 0

full_name: Int.fmod_zero
code: @[simp] theorem fmod_zero : ∀ a : Int, fmod a 0 = a
  
goal: a.fmod 0 = a

full_name: Int.ofNat_emod
code: @[simp, norm_cast] theorem ofNat_emod (m n : Nat) : (↑(m % n) : Int) = m % n 
goal: ↑(m % n) = ↑m % ↑n

full_name: Int.emod_add_ediv.aux
code: theorem emod_add_ediv : ∀ a b : Int, a % b + b * (a / b) = a
  
goal: ↑n - (↑m % ↑n + 1) - (↑n * (↑m / ↑n) + ↑n) = -[m+1]

full_name: Int.emod_add_ediv
code: theorem emod_add_ediv : ∀ a b : Int, a % b + b * (a / b) = a
  
goal: a % b + b * (a / b) = a

full_name: Int.emod_add_ediv'
code: theorem emod_add_ediv' (a b : Int) : a % b + a / b * b = a 
goal: a % b + a / b * b = a

full_name: Int.ediv_add_emod
code: theorem ediv_add_emod (a b : Int) : b * (a / b) + a % b = a 
goal: b * (a / b) + a % b = a

full_name: Int.ediv_add_emod'
code: theorem ediv_add_emod' (a b : Int) : a / b * b + a % b = a 
goal: a / b * b + a % b = a

full_name: Int.emod_def
code: theorem emod_def (a b : Int) : a % b = a - b * (a / b) 
goal: a % b = a - b * (a / b)

full_name: Int.mod_add_div
code: theorem mod_add_div : ∀ a b : Int, mod a b + b * (a.div b) = a
  
goal: a.mod b + b * a.div b = a

full_name: Int.div_add_mod
code: theorem div_add_mod (a b : Int) : b * a.div b + mod a b = a 
goal: b * a.div b + a.mod b = a

full_name: Int.mod_add_div'
code: theorem mod_add_div' (m k : Int) : mod m k + m.div k * k = m 
goal: m.mod k + m.div k * k = m

full_name: Int.div_add_mod'
code: theorem div_add_mod' (m k : Int) : m.div k * k + mod m k = m 
goal: m.div k * k + m.mod k = m

full_name: Int.mod_def
code: theorem mod_def (a b : Int) : mod a b = a - b * a.div b 
goal: a.mod b = a - b * a.div b

full_name: Int.fmod_add_fdiv
code: theorem fmod_add_fdiv : ∀ a b : Int, a.fmod b + b * a.fdiv b = a
  
goal: a.fmod b + b * a.fdiv b = a

full_name: Int.fdiv_add_fmod
code: theorem fdiv_add_fmod (a b : Int) : b * a.fdiv b + a.fmod b = a 
goal: b * a.fdiv b + a.fmod b = a

full_name: Int.fmod_def
code: theorem fmod_def (a b : Int) : a.fmod b = a - b * a.fdiv b 
goal: a.fmod b = a - b * a.fdiv b

full_name: Int.fmod_eq_emod
code: theorem fmod_eq_emod (a : Int) {b : Int} (hb : 0 ≤ b) : fmod a b = a % b 
goal: a.fmod b = a % b

full_name: Int.mod_eq_emod
code: theorem mod_eq_emod {a b : Int} (ha : 0 ≤ a) (hb : 0 ≤ b) : mod a b = a % b 
goal: a.mod b = a % b

full_name: Int.fmod_eq_mod
code: theorem fmod_eq_mod {a b : Int} (Ha : 0 ≤ a) (Hb : 0 ≤ b) : fmod a b = mod a b 
goal: a.fmod b = a.mod b

full_name: Int.ediv_neg
code: @[simp] protected theorem ediv_neg : ∀ a b : Int, a / (-b) = -(a / b)
  
goal: a / -b = -(a / b)

full_name: Int.ediv_neg'
code: theorem ediv_neg' {a b : Int} (Ha : a < 0) (Hb : 0 < b) : a / b < 0 
goal: a / b < 0

full_name: Int.div_def
code: protected theorem div_def (a b : Int) : a / b = Int.ediv a b 
goal: a / b = a.ediv b

full_name: Int.negSucc_ediv
code: theorem negSucc_ediv (m : Nat) {b : Int} (H : 0 < b) : -[m+1] / b = -(div m b + 1) 
goal: -[m+1] / b = -((↑m).div b + 1)

full_name: Int.ediv_nonneg
code: theorem ediv_nonneg {a b : Int} (Ha : 0 ≤ a) (Hb : 0 ≤ b) : 0 ≤ a / b 
goal: 0 ≤ a / b

full_name: Int.ediv_nonpos
code: theorem ediv_nonpos {a b : Int} (Ha : 0 ≤ a) (Hb : b ≤ 0) : a / b ≤ 0 
goal: a / b ≤ 0

full_name: Int.add_mul_ediv_right
code: theorem add_mul_ediv_right (a b : Int) {c : Int} (H : c ≠ 0) : (a + b * c) / c = a / c + b 
goal: (a + b * c) / c = a / c + b

full_name: Int.add_ediv_of_dvd_right
code: theorem add_ediv_of_dvd_right {a b c : Int} (H : c ∣ b) : (a + b) / c = a / c + b / c 
goal: (a + b) / c = a / c + b / c

full_name: Int.add_ediv_of_dvd_left
code: theorem add_ediv_of_dvd_left {a b c : Int} (H : c ∣ a) : (a + b) / c = a / c + b / c 
goal: (a + b) / c = a / c + b / c

full_name: Int.mul_ediv_cancel
code: @[simp] theorem mul_ediv_cancel (a : Int) {b : Int} (H : b ≠ 0) : (a * b) / b = a 
goal: a * b / b = a

full_name: Int.mul_ediv_cancel_left
code: @[simp] theorem mul_ediv_cancel_left (b : Int) (H : a ≠ 0) : (a * b) / a = b 
goal: a * b / a = b

full_name: Int.div_nonneg_iff_of_pos
code: theorem div_nonneg_iff_of_pos {a b : Int} (h : 0 < b) : a / b ≥ 0 ↔ a ≥ 0 
goal: a / b ≥ 0 ↔ a ≥ 0

full_name: Int.ediv_eq_zero_of_lt
code: theorem ediv_eq_zero_of_lt {a b : Int} (H1 : 0 ≤ a) (H2 : a < b) : a / b = 0 
goal: a / b = 0

full_name: Int.add_mul_ediv_left
code: theorem add_mul_ediv_left (a : Int) {b : Int}
    (c : Int) (H : b ≠ 0) : (a + b * c) / b = a / b + c 
goal: (a + b * c) / b = a / b + c

full_name: Int.mul_ediv_mul_of_pos
code: @[simp] theorem mul_ediv_mul_of_pos {a : Int}
    (b c : Int) (H : 0 < a) : (a * b) / (a * c) = b / c 
goal: a * b / (a * c) = b / c

full_name: Int.mul_ediv_mul_of_pos_left
code: @[simp] theorem mul_ediv_mul_of_pos_left
    (a : Int) {b : Int} (c : Int) (H : 0 < b) : (a * b) / (c * b) = a / c 
goal: a * b / (c * b) = a / c

full_name: Int.ediv_eq_of_eq_mul_right
code: protected theorem ediv_eq_of_eq_mul_right {a b c : Int}
    (H1 : b ≠ 0) (H2 : a = b * c) : a / b = c 
goal: a / b = c

full_name: Int.eq_ediv_of_mul_eq_right
code: protected theorem eq_ediv_of_mul_eq_right {a b c : Int}
    (H1 : a ≠ 0) (H2 : a * b = c) : b = c / a 
goal: b = c / a

full_name: Int.ediv_eq_of_eq_mul_left
code: protected theorem ediv_eq_of_eq_mul_left {a b c : Int}
    (H1 : b ≠ 0) (H2 : a = c * b) : a / b = c 
goal: a / b = c

full_name: Int.mod_def'
code: theorem mod_def' (m n : Int) : m % n = emod m n 
goal: m % n = m.emod n

full_name: Int.negSucc_emod
code: theorem negSucc_emod (m : Nat) {b : Int} (bpos : 0 < b) : -[m+1] % b = b - 1 - m % b 
goal: -[m+1] % b = b - 1 - ↑m % b

full_name: Int.emod_negSucc
code: theorem emod_negSucc (m : Nat) (n : Int) :
  (Int.negSucc m) % n = Int.subNatNat (Int.natAbs n) (Nat.succ (m % Int.natAbs n)) 
goal: -[m+1] % n = Int.subNatNat n.natAbs (m % n.natAbs).succ

full_name: Int.ofNat_mod_ofNat
code: theorem ofNat_mod_ofNat (m n : Nat) : (m % n : Int) = ↑(m % n) 
goal: ↑m % ↑n = ↑(m % n)

full_name: Int.emod_nonneg
code: theorem emod_nonneg : ∀ (a : Int) {b : Int}, b ≠ 0 → 0 ≤ a % b
  
goal: b ≠ 0 → 0 ≤ a % b

full_name: Int.emod_lt_of_pos
code: theorem emod_lt_of_pos (a : Int) {b : Int} (H : 0 < b) : a % b < b 
goal: a % b < b

full_name: Int.mul_ediv_self_le
code: theorem mul_ediv_self_le {x k : Int} (h : k ≠ 0) : k * (x / k) ≤ x 
goal: k * (x / k) ≤ x

full_name: Int.lt_mul_ediv_self_add
code: theorem lt_mul_ediv_self_add {x k : Int} (h : 0 < k) : x < k * (x / k) + k 
goal: x < k * (x / k) + k

full_name: Int.add_mul_emod_self
code: @[simp] theorem add_mul_emod_self {a b c : Int} : (a + b * c) % c = a % c 
goal: (a + b * c) % c = a % c

full_name: Int.add_mul_emod_self_left
code: @[simp] theorem add_mul_emod_self_left (a b c : Int) : (a + b * c) % b = a % b 
goal: (a + b * c) % b = a % b

full_name: Int.add_emod_self
code: @[simp] theorem add_emod_self {a b : Int} : (a + b) % b = a % b 
goal: (a + b) % b = a % b

full_name: Int.add_emod_self_left
code: @[simp] theorem add_emod_self_left {a b : Int} : (a + b) % a = b % a 
goal: (a + b) % a = b % a

full_name: Int.neg_emod
code: theorem neg_emod {a b : Int} : -a % b = (b - a) % b 
goal: -a % b = (b - a) % b

full_name: Int.emod_neg
code: @[simp] theorem emod_neg (a b : Int) : a % -b = a % b 
goal: a % -b = a % b

full_name: Int.emod_add_emod
code: @[simp] theorem emod_add_emod (m n k : Int) : (m % n + k) % n = (m + k) % n 
goal: (m % n + k) % n = (m + k) % n

full_name: Int.add_emod_emod
code: @[simp] theorem add_emod_emod (m n k : Int) : (m + n % k) % k = (m + n) % k 
goal: (m + n % k) % k = (m + n) % k

full_name: Int.add_emod
code: theorem add_emod (a b n : Int) : (a + b) % n = (a % n + b % n) % n 
goal: (a + b) % n = (a % n + b % n) % n

full_name: Int.add_emod_eq_add_emod_right
code: theorem add_emod_eq_add_emod_right {m n k : Int} (i : Int)
    (H : m % n = k % n) : (m + i) % n = (k + i) % n 
goal: (m + i) % n = (k + i) % n

full_name: Int.emod_add_cancel_right
code: theorem emod_add_cancel_right {m n k : Int} (i) : (m + i) % n = (k + i) % n ↔ m % n = k % n 
goal: (m + i) % n = (k + i) % n ↔ m % n = k % n

full_name: Int.mul_emod_left
code: @[simp] theorem mul_emod_left (a b : Int) : (a * b) % b = 0 
goal: a * b % b = 0

full_name: Int.mul_emod_right
code: @[simp] theorem mul_emod_right (a b : Int) : (a * b) % a = 0 
goal: a * b % a = 0

full_name: Int.mul_emod
code: theorem mul_emod (a b n : Int) : (a * b) % n = (a % n) * (b % n) % n 
goal: a * b % n = a % n * (b % n) % n

full_name: Int.emod_self
code: @[local simp] theorem emod_self {a : Int} : a % a = 0 
goal: a % a = 0

full_name: Int.emod_emod_of_dvd
code: @[simp] theorem emod_emod_of_dvd (n : Int) {m k : Int}
    (h : m ∣ k) : (n % k) % m = n % m 
goal: n % k % m = n % m

full_name: Int.emod_emod
code: @[simp] theorem emod_emod (a b : Int) : (a % b) % b = a % b 
goal: a % b % b = a % b

full_name: Int.sub_emod
code: theorem sub_emod (a b n : Int) : (a - b) % n = (a % n - b % n) % n 
goal: (a - b) % n = (a % n - b % n) % n

full_name: Int.emod_eq_of_lt
code: theorem emod_eq_of_lt {a b : Int} (H1 : 0 ≤ a) (H2 : a < b) : a % b = a 
goal: a % b = a

full_name: Int.emod_self_add_one
code: @[simp] theorem emod_self_add_one {x : Int} (h : 0 ≤ x) : x % (x + 1) = x 
goal: x % (x + 1) = x

full_name: Int.mul_ediv_cancel_of_emod_eq_zero
code: theorem mul_ediv_cancel_of_emod_eq_zero {a b : Int} (H : a % b = 0) : b * (a / b) = a 
goal: b * (a / b) = a

full_name: Int.ediv_mul_cancel_of_emod_eq_zero
code: theorem ediv_mul_cancel_of_emod_eq_zero {a b : Int} (H : a % b = 0) : a / b * b = a 
goal: a / b * b = a

full_name: Int.emod_two_eq
code: theorem emod_two_eq (x : Int) : x % 2 = 0 ∨ x % 2 = 1 
goal: x % 2 = 0 ∨ x % 2 = 1

full_name: Int.add_emod_eq_add_emod_left
code: theorem add_emod_eq_add_emod_left {m n k : Int} (i : Int)
    (H : m % n = k % n) : (i + m) % n = (i + k) % n 
goal: (i + m) % n = (i + k) % n

full_name: Int.emod_add_cancel_left
code: theorem emod_add_cancel_left {m n k i : Int} : (i + m) % n = (i + k) % n ↔ m % n = k % n 
goal: (i + m) % n = (i + k) % n ↔ m % n = k % n

full_name: Int.emod_sub_cancel_right
code: theorem emod_sub_cancel_right {m n k : Int} (i) : (m - i) % n = (k - i) % n ↔ m % n = k % n 
goal: (m - i) % n = (k - i) % n ↔ m % n = k % n

full_name: Int.emod_eq_emod_iff_emod_sub_eq_zero
code: theorem emod_eq_emod_iff_emod_sub_eq_zero {m n k : Int} : m % n = k % n ↔ (m - k) % n = 0 
goal: m % n = k % n ↔ (m - k) % n = 0

full_name: Int.ediv_emod_unique
code: protected theorem ediv_emod_unique {a b r q : Int} (h : 0 < b) :
  a / b = q ∧ a % b = r ↔ r + b * q = a ∧ 0 ≤ r ∧ r < b 
goal: a / b = q ∧ a % b = r ↔ r + b * q = a ∧ 0 ≤ r ∧ r < b

full_name: Int.mul_emod_mul_of_pos
code: @[simp] theorem mul_emod_mul_of_pos
    {a : Int} (b c : Int) (H : 0 < a) : (a * b) % (a * c) = a * (b % c) 
goal: a * b % (a * c) = a * (b % c)

full_name: Int.lt_ediv_add_one_mul_self
code: theorem lt_ediv_add_one_mul_self (a : Int) {b : Int} (H : 0 < b) : a < (a / b + 1) * b 
goal: a < (a / b + 1) * b

full_name: Int.natAbs_div_le_natAbs.aux
code: theorem natAbs_div_le_natAbs (a b : Int) : natAbs (a / b) ≤ natAbs a 
goal: (a / ↑n).natAbs ≤ a.natAbs

full_name: Int.natAbs_div_le_natAbs
code: theorem natAbs_div_le_natAbs (a b : Int) : natAbs (a / b) ≤ natAbs a 
goal: (a / b).natAbs ≤ a.natAbs

full_name: Int.ediv_le_self
code: theorem ediv_le_self {a : Int} (b : Int) (Ha : 0 ≤ a) : a / b ≤ a 
goal: a / b ≤ a

full_name: Int.dvd_of_emod_eq_zero
code: theorem dvd_of_emod_eq_zero {a b : Int} (H : b % a = 0) : a ∣ b 
goal: a ∣ b

full_name: Int.dvd_emod_sub_self
code: theorem dvd_emod_sub_self {x : Int} {m : Nat} : (m : Int) ∣ x % m - x 
goal: ↑m ∣ x % ↑m - x

full_name: Int.emod_eq_zero_of_dvd
code: theorem emod_eq_zero_of_dvd : ∀ {a b : Int}, a ∣ b → b % a = 0
  
goal: a ∣ b → b % a = 0

full_name: Int.dvd_iff_emod_eq_zero
code: theorem dvd_iff_emod_eq_zero (a b : Int) : a ∣ b ↔ b % a = 0 
goal: a ∣ b ↔ b % a = 0

full_name: Int.decidableDvd
code: instance decidableDvd : DecidableRel (α := Int) (· ∣ ·) 
goal: DecidableRel fun x x_1 => x ∣ x_1

full_name: Int.emod_pos_of_not_dvd
code: theorem emod_pos_of_not_dvd {a b : Int} (h : ¬ a ∣ b) : a = 0 ∨ 0 < b % a 
goal: a = 0 ∨ 0 < b % a

full_name: Int.mul_ediv_assoc
code: protected theorem mul_ediv_assoc (a : Int) : ∀ {b c : Int}, c ∣ b → (a * b) / c = a * (b / c)
  
goal: c ∣ b → a * b / c = a * (b / c)

full_name: Int.mul_ediv_assoc'
code: protected theorem mul_ediv_assoc' (b : Int) {a c : Int}
    (h : c ∣ a) : (a * b) / c = a / c * b 
goal: a * b / c = a / c * b

full_name: Int.neg_ediv_of_dvd
code: theorem neg_ediv_of_dvd : ∀ {a b : Int}, b ∣ a → (-a) / b = -(a / b)
  
goal: b ∣ a → -a / b = -(a / b)

full_name: Int.sub_ediv_of_dvd
code: theorem sub_ediv_of_dvd (a : Int) {b c : Int}
    (hcb : c ∣ b) : (a - b) / c = a / c - b / c 
goal: (a - b) / c = a / c - b / c

full_name: Int.ediv_one
code: @[simp] theorem ediv_one : ∀ a : Int, a / 1 = a
  
goal: a / 1 = a

full_name: Int.emod_one
code: @[simp] theorem emod_one (a : Int) : a % 1 = 0 
goal: a % 1 = 0

full_name: Int.ediv_self
code: @[simp] protected theorem ediv_self {a : Int} (H : a ≠ 0) : a / a = 1 
goal: a / a = 1

full_name: Int.emod_sub_cancel
code: @[simp]
theorem emod_sub_cancel (x y : Int): (x - y)%y = x%y 
goal: (x - y) % y = x % y

full_name: Int.dvd_sub_of_emod_eq
code: /-- If `a % b = c` then `b` divides `a - c`. -/
theorem dvd_sub_of_emod_eq {a b c : Int} (h : a % b = c) : b ∣ a - c 
goal: b ∣ a - c

full_name: Int.ediv_mul_cancel
code: protected theorem ediv_mul_cancel {a b : Int} (H : b ∣ a) : a / b * b = a 
goal: a / b * b = a

full_name: Int.mul_ediv_cancel'
code: protected theorem mul_ediv_cancel' {a b : Int} (H : a ∣ b) : a * (b / a) = b 
goal: a * (b / a) = b

full_name: Int.eq_mul_of_ediv_eq_right
code: protected theorem eq_mul_of_ediv_eq_right {a b c : Int}
    (H1 : b ∣ a) (H2 : a / b = c) : a = b * c 
goal: a = b * c

full_name: Int.ediv_eq_iff_eq_mul_right
code: protected theorem ediv_eq_iff_eq_mul_right {a b c : Int}
    (H : b ≠ 0) (H' : b ∣ a) : a / b = c ↔ a = b * c 
goal: a / b = c ↔ a = b * c

full_name: Int.ediv_eq_iff_eq_mul_left
code: protected theorem ediv_eq_iff_eq_mul_left {a b c : Int}
    (H : b ≠ 0) (H' : b ∣ a) : a / b = c ↔ a = c * b 
goal: a / b = c ↔ a = c * b

full_name: Int.eq_mul_of_ediv_eq_left
code: protected theorem eq_mul_of_ediv_eq_left {a b c : Int}
    (H1 : b ∣ a) (H2 : a / b = c) : a = c * b 
goal: a = c * b

full_name: Int.eq_zero_of_ediv_eq_zero
code: protected theorem eq_zero_of_ediv_eq_zero {d n : Int} (h : d ∣ n) (H : n / d = 0) : n = 0 
goal: n = 0

full_name: Int.sub_ediv_of_dvd_sub
code: theorem sub_ediv_of_dvd_sub {a b c : Int}
    (hcab : c ∣ a - b) : (a - b) / c = a / c - b / c 
goal: (a - b) / c = a / c - b / c

full_name: Int.ediv_left_inj
code: @[simp] protected theorem ediv_left_inj {a b d : Int}
    (hda : d ∣ a) (hdb : d ∣ b) : a / d = b / d ↔ a = b 
goal: a / d = b / d ↔ a = b

full_name: Int.ediv_sign
code: theorem ediv_sign : ∀ a b, a / sign b = a * sign b
  
goal: a / b.sign = a * b.sign

full_name: Int.ediv_mul_le
code: protected theorem ediv_mul_le (a : Int) {b : Int} (H : b ≠ 0) : a / b * b ≤ a 
goal: a / b * b ≤ a

full_name: Int.le_of_mul_le_mul_left
code: theorem le_of_mul_le_mul_left {a b c : Int} (w : a * b ≤ a * c) (h : 0 < a) : b ≤ c 
goal: b ≤ c

full_name: Int.le_of_mul_le_mul_right
code: theorem le_of_mul_le_mul_right {a b c : Int} (w : b * a ≤ c * a) (h : 0 < a) : b ≤ c 
goal: b ≤ c

full_name: Int.ediv_le_of_le_mul
code: protected theorem ediv_le_of_le_mul {a b c : Int} (H : 0 < c) (H' : a ≤ b * c) : a / c ≤ b 
goal: a / c ≤ b

full_name: Int.mul_lt_of_lt_ediv
code: protected theorem mul_lt_of_lt_ediv {a b c : Int} (H : 0 < c) (H3 : a < b / c) : a * c < b 
goal: a * c < b

full_name: Int.mul_le_of_le_ediv
code: protected theorem mul_le_of_le_ediv {a b c : Int} (H1 : 0 < c) (H2 : a ≤ b / c) : a * c ≤ b 
goal: a * c ≤ b

full_name: Int.ediv_lt_of_lt_mul
code: protected theorem ediv_lt_of_lt_mul {a b c : Int} (H : 0 < c) (H' : a < b * c) : a / c < b 
goal: a / c < b

full_name: Int.lt_of_mul_lt_mul_left
code: theorem lt_of_mul_lt_mul_left {a b c : Int} (w : a * b < a * c) (h : 0 ≤ a) : b < c 
goal: b < c

full_name: Int.lt_of_mul_lt_mul_right
code: theorem lt_of_mul_lt_mul_right {a b c : Int} (w : b * a < c * a) (h : 0 ≤ a) : b < c 
goal: b < c

full_name: Int.le_ediv_of_mul_le
code: protected theorem le_ediv_of_mul_le {a b c : Int} (H1 : 0 < c) (H2 : a * c ≤ b) : a ≤ b / c 
goal: a ≤ b / c

full_name: Int.le_ediv_iff_mul_le
code: protected theorem le_ediv_iff_mul_le {a b c : Int} (H : 0 < c) : a ≤ b / c ↔ a * c ≤ b 
goal: a ≤ b / c ↔ a * c ≤ b

full_name: Int.ediv_le_ediv
code: protected theorem ediv_le_ediv {a b c : Int} (H : 0 < c) (H' : a ≤ b) : a / c ≤ b / c 
goal: a / c ≤ b / c

full_name: Int.lt_mul_of_ediv_lt
code: protected theorem lt_mul_of_ediv_lt {a b c : Int} (H1 : 0 < c) (H2 : a / c < b) : a < b * c 
goal: a < b * c

full_name: Int.ediv_lt_iff_lt_mul
code: protected theorem ediv_lt_iff_lt_mul {a b c : Int} (H : 0 < c) : a / c < b ↔ a < b * c 
goal: a / c < b ↔ a < b * c

full_name: Int.le_mul_of_ediv_le
code: protected theorem le_mul_of_ediv_le {a b c : Int} (H1 : 0 ≤ b) (H2 : b ∣ a) (H3 : a / b ≤ c) :
    a ≤ c * b 
goal: a ≤ c * b

full_name: Int.lt_ediv_of_mul_lt
code: protected theorem lt_ediv_of_mul_lt {a b c : Int} (H1 : 0 ≤ b) (H2 : b ∣ c) (H3 : a * b < c) :
    a < c / b 
goal: a < c / b

full_name: Int.lt_ediv_iff_mul_lt
code: protected theorem lt_ediv_iff_mul_lt {a b : Int} (c : Int) (H : 0 < c) (H' : c ∣ b) :
    a < b / c ↔ a * c < b 
goal: a < b / c ↔ a * c < b

full_name: Int.ediv_pos_of_pos_of_dvd
code: theorem ediv_pos_of_pos_of_dvd {a b : Int} (H1 : 0 < a) (H2 : 0 ≤ b) (H3 : b ∣ a) : 0 < a / b 
goal: 0 < a / b

full_name: Int.ediv_eq_ediv_of_mul_eq_mul
code: theorem ediv_eq_ediv_of_mul_eq_mul {a b c d : Int}
    (H2 : d ∣ c) (H3 : b ≠ 0) (H4 : d ≠ 0) (H5 : a * d = b * c) : a / b = c / d 
goal: a / b = c / d

full_name: Int.div_one
code: @[simp] protected theorem div_one : ∀ a : Int, a.div 1 = a
  
goal: a.div 1 = a

full_name: Int.div_neg
code: @[simp] protected theorem div_neg : ∀ a b : Int, a.div (-b) = -(a.div b)
  
goal: a.div (-b) = -a.div b

full_name: Int.neg_div
code: @[simp] protected theorem neg_div : ∀ a b : Int, (-a).div b = -(a.div b)
  
goal: (-a).div b = -a.div b

full_name: Int.neg_div_neg
code: protected theorem neg_div_neg (a b : Int) : (-a).div (-b) = a.div b 
goal: (-a).div (-b) = a.div b

full_name: Int.div_nonneg
code: protected theorem div_nonneg {a b : Int} (Ha : 0 ≤ a) (Hb : 0 ≤ b) : 0 ≤ a.div b 
goal: 0 ≤ a.div b

full_name: Int.div_nonpos
code: protected theorem div_nonpos {a b : Int} (Ha : 0 ≤ a) (Hb : b ≤ 0) : a.div b ≤ 0 
goal: a.div b ≤ 0

full_name: Int.div_eq_zero_of_lt
code: theorem div_eq_zero_of_lt {a b : Int} (H1 : 0 ≤ a) (H2 : a < b) : a.div b = 0 
goal: a.div b = 0

full_name: Int.mul_div_cancel
code: @[simp] protected theorem mul_div_cancel (a : Int) {b : Int} (H : b ≠ 0) : (a * b).div b = a 
goal: (a * b).div b = a

full_name: Int.mul_div_cancel_left
code: @[simp] protected theorem mul_div_cancel_left (b : Int) (H : a ≠ 0) : (a * b).div a = b 
goal: (a * b).div a = b

full_name: Int.div_self
code: @[simp] protected theorem div_self {a : Int} (H : a ≠ 0) : a.div a = 1 
goal: a.div a = 1

full_name: Int.mul_div_cancel_of_mod_eq_zero
code: theorem mul_div_cancel_of_mod_eq_zero {a b : Int} (H : a.mod b = 0) : b * (a.div b) = a 
goal: b * a.div b = a

full_name: Int.div_mul_cancel_of_mod_eq_zero
code: theorem div_mul_cancel_of_mod_eq_zero {a b : Int} (H : a.mod b = 0) : a.div b * b = a 
goal: a.div b * b = a

full_name: Int.dvd_of_mod_eq_zero
code: theorem dvd_of_mod_eq_zero {a b : Int} (H : mod b a = 0) : a ∣ b 
goal: a ∣ b

full_name: Int.mul_div_assoc
code: protected theorem mul_div_assoc (a : Int) : ∀ {b c : Int}, c ∣ b → (a * b).div c = a * (b.div c)
  
goal: c ∣ b → (a * b).div c = a * b.div c

full_name: Int.mul_div_assoc'
code: protected theorem mul_div_assoc' (b : Int) {a c : Int} (h : c ∣ a) :
    (a * b).div c = a.div c * b 
goal: (a * b).div c = a.div c * b

full_name: Int.div_dvd_div
code: theorem div_dvd_div : ∀ {a b c : Int}, a ∣ b → b ∣ c → b.div a ∣ c.div a
  
goal: a ∣ b → b ∣ c → b.div a ∣ c.div a

full_name: Int.natAbs_div
code: @[simp] theorem natAbs_div (a b : Int) : natAbs (a.div b) = (natAbs a).div (natAbs b) 
goal: (a.div b).natAbs = a.natAbs.div b.natAbs

full_name: Int.div_eq_of_eq_mul_right
code: protected theorem div_eq_of_eq_mul_right {a b c : Int}
    (H1 : b ≠ 0) (H2 : a = b * c) : a.div b = c 
goal: a.div b = c

full_name: Int.eq_div_of_mul_eq_right
code: protected theorem eq_div_of_mul_eq_right {a b c : Int}
    (H1 : a ≠ 0) (H2 : a * b = c) : b = c.div a 
goal: b = c.div a

full_name: Int.ofNat_mod
code: theorem ofNat_mod (m n : Nat) : (↑(m % n) : Int) = mod m n 
goal: ↑(m % n) = (↑m).mod ↑n

full_name: Int.mod_one
code: @[simp] theorem mod_one (a : Int) : mod a 1 = 0 
goal: a.mod 1 = 0

full_name: Int.mod_eq_of_lt
code: theorem mod_eq_of_lt {a b : Int} (H1 : 0 ≤ a) (H2 : a < b) : mod a b = a 
goal: a.mod b = a

full_name: Int.mod_lt_of_pos
code: theorem mod_lt_of_pos (a : Int) {b : Int} (H : 0 < b) : mod a b < b 
goal: a.mod b < b

full_name: Int.mod_nonneg
code: theorem mod_nonneg : ∀ {a : Int} (b : Int), 0 ≤ a → 0 ≤ mod a b
  
goal: 0 ≤ a → 0 ≤ a.mod b

full_name: Int.mod_neg
code: @[simp] theorem mod_neg (a b : Int) : mod a (-b) = mod a b 
goal: a.mod (-b) = a.mod b

full_name: Int.mul_mod_left
code: @[simp] theorem mul_mod_left (a b : Int) : (a * b).mod b = 0 
goal: (a * b).mod b = 0

full_name: Int.mul_mod_right
code: @[simp] theorem mul_mod_right (a b : Int) : (a * b).mod a = 0 
goal: (a * b).mod a = 0

full_name: Int.mod_eq_zero_of_dvd
code: theorem mod_eq_zero_of_dvd : ∀ {a b : Int}, a ∣ b → mod b a = 0
  
goal: a ∣ b → b.mod a = 0

full_name: Int.dvd_iff_mod_eq_zero
code: theorem dvd_iff_mod_eq_zero (a b : Int) : a ∣ b ↔ mod b a = 0 
goal: a ∣ b ↔ b.mod a = 0

full_name: Int.div_mul_cancel
code: protected theorem div_mul_cancel {a b : Int} (H : b ∣ a) : a.div b * b = a 
goal: a.div b * b = a

full_name: Int.mul_div_cancel'
code: protected theorem mul_div_cancel' {a b : Int} (H : a ∣ b) : a * b.div a = b 
goal: a * b.div a = b

full_name: Int.eq_mul_of_div_eq_right
code: protected theorem eq_mul_of_div_eq_right {a b c : Int}
    (H1 : b ∣ a) (H2 : a.div b = c) : a = b * c 
goal: a = b * c

full_name: Int.mod_self
code: @[simp] theorem mod_self {a : Int} : a.mod a = 0 
goal: a.mod a = 0

full_name: Int.lt_div_add_one_mul_self
code: theorem lt_div_add_one_mul_self (a : Int) {b : Int} (H : 0 < b) : a < (a.div b + 1) * b 
goal: a < (a.div b + 1) * b

full_name: Int.div_eq_iff_eq_mul_right
code: protected theorem div_eq_iff_eq_mul_right {a b c : Int}
    (H : b ≠ 0) (H' : b ∣ a) : a.div b = c ↔ a = b * c 
goal: a.div b = c ↔ a = b * c

full_name: Int.div_eq_iff_eq_mul_left
code: protected theorem div_eq_iff_eq_mul_left {a b c : Int}
    (H : b ≠ 0) (H' : b ∣ a) : a.div b = c ↔ a = c * b 
goal: a.div b = c ↔ a = c * b

full_name: Int.eq_mul_of_div_eq_left
code: protected theorem eq_mul_of_div_eq_left {a b c : Int}
    (H1 : b ∣ a) (H2 : a.div b = c) : a = c * b 
goal: a = c * b

full_name: Int.div_eq_of_eq_mul_left
code: protected theorem div_eq_of_eq_mul_left {a b c : Int}
    (H1 : b ≠ 0) (H2 : a = c * b) : a.div b = c 
goal: a.div b = c

full_name: Int.eq_zero_of_div_eq_zero
code: protected theorem eq_zero_of_div_eq_zero {d n : Int} (h : d ∣ n) (H : n.div d = 0) : n = 0 
goal: n = 0

full_name: Int.div_left_inj
code: @[simp] protected theorem div_left_inj {a b d : Int}
    (hda : d ∣ a) (hdb : d ∣ b) : a.div d = b.div d ↔ a = b 
goal: a.div d = b.div d ↔ a = b

full_name: Int.div_sign
code: theorem div_sign : ∀ a b, a.div (sign b) = a * sign b
  
goal: a.div b.sign = a * b.sign

full_name: Int.sign_eq_div_abs
code: protected theorem sign_eq_div_abs (a : Int) : sign a = a.div (natAbs a) 
goal: a.sign = a.div ↑a.natAbs

full_name: Int.fdiv_nonneg
code: theorem fdiv_nonneg {a b : Int} (Ha : 0 ≤ a) (Hb : 0 ≤ b) : 0 ≤ a.fdiv b 
goal: 0 ≤ a.fdiv b

full_name: Int.fdiv_nonpos
code: theorem fdiv_nonpos : ∀ {a b : Int}, 0 ≤ a → b ≤ 0 → a.fdiv b ≤ 0
  
goal: 0 ≤ a → b ≤ 0 → a.fdiv b ≤ 0

full_name: Int.fdiv_neg'
code: theorem fdiv_neg' : ∀ {a b : Int}, a < 0 → 0 < b → a.fdiv b < 0
  
goal: a < 0 → 0 < b → a.fdiv b < 0

full_name: Int.fdiv_one
code: @[simp] theorem fdiv_one : ∀ a : Int, a.fdiv 1 = a
  
goal: a.fdiv 1 = a

full_name: Int.mul_fdiv_cancel
code: @[simp] theorem mul_fdiv_cancel (a : Int) {b : Int} (H : b ≠ 0) : fdiv (a * b) b = a 
goal: (a * b).fdiv b = a

full_name: Int.mul_fdiv_cancel_left
code: @[simp] theorem mul_fdiv_cancel_left (b : Int) (H : a ≠ 0) : fdiv (a * b) a = b 
goal: (a * b).fdiv a = b

full_name: Int.fdiv_self
code: @[simp] protected theorem fdiv_self {a : Int} (H : a ≠ 0) : a.fdiv a = 1 
goal: a.fdiv a = 1

full_name: Int.lt_fdiv_add_one_mul_self
code: theorem lt_fdiv_add_one_mul_self (a : Int) {b : Int} (H : 0 < b) : a < (a.fdiv b + 1) * b 
goal: a < (a.fdiv b + 1) * b

full_name: Int.ofNat_fmod
code: theorem ofNat_fmod (m n : Nat) : ↑(m % n) = fmod m n 
goal: ↑(m % n) = (↑m).fmod ↑n

full_name: Int.fmod_one
code: @[simp] theorem fmod_one (a : Int) : a.fmod 1 = 0 
goal: a.fmod 1 = 0

full_name: Int.fmod_eq_of_lt
code: theorem fmod_eq_of_lt {a b : Int} (H1 : 0 ≤ a) (H2 : a < b) : a.fmod b = a 
goal: a.fmod b = a

full_name: Int.fmod_nonneg
code: theorem fmod_nonneg {a b : Int} (ha : 0 ≤ a) (hb : 0 ≤ b) : 0 ≤ a.fmod b 
goal: 0 ≤ a.fmod b

full_name: Int.fmod_nonneg'
code: theorem fmod_nonneg' (a : Int) {b : Int} (hb : 0 < b) : 0 ≤ a.fmod b 
goal: 0 ≤ a.fmod b

full_name: Int.fmod_lt_of_pos
code: theorem fmod_lt_of_pos (a : Int) {b : Int} (H : 0 < b) : a.fmod b < b 
goal: a.fmod b < b

full_name: Int.mul_fmod_left
code: @[simp] theorem mul_fmod_left (a b : Int) : (a * b).fmod b = 0 
goal: (a * b).fmod b = 0

full_name: Int.mul_fmod_right
code: @[simp] theorem mul_fmod_right (a b : Int) : (a * b).fmod a = 0 
goal: (a * b).fmod a = 0

full_name: Int.fmod_self
code: @[simp] theorem fmod_self {a : Int} : a.fmod a = 0 
goal: a.fmod a = 0

full_name: Int.div_eq_ediv_of_dvd
code: theorem div_eq_ediv_of_dvd {a b : Int} (h : b ∣ a) : a.div b = a / b 
goal: a.div b = a / b

full_name: Int.fdiv_eq_ediv_of_dvd
code: theorem fdiv_eq_ediv_of_dvd : ∀ {a b : Int}, b ∣ a → a.fdiv b = a / b
  
goal: b ∣ a → a.fdiv b = a / b

full_name: Int.bmod_emod
code: @[simp] theorem bmod_emod : bmod x m % m = x % m 
goal: x.bmod m % ↑m = x % ↑m

full_name: Int.emod_bmod_congr
code: @[simp]
theorem emod_bmod_congr (x : Int) (n : Nat) : Int.bmod (x%n) n = Int.bmod x n 
goal: (x % ↑n).bmod n = x.bmod n

full_name: Int.bmod_def
code: theorem bmod_def (x : Int) (m : Nat) : bmod x m =
  if (x % m) < (m + 1) / 2 then
    x % m
  else
    (x % m) - m 
goal: x.bmod m = if x % ↑m < (↑m + 1) / 2 then x % ↑m else x % ↑m - ↑m

full_name: Int.bmod_pos
code: theorem bmod_pos (x : Int) (m : Nat) (p : x % m < (m + 1) / 2) : bmod x m = x % m 
goal: x.bmod m = x % ↑m

full_name: Int.bmod_neg
code: theorem bmod_neg (x : Int) (m : Nat) (p : x % m ≥ (m + 1) / 2) : bmod x m = (x % m) - m 
goal: x.bmod m = x % ↑m - ↑m

full_name: Int.bmod_one_is_zero
code: @[simp]
theorem bmod_one_is_zero (x : Int) : Int.bmod x 1 = 0 
goal: x.bmod 1 = 0

full_name: Int.bmod_add_cancel
code: @[simp]
theorem bmod_add_cancel (x : Int) (n : Nat) : Int.bmod (x + n) n = Int.bmod x n 
goal: (x + ↑n).bmod n = x.bmod n

full_name: Int.bmod_add_mul_cancel
code: @[simp]
theorem bmod_add_mul_cancel (x : Int) (n : Nat) (k : Int) : Int.bmod (x + n * k) n = Int.bmod x n 
goal: (x + ↑n * k).bmod n = x.bmod n

full_name: Int.bmod_sub_cancel
code: @[simp]
theorem bmod_sub_cancel (x : Int) (n : Nat) : Int.bmod (x - n) n = Int.bmod x n 
goal: (x - ↑n).bmod n = x.bmod n

full_name: Int.emod_add_bmod_congr
code: @[simp]
theorem emod_add_bmod_congr (x : Int) (n : Nat) : Int.bmod (x%n + y) n = Int.bmod (x + y) n 
goal: (x % ↑n + y).bmod n = (x + y).bmod n

full_name: Int.emod_mul_bmod_congr
code: @[simp]
theorem emod_mul_bmod_congr (x : Int) (n : Nat) : Int.bmod (x%n * y) n = Int.bmod (x * y) n 
goal: (x % ↑n * y).bmod n = (x * y).bmod n

full_name: Int.bmod_add_bmod_congr
code: @[simp]
theorem bmod_add_bmod_congr : Int.bmod (Int.bmod x n + y) n = Int.bmod (x + y) n 
goal: (x.bmod n + y).bmod n = (x + y).bmod n

full_name: Int.add_bmod_bmod
code: @[simp] theorem add_bmod_bmod : Int.bmod (x + Int.bmod y n) n = Int.bmod (x + y) n 
goal: (x + y.bmod n).bmod n = (x + y).bmod n

full_name: Int.bmod_mul_bmod
code: @[simp]
theorem bmod_mul_bmod : Int.bmod (Int.bmod x n * y) n = Int.bmod (x * y) n 
goal: (x.bmod n * y).bmod n = (x * y).bmod n

full_name: Int.mul_bmod_bmod
code: @[simp] theorem mul_bmod_bmod : Int.bmod (x * Int.bmod y n) n = Int.bmod (x * y) n 
goal: (x * y.bmod n).bmod n = (x * y).bmod n

full_name: Int.add_bmod
code: theorem add_bmod (a b : Int) (n : Nat) : (a + b).bmod n = (a.bmod n + b.bmod n).bmod n 
goal: (a + b).bmod n = (a.bmod n + b.bmod n).bmod n

full_name: Int.emod_bmod
code: theorem emod_bmod {x : Int} {m : Nat} : bmod (x % m) m = bmod x m 
goal: (x % ↑m).bmod m = x.bmod m

full_name: Int.bmod_bmod
code: @[simp] theorem bmod_bmod : bmod (bmod x m) m = bmod x m 
goal: (x.bmod m).bmod m = x.bmod m

full_name: Int.bmod_zero
code: @[simp] theorem bmod_zero : Int.bmod 0 m = 0 
goal: Int.bmod 0 m = 0

full_name: Int.dvd_bmod_sub_self
code: theorem dvd_bmod_sub_self {x : Int} {m : Nat} : (m : Int) ∣ bmod x m - x 
goal: ↑m ∣ x.bmod m - x

full_name: Int.le_bmod
code: theorem le_bmod {x : Int} {m : Nat} (h : 0 < m) : - (m/2) ≤ Int.bmod x m 
goal: -(↑m / 2) ≤ x.bmod m

full_name: Int.bmod_lt
code: theorem bmod_lt {x : Int} {m : Nat} (h : 0 < m) : bmod x m < (m + 1) / 2 
goal: x.bmod m < (↑m + 1) / 2

full_name: Int.bmod_le
code: theorem bmod_le {x : Int} {m : Nat} (h : 0 < m) : bmod x m ≤ (m - 1) / 2 
goal: x.bmod m ≤ (↑m - 1) / 2

full_name: Int.bmod_natAbs_plus_one
code: theorem bmod_natAbs_plus_one (x : Int) (w : 1 < x.natAbs) : bmod x (x.natAbs + 1) = - x.sign 
goal: x.bmod (x.natAbs + 1) = -x.sign