Theorem: Finset.prod_primes_dvd
File: Mathlib/Algebra/BigOperators/Associated.lean

tactic: classical
  exact
    Multiset.prod_primes_dvd n (by simpa only [Multiset.map_id', Finset.mem_def] using h)
      (by simpa only [Multiset.map_id', Finset.mem_def] using div)
      (by
        intro a
        simp only [Multiset.map_id', associated_eq_eq, Multiset.countp_eq_card_filter]
        change Multiset.card (Multiset.filter (fun b => a = b) s.val) ≤ 1
        apply le_of_eq_of_le (Multiset.count_eq_card_filter_eq _ _).symm
        apply Multiset.nodup_iff_count_le_one.mp
        exact s.nodup)
state_before: α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
⊢ ∏ p in s, p ∣ n

tactic: exact
  Multiset.prod_primes_dvd n (by simpa only [Multiset.map_id', Finset.mem_def] using h)
    (by simpa only [Multiset.map_id', Finset.mem_def] using div)
    (by
      intro a
      simp only [Multiset.map_id', associated_eq_eq, Multiset.countp_eq_card_filter]
      change Multiset.card (Multiset.filter (fun b => a = b) s.val) ≤ 1
      apply le_of_eq_of_le (Multiset.count_eq_card_filter_eq _ _).symm
      apply Multiset.nodup_iff_count_le_one.mp
      exact s.nodup)
state_before: α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
⊢ ∏ p in s, p ∣ n

tactic: simpa only [Multiset.map_id', Finset.mem_def] using h
state_before: α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
⊢ ∀ (a : α), a ∈ Multiset.map (fun p => p) s.val → Prime a

tactic: simpa only [Multiset.map_id', Finset.mem_def] using div
state_before: α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
⊢ ∀ (a : α), a ∈ Multiset.map (fun p => p) s.val → a ∣ n

tactic: intro a
state_before: α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
⊢ ∀ (a : α), Multiset.countp (Associated a) (Multiset.map (fun p => p) s.val) ≤ 1

tactic: simp only [Multiset.map_id', associated_eq_eq, Multiset.countp_eq_card_filter]
state_before: α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
a : α
⊢ Multiset.countp (Associated a) (Multiset.map (fun p => p) s.val) ≤ 1

tactic: change Multiset.card (Multiset.filter (fun b => a = b) s.val) ≤ 1
state_before: α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
a : α
⊢ ↑Multiset.card (Multiset.filter (Eq a) s.val) ≤ 1

tactic: apply le_of_eq_of_le (Multiset.count_eq_card_filter_eq _ _).symm
state_before: α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
a : α
⊢ ↑Multiset.card (Multiset.filter (fun b => a = b) s.val) ≤ 1

tactic: apply Multiset.nodup_iff_count_le_one.mp
state_before: α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
a : α
⊢ Multiset.count a s.val ≤ 1

tactic: exact s.nodup
state_before: case a
α : Type u_1
β : Type ?u.20971
γ : Type ?u.20974
δ : Type ?u.20977
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Unique αˣ
s : Finset α
n : α
h : ∀ (a : α), a ∈ s → Prime a
div : ∀ (a : α), a ∈ s → a ∣ n
a : α
⊢ Multiset.Nodup s.val