α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
⊢ ¬IsUnit b →
    ((∀ (a_2 b_1 : α), b * ↑a = a_2 * b_1 → IsUnit a_2 ∨ IsUnit b_1) ↔
      ∀ (a b_1 : α), b = a * b_1 → IsUnit a ∨ IsUnit b_1)
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
⊢ Irreducible (b * ↑a) ↔ Irreducible b
simp only [irreducible_iff, Units.isUnit_mul_units, and_congr_right_iff]
case refine'_1
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a_1 b_1 : α), b * ↑a = a_1 * b_1 → IsUnit a_1 ∨ IsUnit b_1
A B : α
HAB : b = A * B
⊢ IsUnit A ∨ IsUnit B

case refine'_2
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a b_1 : α), b = a * b_1 → IsUnit a ∨ IsUnit b_1
A B : α
HAB : b * ↑a = A * B
⊢ IsUnit A ∨ IsUnit B
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
⊢ ¬IsUnit b →
    ((∀ (a_2 b_1 : α), b * ↑a = a_2 * b_1 → IsUnit a_2 ∨ IsUnit b_1) ↔
      ∀ (a b_1 : α), b = a * b_1 → IsUnit a ∨ IsUnit b_1)
refine' fun _ => ⟨fun h A B HAB => _, fun h A B HAB => _⟩
case refine'_1
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a_1 b_1 : α), b * ↑a = a_1 * b_1 → IsUnit a_1 ∨ IsUnit b_1
A B : α
HAB : b = A * B
⊢ IsUnit A ∨ IsUnit (B * ↑a)
case refine'_1
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a_1 b_1 : α), b * ↑a = a_1 * b_1 → IsUnit a_1 ∨ IsUnit b_1
A B : α
HAB : b = A * B
⊢ IsUnit A ∨ IsUnit B
rw [← Units.isUnit_mul_units B a]
case refine'_1.a
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a_1 b_1 : α), b * ↑a = a_1 * b_1 → IsUnit a_1 ∨ IsUnit b_1
A B : α
HAB : b = A * B
⊢ b * ↑a = A * (B * ↑a)
case refine'_1
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a_1 b_1 : α), b * ↑a = a_1 * b_1 → IsUnit a_1 ∨ IsUnit b_1
A B : α
HAB : b = A * B
⊢ IsUnit A ∨ IsUnit (B * ↑a)
apply h
no goals
case refine'_1.a
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a_1 b_1 : α), b * ↑a = a_1 * b_1 → IsUnit a_1 ∨ IsUnit b_1
A B : α
HAB : b = A * B
⊢ b * ↑a = A * (B * ↑a)
rw [← mul_assoc, ← HAB]
case refine'_2
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a b_1 : α), b = a * b_1 → IsUnit a ∨ IsUnit b_1
A B : α
HAB : b * ↑a = A * B
⊢ IsUnit A ∨ IsUnit (B * ↑a⁻¹)
case refine'_2
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a b_1 : α), b = a * b_1 → IsUnit a ∨ IsUnit b_1
A B : α
HAB : b * ↑a = A * B
⊢ IsUnit A ∨ IsUnit B
rw [← Units.isUnit_mul_units B a⁻¹]
case refine'_2.a
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a b_1 : α), b = a * b_1 → IsUnit a ∨ IsUnit b_1
A B : α
HAB : b * ↑a = A * B
⊢ b = A * (B * ↑a⁻¹)
case refine'_2
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a b_1 : α), b = a * b_1 → IsUnit a ∨ IsUnit b_1
A B : α
HAB : b * ↑a = A * B
⊢ IsUnit A ∨ IsUnit (B * ↑a⁻¹)
apply h
no goals
case refine'_2.a
α : Type u_1
β : Type ?u.91092
γ : Type ?u.91095
δ : Type ?u.91098
inst✝ : Monoid α
a : αˣ
b : α
x✝ : ¬IsUnit b
h : ∀ (a b_1 : α), b = a * b_1 → IsUnit a ∨ IsUnit b_1
A B : α
HAB : b * ↑a = A * B
⊢ b = A * (B * ↑a⁻¹)
rw [← mul_assoc, ← HAB, Units.mul_inv_cancel_right]