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

full_name: Int.subNatNat_of_sub_eq_zero
code: theorem subNatNat_of_sub_eq_zero {m n : Nat} (h : n - m = 0) : subNatNat m n = ↑(m - n) 
goal: Int.subNatNat m n = ↑(m - n)

full_name: Int.subNatNat_of_sub_eq_succ
code: theorem subNatNat_of_sub_eq_succ {m n k : Nat} (h : n - m = succ k) : subNatNat m n = -[k+1] 
goal: Int.subNatNat m n = Int.negSucc k

full_name: Int.neg_zero
code: @[simp] protected theorem neg_zero : -(0:Int) = 0 
goal: -0 = 0

full_name: Int.ofNat_add
code: @[norm_cast] theorem ofNat_add (n m : Nat) : (↑(n + m) : Int) = n + m 
goal: ↑(n + m) = ↑n + ↑m

full_name: Int.ofNat_mul
code: @[norm_cast] theorem ofNat_mul (n m : Nat) : (↑(n * m) : Int) = n * m 
goal: ↑(n * m) = ↑n * ↑m

full_name: Int.ofNat_succ
code: theorem ofNat_succ (n : Nat) : (succ n : Int) = n + 1 
goal: ↑n.succ = ↑n + 1

full_name: Int.neg_ofNat_zero
code: @[local simp] theorem neg_ofNat_zero : -((0 : Nat) : Int) = 0 
goal: -↑0 = 0

full_name: Int.neg_ofNat_succ
code: @[local simp] theorem neg_ofNat_succ (n : Nat) : -(succ n : Int) = -[n+1] 
goal: -↑n.succ = Int.negSucc n

full_name: Int.neg_negSucc
code: @[local simp] theorem neg_negSucc (n : Nat) : -(-[n+1]) = succ n 
goal: -Int.negSucc n = ↑n.succ

full_name: Int.negSucc_coe
code: theorem negSucc_coe (n : Nat) : -[n+1] = -↑(n + 1) 
goal: Int.negSucc n = -↑(n + 1)

full_name: Int.negOfNat_eq
code: theorem negOfNat_eq : negOfNat n = -ofNat n 
goal: Int.negOfNat n = -Int.ofNat n

full_name: Int.add_def
code: @[simp] theorem add_def {a b : Int} : Int.add a b = a + b 
goal: a.add b = a + b

full_name: Int.ofNat_add_ofNat
code: @[local simp] theorem ofNat_add_ofNat (m n : Nat) : (↑m + ↑n : Int) = ↑(m + n) 
goal: ↑m + ↑n = ↑(m + n)

full_name: Int.ofNat_add_negSucc
code: @[local simp] theorem ofNat_add_negSucc (m n : Nat) : ↑m + -[n+1] = subNatNat m (succ n) 
goal: ↑m + Int.negSucc n = Int.subNatNat m n.succ

full_name: Int.negSucc_add_ofNat
code: @[local simp] theorem negSucc_add_ofNat (m n : Nat) : -[m+1] + ↑n = subNatNat n (succ m) 
goal: Int.negSucc m + ↑n = Int.subNatNat n m.succ

full_name: Int.negSucc_add_negSucc
code: @[local simp] theorem negSucc_add_negSucc (m n : Nat) : -[m+1] + -[n+1] = -[succ (m + n) +1] 
goal: Int.negSucc m + Int.negSucc n = Int.negSucc (m + n).succ

full_name: Int.mul_def
code: @[simp] theorem mul_def {a b : Int} : Int.mul a b = a * b 
goal: a.mul b = a * b

full_name: Int.ofNat_mul_ofNat
code: @[local simp] theorem ofNat_mul_ofNat (m n : Nat) : (↑m * ↑n : Int) = ↑(m * n) 
goal: ↑m * ↑n = ↑(m * n)

full_name: Int.ofNat_mul_negSucc'
code: @[local simp] theorem ofNat_mul_negSucc' (m n : Nat) : ↑m * -[n+1] = negOfNat (m * succ n) 
goal: ↑m * Int.negSucc n = Int.negOfNat (m * n.succ)

full_name: Int.negSucc_mul_ofNat'
code: @[local simp] theorem negSucc_mul_ofNat' (m n : Nat) : -[m+1] * ↑n = negOfNat (succ m * n) 
goal: Int.negSucc m * ↑n = Int.negOfNat (m.succ * n)

