case empty
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s t : Multiset α
a : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s → p a
hs : 0 ≠ ∅
p_s : ∀ (a : α), a ∈ 0 → p a
⊢ p (prod 0)

case cons
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
⊢ p (prod (a ::ₘ s))
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s t : Multiset α
a : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs : s ≠ ∅
p_s : ∀ (a : α), a ∈ s → p a
⊢ p (prod s)
induction' s using Multiset.induction_on with a s hsa
case cons
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
⊢ p (a * prod s)
case cons
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
⊢ p (prod (a ::ₘ s))
rw [prod_cons]
case pos
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
hs_empty : s = ∅
⊢ p (a * prod s)

case neg
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
hs_empty : ¬s = ∅
⊢ p (a * prod s)
case cons
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
⊢ p (a * prod s)
by_cases hs_empty : s = ∅
case neg
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
hs_empty : ¬s = ∅
hps : ∀ (x : α), x ∈ s → p x
⊢ p (a * prod s)
case neg
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
hs_empty : ¬s = ∅
⊢ p (a * prod s)
have hps : ∀ x, x ∈ s → p x := fun x hxs => p_s x (mem_cons_of_mem hxs)
no goals
case neg
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
hs_empty : ¬s = ∅
hps : ∀ (x : α), x ∈ s → p x
⊢ p (a * prod s)
exact p_mul a s.prod (p_s a (mem_cons_self a s)) (hsa hs_empty hps)
no goals
case empty
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s t : Multiset α
a : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s → p a
hs : 0 ≠ ∅
p_s : ∀ (a : α), a ∈ 0 → p a
⊢ p (prod 0)
simp at hs
no goals
case pos
ι : Type ?u.82609
α : Type u_1
β : Type ?u.82615
γ : Type ?u.82618
inst✝ : CommMonoid α
s✝ t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
p : α → Prop
p_mul : ∀ (a b : α), p a → p b → p (a * b)
hs✝ : s✝ ≠ ∅
p_s✝ : ∀ (a : α), a ∈ s✝ → p a
a : α
s : Multiset α
hsa : s ≠ ∅ → (∀ (a : α), a ∈ s → p a) → p (prod s)
hs : a ::ₘ s ≠ ∅
p_s : ∀ (a_1 : α), a_1 ∈ a ::ₘ s → p a_1
hs_empty : s = ∅
⊢ p (a * prod s)
simp [hs_empty, p_s a]