Theorem: Finset.prod_add_prod_le
File: Mathlib/Algebra/BigOperators/Order.lean

tactic: simp_rw [prod_eq_mul_prod_diff_singleton hi]
state_before: ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ ∏ i in s, g i + ∏ i in s, h i ≤ ∏ i in s, f i

tactic: refine le_trans ?_ (mul_le_mul_of_nonneg_right h2i ?_)
state_before: ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ g i * ∏ i in s \ {i}, g i + h i * ∏ i in s \ {i}, h i ≤ f i * ∏ i in s \ {i}, f i

tactic: rw [right_distrib]
state_before: case refine_1
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ g i * ∏ i in s \ {i}, g i + h i * ∏ i in s \ {i}, h i ≤ (g i + h i) * ∏ i in s \ {i}, f i

tactic: refine mul_le_mul_of_nonneg_left ?_ ?_
state_before: case refine_1.refine_2
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ h i * ∏ i in s \ {i}, h i ≤ h i * ∏ i in s \ {i}, f i

tactic: refine prod_le_prod ?_ ?_
<;> simp (config := { contextual := true }) [*]
state_before: case refine_1.refine_2.refine_1
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ ∏ i in s \ {i}, h i ≤ ∏ i in s \ {i}, f i

tactic: try apply_assumption
state_before: case refine_1.refine_2.refine_2
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ 0 ≤ h i

tactic: try assumption
state_before: case refine_1.refine_2.refine_2.a
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ i ∈ s

tactic: apply_assumption
state_before: case refine_1.refine_2.refine_2
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ 0 ≤ h i

tactic: assumption
state_before: case refine_1.refine_2.refine_2.a
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ i ∈ s

tactic: apply prod_nonneg
state_before: case refine_2
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ 0 ≤ ∏ i in s \ {i}, f i

tactic: simp only [and_imp, mem_sdiff, mem_singleton]
state_before: case refine_2.h0
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ ∀ (i_1 : ι), i_1 ∈ s \ {i} → 0 ≤ f i_1

tactic: intro j h1j h2j
state_before: case refine_2.h0
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
⊢ ∀ (i_1 : ι), i_1 ∈ s → ¬i_1 = i → 0 ≤ f i_1

tactic: exact le_trans (hg j h1j) (hgf j h1j h2j)
state_before: case refine_2.h0
ι : Type u_1
α : Type ?u.156140
β : Type ?u.156143
M : Type ?u.156146
N : Type ?u.156149
G : Type ?u.156152
k : Type ?u.156155
R : Type u_2
inst✝ : OrderedCommSemiring R
f✝ g✝ : ι → R
s t : Finset ι
i : ι
f g h : ι → R
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
hg : ∀ (i : ι), i ∈ s → 0 ≤ g i
hh : ∀ (i : ι), i ∈ s → 0 ≤ h i
j : ι
h1j : j ∈ s
h2j : ¬j = i
⊢ 0 ≤ f j