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 Johannes HΓΆlzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes HΓΆlzl, Callum Sutton, Yury Kudryashov

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

/-!
# Results about mapping big operators across ring equivalences
-/


namespace RingEquiv

open BigOperators

variable {
Ξ±: Type ?u.28950
Ξ±
R: Type ?u.14
R
S: Type ?u.8
S
:
Type _: Type (?u.58338+1)
Type _
} protected theorem
map_list_prod: βˆ€ [inst : Semiring R] [inst_1 : Semiring S] (f : R ≃+* S) (l : List R), ↑f (List.prod l) = List.prod (List.map (↑f) l)
map_list_prod
[
Semiring: Type ?u.20 β†’ Type ?u.20
Semiring
R: Type ?u.14
R
] [
Semiring: Type ?u.23 β†’ Type ?u.23
Semiring
S: Type ?u.17
S
] (
f: R ≃+* S
f
:
R: Type ?u.14
R
≃+*
S: Type ?u.17
S
) (
l: List R
l
:
List: Type ?u.430 β†’ Type ?u.430
List
R: Type ?u.14
R
) :
f: R ≃+* S
f
l: List R
l
.
prod: {Ξ± : Type ?u.7187} β†’ [inst : Mul Ξ±] β†’ [inst : One Ξ±] β†’ List Ξ± β†’ Ξ±
prod
= (
l: List R
l
.
map: {Ξ± : Type ?u.7221} β†’ {Ξ² : Type ?u.7220} β†’ (Ξ± β†’ Ξ²) β†’ List Ξ± β†’ List Ξ²
map
f: R ≃+* S
f
).
prod: {Ξ± : Type ?u.13954} β†’ [inst : Mul Ξ±] β†’ [inst : One Ξ±] β†’ List Ξ± β†’ Ξ±
prod
:=
map_list_prod: βˆ€ {M : Type ?u.13995} {N : Type ?u.13996} [inst : Monoid M] [inst_1 : Monoid N] {F : Type ?u.13994} [inst_2 : MonoidHomClass F M N] (f : F) (l : List M), ↑f (List.prod l) = List.prod (List.map (↑f) l)
map_list_prod
f: R ≃+* S
f
l: List R
l
#align ring_equiv.map_list_prod
RingEquiv.map_list_prod: βˆ€ {R : Type u_1} {S : Type u_2} [inst : Semiring R] [inst_1 : Semiring S] (f : R ≃+* S) (l : List R), ↑f (List.prod l) = List.prod (List.map (↑f) l)
RingEquiv.map_list_prod
protected theorem
map_list_sum: βˆ€ {R : Type u_1} {S : Type u_2} [inst : NonAssocSemiring R] [inst_1 : NonAssocSemiring S] (f : R ≃+* S) (l : List R), ↑f (List.sum l) = List.sum (List.map (↑f) l)
map_list_sum
[
NonAssocSemiring: Type ?u.14267 β†’ Type ?u.14267
NonAssocSemiring
R: Type ?u.14261
R
] [
NonAssocSemiring: Type ?u.14270 β†’ Type ?u.14270
NonAssocSemiring
S: Type ?u.14264
S
] (
f: R ≃+* S
f
:
R: Type ?u.14261
R
≃+*
S: Type ?u.14264
S
) (
l: List R
l
:
List: Type ?u.14645 β†’ Type ?u.14645
List
R: Type ?u.14261
R
) :
f: R ≃+* S
f
l: List R
l
.
sum: {Ξ± : Type ?u.21402} β†’ [inst : Add Ξ±] β†’ [inst : Zero Ξ±] β†’ List Ξ± β†’ Ξ±
sum
= (
l: List R
l
.
map: {Ξ± : Type ?u.21620} β†’ {Ξ² : Type ?u.21619} β†’ (Ξ± β†’ Ξ²) β†’ List Ξ± β†’ List Ξ²
map
f: R ≃+* S
f
).
sum: {Ξ± : Type ?u.28353} β†’ [inst : Add Ξ±] β†’ [inst : Zero Ξ±] β†’ List Ξ± β†’ Ξ±
sum
:=
map_list_sum: βˆ€ {M : Type ?u.28578} {N : Type ?u.28579} [inst : AddMonoid M] [inst_1 : AddMonoid N] {F : Type ?u.28577} [inst_2 : AddMonoidHomClass F M N] (f : F) (l : List M), ↑f (List.sum l) = List.sum (List.map (↑f) l)
map_list_sum
f: R ≃+* S
f
l: List R
l
#align ring_equiv.map_list_sum
RingEquiv.map_list_sum: βˆ€ {R : Type u_1} {S : Type u_2} [inst : NonAssocSemiring R] [inst_1 : NonAssocSemiring S] (f : R ≃+* S) (l : List R), ↑f (List.sum l) = List.sum (List.map (↑f) l)
RingEquiv.map_list_sum
/-- An isomorphism into the opposite ring acts on the product by acting on the reversed elements -/ protected theorem
unop_map_list_prod: βˆ€ {R : Type u_1} {S : Type u_2} [inst : Semiring R] [inst_1 : Semiring S] (f : R ≃+* Sᡐᡒᡖ) (l : List R), MulOpposite.unop (↑f (List.prod l)) = List.prod (List.reverse (List.map (MulOpposite.unop ∘ ↑f) l))
unop_map_list_prod
[
Semiring: Type ?u.28959 β†’ Type ?u.28959
Semiring
R: Type ?u.28953
R
] [
Semiring: Type ?u.28962 β†’ Type ?u.28962
Semiring
S: Type ?u.28956
S
] (f :
R: Type ?u.28953
R
≃+*
S: Type ?u.28956
S
ᡐᡒᡖ) (
l: List R
l
:
List: Type ?u.29387 β†’ Type ?u.29387
List
R: Type ?u.28953
R
) :
MulOpposite.unop: {Ξ± : Type ?u.29391} β†’ αᡐᡒᡖ β†’ Ξ±
MulOpposite.unop
(f
l: List R
l
.
prod: {Ξ± : Type ?u.36146} β†’ [inst : Mul Ξ±] β†’ [inst : One Ξ±] β†’ List Ξ± β†’ Ξ±
prod
) = (
l: List R
l
.
map: {Ξ± : Type ?u.36182} β†’ {Ξ² : Type ?u.36181} β†’ (Ξ± β†’ Ξ²) β†’ List Ξ± β†’ List Ξ²
map
(
MulOpposite.unop: {Ξ± : Type ?u.36197} β†’ αᡐᡒᡖ β†’ Ξ±
MulOpposite.unop
∘ f)).
reverse: {Ξ± : Type ?u.42931} β†’ List Ξ± β†’ List Ξ±
reverse
.
prod: {Ξ± : Type ?u.42934} β†’ [inst : Mul Ξ±] β†’ [inst : One Ξ±] β†’ List Ξ± β†’ Ξ±
prod
:=
unop_map_list_prod: βˆ€ {M : Type ?u.43057} {N : Type ?u.43058} [inst : Monoid M] [inst_1 : Monoid N] {F : Type ?u.43056} [inst_2 : MonoidHomClass F M Nᡐᡒᡖ] (f : F) (l : List M), MulOpposite.unop (↑f (List.prod l)) = List.prod (List.reverse (List.map (MulOpposite.unop ∘ ↑f) l))
unop_map_list_prod
f
l: List R
l
#align ring_equiv.unop_map_list_prod
RingEquiv.unop_map_list_prod: βˆ€ {R : Type u_1} {S : Type u_2} [inst : Semiring R] [inst_1 : Semiring S] (f : R ≃+* Sᡐᡒᡖ) (l : List R), MulOpposite.unop (↑f (List.prod l)) = List.prod (List.reverse (List.map (MulOpposite.unop ∘ ↑f) l))
RingEquiv.unop_map_list_prod
protected theorem
map_multiset_prod: βˆ€ {R : Type u_1} {S : Type u_2} [inst : CommSemiring R] [inst_1 : CommSemiring S] (f : R ≃+* S) (s : Multiset R), ↑f (Multiset.prod s) = Multiset.prod (Multiset.map (↑f) s)
map_multiset_prod
[
CommSemiring: Type ?u.43401 β†’ Type ?u.43401
CommSemiring
R: Type ?u.43395
R
] [
CommSemiring: Type ?u.43404 β†’ Type ?u.43404
CommSemiring
S: Type ?u.43398
S
] (
f: R ≃+* S
f
:
R: Type ?u.43395
R
≃+*
S: Type ?u.43398
S
) (s :
Multiset: Type ?u.44047 β†’ Type ?u.44047
Multiset
R: Type ?u.43395
R
) :
f: R ≃+* S
f
s.
prod: {Ξ± : Type ?u.50804} β†’ [inst : CommMonoid Ξ±] β†’ Multiset Ξ± β†’ Ξ±
prod
= (s.
map: {Ξ± : Type ?u.50903} β†’ {Ξ² : Type ?u.50902} β†’ (Ξ± β†’ Ξ²) β†’ Multiset Ξ± β†’ Multiset Ξ²
map
f: R ≃+* S
f
).
prod: {Ξ± : Type ?u.57636} β†’ [inst : CommMonoid Ξ±] β†’ Multiset Ξ± β†’ Ξ±
prod
:=
map_multiset_prod: βˆ€ {Ξ± : Type ?u.57741} {Ξ² : Type ?u.57742} [inst : CommMonoid Ξ±] [inst_1 : CommMonoid Ξ²] {F : Type ?u.57743} [inst_2 : MonoidHomClass F Ξ± Ξ²] (f : F) (s : Multiset Ξ±), ↑f (Multiset.prod s) = Multiset.prod (Multiset.map (↑f) s)
map_multiset_prod
f: R ≃+* S
f
s #align ring_equiv.map_multiset_prod
RingEquiv.map_multiset_prod: βˆ€ {R : Type u_1} {S : Type u_2} [inst : CommSemiring R] [inst_1 : CommSemiring S] (f : R ≃+* S) (s : Multiset R), ↑f (Multiset.prod s) = Multiset.prod (Multiset.map (↑f) s)
RingEquiv.map_multiset_prod
protected theorem
map_multiset_sum: βˆ€ {R : Type u_1} {S : Type u_2} [inst : NonAssocSemiring R] [inst_1 : NonAssocSemiring S] (f : R ≃+* S) (s : Multiset R), ↑f (Multiset.sum s) = Multiset.sum (Multiset.map (↑f) s)
map_multiset_sum
[
NonAssocSemiring: Type ?u.58347 β†’ Type ?u.58347
NonAssocSemiring
R: Type ?u.58341
R
] [
NonAssocSemiring: Type ?u.58350 β†’ Type ?u.58350
NonAssocSemiring
S: Type ?u.58344
S
] (
f: R ≃+* S
f
:
R: Type ?u.58341
R
≃+*
S: Type ?u.58344
S
) (s :
Multiset: Type ?u.58725 β†’ Type ?u.58725
Multiset
R: Type ?u.58341
R
) :
f: R ≃+* S
f
s.
sum: {Ξ± : Type ?u.65482} β†’ [inst : AddCommMonoid Ξ±] β†’ Multiset Ξ± β†’ Ξ±
sum
= (s.
map: {Ξ± : Type ?u.65699} β†’ {Ξ² : Type ?u.65698} β†’ (Ξ± β†’ Ξ²) β†’ Multiset Ξ± β†’ Multiset Ξ²
map
f: R ≃+* S
f
).
sum: {Ξ± : Type ?u.72432} β†’ [inst : AddCommMonoid Ξ±] β†’ Multiset Ξ± β†’ Ξ±
sum
:=
map_multiset_sum: βˆ€ {Ξ± : Type ?u.72655} {Ξ² : Type ?u.72656} [inst : AddCommMonoid Ξ±] [inst_1 : AddCommMonoid Ξ²] {F : Type ?u.72657} [inst_2 : AddMonoidHomClass F Ξ± Ξ²] (f : F) (s : Multiset Ξ±), ↑f (Multiset.sum s) = Multiset.sum (Multiset.map (↑f) s)
map_multiset_sum
f: R ≃+* S
f
s #align ring_equiv.map_multiset_sum
RingEquiv.map_multiset_sum: βˆ€ {R : Type u_1} {S : Type u_2} [inst : NonAssocSemiring R] [inst_1 : NonAssocSemiring S] (f : R ≃+* S) (s : Multiset R), ↑f (Multiset.sum s) = Multiset.sum (Multiset.map (↑f) s)
RingEquiv.map_multiset_sum
protected theorem
map_prod: βˆ€ {Ξ± : Type u_3} {R : Type u_1} {S : Type u_2} [inst : CommSemiring R] [inst_1 : CommSemiring S] (g : R ≃+* S) (f : Ξ± β†’ R) (s : Finset Ξ±), ↑g (∏ x in s, f x) = ∏ x in s, ↑g (f x)
map_prod
[
CommSemiring: Type ?u.73322 β†’ Type ?u.73322
CommSemiring
R: Type ?u.73316
R
] [
CommSemiring: Type ?u.73325 β†’ Type ?u.73325
CommSemiring
S: Type ?u.73319
S
] (
g: R ≃+* S
g
:
R: Type ?u.73316
R
≃+*
S: Type ?u.73319
S
) (
f: Ξ± β†’ R
f
:
Ξ±: Type ?u.73313
Ξ±
β†’
R: Type ?u.73316
R
) (
s: Finset Ξ±
s
:
Finset: Type ?u.73972 β†’ Type ?u.73972
Finset
Ξ±: Type ?u.73313
Ξ±
) :
g: R ≃+* S
g
(∏
x: ?m.80761
x
in
s: Finset Ξ±
s
,
f: Ξ± β†’ R
f
x: ?m.80761
x
) = ∏
x: ?m.80863
x
in
s: Finset Ξ±
s
,
g: R ≃+* S
g
(
f: Ξ± β†’ R
f
x: ?m.80863
x
) :=
map_prod: βˆ€ {Ξ² : Type ?u.87692} {Ξ± : Type ?u.87691} {Ξ³ : Type ?u.87690} [inst : CommMonoid Ξ²] [inst_1 : CommMonoid Ξ³] {G : Type ?u.87693} [inst_2 : MonoidHomClass G Ξ² Ξ³] (g : G) (f : Ξ± β†’ Ξ²) (s : Finset Ξ±), ↑g (∏ x in s, f x) = ∏ x in s, ↑g (f x)
map_prod
g: R ≃+* S
g
f: Ξ± β†’ R
f
s: Finset Ξ±
s
#align ring_equiv.map_prod
RingEquiv.map_prod: βˆ€ {Ξ± : Type u_3} {R : Type u_1} {S : Type u_2} [inst : CommSemiring R] [inst_1 : CommSemiring S] (g : R ≃+* S) (f : Ξ± β†’ R) (s : Finset Ξ±), ↑g (∏ x in s, f x) = ∏ x in s, ↑g (f x)
RingEquiv.map_prod
protected theorem
map_sum: βˆ€ {Ξ± : Type u_3} {R : Type u_1} {S : Type u_2} [inst : NonAssocSemiring R] [inst_1 : NonAssocSemiring S] (g : R ≃+* S) (f : Ξ± β†’ R) (s : Finset Ξ±), ↑g (βˆ‘ x in s, f x) = βˆ‘ x in s, ↑g (f x)
map_sum
[
NonAssocSemiring: Type ?u.88303 β†’ Type ?u.88303
NonAssocSemiring
R: Type ?u.88297
R
] [
NonAssocSemiring: Type ?u.88306 β†’ Type ?u.88306
NonAssocSemiring
S: Type ?u.88300
S
] (
g: R ≃+* S
g
:
R: Type ?u.88297
R
≃+*
S: Type ?u.88300
S
) (
f: Ξ± β†’ R
f
:
Ξ±: Type ?u.88294
Ξ±
β†’
R: Type ?u.88297
R
) (
s: Finset Ξ±
s
:
Finset: Type ?u.88685 β†’ Type ?u.88685
Finset
Ξ±: Type ?u.88294
Ξ±
) :
g: R ≃+* S
g
(βˆ‘
x: ?m.95475
x
in
s: Finset Ξ±
s
,
f: Ξ± β†’ R
f
x: ?m.95475
x
) = βˆ‘
x: ?m.95695
x
in
s: Finset Ξ±
s
,
g: R ≃+* S
g
(
f: Ξ± β†’ R
f
x: ?m.95695
x
) :=
map_sum: βˆ€ {Ξ² : Type ?u.102642} {Ξ± : Type ?u.102641} {Ξ³ : Type ?u.102640} [inst : AddCommMonoid Ξ²] [inst_1 : AddCommMonoid Ξ³] {G : Type ?u.102643} [inst_2 : AddMonoidHomClass G Ξ² Ξ³] (g : G) (f : Ξ± β†’ Ξ²) (s : Finset Ξ±), ↑g (βˆ‘ x in s, f x) = βˆ‘ x in s, ↑g (f x)
map_sum
g: R ≃+* S
g
f: Ξ± β†’ R
f
s: Finset Ξ±
s
#align ring_equiv.map_sum
RingEquiv.map_sum: βˆ€ {Ξ± : Type u_3} {R : Type u_1} {S : Type u_2} [inst : NonAssocSemiring R] [inst_1 : NonAssocSemiring S] (g : R ≃+* S) (f : Ξ± β†’ R) (s : Finset Ξ±), ↑g (βˆ‘ x in s, f x) = βˆ‘ x in s, ↑g (f x)
RingEquiv.map_sum
end RingEquiv