full_name: Int.negSucc_mul_negSucc'
code: @[local simp] theorem negSucc_mul_negSucc' (m n : Nat) :
    -[m+1] * -[n+1] = ofNat (succ m * succ n) 
goal: Int.negSucc m * Int.negSucc n = Int.ofNat (m.succ * n.succ)

full_name: Int.ofNat_inj
code: @[norm_cast] theorem ofNat_inj : ((m : Nat) : Int) = (n : Nat) ↔ m = n 
goal: ↑m = ↑n ↔ m = n

full_name: Int.ofNat_eq_zero
code: theorem ofNat_eq_zero : ((n : Nat) : Int) = 0 ↔ n = 0 
goal: ↑n = 0 ↔ n = 0

full_name: Int.ofNat_ne_zero
code: theorem ofNat_ne_zero : ((n : Nat) : Int) ≠ 0 ↔ n ≠ 0 
goal: ↑n ≠ 0 ↔ n ≠ 0

full_name: Int.negSucc_inj
code: theorem negSucc_inj : negSucc m = negSucc n ↔ m = n 
goal: Int.negSucc m = Int.negSucc n ↔ m = n

full_name: Int.negSucc_eq
code: theorem negSucc_eq (n : Nat) : -[n+1] = -((n : Int) + 1) 
goal: Int.negSucc n = -(↑n + 1)

full_name: Int.negSucc_ne_zero
code: @[simp] theorem negSucc_ne_zero (n : Nat) : -[n+1] ≠ 0 
goal: Int.negSucc n ≠ 0

full_name: Int.zero_ne_negSucc
code: @[simp] theorem zero_ne_negSucc (n : Nat) : 0 ≠ -[n+1] 
goal: 0 ≠ Int.negSucc n

full_name: Int.Nat.cast_ofNat_Int
code: @[simp, norm_cast] theorem Nat.cast_ofNat_Int :
  (Nat.cast (no_index (OfNat.ofNat n)) : Int) = OfNat.ofNat n 
goal: ↑(OfNat.ofNat n) = OfNat.ofNat n

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

full_name: Int.neg_inj
code: protected theorem neg_inj {a b : Int} : -a = -b ↔ a = b 
goal: -a = -b ↔ a = b

full_name: Int.neg_eq_zero
code: @[simp] protected theorem neg_eq_zero : -a = 0 ↔ a = 0 
goal: -a = 0 ↔ a = 0

full_name: Int.neg_ne_zero
code: protected theorem neg_ne_zero : -a ≠ 0 ↔ a ≠ 0 
goal: -a ≠ 0 ↔ a ≠ 0

full_name: Int.sub_eq_add_neg
code: protected theorem sub_eq_add_neg {a b : Int} : a - b = a + -b 
goal: a - b = a + -b

full_name: Int.add_neg_one
code: theorem add_neg_one (i : Int) : i + -1 = i - 1 
goal: i + -1 = i - 1

full_name: Int.subNatNat_elim
code: theorem subNatNat_elim (m n : Nat) (motive : Nat → Nat → Int → Prop)
    (hp : ∀ i n, motive (n + i) n i)
    (hn : ∀ i m, motive m (m + i + 1) -[i+1]) :
    motive m n (subNatNat m n) 
goal: motive m n (Int.subNatNat m n)

full_name: Int.subNatNat_add_left
code: theorem subNatNat_add_left : subNatNat (m + n) m = n 
goal: Int.subNatNat (m + n) m = ↑n

full_name: Int.subNatNat_add_right
code: theorem subNatNat_add_right : subNatNat m (m + n + 1) = negSucc n 
goal: Int.subNatNat m (m + n + 1) = Int.negSucc n

full_name: Int.subNatNat_add_add
code: theorem subNatNat_add_add (m n k : Nat) : subNatNat (m + k) (n + k) = subNatNat m n 
goal: Int.subNatNat (m + k) (n + k) = Int.subNatNat m n

full_name: Int.subNatNat_of_le
code: theorem subNatNat_of_le {m n : Nat} (h : n ≤ m) : subNatNat m n = ↑(m - n) 
goal: Int.subNatNat m n = ↑(m - n)

full_name: Int.subNatNat_of_lt
code: theorem subNatNat_of_lt {m n : Nat} (h : m < n) : subNatNat m n = -[pred (n - m) +1] 
goal: Int.subNatNat m n = Int.negSucc (n - m).pred

full_name: Int.add_comm
code: protected theorem add_comm : ∀ a b : Int, a + b = b + a
  
