Theorem: Ideal.prod_mem_prod
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: refine Finset.induction_on s ?_ ?_
state_before: R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
⊢ (∀ i ∈ s, x i ∈ I i) → ∏ i ∈ s, x i ∈ ∏ i ∈ s, I i
state_after: case refine_1
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
⊢ (∀ i ∈ ∅, x i ∈ I i) → ∏ i ∈ ∅, x i ∈ ∏ i ∈ ∅, I i

case refine_2
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
⊢ ∀ ⦃a : ι⦄ {s : Finset ι},
    a ∉ s →
      ((∀ i ∈ s, x i ∈ I i) → ∏ i ∈ s, x i ∈ ∏ i ∈ s, I i) →
        (∀ i ∈ insert a s, x i ∈ I i) → ∏ i ∈ insert a s, x i ∈ ∏ i ∈ insert a s, I i

tactic: intro
state_before: case refine_1
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
⊢ (∀ i ∈ ∅, x i ∈ I i) → ∏ i ∈ ∅, x i ∈ ∏ i ∈ ∅, I i
state_after: case refine_1
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
a✝ : ∀ i ∈ ∅, x i ∈ I i
⊢ ∏ i ∈ ∅, x i ∈ ∏ i ∈ ∅, I i

tactic: rw [Finset.prod_empty, Finset.prod_empty, one_eq_top]
state_before: case refine_1
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
a✝ : ∀ i ∈ ∅, x i ∈ I i
⊢ ∏ i ∈ ∅, x i ∈ ∏ i ∈ ∅, I i
state_after: case refine_1
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
a✝ : ∀ i ∈ ∅, x i ∈ I i
⊢ 1 ∈ ⊤

tactic: exact Submodule.mem_top
state_before: case refine_1
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
a✝ : ∀ i ∈ ∅, x i ∈ I i
⊢ 1 ∈ ⊤
state_after: no goals

tactic: intro a s ha IH h
state_before: case refine_2
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
⊢ ∀ ⦃a : ι⦄ {s : Finset ι},
    a ∉ s →
      ((∀ i ∈ s, x i ∈ I i) → ∏ i ∈ s, x i ∈ ∏ i ∈ s, I i) →
        (∀ i ∈ insert a s, x i ∈ I i) → ∏ i ∈ insert a s, x i ∈ ∏ i ∈ insert a s, I i
state_after: case refine_2
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s✝ : Finset ι
I : ι → Ideal R
x : ι → R
a : ι
s : Finset ι
ha : a ∉ s
IH : (∀ i ∈ s, x i ∈ I i) → ∏ i ∈ s, x i ∈ ∏ i ∈ s, I i
h : ∀ i ∈ insert a s, x i ∈ I i
⊢ ∏ i ∈ insert a s, x i ∈ ∏ i ∈ insert a s, I i

tactic: rw [Finset.prod_insert ha, Finset.prod_insert ha]
state_before: case refine_2
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s✝ : Finset ι
I : ι → Ideal R
x : ι → R
a : ι
s : Finset ι
ha : a ∉ s
IH : (∀ i ∈ s, x i ∈ I i) → ∏ i ∈ s, x i ∈ ∏ i ∈ s, I i
h : ∀ i ∈ insert a s, x i ∈ I i
⊢ ∏ i ∈ insert a s, x i ∈ ∏ i ∈ insert a s, I i
state_after: case refine_2
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s✝ : Finset ι
I : ι → Ideal R
x : ι → R
a : ι
s : Finset ι
ha : a ∉ s
IH : (∀ i ∈ s, x i ∈ I i) → ∏ i ∈ s, x i ∈ ∏ i ∈ s, I i
h : ∀ i ∈ insert a s, x i ∈ I i
⊢ x a * ∏ x_1 ∈ s, x x_1 ∈ I a * ∏ x ∈ s, I x

tactic: exact
  mul_mem_mul (h a <| Finset.mem_insert_self a s)
    (IH fun i hi => h i <| Finset.mem_insert_of_mem hi)
state_before: case refine_2
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s✝ : Finset ι
I : ι → Ideal R
x : ι → R
a : ι
s : Finset ι
ha : a ∉ s
IH : (∀ i ∈ s, x i ∈ I i) → ∏ i ∈ s, x i ∈ ∏ i ∈ s, I i
h : ∀ i ∈ insert a s, x i ∈ I i
⊢ x a * ∏ x_1 ∈ s, x x_1 ∈ I a * ∏ x ∈ s, I x
state_after: no goals