Theorem: hasProd_prod
File: Mathlib/Topology/Algebra/InfiniteSum/Basic.lean

tactic: classical
exact Finset.induction_on s (by simp only [hasProd_one, prod_empty, forall_true_iff]) <| by
  simp (config := { contextual := true }) only [mem_insert, forall_eq_or_imp, not_false_iff,
    prod_insert, and_imp]
  exact fun x s _ IH hx h ↦ hx.mul (IH h)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f✝ g : β → α
a✝ b : α
s✝ : Finset β
inst✝ : ContinuousMul α
f : γ → β → α
a : γ → α
s : Finset γ
⊢ (∀ i ∈ s, HasProd (f i) (a i)) → HasProd (fun b => ∏ i ∈ s, f i b) (∏ i ∈ s, a i)
state_after: no goals

tactic: exact Finset.induction_on s (by simp only [hasProd_one, prod_empty, forall_true_iff]) <| by
  simp (config := { contextual := true }) only [mem_insert, forall_eq_or_imp, not_false_iff,
    prod_insert, and_imp]
  exact fun x s _ IH hx h ↦ hx.mul (IH h)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f✝ g : β → α
a✝ b : α
s✝ : Finset β
inst✝ : ContinuousMul α
f : γ → β → α
a : γ → α
s : Finset γ
⊢ (∀ i ∈ s, HasProd (f i) (a i)) → HasProd (fun b => ∏ i ∈ s, f i b) (∏ i ∈ s, a i)
state_after: no goals

tactic: simp only [hasProd_one, prod_empty, forall_true_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f✝ g : β → α
a✝ b : α
s✝ : Finset β
inst✝ : ContinuousMul α
f : γ → β → α
a : γ → α
s : Finset γ
⊢ (∀ i ∈ ∅, HasProd (f i) (a i)) → HasProd (fun b => ∏ i ∈ ∅, f i b) (∏ i ∈ ∅, a i)
state_after: no goals

tactic: simp (config := { contextual := true }) only [mem_insert, forall_eq_or_imp, not_false_iff,
  prod_insert, and_imp]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f✝ g : β → α
a✝ b : α
s✝ : Finset β
inst✝ : ContinuousMul α
f : γ → β → α
a : γ → α
s : Finset γ
⊢ ∀ ⦃a_1 : γ⦄ {s : Finset γ},
    a_1 ∉ s →
      ((∀ i ∈ s, HasProd (f i) (a i)) → HasProd (fun b => ∏ i ∈ s, f i b) (∏ i ∈ s, a i)) →
        (∀ i ∈ insert a_1 s, HasProd (f i) (a i)) →
          HasProd (fun b => ∏ i ∈ insert a_1 s, f i b) (∏ i ∈ insert a_1 s, a i)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f✝ g : β → α
a✝ b : α
s✝ : Finset β
inst✝ : ContinuousMul α
f : γ → β → α
a : γ → α
s : Finset γ
⊢ ∀ ⦃a_1 : γ⦄ {s : Finset γ},
    a_1 ∉ s →
      ((∀ i ∈ s, HasProd (f i) (a i)) → HasProd (fun b => ∏ i ∈ s, f i b) (∏ i ∈ s, a i)) →
        HasProd (f a_1) (a a_1) →
          (∀ a_5 ∈ s, HasProd (f a_5) (a a_5)) → HasProd (fun b => f a_1 b * ∏ i ∈ s, f i b) (a a_1 * ∏ i ∈ s, a i)

tactic: exact fun x s _ IH hx h ↦ hx.mul (IH h)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f✝ g : β → α
a✝ b : α
s✝ : Finset β
inst✝ : ContinuousMul α
f : γ → β → α
a : γ → α
s : Finset γ
⊢ ∀ ⦃a_1 : γ⦄ {s : Finset γ},
    a_1 ∉ s →
      ((∀ i ∈ s, HasProd (f i) (a i)) → HasProd (fun b => ∏ i ∈ s, f i b) (∏ i ∈ s, a i)) →
        HasProd (f a_1) (a a_1) →
          (∀ a_5 ∈ s, HasProd (f a_5) (a a_5)) → HasProd (fun b => f a_1 b * ∏ i ∈ s, f i b) (a a_1 * ∏ i ∈ s, a i)
state_after: no goals