goal: a + b = b + a

full_name: Int.«instCommutativeHAdd_.lake»
code: instance : Std.Commutative (α := Int) (· + ·) 
goal: Std.Commutative fun x x_1 => x + x_1

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

full_name: Int.zero_add
code: @[simp] protected theorem zero_add (a : Int) : 0 + a = a 
goal: 0 + a = a

full_name: Int.«instLawfulIdentityHAddOfNat_.lake»
code: instance : Std.LawfulIdentity (α := Int) (· + ·) 0 
goal: Std.LawfulIdentity (fun x x_1 => x + x_1) 0

full_name: Int.ofNat_add_negSucc_of_lt
code: theorem ofNat_add_negSucc_of_lt (h : m < n.succ) : ofNat m + -[n+1] = -[n - m+1] 
goal: Int.ofNat m + Int.negSucc n = Int.negSucc (n - m)

full_name: Int.subNatNat_sub
code: theorem subNatNat_sub (h : n ≤ m) (k : Nat) : subNatNat (m - n) k = subNatNat m (k + n) 
goal: Int.subNatNat (m - n) k = Int.subNatNat m (k + n)

full_name: Int.subNatNat_add
code: theorem subNatNat_add (m n k : Nat) : subNatNat (m + n) k = m + subNatNat n k 
goal: Int.subNatNat (m + n) k = ↑m + Int.subNatNat n k

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

full_name: Int.add_assoc
code: protected theorem add_assoc : ∀ a b c : Int, a + b + c = a + (b + c)
  
goal: a + b + c = a + (b + c)

full_name: Int.add_assoc.aux2
code: protected theorem add_assoc : ∀ a b c : Int, a + b + c = a + (b + c)
  
goal: Int.negSucc m + Int.negSucc n + ↑k = Int.negSucc m + (Int.negSucc n + ↑k)

full_name: Int.add_assoc.aux1
code: protected theorem add_assoc : ∀ a b c : Int, a + b + c = a + (b + c)
  
goal: ↑m + ↑n + c = ↑m + (↑n + c)

full_name: Int.«instAssociativeHAdd_.lake»
code: instance : Std.Associative (α := Int) (· + ·) 
goal: Std.Associative fun x x_1 => x + x_1

full_name: Int.add_left_comm
code: protected theorem add_left_comm (a b c : Int) : a + (b + c) = b + (a + c) 
goal: a + (b + c) = b + (a + c)

full_name: Int.add_right_comm
code: protected theorem add_right_comm (a b c : Int) : a + b + c = a + c + b 
goal: a + b + c = a + c + b

full_name: Int.subNatNat_self
code: theorem subNatNat_self : ∀ n, subNatNat n n = 0
  
goal: Int.subNatNat n n = 0

full_name: Int.add_left_neg
code: @[local simp] protected theorem add_left_neg : ∀ a : Int, -a + a = 0
  
goal: -a + a = 0

full_name: Int.add_right_neg
code: @[local simp] protected theorem add_right_neg (a : Int) : a + -a = 0 
goal: a + -a = 0

full_name: Int.neg_eq_of_add_eq_zero
code: @[simp] protected theorem neg_eq_of_add_eq_zero {a b : Int} (h : a + b = 0) : -a = b 
goal: -a = b

full_name: Int.eq_neg_of_eq_neg
code: protected theorem eq_neg_of_eq_neg {a b : Int} (h : a = -b) : b = -a 
goal: b = -a

full_name: Int.eq_neg_comm
code: protected theorem eq_neg_comm {a b : Int} : a = -b ↔ b = -a 
goal: a = -b ↔ b = -a

full_name: Int.neg_eq_comm
code: protected theorem neg_eq_comm {a b : Int} : -a = b ↔ -b = a 
goal: -a = b ↔ -b = a

full_name: Int.neg_add_cancel_left
code: protected theorem neg_add_cancel_left (a b : Int) : -a + (a + b) = b 
goal: -a + (a + b) = b

full_name: Int.add_neg_cancel_left
code: protected theorem add_neg_cancel_left (a b : Int) : a + (-a + b) = b 
goal: a + (-a + b) = b

full_name: Int.add_neg_cancel_right
code: protected theorem add_neg_cancel_right (a b : Int) : a + b + -b = a 
goal: a + b + -b = a

full_name: Int.neg_add_cancel_right
code: protected theorem neg_add_cancel_right (a b : Int) : a + -b + b = a 
goal: a + -b + b = a

