diff --git a/src/foundation/structure.lagda.md b/src/foundation/structure.lagda.md index 6a5b9217b7..819a679062 100644 --- a/src/foundation/structure.lagda.md +++ b/src/foundation/structure.lagda.md @@ -64,3 +64,7 @@ has-structure-equiv' : {l1 l2 : Level} (๐’ซ : UU l1 โ†’ UU l2) {X Y : UU l1} โ†’ X โ‰ƒ Y โ†’ ๐’ซ Y โ†’ ๐’ซ X has-structure-equiv' ๐’ซ e = tr ๐’ซ (inv (eq-equiv e)) ``` + +## See also + +- [Species of types](species.species-of-types.md) diff --git a/src/foundation/universal-property-identity-types.lagda.md b/src/foundation/universal-property-identity-types.lagda.md index a231b5f29e..4904b22306 100644 --- a/src/foundation/universal-property-identity-types.lagda.md +++ b/src/foundation/universal-property-identity-types.lagda.md @@ -31,6 +31,8 @@ open import foundation-core.functoriality-dependent-pair-types open import foundation-core.homotopies open import foundation-core.propositional-maps open import foundation-core.propositions +open import foundation-core.retractions +open import foundation-core.sections open import foundation-core.torsorial-type-families ``` @@ -46,47 +48,48 @@ also known as the **type theoretic Yoneda lemma**. ## Theorem ```agda -ev-refl : - {l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) โ†’ a ๏ผ x โ†’ UU l2} โ†’ - ((x : A) (p : a ๏ผ x) โ†’ B x p) โ†’ B a refl -ev-refl a f = f a refl - -ev-refl' : - {l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) โ†’ x ๏ผ a โ†’ UU l2} โ†’ - ((x : A) (p : x ๏ผ a) โ†’ B x p) โ†’ B a refl -ev-refl' a f = f a refl - -abstract - is-equiv-ev-refl : - {l1 l2 : Level} {A : UU l1} (a : A) - {B : (x : A) โ†’ a ๏ผ x โ†’ UU l2} โ†’ is-equiv (ev-refl a {B}) - is-equiv-ev-refl a = - is-equiv-is-invertible - ( ind-Id a _) - ( ฮป b โ†’ refl) - ( ฮป f โ†’ eq-htpy - ( ฮป x โ†’ eq-htpy - ( ind-Id a - ( ฮป x' p' โ†’ ind-Id a _ (f a refl) x' p' ๏ผ f x' p') - ( refl) x))) - -equiv-ev-refl : - {l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) โ†’ a ๏ผ x โ†’ UU l2} โ†’ - ((x : A) (p : a ๏ผ x) โ†’ B x p) โ‰ƒ (B a refl) -pr1 (equiv-ev-refl a) = ev-refl a -pr2 (equiv-ev-refl a) = is-equiv-ev-refl a - -equiv-ev-refl' : - {l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) โ†’ x ๏ผ a โ†’ UU l2} โ†’ - ((x : A) (p : x ๏ผ a) โ†’ B x p) โ‰ƒ B a refl -equiv-ev-refl' a {B} = - ( equiv-ev-refl a) โˆ˜e - ( equiv-ฮ -equiv-family (ฮป x โ†’ equiv-precomp-ฮ  (equiv-inv a x) (B x))) - -is-equiv-ev-refl' : - {l1 l2 : Level} {A : UU l1} (a : A) - {B : (x : A) โ†’ x ๏ผ a โ†’ UU l2} โ†’ is-equiv (ev-refl' a {B}) -is-equiv-ev-refl' a = is-equiv-map-equiv (equiv-ev-refl' a) +module _ + {l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) โ†’ a ๏ผ x โ†’ UU l2} + where + + ev-refl : ((x : A) (p : a ๏ผ x) โ†’ B x p) โ†’ B a refl + ev-refl f = f a refl + + is-retraction-ev-refl : is-retraction (ind-Id a B) ev-refl + is-retraction-ev-refl = refl-htpy + + abstract + is-section-ev-refl : is-section (ind-Id a B) ev-refl + is-section-ev-refl f = + eq-htpy + ( ฮป x โ†’ + eq-htpy + ( ind-Id a + ( ฮป x' p' โ†’ ind-Id a _ (f a refl) x' p' ๏ผ f x' p') + ( refl) + ( x))) + + is-equiv-ev-refl : is-equiv ev-refl + is-equiv-ev-refl = + is-equiv-is-invertible (ind-Id a B) is-retraction-ev-refl is-section-ev-refl + + equiv-ev-refl : ((x : A) (p : a ๏ผ x) โ†’ B x p) โ‰ƒ B a refl + equiv-ev-refl = (ev-refl , is-equiv-ev-refl) + +module _ + {l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) โ†’ x ๏ผ a โ†’ UU l2} + where + + ev-refl' : ((x : A) (p : x ๏ผ a) โ†’ B x p) โ†’ B a refl + ev-refl' f = f a refl + + equiv-ev-refl' : ((x : A) (p : x ๏ผ a) โ†’ B x p) โ‰ƒ B a refl + equiv-ev-refl' = + ( equiv-ev-refl a) โˆ˜e + ( equiv-ฮ -equiv-family (ฮป x โ†’ equiv-precomp-ฮ  (equiv-inv a x) (B x))) + + is-equiv-ev-refl' : is-equiv ev-refl' + is-equiv-ev-refl' = is-equiv-map-equiv equiv-ev-refl' ``` ### The type of fiberwise maps from `Id a` to a torsorial type family `B` is equivalent to the type of fiberwise equivalences diff --git a/src/species/hasse-weil-species.lagda.md b/src/species/hasse-weil-species.lagda.md index 4538f31367..849e510d62 100644 --- a/src/species/hasse-weil-species.lagda.md +++ b/src/species/hasse-weil-species.lagda.md @@ -26,7 +26,8 @@ types that preserves cartesian products. The **Hasse-Weil species** is a species of finite inhabited types defined for any finite inhabited type `k` as ```text -ฮฃ (p : structure-semisimple-commutative-ring-Finite-Type k) ; S (commutative-finite-ring-finite-semisimple-commutative-ring-structure-semisimple-commutative-ring-Finite-Type k p) +ฮฃ ( p : structure-semisimple-commutative-ring-Finite-Type k), + ( S (commutative-finite-ring-finite-semisimple-commutative-ring-structure-semisimple-commutative-ring-Finite-Type k p)) ``` ## Definitions diff --git a/src/trees.lagda.md b/src/trees.lagda.md index 4da5e8d445..ccadfa4206 100644 --- a/src/trees.lagda.md +++ b/src/trees.lagda.md @@ -44,6 +44,7 @@ open import trees.morphisms-directed-trees public open import trees.morphisms-enriched-directed-trees public open import trees.multiset-indexed-dependent-products-of-types public open import trees.multisets public +open import trees.multivariable-polynomial-functors public open import trees.planar-binary-trees public open import trees.plane-trees public open import trees.polynomial-endofunctors public diff --git a/src/trees/multivariable-polynomial-functors.lagda.md b/src/trees/multivariable-polynomial-functors.lagda.md new file mode 100644 index 0000000000..31d0fc02f9 --- /dev/null +++ b/src/trees/multivariable-polynomial-functors.lagda.md @@ -0,0 +1,372 @@ +# Multivariable polynomial functors + +```agda +module trees.multivariable-polynomial-functors where +``` + +
Imports + +```agda +open import foundation.binary-homotopies +open import foundation.dependent-pair-types +open import foundation.equality-dependent-function-types +open import foundation.equality-dependent-pair-types +open import foundation.equivalences +open import foundation.function-types +open import foundation.fundamental-theorem-of-identity-types +open import foundation.homotopies +open import foundation.identity-types +open import foundation.structure-identity-principle +open import foundation.transport-along-identifications +open import foundation.type-arithmetic-unit-type +open import foundation.unit-type +open import foundation.universal-property-identity-types +open import foundation.universe-levels + +open import foundation-core.commuting-squares-of-maps +open import foundation-core.commuting-triangles-of-maps +open import foundation-core.retractions +open import foundation-core.torsorial-type-families +``` + +
+ +## Idea + +{{#concept "Multivariable polynomial functors" Agda=polynomial-functor}} are a +generalization of the notion of +[polynomial endofunctors](trees.polynomial-endofunctors.md) to the case of +families of types (variables). Given a family of types `A : J โ†’ Type` and a type +family `B : I โ†’ {j : J} โ†’ A j โ†’ Type` over `A`, we have a multivariable +polynomial functor `๐‘ƒ A B` with action on type families given by + +```text + ๐‘ƒ A B X j := ฮฃ (a : A j), ((i : I) โ†’ B i a โ†’ X i). +``` + +## Definitions + +### The type of multivariable polynomial functors + +```agda +polynomial-functor : + {l1 l2 : Level} (l3 l4 : Level) โ†’ + UU l1 โ†’ UU l2 โ†’ UU (l1 โŠ” l2 โŠ” lsuc l3 โŠ” lsuc l4) +polynomial-functor l3 l4 I J = + ฮฃ (J โ†’ UU l3) (ฮป A โ†’ (I โ†’ {j : J} โ†’ A j โ†’ UU l4)) + +module _ + {l1 l2 l3 l4 : Level} {I : UU l1} {J : UU l2} + (๐‘ƒ : polynomial-functor l3 l4 I J) + where + + shape-polynomial-functor : J โ†’ UU l3 + shape-polynomial-functor = pr1 ๐‘ƒ + + position-polynomial-functor : + I โ†’ {j : J} โ†’ shape-polynomial-functor j โ†’ UU l4 + position-polynomial-functor = pr2 ๐‘ƒ +``` + +### The action on type families of a multivariable polynomial functor + +```agda +module _ + {l1 l2 l3 l4 l5 : Level} {I : UU l1} {J : UU l2} + where + + type-polynomial-functor' : + (A : J โ†’ UU l3) (B : I โ†’ {j : J} โ†’ A j โ†’ UU l4) โ†’ + (I โ†’ UU l5) โ†’ (J โ†’ UU (l1 โŠ” l3 โŠ” l4 โŠ” l5)) + type-polynomial-functor' A B X j = + ฮฃ (A j) (ฮป a โ†’ (i : I) โ†’ B i a โ†’ X i) + + type-polynomial-functor : + (๐‘ƒ : polynomial-functor l3 l4 I J) โ†’ + (I โ†’ UU l5) โ†’ (J โ†’ UU (l1 โŠ” l3 โŠ” l4 โŠ” l5)) + type-polynomial-functor (A , B) = + type-polynomial-functor' A B +``` + +### Characterizing equality in `type-polynomial-functor` + +```agda +module _ + {l1 l2 l3 l4 l5 : Level} + {I : UU l1} {J : UU l2} + {๐‘ƒ@(A , B) : polynomial-functor l3 l4 I J} + {X : I โ†’ UU l5} + where + + Eq-type-polynomial-functor : + (x y : (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j) โ†’ + UU (l1 โŠ” l2 โŠ” l3 โŠ” l4 โŠ” l5) + Eq-type-polynomial-functor x y = + (j : J) โ†’ + ฮฃ ( pr1 (x j) ๏ผ pr1 (y j)) + ( ฮป p โ†’ + (i : I) โ†’ + coherence-triangle-maps (pr2 (x j) i) (pr2 (y j) i) (tr (B i {j}) p)) + + refl-Eq-type-polynomial-functor : + (x : (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j) โ†’ + Eq-type-polynomial-functor x x + refl-Eq-type-polynomial-functor x j = (refl , (ฮป i โ†’ refl-htpy)) + + Eq-eq-type-polynomial-functor : + (x y : (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j) โ†’ + x ๏ผ y โ†’ Eq-type-polynomial-functor x y + Eq-eq-type-polynomial-functor x .x refl = + refl-Eq-type-polynomial-functor x + + is-torsorial-Eq-type-polynomial-functor : + (x : (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j) โ†’ + is-torsorial (Eq-type-polynomial-functor x) + is-torsorial-Eq-type-polynomial-functor x = + is-torsorial-Eq-ฮ  + ( ฮป j โ†’ + is-torsorial-Eq-structure + { D = + ฮป a y p โ†’ + (i : I) โ†’ + coherence-triangle-maps (pr2 (x j) i) (y i) (tr (B i {j}) p)} + ( is-torsorial-Id (pr1 (x j))) + ( pr1 (x j) , refl) + (is-torsorial-binary-htpy (pr2 (x j)))) + + is-equiv-Eq-eq-type-polynomial-functor : + (x y : (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j) โ†’ + is-equiv (Eq-eq-type-polynomial-functor x y) + is-equiv-Eq-eq-type-polynomial-functor x = + fundamental-theorem-id + ( is-torsorial-Eq-type-polynomial-functor x) + ( Eq-eq-type-polynomial-functor x) + + eq-Eq-type-polynomial-functor : + (x y : (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j) โ†’ + Eq-type-polynomial-functor x y โ†’ x ๏ผ y + eq-Eq-type-polynomial-functor x y = + map-inv-is-equiv (is-equiv-Eq-eq-type-polynomial-functor x y) + + is-retraction-eq-Eq-type-polynomial-functor : + (x y : (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j) โ†’ + is-retraction + ( Eq-eq-type-polynomial-functor x y) + ( eq-Eq-type-polynomial-functor x y) + is-retraction-eq-Eq-type-polynomial-functor x y = + is-retraction-map-inv-is-equiv + ( is-equiv-Eq-eq-type-polynomial-functor x y) + + coh-refl-eq-Eq-type-polynomial-functor : + (x : (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j) โ†’ + ( eq-Eq-type-polynomial-functor x x + ( refl-Eq-type-polynomial-functor x)) ๏ผ refl + coh-refl-eq-Eq-type-polynomial-functor x = + is-retraction-eq-Eq-type-polynomial-functor x x refl +``` + +### An action on dependent functions of multivariable polynomial functors + +The following construction is not quite right for "the" action on dependent +functions, since given a type family `Y` over a type family `X`, the +construction gives only a dependent function of approximately type + +```text + (x : ๐‘ƒ X) โ†’ ๐‘ƒ (ฮฃ B Y x) +``` + +rather than + +```text + (x : ๐‘ƒ X) โ†’ ๐‘ƒ (Y x). +``` + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} {I : UU l1} {J : UU l2} + where + + dmap-ฮฃ-polynomial-functor' : + (A : J โ†’ UU l3) (B : I โ†’ {j : J} โ†’ A j โ†’ UU l4) + {X : I โ†’ UU l5} {Y : (i : I) โ†’ X i โ†’ UU l6} + (f : (i : I) (x : X i) โ†’ Y i x) โ†’ + (x : (j : J) โ†’ type-polynomial-functor' A B X j) โ†’ + (j : J) โ†’ + type-polynomial-functor' A B + ( ฮป i โ†’ ฮฃ (B i (pr1 (x j))) (Y i โˆ˜ pr2 (x j) i)) + ( j) + dmap-ฮฃ-polynomial-functor' A B f x j = + ( pr1 (x j) , (ฮป i b โ†’ (b , f i (pr2 (x j) i b)))) +``` + +### The action on functions of multivariable polynomial functors + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} {I : UU l1} {J : UU l2} + where + + map-polynomial-functor' : + (A : J โ†’ UU l3) (B : I โ†’ {j : J} โ†’ A j โ†’ UU l4) + {X : I โ†’ UU l5} {Y : I โ†’ UU l6} + (f : (i : I) โ†’ X i โ†’ Y i) โ†’ + (j : J) โ†’ + type-polynomial-functor' A B X j โ†’ type-polynomial-functor' A B Y j + map-polynomial-functor' A B f j (a , x) = (a , (ฮป i b โ†’ f i (x i b))) + + map-polynomial-functor : + (๐‘ƒ : polynomial-functor l3 l4 I J) + {X : I โ†’ UU l5} {Y : I โ†’ UU l6} + (f : (i : I) โ†’ X i โ†’ Y i) โ†’ + (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j โ†’ type-polynomial-functor ๐‘ƒ Y j + map-polynomial-functor (A , B) = map-polynomial-functor' A B +``` + +### The action on homotopies of multivariable polynomial functors + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} {I : UU l1} {J : UU l2} + where + + binary-htpy-polynomial-functor' : + (A : J โ†’ UU l3) (B : I โ†’ {j : J} โ†’ A j โ†’ UU l4) + {X : I โ†’ UU l5} {Y : I โ†’ UU l6} {f g : (i : I) โ†’ X i โ†’ Y i} โ†’ + binary-htpy f g โ†’ + binary-htpy (map-polynomial-functor' A B f) (map-polynomial-functor' A B g) + binary-htpy-polynomial-functor' A B H j x = + eq-pair-eq-fiber (eq-binary-htpy _ _ (ฮป i โ†’ H i โˆ˜ pr2 x i)) + + binary-htpy-polynomial-functor : + (๐‘ƒ : polynomial-functor l3 l4 I J) + {X : I โ†’ UU l5} {Y : I โ†’ UU l6} {f g : (i : I) โ†’ X i โ†’ Y i} โ†’ + binary-htpy f g โ†’ + binary-htpy (map-polynomial-functor ๐‘ƒ f) (map-polynomial-functor ๐‘ƒ g) + binary-htpy-polynomial-functor (A , B) = binary-htpy-polynomial-functor' A B +``` + +### The identity multivariable polynomial functor + +```agda +module _ + {l1 : Level} {I : UU l1} + where + + id-polynomial-functor : polynomial-functor lzero l1 I I + id-polynomial-functor = (ฮป i' โ†’ unit) , (ฮป i {i'} * โ†’ (i' ๏ผ i)) + + compute-type-id-polynomial-functor : + {l2 : Level} (X : I โ†’ UU l2) (i : I) โ†’ + type-polynomial-functor id-polynomial-functor X i โ‰ƒ X i + compute-type-id-polynomial-functor X i = + equivalence-reasoning + ฮฃ unit (ฮป * โ†’ (i' : I) โ†’ i ๏ผ i' โ†’ X i') + โ‰ƒ ((i' : I) โ†’ i ๏ผ i' โ†’ X i') + by left-unit-law-ฮฃ (ฮป * โ†’ (i' : I) โ†’ i ๏ผ i' โ†’ X i') + โ‰ƒ X i + by equiv-ev-refl i + + map-compute-type-id-polynomial-functor : + {l2 : Level} (X : I โ†’ UU l2) (i : I) โ†’ + type-polynomial-functor id-polynomial-functor X i โ†’ X i + map-compute-type-id-polynomial-functor X i = + map-equiv (compute-type-id-polynomial-functor X i) + + coh-map-id-polynomial-functor : + {l2 l3 : Level} {X : I โ†’ UU l2} {Y : I โ†’ UU l3} (f : (i : I) โ†’ X i โ†’ Y i) + (i : I) โ†’ + coherence-square-maps + ( map-compute-type-id-polynomial-functor X i) + ( map-polynomial-functor id-polynomial-functor f i) + ( f i) + ( map-compute-type-id-polynomial-functor Y i) + coh-map-id-polynomial-functor f i = refl-htpy +``` + +### Composition of multivariable polynomial functors + +Given two multivariable polynomial functors `๐‘ƒ A B : (I โ†’ Type) โ†’ (J โ†’ Type)` +and `๐‘ƒ C D : (J โ†’ Type) โ†’ (K โ†’ Type)`, then the composite functor +`๐‘ƒ C D โˆ˜ ๐‘ƒ A B` is again a polynomial functor. + +```agda +module _ + {l1 l2 l3 l4 l5 l6 l7 : Level} + {I : UU l1} {J : UU l2} {K : UU l3} + (๐‘„@(C , D) : polynomial-functor l6 l7 J K) + (๐‘ƒ@(A , B) : polynomial-functor l4 l5 I J) + where + + shape-comp-polynomial-functor : K โ†’ UU (l2 โŠ” l4 โŠ” l6 โŠ” l7) + shape-comp-polynomial-functor k = + ฮฃ (C k) (ฮป c โ†’ (j : J) โ†’ D j {k} c โ†’ A j) + + position-comp-polynomial-functor : + I โ†’ {k : K} โ†’ shape-comp-polynomial-functor k โ†’ UU (l2 โŠ” l5 โŠ” l7) + position-comp-polynomial-functor i {k} (c , a) = + ฮฃ J (ฮป j โ†’ ฮฃ (D j {k} c) (ฮป d โ†’ B i {j} (a j d))) + + comp-polynomial-functor : + polynomial-functor (l2 โŠ” l4 โŠ” l6 โŠ” l7) (l2 โŠ” l5 โŠ” l7) I K + comp-polynomial-functor = + ( shape-comp-polynomial-functor , position-comp-polynomial-functor) + + map-compute-type-comp-polynomial-functor : + {l8 : Level} (X : I โ†’ UU l8) (k : K) โ†’ + type-polynomial-functor comp-polynomial-functor X k โ†’ + type-polynomial-functor ๐‘„ (type-polynomial-functor ๐‘ƒ X) k + map-compute-type-comp-polynomial-functor X k ((c , a) , x) = + (c , (ฮป j d โ†’ (a j d , (ฮป i b โ†’ x i (j , d , b))))) + + map-inv-compute-type-comp-polynomial-functor : + {l8 : Level} (X : I โ†’ UU l8) (k : K) โ†’ + type-polynomial-functor ๐‘„ (type-polynomial-functor ๐‘ƒ X) k โ†’ + type-polynomial-functor comp-polynomial-functor X k + map-inv-compute-type-comp-polynomial-functor X k (c , q) = + ((c , (ฮป j d โ†’ pr1 (q j d))) , (ฮป i (j , d , b) โ†’ pr2 (q j d) i b)) + + is-equiv-map-compute-type-comp-polynomial-functor : + {l8 : Level} (X : I โ†’ UU l8) (k : K) โ†’ + is-equiv (map-compute-type-comp-polynomial-functor X k) + is-equiv-map-compute-type-comp-polynomial-functor X k = + is-equiv-is-invertible + ( map-inv-compute-type-comp-polynomial-functor X k) + ( refl-htpy) + ( refl-htpy) + + compute-type-comp-polynomial-functor : + {l8 : Level} (X : I โ†’ UU l8) (k : K) โ†’ + type-polynomial-functor comp-polynomial-functor X k โ‰ƒ + type-polynomial-functor ๐‘„ (type-polynomial-functor ๐‘ƒ X) k + compute-type-comp-polynomial-functor X k = + ( map-compute-type-comp-polynomial-functor X k , + is-equiv-map-compute-type-comp-polynomial-functor X k) + + coh-map-comp-polynomial-functor : + {l8 l9 : Level} {X : I โ†’ UU l8} {Y : I โ†’ UU l9} + (f : (i : I) โ†’ X i โ†’ Y i) (k : K) โ†’ + coherence-square-maps + ( map-compute-type-comp-polynomial-functor X k) + ( map-polynomial-functor comp-polynomial-functor f k) + ( map-polynomial-functor ๐‘„ (map-polynomial-functor ๐‘ƒ f) k) + ( map-compute-type-comp-polynomial-functor Y k) + coh-map-comp-polynomial-functor f k x = refl + + compute-map-comp-polynomial-functor : + {l8 l9 : Level} {X : I โ†’ UU l8} {Y : I โ†’ UU l9} + (f : (i : I) โ†’ X i โ†’ Y i) (k : K) โ†’ + ( map-polynomial-functor comp-polynomial-functor f k) ~ + ( map-inv-compute-type-comp-polynomial-functor Y k) โˆ˜ + ( map-polynomial-functor ๐‘„ (map-polynomial-functor ๐‘ƒ f) k) โˆ˜ + ( map-compute-type-comp-polynomial-functor X k) + compute-map-comp-polynomial-functor f k x = refl + + compute-map-comp-polynomial-functor' : + {l8 l9 : Level} {X : I โ†’ UU l8} {Y : I โ†’ UU l9} + (f : (i : I) โ†’ X i โ†’ Y i) (k : K) โ†’ + ( map-polynomial-functor ๐‘„ (map-polynomial-functor ๐‘ƒ f) k) ~ + ( map-compute-type-comp-polynomial-functor Y k) โˆ˜ + ( map-polynomial-functor comp-polynomial-functor f k) โˆ˜ + ( map-inv-compute-type-comp-polynomial-functor X k) + compute-map-comp-polynomial-functor' f k x = refl +``` diff --git a/src/trees/polynomial-endofunctors.lagda.md b/src/trees/polynomial-endofunctors.lagda.md index 793fbf9b59..6434bacb73 100644 --- a/src/trees/polynomial-endofunctors.lagda.md +++ b/src/trees/polynomial-endofunctors.lagda.md @@ -21,6 +21,8 @@ open import foundation.transport-along-identifications open import foundation.universe-levels open import foundation.whiskering-homotopies-composition +open import foundation-core.commuting-triangles-of-maps +open import foundation-core.retractions open import foundation-core.torsorial-type-families ``` @@ -28,15 +30,16 @@ open import foundation-core.torsorial-type-families ## Idea -Given a type `A` equipped with a type family `B` over `A`, the **polynomial -endofunctor** `P A B` is defined by +Given a type `A` equipped with a type family `B` over `A`, the +{{#concept "polynomial endofunctor"}} `๐‘ƒ A B` is defined by ```text X โ†ฆ ฮฃ (x : A), (B x โ†’ X) ``` -Polynomial endofunctors are important in the study of W-types, and also in the -study of combinatorial species. +Polynomial endofunctors are important in the study of +[W-types](trees.w-types.md), and also in the study of +[combinatorial species](species.md). ## Definitions @@ -59,49 +62,50 @@ module _ Eq-type-polynomial-endofunctor : (x y : type-polynomial-endofunctor A B X) โ†’ UU (l1 โŠ” l2 โŠ” l3) Eq-type-polynomial-endofunctor x y = - ฮฃ (pr1 x ๏ผ pr1 y) (ฮป p โ†’ (pr2 x) ~ ((pr2 y) โˆ˜ (tr B p))) + ฮฃ (pr1 x ๏ผ pr1 y) (ฮป p โ†’ coherence-triangle-maps (pr2 x) (pr2 y) (tr B p)) refl-Eq-type-polynomial-endofunctor : (x : type-polynomial-endofunctor A B X) โ†’ Eq-type-polynomial-endofunctor x x - refl-Eq-type-polynomial-endofunctor (pair x ฮฑ) = pair refl refl-htpy + refl-Eq-type-polynomial-endofunctor (x , ฮฑ) = (refl , refl-htpy) + + Eq-eq-type-polynomial-endofunctor : + (x y : type-polynomial-endofunctor A B X) โ†’ + x ๏ผ y โ†’ Eq-type-polynomial-endofunctor x y + Eq-eq-type-polynomial-endofunctor x .x refl = + refl-Eq-type-polynomial-endofunctor x is-torsorial-Eq-type-polynomial-endofunctor : (x : type-polynomial-endofunctor A B X) โ†’ is-torsorial (Eq-type-polynomial-endofunctor x) - is-torsorial-Eq-type-polynomial-endofunctor (pair x ฮฑ) = + is-torsorial-Eq-type-polynomial-endofunctor (x , ฮฑ) = is-torsorial-Eq-structure ( is-torsorial-Id x) - ( pair x refl) + ( x , refl) ( is-torsorial-htpy ฮฑ) - Eq-type-polynomial-endofunctor-eq : - (x y : type-polynomial-endofunctor A B X) โ†’ - x ๏ผ y โ†’ Eq-type-polynomial-endofunctor x y - Eq-type-polynomial-endofunctor-eq x .x refl = - refl-Eq-type-polynomial-endofunctor x - - is-equiv-Eq-type-polynomial-endofunctor-eq : + is-equiv-Eq-eq-type-polynomial-endofunctor : (x y : type-polynomial-endofunctor A B X) โ†’ - is-equiv (Eq-type-polynomial-endofunctor-eq x y) - is-equiv-Eq-type-polynomial-endofunctor-eq x = + is-equiv (Eq-eq-type-polynomial-endofunctor x y) + is-equiv-Eq-eq-type-polynomial-endofunctor x = fundamental-theorem-id ( is-torsorial-Eq-type-polynomial-endofunctor x) - ( Eq-type-polynomial-endofunctor-eq x) + ( Eq-eq-type-polynomial-endofunctor x) eq-Eq-type-polynomial-endofunctor : (x y : type-polynomial-endofunctor A B X) โ†’ Eq-type-polynomial-endofunctor x y โ†’ x ๏ผ y eq-Eq-type-polynomial-endofunctor x y = - map-inv-is-equiv (is-equiv-Eq-type-polynomial-endofunctor-eq x y) + map-inv-is-equiv (is-equiv-Eq-eq-type-polynomial-endofunctor x y) is-retraction-eq-Eq-type-polynomial-endofunctor : (x y : type-polynomial-endofunctor A B X) โ†’ - ( ( eq-Eq-type-polynomial-endofunctor x y) โˆ˜ - ( Eq-type-polynomial-endofunctor-eq x y)) ~ id + is-retraction + ( Eq-eq-type-polynomial-endofunctor x y) + ( eq-Eq-type-polynomial-endofunctor x y) is-retraction-eq-Eq-type-polynomial-endofunctor x y = is-retraction-map-inv-is-equiv - ( is-equiv-Eq-type-polynomial-endofunctor-eq x y) + ( is-equiv-Eq-eq-type-polynomial-endofunctor x y) coh-refl-eq-Eq-type-polynomial-endofunctor : (x : type-polynomial-endofunctor A B X) โ†’ @@ -128,17 +132,22 @@ htpy-polynomial-endofunctor : {l1 l2 l3 l4 : Level} (A : UU l1) (B : A โ†’ UU l2) {X : UU l3} {Y : UU l4} {f g : X โ†’ Y} โ†’ f ~ g โ†’ map-polynomial-endofunctor A B f ~ map-polynomial-endofunctor A B g -htpy-polynomial-endofunctor A B {X = X} {Y} {f} {g} H (pair x ฮฑ) = +htpy-polynomial-endofunctor A B {f = f} {g} H (x , ฮฑ) = eq-Eq-type-polynomial-endofunctor - ( map-polynomial-endofunctor A B f (pair x ฮฑ)) - ( map-polynomial-endofunctor A B g (pair x ฮฑ)) - ( pair refl (H ยทr ฮฑ)) + ( map-polynomial-endofunctor A B f (x , ฮฑ)) + ( map-polynomial-endofunctor A B g (x , ฮฑ)) + ( refl , H ยทr ฮฑ) coh-refl-htpy-polynomial-endofunctor : {l1 l2 l3 l4 : Level} (A : UU l1) (B : A โ†’ UU l2) {X : UU l3} {Y : UU l4} (f : X โ†’ Y) โ†’ htpy-polynomial-endofunctor A B (refl-htpy {f = f}) ~ refl-htpy -coh-refl-htpy-polynomial-endofunctor A B {X = X} {Y} f (pair x ฮฑ) = +coh-refl-htpy-polynomial-endofunctor A B f (x , ฮฑ) = coh-refl-eq-Eq-type-polynomial-endofunctor - ( map-polynomial-endofunctor A B f (pair x ฮฑ)) + ( map-polynomial-endofunctor A B f (x , ฮฑ)) ``` + +## See also + +- [Multivariable polynomial functors](trees.multivariable-polynomial-functors.md) + for the generalization of polynomial endofunctors to type families.