Theorem: Associates.prime_mk
File: Mathlib/Algebra/Associated.lean

tactic: rw [Prime, _root_.Prime, forall_associated]
state_before: α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ Prime (Associates.mk p) ↔ Prime p

tactic: trans
state_before: α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ (Associates.mk p ≠ 0 ∧
      ¬IsUnit (Associates.mk p) ∧
        ∀ (a : α) (b : Associates α),
          Associates.mk p ∣ Associates.mk a * b → Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ b) ↔
    p ≠ 0 ∧ ¬IsUnit p ∧ ∀ (a b : α), p ∣ a * b → p ∣ a ∨ p ∣ b

tactic: apply and_congr mk_ne_zero
state_before: α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ (Associates.mk p ≠ 0 ∧
      ¬IsUnit (Associates.mk p) ∧
        ∀ (a a_1 : α),
          Associates.mk p ∣ Associates.mk a * Associates.mk a_1 →
            Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ Associates.mk a_1) ↔
    p ≠ 0 ∧ ¬IsUnit p ∧ ∀ (a b : α), p ∣ a * b → p ∣ a ∨ p ∣ b

tactic: apply and_congr
state_before: α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ (¬IsUnit (Associates.mk p) ∧
      ∀ (a a_1 : α),
        Associates.mk p ∣ Associates.mk a * Associates.mk a_1 →
          Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ Associates.mk a_1) ↔
    ¬IsUnit p ∧ ∀ (a b : α), p ∣ a * b → p ∣ a ∨ p ∣ b

tactic: refine' forall₂_congr fun a b => _
state_before: case h₂
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ (∀ (a a_1 : α),
      Associates.mk p ∣ Associates.mk a * Associates.mk a_1 →
        Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ Associates.mk a_1) ↔
    ∀ (a b : α), p ∣ a * b → p ∣ a ∨ p ∣ b

tactic: rw [mk_mul_mk, mk_dvd_mk, mk_dvd_mk, mk_dvd_mk]
state_before: case h₂
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p a b : α
⊢ Associates.mk p ∣ Associates.mk a * Associates.mk b →
      Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ Associates.mk b ↔
    p ∣ a * b → p ∣ a ∨ p ∣ b

tactic: apply and_congr
state_before: α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ (Associates.mk p ≠ 0 ∧
      ¬IsUnit (Associates.mk p) ∧
        ∀ (a : α) (b : Associates α),
          Associates.mk p ∣ Associates.mk a * b → Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ b) ↔
    ?m.319210

tactic: rfl
state_before: case h₁
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ Associates.mk p ≠ 0 ↔ ?c

case h₂
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ (¬IsUnit (Associates.mk p) ∧
      ∀ (a : α) (b : Associates α),
        Associates.mk p ∣ Associates.mk a * b → Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ b) ↔
    ?d

case c
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ Prop

case d
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ Prop

tactic: apply and_congr
state_before: case h₂
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ (¬IsUnit (Associates.mk p) ∧
      ∀ (a : α) (b : Associates α),
        Associates.mk p ∣ Associates.mk a * b → Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ b) ↔
    ?d

case d
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ Prop

tactic: rfl
state_before: case h₂.h₁
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ ¬IsUnit (Associates.mk p) ↔ ?h₂.c

case h₂.h₂
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ (∀ (a : α) (b : Associates α),
      Associates.mk p ∣ Associates.mk a * b → Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ b) ↔
    ?h₂.d

case h₂.c
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ Prop

case h₂.d
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ Prop

tactic: apply forall_congr'
state_before: case h₂.h₂
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ (∀ (a : α) (b : Associates α),
      Associates.mk p ∣ Associates.mk a * b → Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ b) ↔
    ?h₂.d

case h₂.d
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ Prop

tactic: intro a
state_before: case h₂.h₂.h
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ ∀ (a : α),
    (∀ (b : Associates α),
        Associates.mk p ∣ Associates.mk a * b → Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ b) ↔
      ?h₂.h₂.q a

case h₂.h₂.q
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ α → Prop

tactic: exact forall_associated
state_before: case h₂.h₂.h
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p a : α
⊢ (∀ (b : Associates α),
      Associates.mk p ∣ Associates.mk a * b → Associates.mk p ∣ Associates.mk a ∨ Associates.mk p ∣ b) ↔
    ?h₂.h₂.q a

case h₂.h₂.q
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ α → Prop

tactic: rw [isUnit_mk]
state_before: case h₁
α : Type u_1
β : Type ?u.318602
γ : Type ?u.318605
δ : Type ?u.318608
inst✝ : CommMonoidWithZero α
p : α
⊢ ¬IsUnit (Associates.mk p) ↔ ¬IsUnit p