full_name: Int.add_left_cancel
code: protected theorem add_left_cancel {a b c : Int} (h : a + b = a + c) : b = c 
goal: b = c

full_name: Int.neg_add
code: @[local simp] protected theorem neg_add {a b : Int} : -(a + b) = -a + -b 
goal: -(a + b) = -a + -b

full_name: Int.negSucc_sub_one
code: @[simp] theorem negSucc_sub_one (n : Nat) : -[n+1] - 1 = -[n + 1 +1] 
goal: Int.negSucc n - 1 = Int.negSucc (n + 1)

full_name: Int.sub_self
code: @[simp] protected theorem sub_self (a : Int) : a - a = 0 
goal: a - a = 0

full_name: Int.sub_zero
code: @[simp] protected theorem sub_zero (a : Int) : a - 0 = a 
goal: a - 0 = a

full_name: Int.zero_sub
code: @[simp] protected theorem zero_sub (a : Int) : 0 - a = -a 
goal: 0 - a = -a

full_name: Int.sub_eq_zero_of_eq
code: protected theorem sub_eq_zero_of_eq {a b : Int} (h : a = b) : a - b = 0 
goal: a - b = 0

full_name: Int.eq_of_sub_eq_zero
code: protected theorem eq_of_sub_eq_zero {a b : Int} (h : a - b = 0) : a = b 
goal: a = b

full_name: Int.sub_eq_zero
code: protected theorem sub_eq_zero {a b : Int} : a - b = 0 ↔ a = b 
goal: a - b = 0 ↔ a = b

full_name: Int.sub_sub
code: protected theorem sub_sub (a b c : Int) : a - b - c = a - (b + c) 
goal: a - b - c = a - (b + c)

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

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

full_name: Int.sub_neg
code: protected theorem sub_neg (a b : Int) : a - -b = a + b 
goal: a - -b = a + b

full_name: Int.sub_add_cancel
code: @[simp] protected theorem sub_add_cancel (a b : Int) : a - b + b = a 
goal: a - b + b = a

full_name: Int.add_sub_cancel
code: @[simp] protected theorem add_sub_cancel (a b : Int) : a + b - b = a 
goal: a + b - b = a

full_name: Int.add_sub_assoc
code: protected theorem add_sub_assoc (a b c : Int) : a + b - c = a + (b - c) 
goal: a + b - c = a + (b - c)

full_name: Int.ofNat_sub
code: @[norm_cast] theorem ofNat_sub (h : m ≤ n) : ((n - m : Nat) : Int) = n - m 
goal: ↑(n - m) = ↑n - ↑m

full_name: Int.negSucc_coe'
code: theorem negSucc_coe' (n : Nat) : -[n+1] = -↑n - 1 
goal: Int.negSucc n = -↑n - 1

full_name: Int.subNatNat_eq_coe
code: protected theorem subNatNat_eq_coe {m n : Nat} : subNatNat m n = ↑m - ↑n 
goal: Int.subNatNat m n = ↑m - ↑n

full_name: Int.toNat_sub
code: theorem toNat_sub (m n : Nat) : toNat (m - n) = m - n 
goal: (↑m - ↑n).toNat = m - n

full_name: Int.add_right_inj
code: @[simp]
protected theorem add_right_inj (i j k : Int) : (i + k = j + k) ↔ i = j 
goal: i + k = j + k ↔ i = j

full_name: Int.add_left_inj
code: @[simp]
protected theorem add_left_inj (i j k : Int) : (k + i = k + j) ↔ i = j 
goal: k + i = k + j ↔ i = j

full_name: Int.sub_left_inj
code: @[simp]
protected theorem sub_left_inj (i j k : Int) : (k - i = k - j) ↔ i = j 
goal: k - i = k - j ↔ i = j

full_name: Int.sub_right_inj
code: @[simp]
protected theorem sub_right_inj (i j k : Int) : (i - k = j - k) ↔ i = j 
goal: i - k = j - k ↔ i = j

full_name: Int.ofNat_mul_negSucc
code: @[simp] theorem ofNat_mul_negSucc (m n : Nat) : (m : Int) * -[n+1] = -↑(m * succ n) 
goal: ↑m * Int.negSucc n = -↑(m * n.succ)

full_name: Int.negSucc_mul_ofNat
code: @[simp] theorem negSucc_mul_ofNat (m n : Nat) : -[m+1] * n = -↑(succ m * n) 
goal: Int.negSucc m * ↑n = -↑(m.succ * n)

