Covariantly functorial type families¶
These formalisations correspond to Section 8 of the RS17 paper.
This is a literate rzk
file:
Prerequisites¶
hott/*
- We require various prerequisites from homotopy type theory, for instance the notion of contractible types.3-simplicial-type-theory.md
— We rely on definitions of simplicies and their subshapes.5-segal-types.md
- We make use of the notion of Segal types and their structures.
Some of the definitions in this file rely on extension extensionality:
Dependent hom types¶
In a type family over a base type, there is a dependent hom type of arrows that live over a specified arrow in the base type.
#def dhom
( A : U)
( x y : A)
( f : hom A x y)
( C : A → U)
( u : C x)
( v : C y)
: U
:= ( t : Δ¹) → C (f t) [t ≡ 0₂ ↦ u , t ≡ 1₂ ↦ v]
It will be convenient to collect together dependent hom types with fixed domain but varying codomain.
#def dhom-from
( A : U)
( x y : A)
( f : hom A x y)
( C : A → U)
( u : C x)
: U
:= ( Σ ( v : C y) , dhom A x y f C u v)
There is also a type of dependent commutative triangles over a base commutative triangle.
#def dhom2
( A : U)
( x y z : A)
( f : hom A x y)
( g : hom A y z)
( h : hom A x z)
( α : hom2 A x y z f g h)
( C : A → U)
( u : C x)
( v : C y)
( w : C z)
( ff : dhom A x y f C u v)
( gg : dhom A y z g C v w)
( hh : dhom A x z h C u w)
: U
:=
( ( t1 , t2) : Δ²) → C (α (t1 , t2)) [
t2 ≡ 0₂ ↦ ff t1
, t1 ≡ 1₂ ↦ gg t2
, t2 ≡ t1 ↦ hh t2
]
Covariant families¶
A family of types over a base type is covariant if every arrow in the base has a unique lift with specified domain.
#def is-covariant
( A : U)
( C : A → U)
: U
:=
( x : A) → (y : A) → (f : hom A x y) → (u : C x)
→ is-contr (dhom-from A x y f C u)
#def covariant-family (A : U)
: U
:= ( Σ ( C : (A → U)) , is-covariant A C)
The notion of having a unique lift with a fixed domain may also be expressed by contractibility of the type of extensions along the domain inclusion into the 1-simplex.
#def has-unique-fixed-domain-lifts
( A : U)
( C : A → U)
: U
:=
( x : A) → (y : A) → (f : hom A x y) → (u : C x)
→ is-contr ((t : Δ¹) → C (f t) [ t ≡ 0₂ ↦ u])
These two notions of covariance are equivalent because the two types of lifts of a base arrow with fixed domain are equivalent. Note that this is not quite an instance of Theorem 4.4 but its proof, with a very small modification, works here.
#def equiv-lifts-with-fixed-domain
( A : U)
( C : A → U)
( x y : A)
( f : hom A x y)
( u : C x)
: Equiv
( ( t : Δ¹) → C (f t) [ t ≡ 0₂ ↦ u])
( dhom-from A x y f C u)
:=
( \ h → (h 1₂ , \ t → h t)
, ( ( \ fg t → (second fg) t , \ h → refl)
, ( ( \ fg t → (second fg) t , \ h → refl))))
By the equivalence-invariance of contractibility, this proves the desired logical equivalence
#def has-unique-fixed-domain-lifts-iff-is-covariant
( A : U)
( C : A → U)
: iff
( has-unique-fixed-domain-lifts A C)
( is-covariant A C)
:=
( ( \ C-has-unique-lifts x y f u →
is-contr-equiv-is-contr
( ( t : Δ¹) → C (f t) [ t ≡ 0₂ ↦ u])
( dhom-from A x y f C u)
( equiv-lifts-with-fixed-domain A C x y f u)
( C-has-unique-lifts x y f u))
, ( \ C-is-covariant x y f u →
is-contr-equiv-is-contr'
( ( t : Δ¹) → C (f t) [ t ≡ 0₂ ↦ u])
( dhom-from A x y f C u)
( equiv-lifts-with-fixed-domain A C x y f u)
( C-is-covariant x y f u)))
Representable covariant families¶
If A is a Segal type and a : A is any term, then hom A a defines a covariant family over A, and conversely if this family is covariant for every a : A, then A must be a Segal type. The proof involves a rather lengthy composition of equivalences.
#def dhom-representable
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
( v : hom A a y)
: U
:= dhom A x y f (\ z → hom A a z) u v
By uncurrying (RS 4.2) we have an equivalence:
#def uncurried-dhom-representable
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
( v : hom A a y)
: Equiv
( dhom-representable A a x y f u v)
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
:=
curry-uncurry 2 2 Δ¹ ∂Δ¹ Δ¹ ∂Δ¹ (\ t s → A)
( \ ( t , s) →
recOR
( ( t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t))
#def dhom-from-representable
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: U
:= dhom-from A x y f (\ z → hom A a z) u
By uncurrying (RS 4.2) we have an equivalence:
#def uncurried-dhom-from-representable
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( dhom-from-representable A a x y f u)
( Σ ( v : hom A a y)
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
:=
total-equiv-family-equiv
( hom A a y)
( \ v → dhom-representable A a x y f u v)
( \ v →
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
( \ v → uncurried-dhom-representable A a x y f u v)
#def square-to-hom2-pushout
( A : U)
( w x y z : A)
( u : hom A w x)
( f : hom A x z)
( g : hom A w y)
( v : hom A y z)
: ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ g t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
→ ( Σ ( d : hom A w z) , product (hom2 A w x z u f d) (hom2 A w y z g v d))
:=
\ sq →
( ( \ t → sq (t , t)) , (\ (t , s) → sq (s , t) , \ (t , s) → sq (t , s)))
#def hom2-pushout-to-square
( A : U)
( w x y z : A)
( u : hom A w x)
( f : hom A x z)
( g : hom A w y)
( v : hom A y z)
: ( Σ ( d : hom A w z)
, ( product (hom2 A w x z u f d) (hom2 A w y z g v d)))
→ ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ g t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
:=
\ ( d , (α1 , α2)) (t , s) →
recOR
( t ≤ s ↦ α1 (s , t)
, s ≤ t ↦ α2 (t , s))
#def equiv-square-hom2-pushout
( A : U)
( w x y z : A)
( u : hom A w x)
( f : hom A x z)
( g : hom A w y)
( v : hom A y z)
: Equiv
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ g t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
( Σ ( d : hom A w z) , (product (hom2 A w x z u f d) (hom2 A w y z g v d)))
:=
( ( square-to-hom2-pushout A w x y z u f g v)
, ( ( hom2-pushout-to-square A w x y z u f g v , \ sq → refl)
, ( hom2-pushout-to-square A w x y z u f g v , \ αs → refl)))
#def representable-dhom-from-uncurry-hom2
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( Σ ( v : hom A a y)
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
( Σ ( v : hom A a y)
, ( Σ ( d : hom A a y)
, ( product (hom2 A a x y u f d) (hom2 A a a y (id-hom A a) v d))))
:=
total-equiv-family-equiv
( hom A a y)
( \ v →
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
( \ v →
( Σ ( d : hom A a y)
, ( product (hom2 A a x y u f d) (hom2 A a a y (id-hom A a) v d))))
( \ v → equiv-square-hom2-pushout A a x a y u f (id-hom A a) v)
#def representable-dhom-from-hom2
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( dhom-from-representable A a x y f u)
( Σ ( d : hom A a y)
, ( Σ ( v : hom A a y)
, ( product (hom2 A a x y u f d) (hom2 A a a y (id-hom A a) v d))))
:=
equiv-triple-comp
( dhom-from-representable A a x y f u)
( Σ ( v : hom A a y)
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
( Σ ( v : hom A a y)
, ( Σ ( d : hom A a y)
, ( product (hom2 A a x y u f d) (hom2 A a a y (id-hom A a) v d))))
( Σ ( d : hom A a y)
, ( Σ ( v : hom A a y)
, ( product (hom2 A a x y u f d) (hom2 A a a y (id-hom A a) v d))))
( uncurried-dhom-from-representable A a x y f u)
( representable-dhom-from-uncurry-hom2 A a x y f u)
( fubini-Σ (hom A a y) (hom A a y)
( \ v d → product (hom2 A a x y u f d) (hom2 A a a y (id-hom A a) v d)))
#def representable-dhom-from-hom2-dist
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( dhom-from-representable A a x y f u)
( Σ ( d : hom A a y)
, ( product
( hom2 A a x y u f d)
( Σ ( v : hom A a y) , (hom2 A a a y (id-hom A a) v d))))
:=
equiv-right-cancel
( dhom-from-representable A a x y f u)
( Σ ( d : hom A a y)
, ( product
( hom2 A a x y u f d)
( Σ ( v : hom A a y) , hom2 A a a y (id-hom A a) v d)))
( Σ ( d : hom A a y)
, ( Σ ( v : hom A a y)
, ( product (hom2 A a x y u f d) (hom2 A a a y (id-hom A a) v d))))
( representable-dhom-from-hom2 A a x y f u)
( total-equiv-family-equiv
( hom A a y)
( \ d →
( product
( hom2 A a x y u f d)
( Σ ( v : hom A a y) , (hom2 A a a y (id-hom A a) v d))))
( \ d →
( Σ ( v : hom A a y)
, ( product (hom2 A a x y u f d) (hom2 A a a y (id-hom A a) v d))))
( \ d →
( distributive-product-Σ
( hom2 A a x y u f d)
( hom A a y)
( \ v → hom2 A a a y (id-hom A a) v d))))
Now we introduce the hypothesis that A is Segal type.
#def representable-dhom-from-path-space-is-segal
( A : U)
( is-segal-A : is-segal A)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( dhom-from-representable A a x y f u)
( Σ ( d : hom A a y)
, ( product (hom2 A a x y u f d) (Σ (v : hom A a y) , (v = d))))
:=
equiv-right-cancel
( dhom-from-representable A a x y f u)
( Σ ( d : hom A a y)
, ( product (hom2 A a x y u f d) (Σ (v : hom A a y) , (v = d))))
( Σ ( d : hom A a y)
, ( product
( hom2 A a x y u f d)
( Σ ( v : hom A a y) , hom2 A a a y (id-hom A a) v d)))
( representable-dhom-from-hom2-dist A a x y f u)
( total-equiv-family-equiv
( hom A a y)
( \ d → product (hom2 A a x y u f d) (Σ (v : hom A a y) , (v = d)))
( \ d →
( product
( hom2 A a x y u f d)
( Σ ( v : hom A a y) , hom2 A a a y (id-hom A a) v d)))
( \ d →
( total-equiv-family-equiv
( hom2 A a x y u f d)
( \ α → (Σ (v : hom A a y) , (v = d)))
( \ α → (Σ (v : hom A a y) , hom2 A a a y (id-hom A a) v d))
( \ α →
( total-equiv-family-equiv
( hom A a y)
( \ v → (v = d))
( \ v → hom2 A a a y (id-hom A a) v d)
( \ v → (equiv-homotopy-hom2-is-segal A is-segal-A a y v d)))))))
#def codomain-based-paths-contraction
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
( d : hom A a y)
: Equiv
( product (hom2 A a x y u f d) (Σ (v : hom A a y) , (v = d)))
( hom2 A a x y u f d)
:=
equiv-projection-contractible-fibers
( hom2 A a x y u f d)
( \ α → (Σ (v : hom A a y) , (v = d)))
( \ α → is-contr-codomain-based-paths (hom A a y) d)
#def is-segal-representable-dhom-from-hom2
( A : U)
( is-segal-A : is-segal A)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( dhom-from-representable A a x y f u)
( Σ ( d : hom A a y) , (hom2 A a x y u f d))
:=
equiv-comp
( dhom-from-representable A a x y f u)
( Σ ( d : hom A a y)
, ( product (hom2 A a x y u f d) (Σ (v : hom A a y) , (v = d))))
( Σ ( d : hom A a y) , (hom2 A a x y u f d))
( representable-dhom-from-path-space-is-segal A is-segal-A a x y f u)
( total-equiv-family-equiv
( hom A a y)
( \ d → product (hom2 A a x y u f d) (Σ (v : hom A a y) , (v = d)))
( \ d → hom2 A a x y u f d)
( \ d → codomain-based-paths-contraction A a x y f u d))
#def is-segal-representable-dhom-from-contractible
( A : U)
( is-segal-A : is-segal A)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: is-contr (dhom-from-representable A a x y f u)
:=
is-contr-equiv-is-contr'
( dhom-from-representable A a x y f u)
( Σ ( d : hom A a y) , (hom2 A a x y u f d))
( is-segal-representable-dhom-from-hom2 A is-segal-A a x y f u)
( is-segal-A a x y u f)
Finally, we see that covariant hom families in a Segal type are covariant.
#def is-covariant-representable-is-segal
( A : U)
( is-segal-A : is-segal A)
( a : A)
: is-covariant A (\ x → hom A a x)
:= is-segal-representable-dhom-from-contractible A is-segal-A a
The proof of the claimed converse result given in the original source is circular - using Proposition 5.10, which holds only for Segal types - so instead we argue as follows:
#def is-segal-is-covariant-representable
( A : U)
( corepresentable-family-is-covariant : (a : A)
→ is-covariant A (\ x → hom A a x))
: is-segal A
:=
\ x y z f g →
is-contr-base-is-contr-Σ
( Σ ( h : hom A x z) , hom2 A x y z f g h)
( \ hk → Σ (v : hom A x z) , hom2 A x x z (id-hom A x) v (first hk))
( \ hk → (first hk , \ (t , s) → first hk s))
( is-contr-equiv-is-contr'
( Σ ( hk : Σ (h : hom A x z) , hom2 A x y z f g h)
, ( Σ ( v : hom A x z) , hom2 A x x z (id-hom A x) v (first hk)))
( dhom-from-representable A x y z g f)
( inv-equiv
( dhom-from-representable A x y z g f)
( Σ ( hk : Σ (h : hom A x z) , hom2 A x y z f g h)
, ( Σ ( v : hom A x z) , hom2 A x x z (id-hom A x) v (first hk)))
( equiv-comp
( dhom-from-representable A x y z g f)
( Σ ( h : hom A x z)
, ( product
( hom2 A x y z f g h)
( Σ ( v : hom A x z) , hom2 A x x z (id-hom A x) v h)))
( Σ ( hk : Σ (h : hom A x z) , hom2 A x y z f g h)
, ( Σ ( v : hom A x z) , hom2 A x x z (id-hom A x) v (first hk)))
( representable-dhom-from-hom2-dist A x y z g f)
( associative-Σ
( hom A x z)
( \ h → hom2 A x y z f g h)
( \ h _ → Σ (v : hom A x z) , hom2 A x x z (id-hom A x) v h))))
( corepresentable-family-is-covariant x y z g f))
While not needed to prove Proposition 8.13, it is interesting to observe that the dependent hom types in a representable family can be understood as extension types as follows.
#def cofibration-union-test
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( ( ( t , s) : ∂□)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
( ( ( t , s) : 2 × 2 | (t ≡ 1₂) ∧ (Δ¹ s))
→ A [ (t ≡ 1₂) ∧ (s ≡ 0₂) ↦ a
, ( t ≡ 1₂) ∧ (s ≡ 1₂) ↦ y])
:=
cofibration-union
( 2 × 2)
( \ ( t , s) → (t ≡ 1₂) ∧ Δ¹ s)
( \ ( t , s) →
( ( t ≡ 0₂) ∧ (Δ¹ s)) ∨ ((Δ¹ t) ∧ (s ≡ 0₂)) ∨ ((Δ¹ t) ∧ (s ≡ 1₂)))
( \ ( t , s) → A)
( \ ( t , s) →
recOR
( ( t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t))
#def base-hom-rewriting
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( ( ( t , s) : 2 × 2 | (t ≡ 1₂) ∧ (Δ¹ s))
→ A [ (t ≡ 1₂) ∧ (s ≡ 0₂) ↦ a
, ( t ≡ 1₂) ∧ (s ≡ 1₂) ↦ y])
( hom A a y)
:=
( ( \ v → (\ r → v ((1₂ , r))))
, ( ( \ v (t , s) → v s , \ _ → refl)
, ( \ v (_ , s) → v s , \ _ → refl)))
#def base-hom-expansion
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( ( ( t , s) : ∂□)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
( hom A a y)
:=
equiv-comp
( ( ( t , s) : ∂□)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
( ( ( t , s) : 2 × 2 | (t ≡ 1₂) ∧ (Δ¹ s))
→ A [ (t ≡ 1₂) ∧ (s ≡ 0₂) ↦ a
, ( t ≡ 1₂) ∧ (s ≡ 1₂) ↦ y])
( hom A a y)
( cofibration-union-test A a x y f u)
( base-hom-rewriting A a x y f u)
#def representable-dhom-from-expansion
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( Σ ( sq :
( ( t , s) : ∂□)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ (sq (1₂ , s))
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
( Σ ( v : hom A a y)
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
:=
total-equiv-pullback-is-equiv
( ( ( t , s) : ∂□)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
( hom A a y)
( first (base-hom-expansion A a x y f u))
( second (base-hom-expansion A a x y f u))
( \ v →
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
#def representable-dhom-from-composite-expansion
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( dhom-from-representable A a x y f u)
( Σ ( sq :
( ( t , s) : ∂□)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ (sq (1₂ , s))
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
:=
equiv-right-cancel
( dhom-from-representable A a x y f u)
( Σ ( sq :
( ( t , s) : ∂□)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ (sq (1₂ , s))
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
( Σ ( v : hom A a y)
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
( uncurried-dhom-from-representable A a x y f u)
( representable-dhom-from-expansion A a x y f u)
#def representable-dhom-from-cofibration-composition
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
( Σ ( sq :
( ( t , s) : ∂□)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ (sq (1₂ , s))
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
:=
cofibration-composition (2 × 2) Δ¹×Δ¹ ∂□
( \ ( t , s) →
( ( t ≡ 0₂) ∧ (Δ¹ s)) ∨ ((Δ¹ t) ∧ (s ≡ 0₂)) ∨ ((Δ¹ t) ∧ (s ≡ 1₂)))
( \ ts → A)
( \ ( t , s) →
recOR
( ( t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t))
#def representable-dhom-from-as-extension-type
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A a x)
: Equiv
( dhom-from-representable A a x y f u)
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
:=
equiv-right-cancel
( dhom-from-representable A a x y f u)
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
( Σ ( sq :
( ( t , s) : ∂□)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t])
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ (sq (1₂ , s))
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ a
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ f t]))
( representable-dhom-from-composite-expansion A a x y f u)
( representable-dhom-from-cofibration-composition A a x y f u)
Covariant lifts, transport, and uniqueness¶
In a covariant family C over a base type A , a term u : C x may be transported along an arrow f : hom A x y to give a term in C y.
#def covariant-transport
( A : U)
( x y : A)
( f : hom A x y)
( C : A → U)
( is-covariant-C : is-covariant A C)
( u : C x)
: C y
:=
first (center-contraction (dhom-from A x y f C u) (is-covariant-C x y f u))
#def covariant-lift
( A : U)
( x y : A)
( f : hom A x y)
( C : A → U)
( is-covariant-C : is-covariant A C)
( u : C x)
: ( dhom A x y f C u (covariant-transport A x y f C is-covariant-C u))
:=
second (center-contraction (dhom-from A x y f C u) (is-covariant-C x y f u))
#def covariant-uniqueness
( A : U)
( x y : A)
( f : hom A x y)
( C : A → U)
( is-covariant-C : is-covariant A C)
( u : C x)
( lift : dhom-from A x y f C u)
: ( covariant-transport A x y f C is-covariant-C u) = (first lift)
:=
first-path-Σ
( C y)
( \ v → dhom A x y f C u v)
( center-contraction (dhom-from A x y f C u) (is-covariant-C x y f u))
( lift)
( homotopy-contraction (dhom-from A x y f C u) (is-covariant-C x y f u) lift)
Covariant functoriality¶
The covariant transport operation defines a covariantly functorial action of arrows in the base on terms in the fibers. In particular, there is an identity transport law.
#def id-dhom
( A : U)
( x : A)
( C : A → U)
( u : C x)
: dhom A x x (id-hom A x) C u u
:= \ t → u
#def id-arr-covariant-transport
( A : U)
( x : A)
( C : A → U)
( is-covariant-C : is-covariant A C)
( u : C x)
: ( covariant-transport A x x (id-hom A x) C is-covariant-C u) = u
:=
covariant-uniqueness
A x x (id-hom A x) C is-covariant-C u (u , id-dhom A x C u)
Natural transformations¶
A fiberwise map between covariant families is automatically "natural" commuting with the covariant lifts.
#def covariant-fiberwise-transformation-application
( A : U)
( x y : A)
( f : hom A x y)
( C D : A → U)
( is-covariant-C : is-covariant A C)
( ϕ : (z : A) → C z → D z)
( u : C x)
: dhom-from A x y f D (ϕ x u)
:=
( ( ϕ y (covariant-transport A x y f C is-covariant-C u))
, ( \ t → ϕ (f t) (covariant-lift A x y f C is-covariant-C u t)))
#def naturality-covariant-fiberwise-transformation
( A : U)
( x y : A)
( f : hom A x y)
( C D : A → U)
( is-covariant-C : is-covariant A C)
( is-covariant-D : is-covariant A D)
( ϕ : (z : A) → C z → D z)
( u : C x)
: ( covariant-transport A x y f D is-covariant-D (ϕ x u))
= ( ϕ y (covariant-transport A x y f C is-covariant-C u))
:=
covariant-uniqueness A x y f D is-covariant-D (ϕ x u)
( covariant-fiberwise-transformation-application
A x y f C D is-covariant-C ϕ u)
Covariant equivalence¶
A family of types that is equivalent to a covariant family is itself covariant.
To prove this we first show that the corresponding types of lifts with fixed domain are equivalent:
#def equiv-covariant-total-dhom
( A : U)
( C : A → U)
( x y : A)
( f : hom A x y)
: Equiv
( ( t : Δ¹) → C (f t))
( Σ ( u : C x) , ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ u]))
:=
( ( \ h → (h 0₂ , \ t → h t))
, ( ( \ k t → (second k) t , \ h → refl)
, ( ( \ k t → (second k) t , \ h → refl))))
#section dhom-from-equivalence
#variable A : U
#variables B C : A → U
#variable equiv-BC : (a : A) → Equiv (B a) (C a)
#variables x y : A
#variable f : hom A x y
#def equiv-total-dhom-equiv uses (A x y)
: Equiv ((t : Δ¹) → B (f t)) ((t : Δ¹) → C (f t))
:=
equiv-extension-equiv-family
( extext)
( 2)
( Δ¹)
( \ t → B (f t))
( \ t → C (f t))
( \ t → equiv-BC (f t))
#def equiv-total-covariant-dhom-equiv uses (extext equiv-BC)
: Equiv
( Σ ( i : B x) , ((t : Δ¹) → B (f t) [t ≡ 0₂ ↦ i]))
( Σ ( u : C x) , ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ u]))
:=
equiv-triple-comp
( Σ ( i : B x) , ((t : Δ¹) → B (f t) [t ≡ 0₂ ↦ i]))
( ( t : Δ¹) → B (f t))
( ( t : Δ¹) → C (f t))
( Σ ( u : C x) , ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ u]))
( inv-equiv
( ( t : Δ¹) → B (f t))
( Σ ( i : B x) , ((t : Δ¹) → B (f t) [t ≡ 0₂ ↦ i]))
( equiv-covariant-total-dhom A B x y f))
( equiv-total-dhom-equiv)
( equiv-covariant-total-dhom A C x y f)
#def equiv-pullback-total-covariant-dhom-equiv uses (A y)
: Equiv
( Σ ( i : B x) , ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ (first (equiv-BC x)) i]))
( Σ ( u : C x) , ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ u]))
:=
total-equiv-pullback-is-equiv
( B x)
( C x)
( first (equiv-BC x))
( second (equiv-BC x))
( \ u → ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ u]))
#def is-equiv-to-pullback-total-covariant-dhom-equiv uses (extext A y)
: is-equiv
( Σ ( i : B x) , ((t : Δ¹) → B (f t) [t ≡ 0₂ ↦ i]))
( Σ ( i : B x) , ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ (first (equiv-BC x)) i]))
( \ ( i , h) → (i , \ t → (first (equiv-BC (f t))) (h t)))
:=
is-equiv-right-factor
( Σ ( i : B x) , ((t : Δ¹) → B (f t) [t ≡ 0₂ ↦ i]))
( Σ ( i : B x) , ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ (first (equiv-BC x)) i]))
( Σ ( u : C x) , ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ u]))
( \ ( i , h) → (i , \ t → (first (equiv-BC (f t))) (h t)))
( first (equiv-pullback-total-covariant-dhom-equiv))
( second (equiv-pullback-total-covariant-dhom-equiv))
( second (equiv-total-covariant-dhom-equiv))
#def equiv-to-pullback-total-covariant-dhom-equiv uses (extext A y)
: Equiv
( Σ ( i : B x) , ((t : Δ¹) → B (f t) [t ≡ 0₂ ↦ i]))
( Σ ( i : B x) , ((t : Δ¹) → C (f t) [t ≡ 0₂ ↦ (first (equiv-BC x)) i]))
:=
( \ ( i , h) → (i , \ t → (first (equiv-BC (f t))) (h t))
, is-equiv-to-pullback-total-covariant-dhom-equiv)
#def family-equiv-dhom-family-equiv uses (extext A y)
( i : B x)
: Equiv
( ( t : Δ¹) → B (f t) [t ≡ 0₂ ↦ i])
( ( t : Δ¹) → C (f t) [t ≡ 0₂ ↦ (first (equiv-BC x)) i])
:=
family-equiv-total-equiv
( B x)
( \ ii → ( ( t : Δ¹) → B (f t) [t ≡ 0₂ ↦ ii]))
( \ ii → ( ( t : Δ¹) → C (f t) [t ≡ 0₂ ↦ (first (equiv-BC x)) ii]))
( \ ii h t → (first (equiv-BC (f t))) (h t))
( is-equiv-to-pullback-total-covariant-dhom-equiv)
( i)
#end dhom-from-equivalence
Now we introduce the hypothesis that has-unique-fixed-domain-lifts
.
#def equiv-has-unique-fixed-domain-lifts uses (extext)
( A : U)
( B C : A → U)
( equiv-BC : (a : A) → Equiv (B a) (C a))
( has-unique-fixed-domain-lifts-C :
has-unique-fixed-domain-lifts A C)
: has-unique-fixed-domain-lifts A B
:=
\ x y f i →
is-contr-equiv-is-contr'
( ( t : Δ¹) → B (f t) [t ≡ 0₂ ↦ i])
( ( t : Δ¹) → C (f t) [t ≡ 0₂ ↦ (first (equiv-BC x)) i])
( family-equiv-dhom-family-equiv A B C equiv-BC x y f i)
( has-unique-fixed-domain-lifts-C x y f ((first (equiv-BC x)) i))
#def equiv-is-covariant uses (extext)
( A : U)
( B C : A → U)
( equiv-BC : (a : A) → Equiv (B a) (C a))
( is-covariant-C : is-covariant A C)
: is-covariant A B
:=
( first (has-unique-fixed-domain-lifts-iff-is-covariant A B))
( equiv-has-unique-fixed-domain-lifts
A B C equiv-BC
( ( second (has-unique-fixed-domain-lifts-iff-is-covariant A C))
is-covariant-C))
Contravariant families¶
A family of types over a base type is contravariant if every arrow in the base has a unique lift with specified codomain.
#def dhom-to
( A : U)
( x y : A)
( f : hom A x y)
( C : A → U)
( v : C y)
: U
:= ( Σ ( u : C x) , dhom A x y f C u v)
#def is-contravariant
( A : U)
( C : A → U)
: U
:=
( x : A) → (y : A) → (f : hom A x y) → (v : C y)
→ is-contr (dhom-to A x y f C v)
#def contravariant-family (A : U)
: U
:= ( Σ ( C : A → U) , is-contravariant A C)
The notion of having a unique lift with a fixed codomain may also be expressed by contractibility of the type of extensions along the codomain inclusion into the 1-simplex.
#def has-unique-fixed-codomain-lifts
( A : U)
( C : A → U)
: U
:=
( x : A) → (y : A) → (f : hom A x y) → (v : C y)
→ is-contr ((t : Δ¹) → C (f t) [t ≡ 1₂ ↦ v])
These two notions of covariance are equivalent because the two types of lifts of a base arrow with fixed codomain are equivalent. Note that this is not quite an instance of Theorem 4.4 but its proof, with a very small modification, works here.
#def equiv-lifts-with-fixed-codomain
( A : U)
( C : A → U)
( x y : A)
( f : hom A x y)
( v : C y)
: Equiv
( ( t : Δ¹) → C (f t) [t ≡ 1₂ ↦ v])
( dhom-to A x y f C v)
:=
( ( \ h → (h 0₂ , \ t → h t))
, ( ( \ fg t → (second fg) t , \ h → refl)
, ( ( \ fg t → (second fg) t , \ h → refl))))
By the equivalence-invariance of contractibility, this proves the desired logical equivalence
#def has-unique-fixed-codomain-lifts-iff-is-contravariant
( A : U)
( C : A → U)
: iff
( has-unique-fixed-codomain-lifts A C)
( is-contravariant A C)
:=
( ( \ C-has-unique-lifts x y f v →
is-contr-equiv-is-contr
( ( t : Δ¹) → C (f t) [t ≡ 1₂ ↦ v])
( dhom-to A x y f C v)
( equiv-lifts-with-fixed-codomain A C x y f v)
( C-has-unique-lifts x y f v))
, ( \ is-contravariant-C x y f v →
is-contr-equiv-is-contr'
( ( t : Δ¹) → C (f t) [t ≡ 1₂ ↦ v])
( dhom-to A x y f C v)
( equiv-lifts-with-fixed-codomain A C x y f v)
( is-contravariant-C x y f v)))
Representable contravariant families¶
If A is a Segal type and a : A is any term, then the family \ x → hom A x a defines a contravariant family over A , and conversely if this family is contravariant for every a : A , then A must be a Segal type. The proof involves a rather lengthy composition of equivalences.
#def dhom-contra-representable
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A x a)
( v : hom A y a)
: U
:= dhom A x y f (\ z → hom A z a) u v
By uncurrying (RS 4.2) we have an equivalence:
#def uncurried-dhom-contra-representable
( A : U)
( a x y : A)
( f : hom A x y)
( u : hom A x a)
( v : hom A y a)
: Equiv
( dhom-contra-representable A a x y f u v)
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ f t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ a])
:=
curry-uncurry 2 2 Δ¹ ∂Δ¹ Δ¹ ∂Δ¹ (\ t s → A)
( \ ( t , s) →
recOR
( ( t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ f t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ a))
#def dhom-to-representable
( A : U)
( a x y : A)
( f : hom A x y)
( v : hom A y a)
: U
:= dhom-to A x y f (\ z → hom A z a) v
By uncurrying (RS 4.2) we have an equivalence:
#def uncurried-dhom-to-representable
( A : U)
( a x y : A)
( f : hom A x y)
( v : hom A y a)
: Equiv
( dhom-to-representable A a x y f v)
( Σ ( u : hom A x a)
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ f t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ a]))
:=
total-equiv-family-equiv
( hom A x a)
( \ u → dhom-contra-representable A a x y f u v)
( \ u →
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ f t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ a]))
( \ u → uncurried-dhom-contra-representable A a x y f u v)
#def representable-dhom-to-uncurry-hom2
( A : U)
( a x y : A)
( f : hom A x y)
( v : hom A y a)
: Equiv
( Σ ( u : hom A x a)
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ f t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ a]))
( Σ ( u : hom A x a)
, ( Σ ( d : hom A x a)
, product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d)))
:=
total-equiv-family-equiv (hom A x a)
( \ u →
( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ f t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ a]))
( \ u →
Σ ( d : hom A x a)
, ( product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d)))
( \ u → equiv-square-hom2-pushout A x a y a u (id-hom A a) f v)
#def representable-dhom-to-hom2
( A : U)
( a x y : A)
( f : hom A x y)
( v : hom A y a)
: Equiv
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a)
, ( Σ ( u : hom A x a)
, product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d)))
:=
equiv-triple-comp
( dhom-to-representable A a x y f v)
( Σ ( u : hom A x a)
, ( ( ( t , s) : Δ¹×Δ¹)
→ A [ (t ≡ 0₂) ∧ (Δ¹ s) ↦ u s
, ( t ≡ 1₂) ∧ (Δ¹ s) ↦ v s
, ( Δ¹ t) ∧ (s ≡ 0₂) ↦ f t
, ( Δ¹ t) ∧ (s ≡ 1₂) ↦ a]))
( Σ ( u : hom A x a)
, ( Σ ( d : hom A x a)
, ( product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d))))
( Σ ( d : hom A x a)
, ( Σ ( u : hom A x a)
, ( product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d))))
( uncurried-dhom-to-representable A a x y f v)
( representable-dhom-to-uncurry-hom2 A a x y f v)
( fubini-Σ (hom A x a) (hom A x a)
( \ u d → product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d)))
#def representable-dhom-to-hom2-swap
( A : U)
( a x y : A)
( f : hom A x y)
( v : hom A y a)
: Equiv
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a)
, ( Σ ( u : hom A x a)
, ( product (hom2 A x y a f v d) (hom2 A x a a u (id-hom A a) d))))
:=
equiv-comp
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a)
, ( Σ ( u : hom A x a)
, ( product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d))))
( Σ ( d : hom A x a)
, ( Σ ( u : hom A x a)
, ( product (hom2 A x y a f v d) (hom2 A x a a u (id-hom A a) d))))
( representable-dhom-to-hom2 A a x y f v)
( total-equiv-family-equiv (hom A x a)
( \ d →
Σ ( u : hom A x a)
, ( product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d)))
( \ d →
Σ ( u : hom A x a)
, ( product (hom2 A x y a f v d) (hom2 A x a a u (id-hom A a) d)))
( \ d → total-equiv-family-equiv (hom A x a)
( \ u → product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d))
( \ u → product (hom2 A x y a f v d) (hom2 A x a a u (id-hom A a) d))
( \ u →
sym-product (hom2 A x a a u (id-hom A a) d) (hom2 A x y a f v d))))
#def representable-dhom-to-hom2-dist
( A : U)
( a x y : A)
( f : hom A x y)
( v : hom A y a)
: Equiv
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a)
, ( product
( hom2 A x y a f v d)
( Σ ( u : hom A x a) , hom2 A x a a u (id-hom A a) d)))
:=
equiv-right-cancel
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a)
, ( product
( hom2 A x y a f v d)
( Σ ( u : hom A x a) , hom2 A x a a u (id-hom A a) d)))
( Σ ( d : hom A x a)
, ( Σ ( u : hom A x a)
, product
( hom2 A x y a f v d)
( hom2 A x a a u (id-hom A a) d)))
( representable-dhom-to-hom2-swap A a x y f v)
( total-equiv-family-equiv (hom A x a)
( \ d →
( product
( hom2 A x y a f v d)
( Σ ( u : hom A x a) , hom2 A x a a u (id-hom A a) d)))
( \ d →
( Σ ( u : hom A x a)
, ( product (hom2 A x y a f v d) (hom2 A x a a u (id-hom A a) d))))
( \ d →
( distributive-product-Σ
( hom2 A x y a f v d)
( hom A x a)
( \ u → hom2 A x a a u (id-hom A a) d))))
Now we introduce the hypothesis that A is Segal type.
#def representable-dhom-to-path-space-is-segal
( A : U)
( is-segal-A : is-segal A)
( a x y : A)
( f : hom A x y)
( v : hom A y a)
: Equiv
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a)
, ( product (hom2 A x y a f v d) (Σ (u : hom A x a) , (u = d))))
:=
equiv-right-cancel
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a)
, ( product (hom2 A x y a f v d) (Σ (u : hom A x a) , (u = d))))
( Σ ( d : hom A x a)
, ( product
( hom2 A x y a f v d)
( Σ ( u : hom A x a) , (hom2 A x a a u (id-hom A a) d))))
( representable-dhom-to-hom2-dist A a x y f v)
( total-equiv-family-equiv (hom A x a)
( \ d → product (hom2 A x y a f v d) (Σ (u : hom A x a) , (u = d)))
( \ d →
product
( hom2 A x y a f v d)
( Σ ( u : hom A x a) , hom2 A x a a u (id-hom A a) d))
( \ d →
total-equiv-family-equiv
( hom2 A x y a f v d)
( \ α → (Σ (u : hom A x a) , (u = d)))
( \ α → (Σ (u : hom A x a) , hom2 A x a a u (id-hom A a) d))
( \ α →
( total-equiv-family-equiv
( hom A x a)
( \ u → (u = d))
( \ u → hom2 A x a a u (id-hom A a) d)
( \ u → equiv-homotopy-hom2'-is-segal A is-segal-A x a u d)))))
#def is-segal-representable-dhom-to-hom2
( A : U)
( is-segal-A : is-segal A)
( a x y : A)
( f : hom A x y)
( v : hom A y a)
: Equiv
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a) , (hom2 A x y a f v d))
:=
equiv-comp
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a)
, ( product (hom2 A x y a f v d) (Σ (u : hom A x a) , (u = d))))
( Σ ( d : hom A x a) , (hom2 A x y a f v d))
( representable-dhom-to-path-space-is-segal A is-segal-A a x y f v)
( total-equiv-family-equiv
( hom A x a)
( \ d → product (hom2 A x y a f v d) (Σ (u : hom A x a) , (u = d)))
( \ d → hom2 A x y a f v d)
( \ d → codomain-based-paths-contraction A x y a v f d))
#def is-segal-representable-dhom-to-contractible
( A : U)
( is-segal-A : is-segal A)
( a x y : A)
( f : hom A x y)
( v : hom A y a)
: is-contr (dhom-to-representable A a x y f v)
:=
is-contr-equiv-is-contr'
( dhom-to-representable A a x y f v)
( Σ ( d : hom A x a) , (hom2 A x y a f v d))
( is-segal-representable-dhom-to-hom2 A is-segal-A a x y f v)
( is-segal-A x y a f v)
Finally, we see that contravariant hom families in a Segal type are contravariant.
#def is-contravariant-representable-is-segal
( A : U)
( is-segal-A : is-segal A)
( a : A)
: is-contravariant A (\ x → hom A x a)
:= is-segal-representable-dhom-to-contractible A is-segal-A a
The proof of the claimed converse result given in the original source is circular - using Proposition 5.10, which holds only for Segal types - so instead we argue as follows:
#def is-segal-is-contravariant-representable
( A : U)
( representable-family-is-contravariant : (a : A)
→ is-contravariant A (\ x → hom A x a))
: is-segal A
:=
\ x y z f g →
is-contr-base-is-contr-Σ
( Σ ( h : hom A x z) , (hom2 A x y z f g h))
( \ hk → Σ (u : hom A x z) , (hom2 A x z z u (id-hom A z) (first hk)))
( \ hk → (first hk , \ (t , s) → first hk t))
( is-contr-equiv-is-contr'
( Σ ( hk : Σ (h : hom A x z) , (hom2 A x y z f g h))
, ( Σ ( u : hom A x z) , hom2 A x z z u (id-hom A z) (first hk)))
( dhom-to-representable A z x y f g)
( inv-equiv
( dhom-to-representable A z x y f g)
( Σ ( hk : Σ (h : hom A x z) , (hom2 A x y z f g h))
, ( Σ ( u : hom A x z) , hom2 A x z z u (id-hom A z) (first hk)))
( equiv-comp
( dhom-to-representable A z x y f g)
( Σ ( h : hom A x z)
, ( product
( hom2 A x y z f g h)
( Σ ( u : hom A x z) , hom2 A x z z u (id-hom A z) h)))
( Σ ( hk : Σ (h : hom A x z) , (hom2 A x y z f g h))
, ( Σ ( u : hom A x z) , hom2 A x z z u (id-hom A z) (first hk)))
( representable-dhom-to-hom2-dist A z x y f g)
( associative-Σ
( hom A x z)
( \ h → hom2 A x y z f g h)
( \ h _ → Σ (u : hom A x z) , (hom2 A x z z u (id-hom A z) h)))))
( representable-family-is-contravariant z x y f g))
Contravariant lifts, transport, and uniqueness¶
In a contravariant family C over a base type A, a term v : C y may be transported along an arrow f : hom A x y to give a term in C x.
#def contravariant-transport
( A : U)
( x y : A)
( f : hom A x y)
( C : A → U)
( is-contravariant-C : is-contravariant A C)
( v : C y)
: C x
:=
first
( center-contraction (dhom-to A x y f C v) (is-contravariant-C x y f v))
#def contravariant-lift
( A : U)
( x y : A)
( f : hom A x y)
( C : A → U)
( is-contravariant-C : is-contravariant A C)
( v : C y)
: ( dhom A x y f C (contravariant-transport A x y f C is-contravariant-C v) v)
:=
second
( center-contraction (dhom-to A x y f C v) (is-contravariant-C x y f v))
#def contravariant-uniqueness
( A : U)
( x y : A)
( f : hom A x y)
( C : A → U)
( is-contravariant-C : is-contravariant A C)
( v : C y)
( lift : dhom-to A x y f C v)
: ( contravariant-transport A x y f C is-contravariant-C v) = (first lift)
:=
first-path-Σ
( C x)
( \ u → dhom A x y f C u v)
( center-contraction
( dhom-to A x y f C v)
( is-contravariant-C x y f v))
( lift)
( homotopy-contraction
( dhom-to A x y f C v)
( is-contravariant-C x y f v)
( lift))
Contravariant functoriality¶
The contravariant transport operation defines a comtravariantly functorial action of arrows in the base on terms in the fibers. In particular, there is an identity transport law.
#def id-arr-contravariant-transport
( A : U)
( x : A)
( C : A → U)
( is-contravariant-C : is-contravariant A C)
( u : C x)
: ( contravariant-transport A x x (id-hom A x) C is-contravariant-C u) = u
:=
contravariant-uniqueness A x x (id-hom A x) C is-contravariant-C u
( u , id-dhom A x C u)
Contravariant natural transformations¶
A fiberwise map between contrvariant families is automatically "natural" commuting with the contravariant lifts.
#def contravariant-fiberwise-transformation-application
( A : U)
( x y : A)
( f : hom A x y)
( C D : A → U)
( is-contravariant-C : is-contravariant A C)
( ϕ : (z : A) → C z → D z)
( v : C y)
: dhom-to A x y f D (ϕ y v)
:=
( ϕ x (contravariant-transport A x y f C is-contravariant-C v)
, \ t → ϕ (f t) (contravariant-lift A x y f C is-contravariant-C v t))
#def naturality-contravariant-fiberwise-transformation
( A : U)
( x y : A)
( f : hom A x y)
( C D : A → U)
( is-contravariant-C : is-contravariant A C)
( is-contravariant-D : is-contravariant A D)
( ϕ : (z : A) → C z → D z)
( v : C y)
: ( contravariant-transport A x y f D is-contravariant-D (ϕ y v))
= ( ϕ x (contravariant-transport A x y f C is-contravariant-C v))
:=
contravariant-uniqueness A x y f D is-contravariant-D (ϕ y v)
( contravariant-fiberwise-transformation-application
A x y f C D is-contravariant-C ϕ v)