Restricted products of sets, groups and rings #
We define the restricted product of R : ι → Type*
of types, relative to
a family of subsets A : (i : ι) → Set (R i)
and a filter 𝓕 : Filter ι
. This
is the set of all x : Π i, R i
such that the set {j | x j ∈ A j}
belongs to 𝓕
.
We denote it by Πʳ i, [R i, A i]_[𝓕]
.
The main case of interest, which we shall refer to as the "classical restricted product",
is that of 𝓕 = cofinite
. Recall that this is the filter of all subsets of ι
, which are
cofinite in the sense that they have finite complement.
Hence, the associated restricted product is the set of all x : Π i, R i
such that
x j ∈ A j
for all but finitely many j
s. We denote it simply by Πʳ i, [R i, A i]
.
Another notable case is that of the principal filter 𝓕 = 𝓟 s
corresponding to some subset s
of ι
. The associated restricted product Πʳ i, [R i, A i]_[𝓟 s]
is the set of all
x : Π i, R i
such that x j ∈ A j
for all j ∈ s
. Put another way, this is just
(Π i ∈ s, A i) × (Π i ∉ s, R i)
, modulo the obvious isomorphism.
We endow these types with the obvious algebraic structures. We also show various compatibility results.
See also the file Mathlib.Topology.Algebra.RestrictedProduct.TopologicalSpace , which puts the structure of a topological space on a restricted product of topological spaces.
Main definitions #
RestrictedProduct
: the restricted product of a familyR
of types, relative to a familyA
of subsets and a filter𝓕
on the indexing set. This is denotedΠʳ i, [R i, A i]_[𝓕]
, or simplyΠʳ i, [R i, A i]
when𝓕 = cofinite
.RestrictedProduct.instDFunLike
: interpret an element ofΠʳ i, [R i, A i]_[𝓕]
as an element ofΠ i, R i
using theDFunLike
machinery.RestrictedProduct.structureMap
: the inclusion map fromΠ i, A i
toΠʳ i, [R i, A i]_[𝓕]
.
Notation #
Πʳ i, [R i, A i]_[𝓕]
isRestrictedProduct R A 𝓕
.Πʳ i, [R i, A i]
isRestrictedProduct R A cofinite
.
Tags #
restricted product, adeles, ideles
Definition and elementary maps #
The restricted product of a family R : ι → Type*
of types, relative to subsets
A : (i : ι) → Set (R i)
and the filter 𝓕 : Filter ι
, is the set of all x : Π i, R i
such that the set {j | x j ∈ A j}
belongs to 𝓕
. We denote it by Πʳ i, [R i, A i]_[𝓕]
.
The most common use case is with 𝓕 = cofinite
, in which case the restricted product is the set
of all x : Π i, R i
such that x j ∈ A j
for all but finitely many j
. We denote it simply
by Πʳ i, [R i, A i]
.
Similarly, if S
is a principal filter, the restricted product Πʳ i, [R i, A i]_[𝓟 s]
is the set of all x : Π i, R i
such that ∀ j ∈ S, x j ∈ A j
.
Instances For
Πʳ i, [R i, A i]_[𝓕]
is RestrictedProduct R A 𝓕
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pretty printer defined by notation3
command.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Πʳ i, [R i, A i]
is RestrictedProduct R A cofinite
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pretty printer defined by notation3
command.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- RestrictedProduct.instDFunLike R A = { coe := fun (x : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => A i) 𝓕) (i : ι) => ↑x i, coe_injective' := ⋯ }
The structure map of the restricted product is the obvious inclusion from Π i, A i
into Πʳ i, [R i, A i]_[𝓕]
.
Equations
- RestrictedProduct.structureMap R A 𝓕 x = ⟨fun (i : ι) => ↑(x i), ⋯⟩
Instances For
If 𝓕 ≤ 𝓖
, the restricted product Πʳ i, [R i, A i]_[𝓖]
is naturally included in
Πʳ i, [R i, A i]_[𝓕]
. This is the corresponding map.
Equations
- RestrictedProduct.inclusion R A h x = ⟨⇑x, ⋯⟩
Instances For
Algebraic instances on restricted products #
In this section, we endow the restricted product with its algebraic instances.
To avoid any unnecessary coercions, we use subobject classes for the subset B i
of each R i
.
Equations
- RestrictedProduct.instInvCoeOfInvMemClass R = { inv := fun (x : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⟨fun (i : ι) => (x i)⁻¹, ⋯⟩ }
Equations
- RestrictedProduct.instNegCoeOfNegMemClass R = { neg := fun (x : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⟨fun (i : ι) => -x i, ⋯⟩ }
Equations
- RestrictedProduct.instMulCoeOfMulMemClass R = { mul := fun (x y : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⟨fun (i : ι) => x i * y i, ⋯⟩ }
Equations
- RestrictedProduct.instAddCoeOfAddMemClass R = { add := fun (x y : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⟨fun (i : ι) => x i + y i, ⋯⟩ }
Equations
- RestrictedProduct.instSMulCoeOfSMulMemClass R = { smul := fun (g : G) (x : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⟨fun (i : ι) => g • x i, ⋯⟩ }
Equations
- RestrictedProduct.instVAddCoeOfVAddMemClass R = { vadd := fun (g : G) (x : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⟨fun (i : ι) => g +ᵥ x i, ⋯⟩ }
Equations
- RestrictedProduct.instDivCoeOfSubgroupClass R = { div := fun (x y : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⟨fun (i : ι) => x i / y i, ⋯⟩ }
Equations
- RestrictedProduct.instSubCoeOfAddSubgroupClass R = { sub := fun (x y : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⟨fun (i : ι) => x i - y i, ⋯⟩ }
Equations
- RestrictedProduct.instPowCoeNatOfSubmonoidClass R = { pow := fun (x : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) (n : ℕ) => ⟨fun (i : ι) => x i ^ n, ⋯⟩ }
Equations
- RestrictedProduct.instAddMonoidCoeOfAddSubmonoidClass R = Function.Injective.addMonoid (fun (f : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⇑f) ⋯ ⋯ ⋯ ⋯
Equations
- RestrictedProduct.instMonoidCoeOfSubmonoidClass R = Function.Injective.monoid (fun (f : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⇑f) ⋯ ⋯ ⋯ ⋯
Equations
- RestrictedProduct.instPowCoeIntOfSubgroupClass R = { pow := fun (x : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) (n : ℤ) => ⟨fun (i : ι) => x i ^ n, ⋯⟩ }
Equations
- RestrictedProduct.instAddGroupCoeOfAddSubgroupClass R = Function.Injective.addGroup (fun (f : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⇑f) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- RestrictedProduct.instGroupCoeOfSubgroupClass R = Function.Injective.group (fun (f : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⇑f) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- RestrictedProduct.instRingCoeOfSubringClass R = Function.Injective.ring (fun (f : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => ⇑f) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- RestrictedProduct.instCommRingCoeOfSubringClass R = { toRing := RestrictedProduct.instRingCoeOfSubringClass R, mul_comm := ⋯ }
RestrictedProduct.evalMonoidHom j
is the monoid homomorphism from the restricted
product Πʳ i, [R i, B i]_[𝓕]
to the component R j
.
Equations
- RestrictedProduct.evalMonoidHom R j = { toFun := fun (x : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => x j, map_one' := ⋯, map_mul' := ⋯ }
Instances For
RestrictedProduct.evalAddMonoidHom j
is the monoid homomorphism from the restricted
product Πʳ i, [R i, B i]_[𝓕]
to the component R j
.
Equations
- RestrictedProduct.evalAddMonoidHom R j = { toFun := fun (x : RestrictedProduct (fun (i : ι) => R i) (fun (i : ι) => ↑(B i)) 𝓕) => x j, map_zero' := ⋯, map_add' := ⋯ }
Instances For
RestrictedProduct.evalRingHom j
is the ring homomorphism from the restricted
product Πʳ i, [R i, B i]_[𝓕]
to the component R j
.
Equations
- RestrictedProduct.evalRingHom R j = { toMonoidHom := RestrictedProduct.evalMonoidHom R j, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Given two restricted products Πʳ (i : ι₁), [R₁ i, A₁ i]_[𝓕₁]
and Πʳ (j : ι₂), [R₂ j, A₂ j]_[𝓕₂]
,
RestrictedProduct.map
gives a function between them. The data needed is a function f : ι₂ → ι₁
such that 𝓕₂
tends to 𝓕₁
along f
, and functions φ j : R₁ (f j) → R₂ j
sending A₁ (f j)
into A₂ j
for an 𝓕₂
-large set of j
's.
See also mapMonoidHom
, mapAddMonoidHom
and mapRingHom
for variants.
Equations
- RestrictedProduct.map R₁ R₂ f hf φ hφ x = ⟨fun (j : ι₂) => φ j (x (f j)), ⋯⟩
Instances For
Given two restricted products Πʳ (i : ι₁), [R₁ i, B₁ i]_[𝓕₁]
and Πʳ (j : ι₂), [R₂ j, B₂ j]_[𝓕₂]
,
RestrictedProduct.mapMonoidHom
gives a monoid homomorphism between them. The data needed is a
function f : ι₂ → ι₁
such that 𝓕₂
tends to 𝓕₁
along f
, and monoid homomorphisms
φ j : R₁ (f j) → R₂ j
sending B₁ (f j)
into B₂ j
for an 𝓕₂
-large set of j
's.
Equations
- RestrictedProduct.mapMonoidHom R₁ R₂ f hf φ hφ = { toFun := RestrictedProduct.map R₁ R₂ f hf (fun (j : ι₂) (r : R₁ (f j)) => (φ j) r) hφ, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Given two restricted products Πʳ (i : ι₁), [R₁ i, B₁ i]_[𝓕₁]
and Πʳ (j : ι₂), [R₂ j, B₂ j]_[𝓕₂]
,
RestrictedProduct.mapAddMonoidHom
gives a additive monoid homomorphism between them. The data
needed is a function f : ι₂ → ι₁
such that 𝓕₂
tends to 𝓕₁
along f
, and
additive monoid homomorphisms φ j : R₁ (f j) → R₂ j
sending B₁ (f j)
into B₂ j
for
an 𝓕₂
-large set of j
's.
Equations
- RestrictedProduct.mapAddMonoidHom R₁ R₂ f hf φ hφ = { toFun := RestrictedProduct.map R₁ R₂ f hf (fun (j : ι₂) (r : R₁ (f j)) => (φ j) r) hφ, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Given two restricted products Πʳ (i : ι₁), [R₁ i, B₁ i]_[𝓕₁]
and Πʳ (j : ι₂), [R₂ j, B₂ j]_[𝓕₂]
,
RestrictedProduct.mapRingHom
gives a ring homomorphism between them. The data needed is a
function f : ι₂ → ι₁
such that 𝓕₂
tends to 𝓕₁
along f
, and ring homomorphisms
φ j : R₁ (f j) → R₂ j
sending B₁ (f j)
into B₂ j
for an 𝓕₂
-large set of j
's.
Equations
- RestrictedProduct.mapRingHom R₁ R₂ f hf φ hφ = { toMonoidHom := RestrictedProduct.mapMonoidHom R₁ R₂ f hf (fun (j : ι₂) => ↑(φ j)) hφ, map_zero' := ⋯, map_add' := ⋯ }