full_name: Int.negSucc_mul_negSucc
code: @[simp] theorem negSucc_mul_negSucc (m n : Nat) : -[m+1] * -[n+1] = succ m * succ n 
goal: Int.negSucc m * Int.negSucc n = ↑m.succ * ↑n.succ

full_name: Int.mul_comm
code: protected theorem mul_comm (a b : Int) : a * b = b * a 
goal: a * b = b * a

full_name: Int.«instCommutativeHMul_.lake»
code: instance : Std.Commutative (α := Int) (· * ·) 
goal: Std.Commutative fun x x_1 => x * x_1

full_name: Int.ofNat_mul_negOfNat
code: theorem ofNat_mul_negOfNat (m n : Nat) : (m : Nat) * negOfNat n = negOfNat (m * n) 
goal: ↑m * Int.negOfNat n = Int.negOfNat (m * n)

full_name: Int.negOfNat_mul_ofNat
code: theorem negOfNat_mul_ofNat (m n : Nat) : negOfNat m * (n : Nat) = negOfNat (m * n) 
goal: Int.negOfNat m * ↑n = Int.negOfNat (m * n)

full_name: Int.negSucc_mul_negOfNat
code: theorem negSucc_mul_negOfNat (m n : Nat) : -[m+1] * negOfNat n = ofNat (succ m * n) 
goal: Int.negSucc m * Int.negOfNat n = Int.ofNat (m.succ * n)

full_name: Int.negOfNat_mul_negSucc
code: theorem negOfNat_mul_negSucc (m n : Nat) : negOfNat n * -[m+1] = ofNat (n * succ m) 
goal: Int.negOfNat n * Int.negSucc m = Int.ofNat (n * m.succ)

full_name: Int.mul_assoc
code: protected theorem mul_assoc (a b c : Int) : a * b * c = a * (b * c) 
goal: a * b * c = a * (b * c)

full_name: Int.«instAssociativeHMul_.lake»
code: instance : Std.Associative (α := Int) (· * ·) 
goal: Std.Associative fun x x_1 => x * x_1

full_name: Int.mul_left_comm
code: protected theorem mul_left_comm (a b c : Int) : a * (b * c) = b * (a * c) 
goal: a * (b * c) = b * (a * c)

full_name: Int.mul_right_comm
code: protected theorem mul_right_comm (a b c : Int) : a * b * c = a * c * b 
goal: a * b * c = a * c * b

full_name: Int.mul_zero
code: @[simp] protected theorem mul_zero (a : Int) : a * 0 = 0 
goal: a * 0 = 0

full_name: Int.zero_mul
code: @[simp] protected theorem zero_mul (a : Int) : 0 * a = 0 
goal: 0 * a = 0

full_name: Int.negOfNat_eq_subNatNat_zero
code: theorem negOfNat_eq_subNatNat_zero (n) : negOfNat n = subNatNat 0 n 
goal: Int.negOfNat n = Int.subNatNat 0 n

full_name: Int.ofNat_mul_subNatNat
code: theorem ofNat_mul_subNatNat (m n k : Nat) :
    m * subNatNat n k = subNatNat (m * n) (m * k) 
goal: ↑m * Int.subNatNat n k = Int.subNatNat (m * n) (m * k)

full_name: Int.negOfNat_add
code: theorem negOfNat_add (m n : Nat) : negOfNat m + negOfNat n = negOfNat (m + n) 
goal: Int.negOfNat m + Int.negOfNat n = Int.negOfNat (m + n)

full_name: Int.negSucc_mul_subNatNat
code: theorem negSucc_mul_subNatNat (m n k : Nat) :
    -[m+1] * subNatNat n k = subNatNat (succ m * k) (succ m * n) 
goal: Int.negSucc m * Int.subNatNat n k = Int.subNatNat (m.succ * k) (m.succ * n)

full_name: Int.mul_add
code: protected theorem mul_add : ∀ a b c : Int, a * (b + c) = a * b + a * c
  
goal: a * (b + c) = a * b + a * c

full_name: Int.add_mul
code: protected theorem add_mul (a b c : Int) : (a + b) * c = a * c + b * c 
goal: (a + b) * c = a * c + b * c

full_name: Int.neg_mul_eq_neg_mul
code: protected theorem neg_mul_eq_neg_mul (a b : Int) : -(a * b) = -a * b 
goal: -(a * b) = -a * b

