From 2fcd82c09173a90b5a48e24d0bfd300cbacacc2c Mon Sep 17 00:00:00 2001 From: Fredrik Bakke Date: Mon, 16 Jun 2025 15:57:32 +0100 Subject: [PATCH 1/8] define multivariable polynomial functors --- src/trees.lagda.md | 1 + ...multivariable-polynomial-functors.lagda.md | 253 ++++++++++++++++++ src/trees/polynomial-endofunctors.lagda.md | 65 +++-- 3 files changed, 291 insertions(+), 28 deletions(-) create mode 100644 src/trees/multivariable-polynomial-functors.lagda.md 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..94adcb781c --- /dev/null +++ b/src/trees/multivariable-polynomial-functors.lagda.md @@ -0,0 +1,253 @@ +# Multivariable polynomial functors + +```agda +module trees.multivariable-polynomial-functors where +``` + +
Imports + +```agda +open import foundation.binary-homotopies +open import foundation.commuting-triangles-of-maps +open import foundation.contractible-types +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.functoriality-dependent-pair-types +open import foundation.fundamental-theorem-of-identity-types +open import foundation.homotopies +open import foundation.homotopy-induction +open import foundation.identity-types +open import foundation.structure-identity-principle +open import foundation.transport-along-identifications +open import foundation.universe-levels +open import foundation.whiskering-homotopies-composition + +open import foundation-core.retractions +open import foundation-core.torsorial-type-families +``` + +
+ +## Idea + +{{#concept "Multivariable polynomial functors"}} are a generalization of the +notion of [polynomial endofunctors](trees.polynomial-endofunctors.md) to the +case where one has a family of types(variables) as opposed to a single type. + +Given a family of types `A : J โ†’ ๐’ฐ` and a type family +`B : I โ†’ {j : J} โ†’ A j โ†’ ๐’ฑ` over `A`, we have a multivariable polynomial functor +`P A B` with action on type families given by + +```text + 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) โ†’ + ((j : J) โ†’ type-polynomial-functor' A B Y j) + map-polynomial-functor' A B f x j = + ( pr1 (x j) , (ฮป i b โ†’ f i (pr2 (x j) 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) โ†’ + ((j : 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 {f = f} {g} H x j = + eq-pair-eq-fiber + ( eq-binary-htpy + ( pr2 (map-polynomial-functor' A B f x j)) + ( pr2 (map-polynomial-functor' A B g x j)) + ( ฮป i โ†’ H i โˆ˜ pr2 (x j) 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 +``` 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. From 151a7e3cd401cfdc4d590171ae99059c74b76d99 Mon Sep 17 00:00:00 2001 From: Fredrik Bakke Date: Mon, 16 Jun 2025 16:54:46 +0100 Subject: [PATCH 2/8] The identity multivariable polynomial functor --- ...universal-property-identity-types.lagda.md | 85 ++++++++++--------- ...multivariable-polynomial-functors.lagda.md | 42 ++++++++- 2 files changed, 85 insertions(+), 42 deletions(-) diff --git a/src/foundation/universal-property-identity-types.lagda.md b/src/foundation/universal-property-identity-types.lagda.md index a231b5f29e..c0be19e51b 100644 --- a/src/foundation/universal-property-identity-types.lagda.md +++ b/src/foundation/universal-property-identity-types.lagda.md @@ -19,6 +19,8 @@ open import foundation.fundamental-theorem-of-identity-types open import foundation.identity-types open import foundation.injective-maps open import foundation.preunivalence +open import foundation-core.sections +open import foundation-core.retractions open import foundation.univalence open import foundation.universe-levels @@ -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/trees/multivariable-polynomial-functors.lagda.md b/src/trees/multivariable-polynomial-functors.lagda.md index 94adcb781c..6d3f6a3bdd 100644 --- a/src/trees/multivariable-polynomial-functors.lagda.md +++ b/src/trees/multivariable-polynomial-functors.lagda.md @@ -8,7 +8,8 @@ module trees.multivariable-polynomial-functors where ```agda open import foundation.binary-homotopies -open import foundation.commuting-triangles-of-maps +open import foundation-core.commuting-triangles-of-maps +open import foundation-core.commuting-squares-of-maps open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.equality-dependent-function-types @@ -22,6 +23,9 @@ open import foundation.homotopy-induction 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.whiskering-homotopies-composition @@ -251,3 +255,39 @@ module _ 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 x = pr2 x i refl + + compute-map-id-polynomial-functor : + {l2 l3 : Level} {X : I โ†’ UU l2} {Y : I โ†’ UU l3} (f : (i : I) โ†’ X i โ†’ Y i) + (x : (i : I) โ†’ type-polynomial-functor id-polynomial-functor X i) โ†’ + (i : I) โ†’ + map-compute-type-id-polynomial-functor Y i + ( map-polynomial-functor id-polynomial-functor f x i) ๏ผ + f i (map-compute-type-id-polynomial-functor X i (x i)) + compute-map-id-polynomial-functor f i = refl-htpy +``` From 13bbafde9267480a7170ab6e4e50b2a75e85485f Mon Sep 17 00:00:00 2001 From: Fredrik Bakke Date: Mon, 16 Jun 2025 17:52:35 +0100 Subject: [PATCH 3/8] composition of polynomials --- ...multivariable-polynomial-functors.lagda.md | 100 +++++++++++++++--- 1 file changed, 84 insertions(+), 16 deletions(-) diff --git a/src/trees/multivariable-polynomial-functors.lagda.md b/src/trees/multivariable-polynomial-functors.lagda.md index 6d3f6a3bdd..0db39e5e15 100644 --- a/src/trees/multivariable-polynomial-functors.lagda.md +++ b/src/trees/multivariable-polynomial-functors.lagda.md @@ -19,6 +19,7 @@ open import foundation.function-types open import foundation.functoriality-dependent-pair-types open import foundation.fundamental-theorem-of-identity-types open import foundation.homotopies +open import foundation.cartesian-product-types open import foundation.homotopy-induction open import foundation.identity-types open import foundation.structure-identity-principle @@ -215,17 +216,15 @@ module _ (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) โ†’ - ((j : J) โ†’ type-polynomial-functor' A B Y j) - map-polynomial-functor' A B f x j = - ( pr1 (x j) , (ฮป i b โ†’ f i (pr2 (x j) i b))) + (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) โ†’ - ((j : J) โ†’ type-polynomial-functor ๐‘ƒ Y j) + (j : J) โ†’ type-polynomial-functor ๐‘ƒ X j โ†’ type-polynomial-functor ๐‘ƒ Y j map-polynomial-functor (A , B) = map-polynomial-functor' A B ``` @@ -241,12 +240,8 @@ module _ {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 {f = f} {g} H x j = - eq-pair-eq-fiber - ( eq-binary-htpy - ( pr2 (map-polynomial-functor' A B f x j)) - ( pr2 (map-polynomial-functor' A B g x j)) - ( ฮป i โ†’ H i โˆ˜ pr2 (x j) i)) + binary-htpy-polynomial-functor' A B {f = f} {g} 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) @@ -280,14 +275,87 @@ module _ 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 x = pr2 x i refl + map-compute-type-id-polynomial-functor X i = + map-equiv (compute-type-id-polynomial-functor X i) compute-map-id-polynomial-functor : {l2 l3 : Level} {X : I โ†’ UU l2} {Y : I โ†’ UU l3} (f : (i : I) โ†’ X i โ†’ Y i) (x : (i : I) โ†’ type-polynomial-functor id-polynomial-functor X i) โ†’ (i : I) โ†’ - map-compute-type-id-polynomial-functor Y i - ( map-polynomial-functor id-polynomial-functor f x i) ๏ผ - f i (map-compute-type-id-polynomial-functor X i (x i)) + ( map-compute-type-id-polynomial-functor Y i + ( map-polynomial-functor id-polynomial-functor f i (x i))) ๏ผ + ( f i (map-compute-type-id-polynomial-functor X i (x i))) compute-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. The resulting composite shapes +and positions are computed via convolution. + +```agda +module _ + {l1 l2 l3 l4 l5 l6 l7 : Level} + {I : UU l1} {J : UU l2} {K : UU l3} + (๐‘ƒ@(A , B) : polynomial-functor l4 l5 I J) + (๐‘„@(C , D) : polynomial-functor l6 l7 J K) + where + + shape-comp-polynomial-functor : K โ†’ UU (l2 โŠ” l4 โŠ” l6 โŠ” l7) + shape-comp-polynomial-functor k = ฮฃ (C k) (ฮป c โ†’ (j : J) โ†’ D j 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 c) (ฮป d โ†’ B i (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) + + compute-map-comp-polynomial-functor : + {l8 l9 : Level} {X : I โ†’ UU l8} {Y : I โ†’ UU l9} (f : (i : I) โ†’ X i โ†’ Y i) + (x : (k : K) โ†’ type-polynomial-functor comp-polynomial-functor X k) โ†’ + (k : K) โ†’ + map-compute-type-comp-polynomial-functor Y k + ( map-polynomial-functor comp-polynomial-functor f k (x k)) ๏ผ + map-polynomial-functor ๐‘„ + ( map-polynomial-functor ๐‘ƒ f) + ( k) + ( map-compute-type-comp-polynomial-functor X k (x k)) + compute-map-comp-polynomial-functor f x k = refl +``` From 53cdfeb5a6568ff3a41d68beb0f6cd96d986b3d2 Mon Sep 17 00:00:00 2001 From: Fredrik Bakke Date: Mon, 16 Jun 2025 17:54:21 +0100 Subject: [PATCH 4/8] remove unused imports --- src/trees/multivariable-polynomial-functors.lagda.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/trees/multivariable-polynomial-functors.lagda.md b/src/trees/multivariable-polynomial-functors.lagda.md index 0db39e5e15..bf859d2308 100644 --- a/src/trees/multivariable-polynomial-functors.lagda.md +++ b/src/trees/multivariable-polynomial-functors.lagda.md @@ -8,19 +8,13 @@ module trees.multivariable-polynomial-functors where ```agda open import foundation.binary-homotopies -open import foundation-core.commuting-triangles-of-maps -open import foundation-core.commuting-squares-of-maps -open import foundation.contractible-types 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.functoriality-dependent-pair-types open import foundation.fundamental-theorem-of-identity-types open import foundation.homotopies -open import foundation.cartesian-product-types -open import foundation.homotopy-induction open import foundation.identity-types open import foundation.structure-identity-principle open import foundation.transport-along-identifications @@ -28,8 +22,8 @@ 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.whiskering-homotopies-composition +open import foundation-core.commuting-triangles-of-maps open import foundation-core.retractions open import foundation-core.torsorial-type-families ``` From a7fc45996d2ea6333505c4b98ea9466ec6612048 Mon Sep 17 00:00:00 2001 From: Fredrik Bakke Date: Mon, 16 Jun 2025 17:54:34 +0100 Subject: [PATCH 5/8] pre-commit --- src/foundation/universal-property-identity-types.lagda.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/foundation/universal-property-identity-types.lagda.md b/src/foundation/universal-property-identity-types.lagda.md index c0be19e51b..4904b22306 100644 --- a/src/foundation/universal-property-identity-types.lagda.md +++ b/src/foundation/universal-property-identity-types.lagda.md @@ -19,8 +19,6 @@ open import foundation.fundamental-theorem-of-identity-types open import foundation.identity-types open import foundation.injective-maps open import foundation.preunivalence -open import foundation-core.sections -open import foundation-core.retractions open import foundation.univalence open import foundation.universe-levels @@ -33,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 ``` From 2aaa9fc1e2ef32997db03703468fc286c3a0341c Mon Sep 17 00:00:00 2001 From: Fredrik Bakke Date: Mon, 16 Jun 2025 18:25:52 +0100 Subject: [PATCH 6/8] edits --- ...multivariable-polynomial-functors.lagda.md | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/trees/multivariable-polynomial-functors.lagda.md b/src/trees/multivariable-polynomial-functors.lagda.md index bf859d2308..dd021950e7 100644 --- a/src/trees/multivariable-polynomial-functors.lagda.md +++ b/src/trees/multivariable-polynomial-functors.lagda.md @@ -23,6 +23,7 @@ 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 @@ -111,7 +112,7 @@ module _ 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) + 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) โ†’ @@ -234,7 +235,7 @@ module _ {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 {f = f} {g} H j x = + 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 : @@ -274,11 +275,12 @@ module _ compute-map-id-polynomial-functor : {l2 l3 : Level} {X : I โ†’ UU l2} {Y : I โ†’ UU l3} (f : (i : I) โ†’ X i โ†’ Y i) - (x : (i : I) โ†’ type-polynomial-functor id-polynomial-functor X i) โ†’ (i : I) โ†’ - ( map-compute-type-id-polynomial-functor Y i - ( map-polynomial-functor id-polynomial-functor f i (x i))) ๏ผ - ( f i (map-compute-type-id-polynomial-functor X i (x 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) compute-map-id-polynomial-functor f i = refl-htpy ``` @@ -286,8 +288,7 @@ module _ 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. The resulting composite shapes -and positions are computed via convolution. +`๐‘ƒ C D โˆ˜ ๐‘ƒ A B` is again a polynomial functor. ```agda module _ @@ -298,12 +299,13 @@ module _ where shape-comp-polynomial-functor : K โ†’ UU (l2 โŠ” l4 โŠ” l6 โŠ” l7) - shape-comp-polynomial-functor k = ฮฃ (C k) (ฮป c โ†’ (j : J) โ†’ D j c โ†’ A j) + 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 c) (ฮป d โ†’ B i (a j d))) + ฮฃ 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 @@ -342,14 +344,12 @@ module _ is-equiv-map-compute-type-comp-polynomial-functor X k) compute-map-comp-polynomial-functor : - {l8 l9 : Level} {X : I โ†’ UU l8} {Y : I โ†’ UU l9} (f : (i : I) โ†’ X i โ†’ Y i) - (x : (k : K) โ†’ type-polynomial-functor comp-polynomial-functor X k) โ†’ - (k : K) โ†’ - map-compute-type-comp-polynomial-functor Y k - ( map-polynomial-functor comp-polynomial-functor f k (x k)) ๏ผ - map-polynomial-functor ๐‘„ - ( map-polynomial-functor ๐‘ƒ f) - ( k) - ( map-compute-type-comp-polynomial-functor X k (x k)) - compute-map-comp-polynomial-functor f x k = refl + {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) + compute-map-comp-polynomial-functor f k x = refl ``` From bec24f5da85aad24e9d3870a1df7e81753edcd22 Mon Sep 17 00:00:00 2001 From: Fredrik Bakke Date: Mon, 16 Jun 2025 18:26:22 +0100 Subject: [PATCH 7/8] order --- src/trees/multivariable-polynomial-functors.lagda.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trees/multivariable-polynomial-functors.lagda.md b/src/trees/multivariable-polynomial-functors.lagda.md index dd021950e7..40f0bebab6 100644 --- a/src/trees/multivariable-polynomial-functors.lagda.md +++ b/src/trees/multivariable-polynomial-functors.lagda.md @@ -294,8 +294,8 @@ and `๐‘ƒ C D : (J โ†’ Type) โ†’ (K โ†’ Type)`, then the composite functor module _ {l1 l2 l3 l4 l5 l6 l7 : Level} {I : UU l1} {J : UU l2} {K : UU l3} - (๐‘ƒ@(A , B) : polynomial-functor l4 l5 I J) (๐‘„@(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) From 88c8f6487342b7cb845ea6a95b7a2b073b5fa903 Mon Sep 17 00:00:00 2001 From: Fredrik Bakke Date: Tue, 17 Jun 2025 16:47:06 +0100 Subject: [PATCH 8/8] edits --- src/foundation/structure.lagda.md | 4 ++ src/species/hasse-weil-species.lagda.md | 3 +- ...multivariable-polynomial-functors.lagda.md | 39 +++++++++++++------ 3 files changed, 34 insertions(+), 12 deletions(-) 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/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/multivariable-polynomial-functors.lagda.md b/src/trees/multivariable-polynomial-functors.lagda.md index 40f0bebab6..31d0fc02f9 100644 --- a/src/trees/multivariable-polynomial-functors.lagda.md +++ b/src/trees/multivariable-polynomial-functors.lagda.md @@ -33,16 +33,15 @@ open import foundation-core.torsorial-type-families ## Idea -{{#concept "Multivariable polynomial functors"}} are a generalization of the -notion of [polynomial endofunctors](trees.polynomial-endofunctors.md) to the -case where one has a family of types(variables) as opposed to a single type. - -Given a family of types `A : J โ†’ ๐’ฐ` and a type family -`B : I โ†’ {j : J} โ†’ A j โ†’ ๐’ฑ` over `A`, we have a multivariable polynomial functor -`P A B` with action on type families given by +{{#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 - X j โ†ฆ ฮฃ (a : A j), ((i : I) โ†’ B i a โ†’ X i) + ๐‘ƒ A B X j := ฮฃ (a : A j), ((i : I) โ†’ B i a โ†’ X i). ``` ## Definitions @@ -273,7 +272,7 @@ module _ map-compute-type-id-polynomial-functor X i = map-equiv (compute-type-id-polynomial-functor X i) - compute-map-id-polynomial-functor : + 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 @@ -281,7 +280,7 @@ module _ ( map-polynomial-functor id-polynomial-functor f i) ( f i) ( map-compute-type-id-polynomial-functor Y i) - compute-map-id-polynomial-functor f i = refl-htpy + coh-map-id-polynomial-functor f i = refl-htpy ``` ### Composition of multivariable polynomial functors @@ -343,7 +342,7 @@ module _ ( map-compute-type-comp-polynomial-functor X k , is-equiv-map-compute-type-comp-polynomial-functor X k) - compute-map-comp-polynomial-functor : + 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 @@ -351,5 +350,23 @@ module _ ( 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 ```