[GOAL]
𝕜 : Type u_1
inst✝¹¹ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
G : Type u_4
inst✝⁶ : NormedAddCommGroup G
inst✝⁵ : NormedSpace 𝕜 G
G' : Type u_5
inst✝⁴ : NormedAddCommGroup G'
inst✝³ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
ι : Type u_6
inst✝² : Fintype ι
F' : ι → Type u_7
inst✝¹ : (i : ι) → NormedAddCommGroup (F' i)
inst✝ : (i : ι) → NormedSpace 𝕜 (F' i)
φ : (i : ι) → E → F' i
φ' : (i : ι) → E →L[𝕜] F' i
Φ : E → (i : ι) → F' i
Φ' : E →L[𝕜] (i : ι) → F' i
⊢ HasStrictFDerivAt Φ Φ' x ↔ ∀ (i : ι), HasStrictFDerivAt (fun x => Φ x i) (comp (proj i) Φ') x
[PROOFSTEP]
simp only [HasStrictFDerivAt, ContinuousLinearMap.coe_pi]
[GOAL]
𝕜 : Type u_1
inst✝¹¹ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
G : Type u_4
inst✝⁶ : NormedAddCommGroup G
inst✝⁵ : NormedSpace 𝕜 G
G' : Type u_5
inst✝⁴ : NormedAddCommGroup G'
inst✝³ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
ι : Type u_6
inst✝² : Fintype ι
F' : ι → Type u_7
inst✝¹ : (i : ι) → NormedAddCommGroup (F' i)
inst✝ : (i : ι) → NormedSpace 𝕜 (F' i)
φ : (i : ι) → E → F' i
φ' : (i : ι) → E →L[𝕜] F' i
Φ : E → (i : ι) → F' i
Φ' : E →L[𝕜] (i : ι) → F' i
⊢ ((fun p => Φ p.fst - Φ p.snd - ↑Φ' (p.fst - p.snd)) =o[𝓝 (x, x)] fun p => p.fst - p.snd) ↔
    ∀ (i : ι),
      (fun p => Φ p.fst i - Φ p.snd i - ↑(comp (proj i) Φ') (p.fst - p.snd)) =o[𝓝 (x, x)] fun p => p.fst - p.snd
[PROOFSTEP]
exact isLittleO_pi
[GOAL]
𝕜 : Type u_1
inst✝¹¹ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
G : Type u_4
inst✝⁶ : NormedAddCommGroup G
inst✝⁵ : NormedSpace 𝕜 G
G' : Type u_5
inst✝⁴ : NormedAddCommGroup G'
inst✝³ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
ι : Type u_6
inst✝² : Fintype ι
F' : ι → Type u_7
inst✝¹ : (i : ι) → NormedAddCommGroup (F' i)
inst✝ : (i : ι) → NormedSpace 𝕜 (F' i)
φ : (i : ι) → E → F' i
φ' : (i : ι) → E →L[𝕜] F' i
Φ : E → (i : ι) → F' i
Φ' : E →L[𝕜] (i : ι) → F' i
⊢ HasFDerivAtFilter Φ Φ' x L ↔ ∀ (i : ι), HasFDerivAtFilter (fun x => Φ x i) (comp (proj i) Φ') x L
[PROOFSTEP]
simp only [HasFDerivAtFilter, ContinuousLinearMap.coe_pi]
[GOAL]
𝕜 : Type u_1
inst✝¹¹ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
G : Type u_4
inst✝⁶ : NormedAddCommGroup G
inst✝⁵ : NormedSpace 𝕜 G
G' : Type u_5
inst✝⁴ : NormedAddCommGroup G'
inst✝³ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
ι : Type u_6
inst✝² : Fintype ι
F' : ι → Type u_7
inst✝¹ : (i : ι) → NormedAddCommGroup (F' i)
inst✝ : (i : ι) → NormedSpace 𝕜 (F' i)
φ : (i : ι) → E → F' i
φ' : (i : ι) → E →L[𝕜] F' i
Φ : E → (i : ι) → F' i
Φ' : E →L[𝕜] (i : ι) → F' i
⊢ ((fun x' => Φ x' - Φ x - ↑Φ' (x' - x)) =o[L] fun x' => x' - x) ↔
    ∀ (i : ι), (fun x' => Φ x' i - Φ x i - ↑(comp (proj i) Φ') (x' - x)) =o[L] fun x' => x' - x
[PROOFSTEP]
exact isLittleO_pi


[GOAL]
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
⊢ FG (↑Subalgebra.toSubmodule (adjoin R (s ∪ t)))
[PROOFSTEP]
rcases fg_def.1 h1 with ⟨p, hp, hp'⟩
[GOAL]
case intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
⊢ FG (↑Subalgebra.toSubmodule (adjoin R (s ∪ t)))
[PROOFSTEP]
rcases fg_def.1 h2 with ⟨q, hq, hq'⟩
[GOAL]
case intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
⊢ FG (↑Subalgebra.toSubmodule (adjoin R (s ∪ t)))
[PROOFSTEP]
refine' fg_def.2 ⟨p * q, hp.mul hq, le_antisymm _ _⟩
[GOAL]
case intro.intro.intro.intro.refine'_1
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
⊢ span R (p * q) ≤ ↑Subalgebra.toSubmodule (adjoin R (s ∪ t))
[PROOFSTEP]
rw [span_le]
[GOAL]
case intro.intro.intro.intro.refine'_1
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
⊢ p * q ⊆ ↑(↑Subalgebra.toSubmodule (adjoin R (s ∪ t)))
[PROOFSTEP]
rintro _ ⟨x, y, hx, hy, rfl⟩
[GOAL]
case intro.intro.intro.intro.refine'_1.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
⊢ (fun x x_1 => x * x_1) x y ∈ ↑(↑Subalgebra.toSubmodule (adjoin R (s ∪ t)))
[PROOFSTEP]
change x * y ∈ adjoin R (s ∪ t)
[GOAL]
case intro.intro.intro.intro.refine'_1.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
⊢ x * y ∈ adjoin R (s ∪ t)
[PROOFSTEP]
refine' Subalgebra.mul_mem _ _ _
[GOAL]
case intro.intro.intro.intro.refine'_1.intro.intro.intro.intro.refine'_1
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
⊢ x ∈ adjoin R (s ∪ t)
[PROOFSTEP]
have : x ∈ Subalgebra.toSubmodule (adjoin R s) := by
  rw [← hp']
  exact subset_span hx
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
⊢ x ∈ ↑Subalgebra.toSubmodule (adjoin R s)
[PROOFSTEP]
rw [← hp']
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
⊢ x ∈ span R p
[PROOFSTEP]
exact subset_span hx
[GOAL]
case intro.intro.intro.intro.refine'_1.intro.intro.intro.intro.refine'_1
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
this : x ∈ ↑Subalgebra.toSubmodule (adjoin R s)
⊢ x ∈ adjoin R (s ∪ t)
[PROOFSTEP]
exact adjoin_mono (Set.subset_union_left _ _) this
[GOAL]
case intro.intro.intro.intro.refine'_1.intro.intro.intro.intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
⊢ y ∈ adjoin R (s ∪ t)
[PROOFSTEP]
have : y ∈ Subalgebra.toSubmodule (adjoin (adjoin R s) t) :=
  by
  rw [← hq']
  exact subset_span hy
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
⊢ y ∈ ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
[PROOFSTEP]
rw [← hq']
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
⊢ y ∈ span { x // x ∈ adjoin R s } q
[PROOFSTEP]
exact subset_span hy
[GOAL]
case intro.intro.intro.intro.refine'_1.intro.intro.intro.intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
this : y ∈ ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
⊢ y ∈ adjoin R (s ∪ t)
[PROOFSTEP]
change y ∈ adjoin R (s ∪ t)
[GOAL]
case intro.intro.intro.intro.refine'_1.intro.intro.intro.intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
x y : A
hx : x ∈ p
hy : y ∈ q
this : y ∈ ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
⊢ y ∈ adjoin R (s ∪ t)
[PROOFSTEP]
rwa [adjoin_union_eq_adjoin_adjoin]
[GOAL]
case intro.intro.intro.intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
⊢ ↑Subalgebra.toSubmodule (adjoin R (s ∪ t)) ≤ span R (p * q)
[PROOFSTEP]
intro r hr
[GOAL]
case intro.intro.intro.intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
r : A
hr : r ∈ ↑Subalgebra.toSubmodule (adjoin R (s ∪ t))
⊢ r ∈ span R (p * q)
[PROOFSTEP]
change r ∈ adjoin R (s ∪ t) at hr
[GOAL]
case intro.intro.intro.intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
r : A
hr : r ∈ adjoin R (s ∪ t)
⊢ r ∈ span R (p * q)
[PROOFSTEP]
rw [adjoin_union_eq_adjoin_adjoin] at hr
[GOAL]
case intro.intro.intro.intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
r : A
hr : r ∈ Subalgebra.restrictScalars R (adjoin { x // x ∈ adjoin R s } t)
⊢ r ∈ span R (p * q)
[PROOFSTEP]
change r ∈ Subalgebra.toSubmodule (adjoin (adjoin R s) t) at hr
[GOAL]
case intro.intro.intro.intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
r : A
hr : r ∈ ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
⊢ r ∈ span R (p * q)
[PROOFSTEP]
rw [← hq', ← Set.image_id q, Finsupp.mem_span_image_iff_total (adjoin R s)] at hr
[GOAL]
case intro.intro.intro.intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
r : A
hr :
  ∃ l,
    l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q ∧
      ↑(Finsupp.total A A { x // x ∈ adjoin R s } _root_.id) l = r
⊢ r ∈ span R (p * q)
[PROOFSTEP]
rcases hr with ⟨l, hlq, rfl⟩
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
⊢ ↑(Finsupp.total A A { x // x ∈ adjoin R s } _root_.id) l ∈ span R (p * q)
[PROOFSTEP]
have := @Finsupp.total_apply A A (adjoin R s)
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
⊢ ↑(Finsupp.total A A { x // x ∈ adjoin R s } _root_.id) l ∈ span R (p * q)
[PROOFSTEP]
rw [this, Finsupp.sum]
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
⊢ (Finset.sum l.support fun a => ↑l a • _root_.id a) ∈ span R (p * q)
[PROOFSTEP]
refine' sum_mem _
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
⊢ ∀ (c : A), c ∈ l.support → ↑l c • _root_.id c ∈ span R (p * q)
[PROOFSTEP]
intro z hz
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
⊢ ↑l z • _root_.id z ∈ span R (p * q)
[PROOFSTEP]
change (l z).1 * _ ∈ _
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
⊢ ↑(↑l z) * _root_.id z ∈ span R (p * q)
[PROOFSTEP]
have : (l z).1 ∈ Subalgebra.toSubmodule (adjoin R s) := (l z).2
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
this : ↑(↑l z) ∈ ↑Subalgebra.toSubmodule (adjoin R s)
⊢ ↑(↑l z) * _root_.id z ∈ span R (p * q)
[PROOFSTEP]
rw [← hp', ← Set.image_id p, Finsupp.mem_span_image_iff_total R] at this
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
this : ∃ l_1, l_1 ∈ Finsupp.supported R R p ∧ ↑(Finsupp.total A A R _root_.id) l_1 = ↑(↑l z)
⊢ ↑(↑l z) * _root_.id z ∈ span R (p * q)
[PROOFSTEP]
rcases this with ⟨l2, hlp, hl⟩
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
l2 : A →₀ R
hlp : l2 ∈ Finsupp.supported R R p
hl : ↑(Finsupp.total A A R _root_.id) l2 = ↑(↑l z)
⊢ ↑(↑l z) * _root_.id z ∈ span R (p * q)
[PROOFSTEP]
have := @Finsupp.total_apply A A R
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
l2 : A →₀ R
hlp : l2 ∈ Finsupp.supported R R p
hl : ↑(Finsupp.total A A R _root_.id) l2 = ↑(↑l z)
this :
  ∀ [inst : Semiring R] [inst_1 : AddCommMonoid A] [inst_2 : Module R A] {v : A → A} (l : A →₀ R),
    ↑(Finsupp.total A A R v) l = Finsupp.sum l fun i a => a • v i
⊢ ↑(↑l z) * _root_.id z ∈ span R (p * q)
[PROOFSTEP]
rw [this] at hl
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
l2 : A →₀ R
hlp : l2 ∈ Finsupp.supported R R p
hl : (Finsupp.sum l2 fun i a => a • _root_.id i) = ↑(↑l z)
this :
  ∀ [inst : Semiring R] [inst_1 : AddCommMonoid A] [inst_2 : Module R A] {v : A → A} (l : A →₀ R),
    ↑(Finsupp.total A A R v) l = Finsupp.sum l fun i a => a • v i
⊢ ↑(↑l z) * _root_.id z ∈ span R (p * q)
[PROOFSTEP]
rw [← hl, Finsupp.sum_mul]
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
l2 : A →₀ R
hlp : l2 ∈ Finsupp.supported R R p
hl : (Finsupp.sum l2 fun i a => a • _root_.id i) = ↑(↑l z)
this :
  ∀ [inst : Semiring R] [inst_1 : AddCommMonoid A] [inst_2 : Module R A] {v : A → A} (l : A →₀ R),
    ↑(Finsupp.total A A R v) l = Finsupp.sum l fun i a => a • v i
⊢ (Finsupp.sum l2 fun a c => c • _root_.id a * _root_.id z) ∈ span R (p * q)
[PROOFSTEP]
refine' sum_mem _
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
l2 : A →₀ R
hlp : l2 ∈ Finsupp.supported R R p
hl : (Finsupp.sum l2 fun i a => a • _root_.id i) = ↑(↑l z)
this :
  ∀ [inst : Semiring R] [inst_1 : AddCommMonoid A] [inst_2 : Module R A] {v : A → A} (l : A →₀ R),
    ↑(Finsupp.total A A R v) l = Finsupp.sum l fun i a => a • v i
⊢ ∀ (c : A), c ∈ l2.support → (fun a c => c • _root_.id a * _root_.id z) c (↑l2 c) ∈ span R (p * q)
[PROOFSTEP]
intro t ht
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t✝ : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t✝))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t✝)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
l2 : A →₀ R
hlp : l2 ∈ Finsupp.supported R R p
hl : (Finsupp.sum l2 fun i a => a • _root_.id i) = ↑(↑l z)
this :
  ∀ [inst : Semiring R] [inst_1 : AddCommMonoid A] [inst_2 : Module R A] {v : A → A} (l : A →₀ R),
    ↑(Finsupp.total A A R v) l = Finsupp.sum l fun i a => a • v i
t : A
ht : t ∈ l2.support
⊢ (fun a c => c • _root_.id a * _root_.id z) t (↑l2 t) ∈ span R (p * q)
[PROOFSTEP]
change _ * _ ∈ _
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t✝ : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t✝))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t✝)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
l2 : A →₀ R
hlp : l2 ∈ Finsupp.supported R R p
hl : (Finsupp.sum l2 fun i a => a • _root_.id i) = ↑(↑l z)
this :
  ∀ [inst : Semiring R] [inst_1 : AddCommMonoid A] [inst_2 : Module R A] {v : A → A} (l : A →₀ R),
    ↑(Finsupp.total A A R v) l = Finsupp.sum l fun i a => a • v i
t : A
ht : t ∈ l2.support
⊢ ↑l2 t • _root_.id t * _root_.id z ∈ span R (p * q)
[PROOFSTEP]
rw [smul_mul_assoc]
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t✝ : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t✝))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t✝)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
l2 : A →₀ R
hlp : l2 ∈ Finsupp.supported R R p
hl : (Finsupp.sum l2 fun i a => a • _root_.id i) = ↑(↑l z)
this :
  ∀ [inst : Semiring R] [inst_1 : AddCommMonoid A] [inst_2 : Module R A] {v : A → A} (l : A →₀ R),
    ↑(Finsupp.total A A R v) l = Finsupp.sum l fun i a => a • v i
t : A
ht : t ∈ l2.support
⊢ ↑l2 t • (_root_.id t * _root_.id z) ∈ span R (p * q)
[PROOFSTEP]
refine' smul_mem _ _ _
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝² : CommSemiring R
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
s t✝ : Set A
h1 : FG (↑Subalgebra.toSubmodule (adjoin R s))
h2 : FG (↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t✝))
p : Set A
hp : Set.Finite p
hp' : span R p = ↑Subalgebra.toSubmodule (adjoin R s)
q : Set A
hq : Set.Finite q
hq' : span { x // x ∈ adjoin R s } q = ↑Subalgebra.toSubmodule (adjoin { x // x ∈ adjoin R s } t✝)
l : A →₀ { x // x ∈ adjoin R s }
hlq : l ∈ Finsupp.supported { x // x ∈ adjoin R s } { x // x ∈ adjoin R s } q
this✝ :
  ∀ [inst : Semiring { x // x ∈ adjoin R s }] [inst_1 : AddCommMonoid A] [inst_2 : Module { x // x ∈ adjoin R s } A]
    {v : A → A} (l : A →₀ { x // x ∈ adjoin R s }),
    ↑(Finsupp.total A A { x // x ∈ adjoin R s } v) l = Finsupp.sum l fun i a => a • v i
z : A
hz : z ∈ l.support
l2 : A →₀ R
hlp : l2 ∈ Finsupp.supported R R p
hl : (Finsupp.sum l2 fun i a => a • _root_.id i) = ↑(↑l z)
this :
  ∀ [inst : Semiring R] [inst_1 : AddCommMonoid A] [inst_2 : Module R A] {v : A → A} (l : A →₀ R),
    ↑(Finsupp.total A A R v) l = Finsupp.sum l fun i a => a • v i
t : A
ht : t ∈ l2.support
⊢ _root_.id t * _root_.id z ∈ span R (p * q)
[PROOFSTEP]
exact subset_span ⟨t, z, hlp ht, hlq hz, rfl⟩
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
x✝ : Submodule.FG (↑toSubmodule S)
t : Finset A
ht : span R ↑t = ↑toSubmodule S
x : A
hx : x ∈ ↑toSubmodule S
⊢ x ∈ span R ↑t
[PROOFSTEP]
rw [ht]
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
x✝ : Submodule.FG (↑toSubmodule S)
t : Finset A
ht : span R ↑t = ↑toSubmodule S
x : A
hx : x ∈ ↑toSubmodule S
⊢ x ∈ ↑toSubmodule S
[PROOFSTEP]
exact hx
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
h : Submodule.FG ⊤
s : Finset A
hs : span R ↑s = ⊤
⊢ ↑toSubmodule (Algebra.adjoin R ↑s) = ↑toSubmodule ⊤
[PROOFSTEP]
rw [Algebra.top_toSubmodule, eq_top_iff, ← hs, span_le]
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
h : Submodule.FG ⊤
s : Finset A
hs : span R ↑s = ⊤
⊢ ↑s ⊆ ↑(↑toSubmodule (Algebra.adjoin R ↑s))
[PROOFSTEP]
exact Algebra.subset_adjoin
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
T : Subalgebra R B
hS : FG S
hT : FG T
⊢ FG (Subalgebra.prod S T)
[PROOFSTEP]
obtain ⟨s, hs⟩ := fg_def.1 hS
[GOAL]
case intro
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
T : Subalgebra R B
hS : FG S
hT : FG T
s : Set A
hs : Set.Finite s ∧ Algebra.adjoin R s = S
⊢ FG (Subalgebra.prod S T)
[PROOFSTEP]
obtain ⟨t, ht⟩ := fg_def.1 hT
[GOAL]
case intro.intro
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
T : Subalgebra R B
hS : FG S
hT : FG T
s : Set A
hs : Set.Finite s ∧ Algebra.adjoin R s = S
t : Set B
ht : Set.Finite t ∧ Algebra.adjoin R t = T
⊢ FG (Subalgebra.prod S T)
[PROOFSTEP]
rw [← hs.2, ← ht.2]
[GOAL]
case intro.intro
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
T : Subalgebra R B
hS : FG S
hT : FG T
s : Set A
hs : Set.Finite s ∧ Algebra.adjoin R s = S
t : Set B
ht : Set.Finite t ∧ Algebra.adjoin R t = T
⊢ FG (Subalgebra.prod (Algebra.adjoin R s) (Algebra.adjoin R t))
[PROOFSTEP]
exact
  fg_def.2
    ⟨LinearMap.inl R A B '' (s ∪ {1}) ∪ LinearMap.inr R A B '' (t ∪ {1}),
      Set.Finite.union (Set.Finite.image _ (Set.Finite.union hs.1 (Set.finite_singleton _)))
        (Set.Finite.image _ (Set.Finite.union ht.1 (Set.finite_singleton _))),
      Algebra.adjoin_inl_union_inr_eq_prod R s t⟩
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
f : A →ₐ[R] B
hs✝ : FG S
s : Finset A
hs : Algebra.adjoin R ↑s = S
⊢ Algebra.adjoin R ↑(Finset.image (↑f) s) = Subalgebra.map f S
[PROOFSTEP]
rw [Finset.coe_image, Algebra.adjoin_image, hs]
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
f : A →ₐ[R] B
hf : Function.Injective ↑f
hs✝ : FG (map f S)
s : Finset B
hs : Algebra.adjoin R ↑s = map f S
⊢ map f
      (Algebra.adjoin R
        ↑(Finset.preimage s ↑f
            (_ : ∀ (x : A), x ∈ ↑f ⁻¹' ↑s → ∀ (x_2 : A), x_2 ∈ ↑f ⁻¹' ↑s → ↑f x = ↑f x_2 → x = x_2))) =
    map f S
[PROOFSTEP]
rw [← Algebra.adjoin_image, Finset.coe_preimage, Set.image_preimage_eq_of_subset, hs]
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
f : A →ₐ[R] B
hf : Function.Injective ↑f
hs✝ : FG (map f S)
s : Finset B
hs : Algebra.adjoin R ↑s = map f S
⊢ ↑s ⊆ Set.range ↑f
[PROOFSTEP]
rw [← AlgHom.coe_range, ← Algebra.adjoin_le_iff, hs, ← Algebra.map_top]
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
f : A →ₐ[R] B
hf : Function.Injective ↑f
hs✝ : FG (map f S)
s : Finset B
hs : Algebra.adjoin R ↑s = map f S
⊢ map f S ≤ map f ⊤
[PROOFSTEP]
exact map_mono le_top
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
h : FG ⊤
⊢ FG S
[PROOFSTEP]
rw [← S.range_val, ← Algebra.map_top]
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
h : FG ⊤
⊢ FG (map (val S) ⊤)
[PROOFSTEP]
exact FG.map _ h
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
h : FG S
⊢ FG (map (val S) ⊤)
[PROOFSTEP]
rw [Algebra.map_top, range_val]
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
h : FG S
⊢ FG S
[PROOFSTEP]
exact h
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
inst✝ : IsNoetherian R A
P : Subalgebra R A → Prop
base : P ⊥
ih : ∀ (S : Subalgebra R A) (x : A), P S → P (Algebra.adjoin R (insert x ↑S))
S : Subalgebra R A
⊢ P S
[PROOFSTEP]
classical
obtain ⟨t, rfl⟩ := S.fg_of_noetherian
refine' Finset.induction_on t _ _
· simpa using base
intro x t _ h
rw [Finset.coe_insert]
simpa only [Algebra.adjoin_insert_adjoin] using ih _ x h
[GOAL]
R : Type u
A : Type v
B : Type w
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
inst✝ : IsNoetherian R A
P : Subalgebra R A → Prop
base : P ⊥
ih : ∀ (S : Subalgebra R A) (x : A), P S → P (Algebra.adjoin R (insert x ↑S))
S : Subalgebra R A
⊢ P S
[PROOFSTEP]
obtain ⟨t, rfl⟩ := S.fg_of_noetherian
[GOAL]
case intro
R : Type u
A : Type v
B : Type w
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
inst✝ : IsNoetherian R A
P : Subalgebra R A → Prop
base : P ⊥
ih : ∀ (S : Subalgebra R A) (x : A), P S → P (Algebra.adjoin R (insert x ↑S))
t : Finset A
⊢ P (Algebra.adjoin R ↑t)
[PROOFSTEP]
refine' Finset.induction_on t _ _
[GOAL]
case intro.refine'_1
R : Type u
A : Type v
B : Type w
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
inst✝ : IsNoetherian R A
P : Subalgebra R A → Prop
base : P ⊥
ih : ∀ (S : Subalgebra R A) (x : A), P S → P (Algebra.adjoin R (insert x ↑S))
t : Finset A
⊢ P (Algebra.adjoin R ↑∅)
[PROOFSTEP]
simpa using base
[GOAL]
case intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
inst✝ : IsNoetherian R A
P : Subalgebra R A → Prop
base : P ⊥
ih : ∀ (S : Subalgebra R A) (x : A), P S → P (Algebra.adjoin R (insert x ↑S))
t : Finset A
⊢ ∀ ⦃a : A⦄ {s : Finset A}, ¬a ∈ s → P (Algebra.adjoin R ↑s) → P (Algebra.adjoin R ↑(insert a s))
[PROOFSTEP]
intro x t _ h
[GOAL]
case intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
inst✝ : IsNoetherian R A
P : Subalgebra R A → Prop
base : P ⊥
ih : ∀ (S : Subalgebra R A) (x : A), P S → P (Algebra.adjoin R (insert x ↑S))
t✝ : Finset A
x : A
t : Finset A
a✝ : ¬x ∈ t
h : P (Algebra.adjoin R ↑t)
⊢ P (Algebra.adjoin R ↑(insert x t))
[PROOFSTEP]
rw [Finset.coe_insert]
[GOAL]
case intro.refine'_2
R : Type u
A : Type v
B : Type w
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
inst✝ : IsNoetherian R A
P : Subalgebra R A → Prop
base : P ⊥
ih : ∀ (S : Subalgebra R A) (x : A), P S → P (Algebra.adjoin R (insert x ↑S))
t✝ : Finset A
x : A
t : Finset A
a✝ : ¬x ∈ t
h : P (Algebra.adjoin R ↑t)
⊢ P (Algebra.adjoin R (insert x ↑t))
[PROOFSTEP]
simpa only [Algebra.adjoin_insert_adjoin] using ih _ x h


[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
⊢ (∑ i in s, f i) • ∑ i in s, g i ≤ card s • ∑ i in s, f i • g i
[PROOFSTEP]
classical
obtain ⟨σ, hσ, hs⟩ := s.countable_toSet.exists_cycleOn
rw [← card_range s.card, sum_smul_sum_eq_sum_perm hσ]
exact
  sum_le_card_nsmul _ _ _ fun n _ =>
    hfg.sum_smul_comp_perm_le_sum_smul fun x hx => hs fun h => hx <| IsFixedPt.perm_pow h _
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
⊢ (∑ i in s, f i) • ∑ i in s, g i ≤ card s • ∑ i in s, f i • g i
[PROOFSTEP]
obtain ⟨σ, hσ, hs⟩ := s.countable_toSet.exists_cycleOn
[GOAL]
case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ✝ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
σ : Perm ι
hσ : IsCycleOn σ ↑s
hs : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ (∑ i in s, f i) • ∑ i in s, g i ≤ card s • ∑ i in s, f i • g i
[PROOFSTEP]
rw [← card_range s.card, sum_smul_sum_eq_sum_perm hσ]
[GOAL]
case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ✝ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
σ : Perm ι
hσ : IsCycleOn σ ↑s
hs : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ k in range (card s), ∑ i in s, f i • g (↑(σ ^ k) i) ≤ card (range (card s)) • ∑ i in s, f i • g i
[PROOFSTEP]
exact
  sum_le_card_nsmul _ _ _ fun n _ =>
    hfg.sum_smul_comp_perm_le_sum_smul fun x hx => hs fun h => hx <| IsFixedPt.perm_pow h _
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : AntivaryOn f g ↑s
⊢ card s • ∑ i in s, f i • g i ≤ (∑ i in s, f i) • ∑ i in s, g i
[PROOFSTEP]
refine hfg.dual_right.sum_smul_sum_le_card_smul_sum
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : LinearOrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
inst✝ : Fintype ι
hfg : Antivary f g
⊢ Fintype.card ι • ∑ i : ι, f i • g i ≤ (∑ i : ι, f i) • ∑ i : ι, g i
[PROOFSTEP]
refine (hfg.dual_right.monovaryOn _).sum_smul_sum_le_card_smul_sum
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedRing α
s : Finset ι
σ : Perm ι
f g : ι → α
hfg : MonovaryOn f g ↑s
⊢ (∑ i in s, f i) * ∑ i in s, g i ≤ ↑(card s) * ∑ i in s, f i * g i
[PROOFSTEP]
rw [← nsmul_eq_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedRing α
s : Finset ι
σ : Perm ι
f g : ι → α
hfg : MonovaryOn f g ↑s
⊢ (∑ i in s, f i) * ∑ i in s, g i ≤ card s • ∑ i in s, f i * g i
[PROOFSTEP]
exact hfg.sum_smul_sum_le_card_smul_sum
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedRing α
s : Finset ι
σ : Perm ι
f g : ι → α
hfg : AntivaryOn f g ↑s
⊢ ↑(card s) * ∑ i in s, f i * g i ≤ (∑ i in s, f i) * ∑ i in s, g i
[PROOFSTEP]
rw [← nsmul_eq_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedRing α
s : Finset ι
σ : Perm ι
f g : ι → α
hfg : AntivaryOn f g ↑s
⊢ card s • ∑ i in s, f i * g i ≤ (∑ i in s, f i) * ∑ i in s, g i
[PROOFSTEP]
exact hfg.card_smul_sum_le_sum_smul_sum
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedRing α
s : Finset ι
σ : Perm ι
f g : ι → α
⊢ (∑ i in s, f i) ^ 2 ≤ ↑(card s) * ∑ i in s, f i ^ 2
[PROOFSTEP]
simp_rw [sq]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedRing α
s : Finset ι
σ : Perm ι
f g : ι → α
⊢ (∑ i in s, f i) * ∑ i in s, f i ≤ ↑(card s) * ∑ x in s, f x * f x
[PROOFSTEP]
exact (monovaryOn_self _ _).sum_mul_sum_le_card_mul_sum
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
s : Finset ι
f : ι → α
⊢ ((∑ i in s, f i) / ↑(card s)) ^ 2 ≤ (∑ i in s, f i ^ 2) / ↑(card s)
[PROOFSTEP]
obtain rfl | hs := s.eq_empty_or_nonempty
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
f : ι → α
⊢ ((∑ i in ∅, f i) / ↑(card ∅)) ^ 2 ≤ (∑ i in ∅, f i ^ 2) / ↑(card ∅)
[PROOFSTEP]
simp
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
s : Finset ι
f : ι → α
hs : Finset.Nonempty s
⊢ ((∑ i in s, f i) / ↑(card s)) ^ 2 ≤ (∑ i in s, f i ^ 2) / ↑(card s)
[PROOFSTEP]
rw [← card_pos, ← @Nat.cast_pos α] at hs
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
s : Finset ι
f : ι → α
hs : 0 < ↑(card s)
⊢ ((∑ i in s, f i) / ↑(card s)) ^ 2 ≤ (∑ i in s, f i ^ 2) / ↑(card s)
[PROOFSTEP]
rw [div_pow, div_le_div_iff (sq_pos_of_ne_zero _ hs.ne') hs, sq (s.card : α), mul_left_comm, ← mul_assoc]
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
s : Finset ι
f : ι → α
hs : 0 < ↑(card s)
⊢ (∑ i in s, f i) ^ 2 * ↑(card s) ≤ (↑(card s) * ∑ i in s, f i ^ 2) * ↑(card s)
[PROOFSTEP]
exact mul_le_mul_of_nonneg_right sq_sum_le_card_mul_sum_sq hs.le


[GOAL]
C : Type u₁
D : Type u₂
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : Category.{v₂, u₂} D
inst✝³ : Preadditive C
inst✝² : Preadditive D
F : C ⥤ D
inst✝¹ : Additive F
J✝ : Type
inst✝ : Fintype J✝
f✝ : J✝ → C
b✝ : Bicone f✝
hb : Bicone.IsBilimit b✝
⊢ (Finset.sum Finset.univ fun j => Bicone.π (mapBicone F b✝) j ≫ Bicone.ι (mapBicone F b✝) j) = 𝟙 (mapBicone F b✝).pt
[PROOFSTEP]
simp_rw [F.mapBicone_π, F.mapBicone_ι, ← F.map_comp]
[GOAL]
C : Type u₁
D : Type u₂
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : Category.{v₂, u₂} D
inst✝³ : Preadditive C
inst✝² : Preadditive D
F : C ⥤ D
inst✝¹ : Additive F
J✝ : Type
inst✝ : Fintype J✝
f✝ : J✝ → C
b✝ : Bicone f✝
hb : Bicone.IsBilimit b✝
⊢ (Finset.sum Finset.univ fun x => F.map (Bicone.π b✝ x ≫ Bicone.ι b✝ x)) = 𝟙 (mapBicone F b✝).pt
[PROOFSTEP]
erw [← F.map_sum, ← F.map_id, IsBilimit.total hb]
[GOAL]
C : Type u₁
D : Type u₂
inst✝⁶ : Category.{v₁, u₁} C
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : Preadditive C
inst✝³ : Preadditive D
F : C ⥤ D
inst✝² : HasBinaryBiproducts C
inst✝¹ : PreservesZeroMorphisms F
inst✝ : PreservesBinaryBiproducts F
X Y : C
f g : X ⟶ Y
⊢ F.map (f + g) = F.map f + F.map g
[PROOFSTEP]
rw [biprod.add_eq_lift_id_desc, F.map_comp, ← biprod.lift_mapBiprod, ← biprod.mapBiprod_hom_desc, Category.assoc,
  Iso.inv_hom_id_assoc, F.map_id, biprod.add_eq_lift_id_desc]
[GOAL]
C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.46335, u_1} C
inst✝³ : Category.{?u.46339, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
e : C ≌ D
inst✝ : Functor.Additive e.functor
f g : D
f✝ g✝ : f ⟶ g
⊢ e.functor.map (e.inverse.map (f✝ + g✝)) = e.functor.map (e.inverse.map f✝ + e.inverse.map g✝)
[PROOFSTEP]
simp