full_name: Int.neg_mul_eq_mul_neg
code: protected theorem neg_mul_eq_mul_neg (a b : Int) : -(a * b) = a * -b 
goal: -(a * b) = a * -b

full_name: Int.neg_mul
code: @[local simp] protected theorem neg_mul (a b : Int) : -a * b = -(a * b) 
goal: -a * b = -(a * b)

full_name: Int.mul_neg
code: @[local simp] protected theorem mul_neg (a b : Int) : a * -b = -(a * b) 
goal: a * -b = -(a * b)

full_name: Int.neg_mul_neg
code: protected theorem neg_mul_neg (a b : Int) : -a * -b = a * b 
goal: -a * -b = a * b

full_name: Int.neg_mul_comm
code: protected theorem neg_mul_comm (a b : Int) : -a * b = a * -b 
goal: -a * b = a * -b

full_name: Int.mul_sub
code: protected theorem mul_sub (a b c : Int) : a * (b - c) = a * b - a * c 
goal: a * (b - c) = a * b - a * c

full_name: Int.sub_mul
code: protected theorem sub_mul (a b c : Int) : (a - b) * c = a * c - b * c 
goal: (a - b) * c = a * c - b * c

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

full_name: Int.mul_one
code: @[simp] protected theorem mul_one (a : Int) : a * 1 = a 
goal: a * 1 = a

full_name: Int.«instLawfulIdentityHMulOfNat_.lake»
code: instance : Std.LawfulIdentity (α := Int) (· * ·) 1 
goal: Std.LawfulIdentity (fun x x_1 => x * x_1) 1

full_name: Int.mul_neg_one
code: protected theorem mul_neg_one (a : Int) : a * -1 = -a 
goal: a * -1 = -a

full_name: Int.neg_eq_neg_one_mul
code: protected theorem neg_eq_neg_one_mul : ∀ a : Int, -a = -1 * a
  
goal: -a = -1 * a

full_name: Int.mul_eq_zero
code: protected theorem mul_eq_zero {a b : Int} : a * b = 0 ↔ a = 0 ∨ b = 0 
goal: a * b = 0 ↔ a = 0 ∨ b = 0

full_name: Int.mul_ne_zero
code: protected theorem mul_ne_zero {a b : Int} (a0 : a ≠ 0) (b0 : b ≠ 0) : a * b ≠ 0 
goal: a * b ≠ 0

full_name: Int.eq_of_mul_eq_mul_right
code: protected theorem eq_of_mul_eq_mul_right {a b c : Int} (ha : a ≠ 0) (h : b * a = c * a) : b = c 
goal: b = c

full_name: Int.eq_of_mul_eq_mul_left
code: protected theorem eq_of_mul_eq_mul_left {a b c : Int} (ha : a ≠ 0) (h : a * b = a * c) : b = c 
goal: b = c

full_name: Int.mul_eq_mul_left_iff
code: theorem mul_eq_mul_left_iff {a b c : Int} (h : c ≠ 0) : c * a = c * b ↔ a = b 
goal: c * a = c * b ↔ a = b

full_name: Int.mul_eq_mul_right_iff
code: theorem mul_eq_mul_right_iff {a b c : Int} (h : c ≠ 0) : a * c = b * c ↔ a = b 
goal: a * c = b * c ↔ a = b

full_name: Int.eq_one_of_mul_eq_self_left
code: theorem eq_one_of_mul_eq_self_left {a b : Int} (Hpos : a ≠ 0) (H : b * a = a) : b = 1 
goal: b = 1

full_name: Int.eq_one_of_mul_eq_self_right
code: theorem eq_one_of_mul_eq_self_right {a b : Int} (Hpos : b ≠ 0) (H : b * a = b) : a = 1 
goal: a = 1

full_name: Int.natCast_zero
code: theorem natCast_zero : ((0 : Nat) : Int) = (0 : Int) 
goal: ↑0 = 0

full_name: Int.natCast_one
code: theorem natCast_one : ((1 : Nat) : Int) = (1 : Int) 
goal: ↑1 = 1

full_name: Int.natCast_add
code: @[simp] theorem natCast_add (a b : Nat) : ((a + b : Nat) : Int) = (a : Int) + (b : Int) 
goal: ↑(a + b) = ↑a + ↑b

full_name: Int.natCast_mul
code: @[simp] theorem natCast_mul (a b : Nat) : ((a * b : Nat) : Int) = (a : Int) * (b : Int) 
goal: ↑(a * b) = ↑a * ↑b