Finite products of types #
This file defines the product of types over a list. For l : List ι and α : ι → Type v we define
List.TProd α l = l.foldr (fun i β ↦ α i × β) PUnit.
This type should not be used if ∀ i, α i or ∀ i ∈ l, α i can be used instead
(in the last expression, we could also replace the list l by a set or a finset).
This type is used as an intermediary between binary products and finitary products.
The application of this type is finitary product measures, but it could be used in any
construction/theorem that is easier to define/prove on binary products than on finitary products.
- Once we have the construction on binary products (like binary product measures in
MeasureTheory.prod), we can easily define a finitary version on the typeTProd l αby iterating. Properties can also be easily extended from the binary case to the finitary case by iterating. - Then we can use the equivalence
List.TProd.piEquivTProdbelow (or enhanced versions of it, like aMeasurableEquivfor product measures) to get the construction on∀ i : ι, α i, at least when assuming[Fintype ι] [Encodable ι](usingEncodable.sortedUniv). Usingattribute [local instance] Fintype.toEncodablewe can get rid of the argument[Encodable ι].
Main definitions #
- We have the equivalence
TProd.piEquivTProd : (∀ i, α i) ≃ TProd α liflcontains every element ofιexactly once. - The product of sets is
Set.tprod : (∀ i, Set (α i)) → Set (TProd α l).
Given an element of the iterated product l.Prod α, take a projection into direction i.
If i appears multiple times in l, this chooses the first component in direction i.
Equations
Instances For
A version of TProd.elim when l contains all elements. In this case we get a function into
Π i, α i.
Equations
Instances For
Pi-types are equivalent to iterated products.