Theorem: prime_pow_iff
File: Mathlib/Algebra/Associated.lean

tactic: refine ⟨fun hp ↦ ?_, fun ⟨hp, hn⟩ ↦ by simpa [hn]⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
⊢ Prime (p ^ n) ↔ Prime p ∧ n = 1
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime (p ^ n)
⊢ Prime p ∧ n = 1

tactic: suffices n = 1 by aesop
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime (p ^ n)
⊢ Prime p ∧ n = 1
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime (p ^ n)
⊢ n = 1

tactic: cases' n with n
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime (p ^ n)
⊢ n = 1
state_after: case zero
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
hp : Prime (p ^ 0)
⊢ 0 = 1

case succ
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime (p ^ (n + 1))
⊢ n + 1 = 1

tactic: simpa [hn]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
x✝ : Prime p ∧ n = 1
hp : Prime p
hn : n = 1
⊢ Prime (p ^ n)
state_after: no goals

tactic: aesop
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime (p ^ n)
this : n = 1
⊢ Prime p ∧ n = 1
state_after: no goals

tactic: simp at hp
state_before: case zero
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
hp : Prime (p ^ 0)
⊢ 0 = 1
state_after: no goals

tactic: rw [Nat.succ.injEq]
state_before: case succ
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime (p ^ (n + 1))
⊢ n + 1 = 1
state_after: case succ
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime (p ^ (n + 1))
⊢ n = 0

tactic: rw [pow_succ', prime_mul_iff] at hp
state_before: case succ
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime (p ^ (n + 1))
⊢ n = 0
state_after: case succ
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime p ∧ IsUnit (p ^ n) ∨ IsUnit p ∧ Prime (p ^ n)
⊢ n = 0

tactic: rcases hp with ⟨hp, hpn⟩ | ⟨hp, hpn⟩
state_before: case succ
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime p ∧ IsUnit (p ^ n) ∨ IsUnit p ∧ Prime (p ^ n)
⊢ n = 0
state_after: case succ.inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime p
hpn : IsUnit (p ^ n)
⊢ n = 0

case succ.inr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : IsUnit p
hpn : Prime (p ^ n)
⊢ n = 0

tactic: by_contra contra
state_before: case succ.inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime p
hpn : IsUnit (p ^ n)
⊢ n = 0
state_after: case succ.inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime p
hpn : IsUnit (p ^ n)
contra : ¬n = 0
⊢ False

tactic: rw [isUnit_pow_iff contra] at hpn
state_before: case succ.inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime p
hpn : IsUnit (p ^ n)
contra : ¬n = 0
⊢ False
state_after: case succ.inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime p
hpn : IsUnit p
contra : ¬n = 0
⊢ False

tactic: exact hp.not_unit hpn
state_before: case succ.inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : Prime p
hpn : IsUnit p
contra : ¬n = 0
⊢ False
state_after: no goals

tactic: exfalso
state_before: case succ.inr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : IsUnit p
hpn : Prime (p ^ n)
⊢ n = 0
state_after: case succ.inr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : IsUnit p
hpn : Prime (p ^ n)
⊢ False

tactic: exact hpn.not_unit (hp.pow n)
state_before: case succ.inr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
p : α
n : ℕ
hp : IsUnit p
hpn : Prime (p ^ n)
⊢ False
state_after: no goals