Theorem: Rat.cast_add_of_ne_zero
File: Mathlib/Data/Rat/Cast.lean

tactic: have d₁0' : (d₁ : ℤ) ≠ 0 :=
  Int.coe_nat_ne_zero.2 fun e => by rw [e] at d₁0 ; exact d₁0 Nat.cast_zero
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
⊢ ↑(mk' n₁ d₁ + mk' n₂ d₂) = ↑(mk' n₁ d₁) + ↑(mk' n₂ d₂)

tactic: have d₂0' : (d₂ : ℤ) ≠ 0 :=
  Int.coe_nat_ne_zero.2 fun e => by rw [e] at d₂0 ; exact d₂0 Nat.cast_zero
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
⊢ ↑(mk' n₁ d₁ + mk' n₂ d₂) = ↑(mk' n₁ d₁) + ↑(mk' n₂ d₂)

tactic: rw [num_den', num_den', add_def'' d₁0' d₂0']
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
d₂0' : ↑d₂ ≠ 0
⊢ ↑(mk' n₁ d₁ + mk' n₂ d₂) = ↑(mk' n₁ d₁) + ↑(mk' n₂ d₂)

tactic: rw [← mul_assoc (d₂ : α), mul_inv_cancel d₂0, one_mul, (Nat.cast_commute _ _).eq]
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
d₂0' : ↑d₂ ≠ 0
⊢ ↑n₁ * (↑d₂ * ((↑d₂)⁻¹ * (↑d₁)⁻¹)) + ↑n₂ * (↑d₁ * (↑d₂)⁻¹) * (↑d₁)⁻¹ = ↑n₁ * (↑d₁)⁻¹ + ↑n₂ * (↑d₂)⁻¹

tactic: simp [d₁0, mul_assoc]
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
d₂0' : ↑d₂ ≠ 0
⊢ ↑n₁ * (↑d₁)⁻¹ + ↑n₂ * ((↑d₂)⁻¹ * ↑d₁) * (↑d₁)⁻¹ = ↑n₁ * (↑d₁)⁻¹ + ↑n₂ * (↑d₂)⁻¹

tactic: rw [e] at d₁0
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
e : d₁ = 0
⊢ False

tactic: exact d₁0 Nat.cast_zero
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑0 ≠ 0
d₂0 : ↑d₂ ≠ 0
e : d₁ = 0
⊢ False

tactic: rw [e] at d₂0
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
e : d₂ = 0
⊢ False

tactic: exact d₂0 Nat.cast_zero
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑0 ≠ 0
d₁0' : ↑d₁ ≠ 0
e : d₂ = 0
⊢ False

tactic: rw [cast_mk_of_ne_zero, cast_mk_of_ne_zero, cast_mk_of_ne_zero]
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
d₂0' : ↑d₂ ≠ 0
this : ↑n₁ * (↑d₂ * ((↑d₂)⁻¹ * (↑d₁)⁻¹)) + ↑n₂ * (↑d₁ * (↑d₂)⁻¹) * (↑d₁)⁻¹ = ↑n₁ * (↑d₁)⁻¹ + ↑n₂ * (↑d₂)⁻¹
⊢ ↑((n₁ * ↑d₂ + n₂ * ↑d₁) /. (↑d₁ * ↑d₂)) = ↑(n₁ /. ↑d₁) + ↑(n₂ /. ↑d₂)

tactic: all_goals simp [d₁0, d₂0]
state_before: case b0
F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
d₂0' : ↑d₂ ≠ 0
this : ↑n₁ * (↑d₂ * ((↑d₂)⁻¹ * (↑d₁)⁻¹)) + ↑n₂ * (↑d₁ * (↑d₂)⁻¹) * (↑d₁)⁻¹ = ↑n₁ * (↑d₁)⁻¹ + ↑n₂ * (↑d₂)⁻¹
⊢ ↑↑d₂ ≠ 0

case b0
F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
d₂0' : ↑d₂ ≠ 0
this : ↑n₁ * (↑d₂ * ((↑d₂)⁻¹ * (↑d₁)⁻¹)) + ↑n₂ * (↑d₁ * (↑d₂)⁻¹) * (↑d₁)⁻¹ = ↑n₁ * (↑d₁)⁻¹ + ↑n₂ * (↑d₂)⁻¹
⊢ ↑↑d₁ ≠ 0

case b0
F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
d₂0' : ↑d₂ ≠ 0
this : ↑n₁ * (↑d₂ * ((↑d₂)⁻¹ * (↑d₁)⁻¹)) + ↑n₂ * (↑d₁ * (↑d₂)⁻¹) * (↑d₁)⁻¹ = ↑n₁ * (↑d₁)⁻¹ + ↑n₂ * (↑d₂)⁻¹
⊢ ↑(↑d₁ * ↑d₂) ≠ 0

tactic: simpa [division_def, left_distrib, right_distrib, mul_inv_rev, d₁0, d₂0, mul_assoc]
state_before: F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
d₂0' : ↑d₂ ≠ 0
this : ↑n₁ * (↑d₂ * ((↑d₂)⁻¹ * (↑d₁)⁻¹)) + ↑n₂ * (↑d₁ * (↑d₂)⁻¹) * (↑d₁)⁻¹ = ↑n₁ * (↑d₁)⁻¹ + ↑n₂ * (↑d₂)⁻¹
⊢ ↑(n₁ * ↑d₂ + n₂ * ↑d₁) / ↑(↑d₁ * ↑d₂) = ↑n₁ / ↑↑d₁ + ↑n₂ / ↑↑d₂

tactic: simp [d₁0, d₂0]
state_before: case b0
F : Type ?u.7925
ι : Type ?u.7928
α : Type u_1
β : Type ?u.7934
inst✝ : DivisionRing α
n₁ : ℤ
d₁ : ℕ
h₁ : d₁ ≠ 0
c₁ : Nat.coprime (Int.natAbs n₁) d₁
n₂ : ℤ
d₂ : ℕ
h₂ : d₂ ≠ 0
c₂ : Nat.coprime (Int.natAbs n₂) d₂
d₁0 : ↑d₁ ≠ 0
d₂0 : ↑d₂ ≠ 0
d₁0' : ↑d₁ ≠ 0
d₂0' : ↑d₂ ≠ 0
this : ↑n₁ * (↑d₂ * ((↑d₂)⁻¹ * (↑d₁)⁻¹)) + ↑n₂ * (↑d₁ * (↑d₂)⁻¹) * (↑d₁)⁻¹ = ↑n₁ * (↑d₁)⁻¹ + ↑n₂ * (↑d₂)⁻¹
⊢ ↑(↑d₁ * ↑d₂) ≠ 0