Theorem: Rat.divInt_num_den
File: .lake/packages/batteries/Batteries/Data/Rat/Lemmas.lean

tactic: rcases Int.eq_nat_or_neg d with ⟨_, rfl | rfl⟩ <;>
  simp_all [divInt_neg', Int.ofNat_eq_zero, Int.neg_eq_zero]
state_before: d n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
z : d ≠ 0
h : n /. d = { num := n', den := d', den_nz := z', reduced := c }
⊢ ∃ m, m ≠ 0 ∧ n = n' * m ∧ d = ↑d' * m
state_after: case intro.inl
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat n w✝ = { num := n', den := d', den_nz := z', reduced := c }
⊢ ∃ m, ¬m = 0 ∧ n = n' * m ∧ ↑w✝ = ↑d' * m

case intro.inr
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat (-n) w✝ = { num := n', den := d', den_nz := z', reduced := c }
⊢ ∃ m, ¬m = 0 ∧ n = n' * m ∧ -↑w✝ = ↑d' * m

tactic: have ⟨m, h₁, h₂⟩ := mkRat_num_den z h
state_before: case intro.inl
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat n w✝ = { num := n', den := d', den_nz := z', reduced := c }
⊢ ∃ m, ¬m = 0 ∧ n = n' * m ∧ ↑w✝ = ↑d' * m
state_after: case intro.inl
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat n w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : n = n' * ↑m ∧ w✝ = d' * m
⊢ ∃ m, ¬m = 0 ∧ n = n' * m ∧ ↑w✝ = ↑d' * m

tactic: exists m
state_before: case intro.inl
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat n w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : n = n' * ↑m ∧ w✝ = d' * m
⊢ ∃ m, ¬m = 0 ∧ n = n' * m ∧ ↑w✝ = ↑d' * m
state_after: case intro.inl
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat n w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : n = n' * ↑m ∧ w✝ = d' * m
⊢ ¬↑m = 0 ∧ n = n' * ↑m ∧ ↑w✝ = ↑d' * ↑m

tactic: simp [Int.ofNat_eq_zero, Int.ofNat_mul, h₁, h₂]
state_before: case intro.inl
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat n w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : n = n' * ↑m ∧ w✝ = d' * m
⊢ ¬↑m = 0 ∧ n = n' * ↑m ∧ ↑w✝ = ↑d' * ↑m
state_after: no goals

tactic: have ⟨m, h₁, h₂⟩ := mkRat_num_den z h
state_before: case intro.inr
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat (-n) w✝ = { num := n', den := d', den_nz := z', reduced := c }
⊢ ∃ m, ¬m = 0 ∧ n = n' * m ∧ -↑w✝ = ↑d' * m
state_after: case intro.inr
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat (-n) w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : -n = n' * ↑m ∧ w✝ = d' * m
⊢ ∃ m, ¬m = 0 ∧ n = n' * m ∧ -↑w✝ = ↑d' * m

tactic: exists -m
state_before: case intro.inr
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat (-n) w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : -n = n' * ↑m ∧ w✝ = d' * m
⊢ ∃ m, ¬m = 0 ∧ n = n' * m ∧ -↑w✝ = ↑d' * m
state_after: case intro.inr
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat (-n) w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : -n = n' * ↑m ∧ w✝ = d' * m
⊢ ¬-↑m = 0 ∧ n = n' * -↑m ∧ -↑w✝ = ↑d' * -↑m

tactic: rw [← Int.neg_inj, Int.neg_neg] at h₂
state_before: case intro.inr
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat (-n) w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : -n = n' * ↑m ∧ w✝ = d' * m
⊢ ¬-↑m = 0 ∧ n = n' * -↑m ∧ -↑w✝ = ↑d' * -↑m
state_after: case intro.inr
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat (-n) w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : n = -(n' * ↑m) ∧ w✝ = d' * m
⊢ ¬-↑m = 0 ∧ n = n' * -↑m ∧ -↑w✝ = ↑d' * -↑m

tactic: simp [Int.ofNat_eq_zero, Int.ofNat_mul, h₁, h₂, Int.mul_neg, Int.neg_eq_zero]
state_before: case intro.inr
n n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
w✝ : Nat
z : ¬w✝ = 0
h : mkRat (-n) w✝ = { num := n', den := d', den_nz := z', reduced := c }
m : Nat
h₁ : m ≠ 0
h₂ : n = -(n' * ↑m) ∧ w✝ = d' * m
⊢ ¬-↑m = 0 ∧ n = n' * -↑m ∧ -↑w✝ = ↑d' * -↑m
state_after: no goals