Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2018 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes, Yury Kudryashov, Yaël Dillies

! This file was ported from Lean 3 source module algebra.module.big_operators
! leanprover-community/mathlib commit 509de852e1de55e1efa8eacfa11df0823f26f226
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Module.Basic
import Mathlib.GroupTheory.GroupAction.BigOperators

/-!
# Finite sums over modules over a ring
-/

open BigOperators

variable {
α: Type ?u.2
α
β: Type ?u.5
β
R: Type ?u.20513
R
M: Type ?u.11
M
ι: Type ?u.14
ι
:
Type _: Type (?u.38169+1)
Type _
} section AddCommMonoid variable [
Semiring: Type ?u.32 → Type ?u.32
Semiring
R: Type ?u.78
R
] [
AddCommMonoid: Type ?u.10850 → Type ?u.10850
AddCommMonoid
M: Type ?u.26
M
] [
Module: (R : Type ?u.39) → (M : Type ?u.38) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.39?u.38)
Module
R: Type ?u.78
R
M: Type ?u.81
M
] (
r: R
r
s: R
s
:
R: Type ?u.20513
R
) (
x: M
x
y: M
y
:
M: Type ?u.26
M
) theorem
List.sum_smul: ∀ {l : List R} {x : M}, sum l x = sum (map (fun r => r x) l)
List.sum_smul
{
l: List R
l
:
List: Type ?u.127 → Type ?u.127
List
R: Type ?u.78
R
} {
x: M
x
:
M: Type ?u.81
M
} :
l: List R
l
.
sum: {α : Type ?u.141} → [inst : Add α] → [inst : Zero α] → List αα
sum
x: M
x
= (
l: List R
l
.
map: {α : Type ?u.1243} → {β : Type ?u.1242} → (αβ) → List αList β
map
fun
r: ?m.1251
r
r: ?m.1251
r
x: M
x
).
sum: {α : Type ?u.1357} → [inst : Add α] → [inst : Zero α] → List αα
sum
:= ((
smulAddHom: (R : Type ?u.2850) → (M : Type ?u.2849) → [inst : Semiring R] → [inst_1 : AddCommMonoid M] → [inst_2 : Module R M] → R →+ M →+ M
smulAddHom
R: Type ?u.78
R
M: Type ?u.81
M
).
flip: {M : Type ?u.2886} → {N : Type ?u.2885} → {P : Type ?u.2884} → {mM : AddZeroClass M} → {mN : AddZeroClass N} → {mP : AddCommMonoid P} → (M →+ N →+ P) → N →+ M →+ P
flip
x: M
x
).
map_list_sum: ∀ {M : Type ?u.10260} {N : Type ?u.10261} [inst : AddMonoid M] [inst_1 : AddMonoid N] (f : M →+ N) (l : List M), f (sum l) = sum (map (f) l)
map_list_sum
l: List R
l
#align list.sum_smul
List.sum_smul: ∀ {R : Type u_1} {M : Type u_2} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M] {l : List R} {x : M}, List.sum l x = List.sum (List.map (fun r => r x) l)
List.sum_smul
theorem
Multiset.sum_smul: ∀ {R : Type u_1} {M : Type u_2} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M] {l : Multiset R} {x : M}, sum l x = sum (map (fun r => r x) l)
Multiset.sum_smul
{l :
Multiset: Type ?u.10887 → Type ?u.10887
Multiset
R: Type ?u.10838
R
} {
x: M
x
:
M: Type ?u.10841
M
} : l.
sum: {α : Type ?u.10901} → [inst : AddCommMonoid α] → Multiset αα
sum
x: M
x
= (l.
map: {α : Type ?u.12009} → {β : Type ?u.12008} → (αβ) → Multiset αMultiset β
map
fun
r: ?m.12017
r
r: ?m.12017
r
x: M
x
).
sum: {α : Type ?u.12123} → [inst : AddCommMonoid α] → Multiset αα
sum
:= ((
smulAddHom: (R : Type ?u.12783) → (M : Type ?u.12782) → [inst : Semiring R] → [inst_1 : AddCommMonoid M] → [inst_2 : Module R M] → R →+ M →+ M
smulAddHom
R: Type ?u.10838
R
M: Type ?u.10841
M
).
flip: {M : Type ?u.12819} → {N : Type ?u.12818} → {P : Type ?u.12817} → {mM : AddZeroClass M} → {mN : AddZeroClass N} → {mP : AddCommMonoid P} → (M →+ N →+ P) → N →+ M →+ P
flip
x: M
x
).
map_multiset_sum: ∀ {α : Type ?u.20193} {β : Type ?u.20194} [inst : AddCommMonoid α] [inst_1 : AddCommMonoid β] (f : α →+ β) (s : Multiset α), f (sum s) = sum (map (f) s)
map_multiset_sum
l #align multiset.sum_smul
Multiset.sum_smul: ∀ {R : Type u_1} {M : Type u_2} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M] {l : Multiset R} {x : M}, Multiset.sum l x = Multiset.sum (Multiset.map (fun r => r x) l)
Multiset.sum_smul
theorem
Multiset.sum_smul_sum: ∀ {s : Multiset R} {t : Multiset M}, sum s sum t = sum (map (fun p => p.fst p.snd) (s ×ˢ t))
Multiset.sum_smul_sum
{s :
Multiset: Type ?u.20562 → Type ?u.20562
Multiset
R: Type ?u.20513
R
} {t :
Multiset: Type ?u.20565 → Type ?u.20565
Multiset
M: Type ?u.20516
M
} : s.
sum: {α : Type ?u.20577} → [inst : AddCommMonoid α] → Multiset αα
sum
t.
sum: {α : Type ?u.20859} → [inst : AddCommMonoid α] → Multiset αα
sum
= ((s ×ˢ t).
map: {α : Type ?u.21722} → {β : Type ?u.21721} → (αβ) → Multiset αMultiset β
map
fun
p: R × M
p
:
R: Type ?u.20513
R
×
M: Type ?u.20516
M
p: R × M
p
.
fst: {α : Type ?u.21742} → {β : Type ?u.21741} → α × βα
fst
p: R × M
p
.
snd: {α : Type ?u.21748} → {β : Type ?u.21747} → α × ββ
snd
).
sum: {α : Type ?u.22600} → [inst : AddCommMonoid α] → Multiset αα
sum
:=

