Theorem: Finsupp.prod_dvd_prod_of_subset_of_dvd
File: Mathlib/Algebra/BigOperators/Finsupp.lean

tactic: classical
  simp only [Finsupp.prod, Finsupp.prod_mul]
  rw [← sdiff_union_of_subset h1, prod_union sdiff_disjoint]
  apply dvd_mul_of_dvd_right
  apply prod_dvd_prod_of_dvd
  exact h2
state_before: α : Type u_3
ι : Type ?u.593251
γ : Type ?u.593254
A : Type ?u.593257
B : Type ?u.593260
C : Type ?u.593263
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1✝ : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g : ι →₀ A
k : ι → A → γ → B
x : γ
β : Type ?u.596393
M : Type u_1
M' : Type ?u.596399
N : Type u_2
P : Type ?u.596405
G : Type ?u.596408
H : Type ?u.596411
R : Type ?u.596414
S : Type ?u.596417
inst✝¹ : AddCommMonoid M
inst✝ : CommMonoid N
f1 f2 : α →₀ M
g1 g2 : α → M → N
h1 : f1.support ⊆ f2.support
h2 : ∀ (a : α), a ∈ f1.support → g1 a (↑f1 a) ∣ g2 a (↑f2 a)
⊢ prod f1 g1 ∣ prod f2 g2

tactic: simp only [Finsupp.prod, Finsupp.prod_mul]
state_before: α : Type u_3
ι : Type ?u.593251
γ : Type ?u.593254
A : Type ?u.593257
B : Type ?u.593260
C : Type ?u.593263
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1✝ : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g : ι →₀ A
k : ι → A → γ → B
x : γ
β : Type ?u.596393
M : Type u_1
M' : Type ?u.596399
N : Type u_2
P : Type ?u.596405
G : Type ?u.596408
H : Type ?u.596411
R : Type ?u.596414
S : Type ?u.596417
inst✝¹ : AddCommMonoid M
inst✝ : CommMonoid N
f1 f2 : α →₀ M
g1 g2 : α → M → N
h1 : f1.support ⊆ f2.support
h2 : ∀ (a : α), a ∈ f1.support → g1 a (↑f1 a) ∣ g2 a (↑f2 a)
⊢ prod f1 g1 ∣ prod f2 g2

tactic: rw [← sdiff_union_of_subset h1, prod_union sdiff_disjoint]
state_before: α : Type u_3
ι : Type ?u.593251
γ : Type ?u.593254
A : Type ?u.593257
B : Type ?u.593260
C : Type ?u.593263
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1✝ : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g : ι →₀ A
k : ι → A → γ → B
x : γ
β : Type ?u.596393
M : Type u_1
M' : Type ?u.596399
N : Type u_2
P : Type ?u.596405
G : Type ?u.596408
H : Type ?u.596411
R : Type ?u.596414
S : Type ?u.596417
inst✝¹ : AddCommMonoid M
inst✝ : CommMonoid N
f1 f2 : α →₀ M
g1 g2 : α → M → N
h1 : f1.support ⊆ f2.support
h2 : ∀ (a : α), a ∈ f1.support → g1 a (↑f1 a) ∣ g2 a (↑f2 a)
⊢ ∏ x in f1.support, g1 x (↑f1 x) ∣ ∏ x in f2.support, g2 x (↑f2 x)

tactic: apply dvd_mul_of_dvd_right
state_before: α : Type u_3
ι : Type ?u.593251
γ : Type ?u.593254
A : Type ?u.593257
B : Type ?u.593260
C : Type ?u.593263
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1✝ : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g : ι →₀ A
k : ι → A → γ → B
x : γ
β : Type ?u.596393
M : Type u_1
M' : Type ?u.596399
N : Type u_2
P : Type ?u.596405
G : Type ?u.596408
H : Type ?u.596411
R : Type ?u.596414
S : Type ?u.596417
inst✝¹ : AddCommMonoid M
inst✝ : CommMonoid N
f1 f2 : α →₀ M
g1 g2 : α → M → N
h1 : f1.support ⊆ f2.support
h2 : ∀ (a : α), a ∈ f1.support → g1 a (↑f1 a) ∣ g2 a (↑f2 a)
⊢ ∏ x in f1.support, g1 x (↑f1 x) ∣ (∏ x in f2.support \ f1.support, g2 x (↑f2 x)) * ∏ x in f1.support, g2 x (↑f2 x)

tactic: apply prod_dvd_prod_of_dvd
state_before: case h
α : Type u_3
ι : Type ?u.593251
γ : Type ?u.593254
A : Type ?u.593257
B : Type ?u.593260
C : Type ?u.593263
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1✝ : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g : ι →₀ A
k : ι → A → γ → B
x : γ
β : Type ?u.596393
M : Type u_1
M' : Type ?u.596399
N : Type u_2
P : Type ?u.596405
G : Type ?u.596408
H : Type ?u.596411
R : Type ?u.596414
S : Type ?u.596417
inst✝¹ : AddCommMonoid M
inst✝ : CommMonoid N
f1 f2 : α →₀ M
g1 g2 : α → M → N
h1 : f1.support ⊆ f2.support
h2 : ∀ (a : α), a ∈ f1.support → g1 a (↑f1 a) ∣ g2 a (↑f2 a)
⊢ ∏ x in f1.support, g1 x (↑f1 x) ∣ ∏ x in f1.support, g2 x (↑f2 x)

tactic: exact h2
state_before: case h.h
α : Type u_3
ι : Type ?u.593251
γ : Type ?u.593254
A : Type ?u.593257
B : Type ?u.593260
C : Type ?u.593263
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1✝ : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g : ι →₀ A
k : ι → A → γ → B
x : γ
β : Type ?u.596393
M : Type u_1
M' : Type ?u.596399
N : Type u_2
P : Type ?u.596405
G : Type ?u.596408
H : Type ?u.596411
R : Type ?u.596414
S : Type ?u.596417
inst✝¹ : AddCommMonoid M
inst✝ : CommMonoid N
f1 f2 : α →₀ M
g1 g2 : α → M → N
h1 : f1.support ⊆ f2.support
h2 : ∀ (a : α), a ∈ f1.support → g1 a (↑f1 a) ∣ g2 a (↑f2 a)
⊢ ∀ (a : α), a ∈ f1.support → g1 a (↑f1 a) ∣ g2 a (↑f2 a)