Skip to content

Commit f55642d

Browse files
Iterated cartesian product is closed by permutation (#617)
I have shown that the 3 definitions of iterated cartesian product of types is closed by permutation.
1 parent a426ad1 commit f55642d

File tree

3 files changed

+137
-7
lines changed

3 files changed

+137
-7
lines changed

src/foundation/iterated-cartesian-product-types.lagda.md

Lines changed: 117 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,30 @@ module foundation.iterated-cartesian-product-types where
99
```agda
1010
open import elementary-number-theory.natural-numbers
1111
12+
open import finite-group-theory.permutations-standard-finite-types
13+
1214
open import foundation.cartesian-product-types
1315
open import foundation.contractible-types
1416
open import foundation.coproduct-types
1517
open import foundation.dependent-pair-types
18+
open import foundation.equality-dependent-pair-types
1619
open import foundation.equivalences
1720
open import foundation.functions
1821
open import foundation.functoriality-cartesian-product-types
22+
open import foundation.functoriality-dependent-function-types
23+
open import foundation.identity-types
24+
open import foundation.propositions
1925
open import foundation.type-arithmetic-cartesian-product-types
2026
open import foundation.type-arithmetic-dependent-function-types
2127
open import foundation.unit-type
28+
open import foundation.univalence
2229
open import foundation.universal-property-coproduct-types
2330
open import foundation.universal-property-empty-type
2431
open import foundation.universe-levels
2532
33+
open import lists.arrays
2634
open import lists.lists
35+
open import lists.permutation-lists
2736
2837
open import univalent-combinatorics.standard-finite-types
2938
```
@@ -35,8 +44,12 @@ open import univalent-combinatorics.standard-finite-types
3544
In this file, we give three definitions of the iterated cartesian product
3645
`A₁ × ... × Aₙ` of `n` types `A₁ , ... , Aₙ`. Two use a family of types over
3746
`Fin n`: the first uses recursion over `Fin n` and the second is just
38-
`Π (Fin n) A`. The last one uses lists. We also show that the first two
39-
definitions are equivalent.
47+
`Π (Fin n) A`. The last one uses lists.
48+
49+
We show that :
50+
51+
- all these definitions are equivalent
52+
- iterated cartesian product of types is closed under permutations
4053

4154
## Definitions
4255

@@ -53,7 +66,7 @@ iterated-product-Fin-recursive (succ-ℕ n) A =
5366
A (inr star) × iterated-product-Fin-recursive n (A ∘ inl)
5467
```
5568

56-
#### Using `Π` type
69+
#### Using `Π`-types
5770

5871
```agda
5972
iterated-product-Fin-Π :
@@ -71,9 +84,9 @@ iterated-product-lists {l} nil = raise-unit l
7184
iterated-product-lists (cons A p) = A × iterated-product-lists p
7285
```
7386

74-
## Property
87+
## Properties
7588

76-
### Equivalence between the first two definitions
89+
### The definitions using recursion and `Π`-types are equivalent
7790

7891
```agda
7992
equiv-iterated-product-Fin-recursive-Π :
@@ -92,3 +105,102 @@ equiv-iterated-product-Fin-recursive-Π (succ-ℕ n) A =
92105
( id-equiv)
93106
( equiv-iterated-product-Fin-recursive-Π n (A ∘ inl)))))))
94107
```
108+
109+
### The definitions using recursion and lists are equivalent
110+
111+
```agda
112+
equiv-iterated-product-Fin-recursive-lists :
113+
{l : Level} (l : list (UU l)) →
114+
iterated-product-Fin-recursive
115+
( length-array (array-list l))
116+
( functional-vec-array (array-list l)) ≃
117+
iterated-product-lists l
118+
equiv-iterated-product-Fin-recursive-lists nil = id-equiv
119+
equiv-iterated-product-Fin-recursive-lists (cons x l) =
120+
equiv-prod id-equiv (equiv-iterated-product-Fin-recursive-lists l)
121+
```
122+
123+
### Iterated cartesian product is closed under permutations
124+
125+
```agda
126+
permutation-iterated-product-Fin-Π :
127+
{l : Level} (n : ℕ) (A : (Fin n → UU l)) (t : Permutation n) → UU l
128+
permutation-iterated-product-Fin-Π n A t =
129+
iterated-product-Fin-Π n (A ∘ map-equiv t)
130+
131+
equiv-permutation-iterated-product-Fin-Π :
132+
{l : Level} (n : ℕ) (A : (Fin n → UU l)) (t : Permutation n) →
133+
permutation-iterated-product-Fin-Π n A t ≃ iterated-product-Fin-Π n A
134+
equiv-permutation-iterated-product-Fin-Π n A t =
135+
equiv-Π (λ z → A z) t (λ a → id-equiv)
136+
137+
eq-permutation-iterated-product-Fin-Π :
138+
{l : Level} (n : ℕ) (A : (Fin n → UU l)) (t : Permutation n) →
139+
permutation-iterated-product-Fin-Π n A t = iterated-product-Fin-Π n A
140+
eq-permutation-iterated-product-Fin-Π n A t =
141+
eq-equiv
142+
( permutation-iterated-product-Fin-Π n A t)
143+
( iterated-product-Fin-Π n A)
144+
( equiv-permutation-iterated-product-Fin-Π n A t)
145+
146+
permutation-iterated-product-Fin-recursive :
147+
{l : Level} (n : ℕ) (A : (Fin n → UU l)) (t : Permutation n) → UU l
148+
permutation-iterated-product-Fin-recursive n A t =
149+
iterated-product-Fin-recursive n (A ∘ map-equiv t)
150+
151+
equiv-permutation-iterated-product-Fin-recursive :
152+
{l : Level} (n : ℕ) (A : (Fin n → UU l)) (t : Permutation n) →
153+
permutation-iterated-product-Fin-recursive n A t ≃
154+
iterated-product-Fin-recursive n A
155+
equiv-permutation-iterated-product-Fin-recursive n A t =
156+
( inv-equiv (equiv-iterated-product-Fin-recursive-Π n A) ∘e
157+
( equiv-permutation-iterated-product-Fin-Π n A t ∘e
158+
equiv-iterated-product-Fin-recursive-Π n (A ∘ map-equiv t)))
159+
160+
eq-permutation-iterated-product-Fin-recursive :
161+
{l : Level} (n : ℕ) (A : (Fin n → UU l)) (t : Permutation n) →
162+
permutation-iterated-product-Fin-recursive n A t =
163+
iterated-product-Fin-recursive n A
164+
eq-permutation-iterated-product-Fin-recursive n A t =
165+
eq-equiv
166+
( permutation-iterated-product-Fin-recursive n A t)
167+
( iterated-product-Fin-recursive n A)
168+
( equiv-permutation-iterated-product-Fin-recursive n A t)
169+
170+
permutation-iterated-product-lists :
171+
{l : Level} (L : list (UU l)) (t : Permutation (length-list L)) → UU l
172+
permutation-iterated-product-lists L t =
173+
iterated-product-lists (permute-list L t)
174+
175+
equiv-permutation-iterated-product-lists :
176+
{l : Level} (L : list (UU l)) (t : Permutation (length-list L)) →
177+
permutation-iterated-product-lists L t ≃
178+
iterated-product-lists L
179+
equiv-permutation-iterated-product-lists L t =
180+
( equiv-iterated-product-Fin-recursive-lists L ∘e
181+
( ( equiv-permutation-iterated-product-Fin-recursive
182+
( length-list L)
183+
( functional-vec-array (array-list L))
184+
( t)) ∘e
185+
( equiv-eq
186+
( ap
187+
( λ p →
188+
iterated-product-Fin-recursive
189+
( length-array p)
190+
( functional-vec-array p))
191+
( isretr-array-list
192+
( length-list L ,
193+
( functional-vec-array (array-list L) ∘ map-equiv t)))) ∘e
194+
( inv-equiv
195+
( equiv-iterated-product-Fin-recursive-lists (permute-list L t))))))
196+
197+
eq-permutation-iterated-product-lists :
198+
{l : Level} (L : list (UU l)) (t : Permutation (length-list L)) →
199+
permutation-iterated-product-lists L t =
200+
iterated-product-lists L
201+
eq-permutation-iterated-product-lists L t =
202+
eq-equiv
203+
( permutation-iterated-product-lists L t)
204+
( iterated-product-lists L)
205+
( equiv-permutation-iterated-product-lists L t)
206+
```

src/lists/arrays.lagda.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,21 @@ module _
153153
isretr-array-list
154154
issec-array-list
155155
```
156+
157+
### Computational rules of the equivalence between arrays and lists
158+
159+
```agda
160+
compute-length-list-list-vec :
161+
(n : ℕ) (v : vec A n) →
162+
length-list (list-vec n v) = n
163+
compute-length-list-list-vec zero-ℕ v = refl
164+
compute-length-list-list-vec (succ-ℕ n) (x ∷ v) =
165+
ap succ-ℕ (compute-length-list-list-vec n v)
166+
167+
compute-length-list-list-array :
168+
(t : array A) → length-list (list-array t) = length-array t
169+
compute-length-list-list-array t =
170+
compute-length-list-list-vec
171+
( length-array t)
172+
( listed-vec-functional-vec (length-array t) (functional-vec-array t))
173+
```

src/lists/permutation-lists.lagda.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@ module _
4141
permute-list : (l : list A) → Permutation (length-list l) → list A
4242
permute-list l s =
4343
list-array
44-
( pr1 (array-list l) ,
45-
pr2 (array-list l) ∘ (map-equiv s))
44+
( length-array (array-list l) ,
45+
functional-vec-array (array-list l) ∘ (map-equiv s))
4646
```

0 commit comments

Comments
 (0)