Goals accomplished! 🐙
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

s: Multiset R

t: Multiset M


sum s sum t = sum (map (fun p => p.fst p.snd) (s ×ˢ t))
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s: R

x, y: M

t: Multiset M


empty
sum 0 sum t = sum (map (fun p => p.fst p.snd) (0 ×ˢ t))
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

t: Multiset M

a: R

s: Multiset R

ih: sum s sum t = sum (map (fun p => p.fst p.snd) (s ×ˢ t))


cons
sum (a ::ₘ s) sum t = sum (map (fun p => p.fst p.snd) ((a ::ₘ s) ×ˢ t))
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

s: Multiset R

t: Multiset M


sum s sum t = sum (map (fun p => p.fst p.snd) (s ×ˢ t))
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s: R

x, y: M

t: Multiset M


empty
sum 0 sum t = sum (map (fun p => p.fst p.snd) (0 ×ˢ t))
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s: R

x, y: M

t: Multiset M


empty
sum 0 sum t = sum (map (fun p => p.fst p.snd) (0 ×ˢ t))
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

t: Multiset M

a: R

s: Multiset R

ih: sum s sum t = sum (map (fun p => p.fst p.snd) (s ×ˢ t))


cons
sum (a ::ₘ s) sum t = sum (map (fun p => p.fst p.snd) ((a ::ₘ s) ×ˢ t))

Goals accomplished! 🐙
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

s: Multiset R

t: Multiset M


sum s sum t = sum (map (fun p => p.fst p.snd) (s ×ˢ t))
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

t: Multiset M

a: R

s: Multiset R

ih: sum s sum t = sum (map (fun p => p.fst p.snd) (s ×ˢ t))


cons
sum (a ::ₘ s) sum t = sum (map (fun p => p.fst p.snd) ((a ::ₘ s) ×ˢ t))
α: Type ?u.20507

β: Type ?u.20510

R: Type u_1

M: Type u_2

ι: Type ?u.20519

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

t: Multiset M

a: R

s: Multiset R

ih: sum s sum t = sum (map (fun p => p.fst p.snd) (s ×ˢ t))


cons
sum (a ::ₘ s) sum t = sum (map (fun p => p.fst p.snd) ((a ::ₘ s) ×ˢ t))

