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

tactic: have b0' : b ≠ 0 := by
  refine' mt _ b0
  simp (config := { contextual := true })
state_before: F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
⊢ ↑(a /. b) = ↑a / ↑b

tactic: cases' e : a /. b with n d h c
state_before: F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
⊢ ↑(a /. b) = ↑a / ↑b

tactic: have d0 : (d : α) ≠ 0 := by
  intro d0
  have dd := den_dvd a b
  cases' show (d : ℤ) ∣ b by rwa [e] at dd with k ke
  have : (b : α) = (d : α) * (k : α) := by rw [ke, Int.cast_mul, Int.cast_ofNat]
  rw [d0, zero_mul] at this
  contradiction
state_before: case mk'
F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
⊢ ↑(mk' n d) = ↑a / ↑b

tactic: rw [num_den'] at e
state_before: case mk'
F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
d0 : ↑d ≠ 0
⊢ ↑(mk' n d) = ↑a / ↑b

tactic: have := congr_arg ((↑) : ℤ → α)
  ((divInt_eq_iff b0' <| ne_of_gt <| Int.coe_nat_pos.2 h.bot_lt).1 e)
state_before: case mk'
F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = n /. ↑d
d0 : ↑d ≠ 0
⊢ ↑(mk' n d) = ↑a / ↑b

tactic: rw [Int.cast_mul, Int.cast_mul, Int.cast_ofNat] at this
state_before: case mk'
F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = n /. ↑d
d0 : ↑d ≠ 0
this : ↑(a * ↑d) = ↑(n * b)
⊢ ↑(mk' n d) = ↑a / ↑b

tactic: apply Eq.symm
state_before: case mk'
F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = n /. ↑d
d0 : ↑d ≠ 0
this : ↑a * ↑d = ↑n * ↑b
⊢ ↑(mk' n d) = ↑a / ↑b

tactic: rw [cast_def, div_eq_mul_inv, eq_div_iff_mul_eq d0, mul_assoc, (d.commute_cast _).eq, ← mul_assoc,
  this, mul_assoc, mul_inv_cancel b0, mul_one]
state_before: case mk'.h
F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = n /. ↑d
d0 : ↑d ≠ 0
this : ↑a * ↑d = ↑n * ↑b
⊢ ↑a / ↑b = ↑(mk' n d)

tactic: refine' mt _ b0
state_before: F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
⊢ b ≠ 0

tactic: simp (config := { contextual := true })
state_before: F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
⊢ b = 0 → ↑b = 0

tactic: intro d0
state_before: F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
⊢ ↑d ≠ 0

tactic: have dd := den_dvd a b
state_before: F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
d0 : ↑d = 0
⊢ False

tactic: cases' show (d : ℤ) ∣ b by rwa [e] at dd with k ke
state_before: F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
d0 : ↑d = 0
dd : ↑(a /. b).den ∣ b
⊢ False

tactic: have : (b : α) = (d : α) * (k : α) := by rw [ke, Int.cast_mul, Int.cast_ofNat]
state_before: case intro
F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
d0 : ↑d = 0
dd : ↑(a /. b).den ∣ b
k : ℤ
ke : b = ↑d * k
⊢ False

tactic: rw [d0, zero_mul] at this
state_before: case intro
F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
d0 : ↑d = 0
dd : ↑(a /. b).den ∣ b
k : ℤ
ke : b = ↑d * k
this : ↑b = ↑d * ↑k
⊢ False

tactic: contradiction
state_before: case intro
F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
d0 : ↑d = 0
dd : ↑(a /. b).den ∣ b
k : ℤ
ke : b = ↑d * k
this : ↑b = 0
⊢ False

tactic: rwa [e] at dd
state_before: F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
d0 : ↑d = 0
dd : ↑(a /. b).den ∣ b
⊢ ↑d ∣ b

tactic: rw [ke, Int.cast_mul, Int.cast_ofNat]
state_before: F : Type ?u.4202
ι : Type ?u.4205
α : Type u_1
β : Type ?u.4211
inst✝ : DivisionRing α
a b : ℤ
b0 : ↑b ≠ 0
b0' : b ≠ 0
n : ℤ
d : ℕ
h : d ≠ 0
c : Nat.coprime (Int.natAbs n) d
e : a /. b = mk' n d
d0 : ↑d = 0
dd : ↑(a /. b).den ∣ b
k : ℤ
ke : b = ↑d * k
⊢ ↑b = ↑d * ↑k