Goals accomplished! 🐙
#align multiset.sum_smul_sum
Multiset.sum_smul_sum: ∀ {R : Type u_1} {M : Type u_2} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M] {s : Multiset R} {t : Multiset M}, Multiset.sum s Multiset.sum t = Multiset.sum (Multiset.map (fun p => p.fst p.snd) (s ×ˢ t))
Multiset.sum_smul_sum
theorem
Finset.sum_smul: ∀ {R : Type u_3} {M : Type u_2} {ι : Type u_1} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M] {f : ιR} {s : Finset ι} {x : M}, (∑ i in s, f i) x = ∑ i in s, f i x
Finset.sum_smul
{
f: ιR
f
:
ι: Type ?u.26059
ι
R: Type ?u.26053
R
} {
s: Finset ι
s
:
Finset: Type ?u.26106 → Type ?u.26106
Finset
ι: Type ?u.26059
ι
} {
x: M
x
:
M: Type ?u.26056
M
} : (∑
i: ?m.26153
i
in
s: Finset ι
s
,
f: ιR
f
i: ?m.26153
i
) •
x: M
x
= ∑
i: ?m.27264
i
in
s: Finset ι
s
,
f: ιR
f
i: ?m.27264
i
x: M
x
:= ((
smulAddHom: (R : Type ?u.27903) → (M : Type ?u.27902) → [inst : Semiring R] → [inst_1 : AddCommMonoid M] → [inst_2 : Module R M] → R →+ M →+ M
smulAddHom
R: Type ?u.26053
R
M: Type ?u.26056
M
).
flip: {M : Type ?u.27939} → {N : Type ?u.27938} → {P : Type ?u.27937} → {mM : AddZeroClass M} → {mN : AddZeroClass N} → {mP : AddCommMonoid P} → (M →+ N →+ P) → N →+ M →+ P
flip
x: M
x
).
map_sum: ∀ {β : Type ?u.35307} {α : Type ?u.35306} {γ : Type ?u.35305} [inst : AddCommMonoid β] [inst_1 : AddCommMonoid γ] (g : β →+ γ) (f : αβ) (s : Finset α), g (∑ x in s, f x) = ∑ x in s, g (f x)
map_sum
f: ιR
f
s: Finset ι
s
#align finset.sum_smul
Finset.sum_smul: ∀ {R : Type u_3} {M : Type u_2} {ι : Type u_1} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M] {f : ιR} {s : Finset ι} {x : M}, (∑ i in s, f i) x = ∑ i in s, f i x
Finset.sum_smul
theorem
Finset.sum_smul_sum: ∀ {α : Type u_1} {β : Type u_2} {R : Type u_4} {M : Type u_3} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M] {f : αR} {g : βM} {s : Finset α} {t : Finset β}, (∑ i in s, f i) ∑ i in t, g i = ∑ p in s ×ˢ t, f p.fst g p.snd
Finset.sum_smul_sum
{
f: αR
f
:
α: Type ?u.35626
α
R: Type ?u.35632
R
} {
g: βM
g
:
β: Type ?u.35629
β
M: Type ?u.35635
M
} {
s: Finset α
s
:
Finset: Type ?u.35689 → Type ?u.35689
Finset
α: Type ?u.35626
α
} {
t: Finset β
t
:
Finset: Type ?u.35692 → Type ?u.35692
Finset
β: Type ?u.35629
β
} : ((∑
i: ?m.35737
i
in
s: Finset α
s
,
f: αR
f
i: ?m.35737
i
) • ∑
i: ?m.36049
i
in
t: Finset β
t
,
g: βM
g
i: ?m.36049
i
) = ∑
p: ?m.36918
p
in
s: Finset α
s
×ˢ
t: Finset β
t
,
f: αR
f
p: ?m.36918
p
.
fst: {α : Type ?u.36929} → {β : Type ?u.36928} → α × βα
fst
g: βM
g
p: ?m.36918
p
.
snd: {α : Type ?u.36935} → {β : Type ?u.36934} → α × ββ
snd
:=

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


(∑ i in s, f i) ∑ i in t, g i = ∑ p in s ×ˢ t, f p.fst g p.snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


(∑ i in s, f i) ∑ i in t, g i = ∑ p in s ×ˢ t, f p.fst g p.snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


(∑ i in s, f i) ∑ i in t, g i = ∑ x in s, ∑ y in t, f (x, y).fst g (x, y).snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


(∑ i in s, f i) ∑ i in t, g i = ∑ p in s ×ˢ t, f p.fst g p.snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


∑ i in s, f i ∑ i in t, g i = ∑ x in s, ∑ y in t, f (x, y).fst g (x, y).snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


(∑ i in s, f i) ∑ i in t, g i = ∑ p in s ×ˢ t, f p.fst g p.snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


Finset.sum s ?m.37872 = ∑ x in s, ∑ y in t, f (x, y).fst g (x, y).snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


∀ (x : α), x sf x ∑ i in t, g i = ?m.37872 x
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


αM
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


∀ (x : α), x sf x ∑ i in t, g i = ∑ y in t, f (x, y).fst g (x, y).snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


(∑ i in s, f i) ∑ i in t, g i = ∑ p in s ×ˢ t, f p.fst g p.snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β

x✝: α

a✝: x✝ s


f x✝ ∑ i in t, g i = ∑ y in t, f (x✝, y).fst g (x✝, y).snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β


(∑ i in s, f i) ∑ i in t, g i = ∑ p in s ×ˢ t, f p.fst g p.snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β

x✝: α

a✝: x✝ s


f x✝ ∑ i in t, g i = ∑ y in t, f (x✝, y).fst g (x✝, y).snd
α: Type u_1

β: Type u_2

R: Type u_4

M: Type u_3

ι: Type ?u.35638

inst✝²: Semiring R

inst✝¹: AddCommMonoid M

inst✝: Module R M

r, s✝: R

x, y: M

f: αR

g: βM

s: Finset α

t: Finset β

x✝: α

a✝: x✝ s


∑ x in t, f x✝ g x = ∑ y in t, f (x✝, y).fst g (x✝, y).snd

Goals accomplished! 🐙
#align finset.sum_smul_sum
Finset.sum_smul_sum: ∀ {α : Type u_1} {β : Type u_2} {R : Type u_4} {M : Type u_3} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M] {f : αR} {g : βM} {s : Finset α} {t : Finset β}, (∑ i in s, f i) ∑ i in t, g i = ∑ p in s ×ˢ t, f p.fst g p.snd
Finset.sum_smul_sum
end AddCommMonoid theorem
Finset.cast_card: ∀ {α : Type u_2} {R : Type u_1} [inst : CommSemiring R] (s : Finset α), ↑(card s) = ∑ a in s, 1
Finset.cast_card
[
CommSemiring: Type ?u.38178 → Type ?u.38178
CommSemiring
R: Type ?u.38169
R
] (
s: Finset α
s
:
Finset: Type ?u.38181 → Type ?u.38181
Finset
α: Type ?u.38163
α
) : (
s: Finset α
s
.
card: {α : Type ?u.38186} → Finset α
card
:
R: Type ?u.38169
R
) = ∑
a: ?m.38391
a
in
s: Finset α
s
,
1: ?m.38394
1
:=

Goals accomplished! 🐙
α: Type u_2

β: Type ?u.38166

R: Type u_1

M: Type ?u.38172

ι: Type ?u.38175

inst✝: CommSemiring R

s: Finset α


↑(card s) = ∑ a in s, 1
α: Type u_2

β: Type ?u.38166

R: Type u_1

M: Type ?u.38172

ι: Type ?u.38175

inst✝: CommSemiring R

s: Finset α


↑(card s) = ∑ a in s, 1
α: Type u_2

β: Type ?u.38166

R: Type u_1

M: Type ?u.38172

ι: Type ?u.38175

inst✝: CommSemiring R

s: Finset α


↑(card s) = card s 1
α: Type u_2

β: Type ?u.38166

R: Type u_1

M: Type ?u.38172

ι: Type ?u.38175

inst✝: CommSemiring R

s: Finset α


↑(card s) = ∑ a in s, 1
α: Type u_2

β: Type ?u.38166

R: Type u_1

M: Type ?u.38172

ι: Type ?u.38175

inst✝: CommSemiring R

s: Finset α


↑(card s) = ↑(card s)

Goals accomplished! 🐙
#align finset.cast_card
Finset.cast_card: ∀ {α : Type u_2} {R : Type u_1} [inst : CommSemiring R] (s : Finset α), ↑(Finset.card s) = ∑ a in s, 1
Finset.cast_card