when is a container a comonad? · container syntax of datatypes many datatypes can be represented...
TRANSCRIPT
![Page 1: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/1.jpg)
When Is a Container a Comonad?
Danel Ahman, University of CambridgeJames Chapman, Tarmo Uustalu, Institute of Cybernetics
Tallinn, 28 March 2012
![Page 2: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/2.jpg)
Container syntax of datatypesMany datatypes can be represented in terms of shapesand positions in shapes
Examples: lists, streams, colists, trees, etc.Non-examples: sets, bags
Containers provide us with a handy syntax to analyzesuch datatypes
X
x1 x2 x3
x4
x5
x6 x8
x7
![Page 3: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/3.jpg)
Directing containers?
Containers often exhibit a natural notion of subshapegiven by positions in shapes
Natural questions arise:
1 What is the appropriate specialization of containers?
2 Does this admit a nice categorical theory?
X
x1 x2 x3
x4
x5
x6 x8
x7
![Page 4: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/4.jpg)
Directed containersA directed container is given by
S : Set (shapes)P : S → Set (positions)
and
↓: Πs : S .P s → S (subshape)o : Π{s : S}.P s (root position)⊕: Π{s : S}.Πp : P s.P (s ↓ p)→ P s
(subshape positions)
such that
∀{s}. s ↓ o = s,∀{s, p, p′}. s ↓ (p ⊕ p′) = (s ↓ p) ↓ p′,∀{s, p}. p ⊕{s} o = p,∀{s, p}. o{s} ⊕ p = p,∀{s, p, p′, p′′}. (p ⊕{s} p′) ⊕ p′′ = p ⊕ (p′ ⊕ p′′).
![Page 5: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/5.jpg)
Directed containersA directed container is given by
S : Set (shapes)P : S → Set (positions)
and
↓ : Πs : S .P s → S (subshape)o : Π{s : S}.P s (root position)⊕ : Π{s : S}.Πp : P s.P (s ↓ p)→ P s
(subshape positions)
such that
∀{s}. s ↓ o = s,∀{s, p, p′}. s ↓ (p ⊕ p′) = (s ↓ p) ↓ p′,∀{s, p}. p ⊕{s} o = p,∀{s, p}. o{s} ⊕ p = p,∀{s, p, p′, p′′}. (p ⊕{s} p′) ⊕ p′′ = p ⊕ (p′ ⊕ p′′).
![Page 6: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/6.jpg)
Directed containers illustrated
p : P s
s : S
![Page 7: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/7.jpg)
Directed containers illustrated
p : P s
s : S
s ↓ p : S
![Page 8: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/8.jpg)
Directed containers illustrated
o {s} : P s
s ↓ o
=
s
![Page 9: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/9.jpg)
Directed containers illustrated
p : P s
p’ : P (s ↓ p)
p ⊕ p’ : P s
s ↓ p
s
![Page 10: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/10.jpg)
Directed containers illustrated
p
p’
p ⊕ p’
s ↓ p
s
s ↓ (p ⊕ p’)
s ↓ p ↓ p’
=
![Page 11: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/11.jpg)
Directed containers illustrated
po {s ↓ p}
p ⊕ o=
s ↓ p
s
![Page 12: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/12.jpg)
Directed containers illustrated
po ⊕ p
o
=
s ↓ o
=
s
![Page 13: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/13.jpg)
Directed containers illustrated
p
p’
p ⊕ p’
p’ ⊕ p’’
(p ⊕ p’) ⊕ p’’ p ⊕ (p’ ⊕ p’’)
p’’
=
s ↓ p
s
s ↓ (p ⊕ p’)
s ↓ p ↓ p’
=
![Page 14: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/14.jpg)
Non-empty lists and streamsNon-empty lists
S = Nat (shapes)
P s = [0..s] (positions)
s ↓ p = s − p (subshapes)
o = 0 (root)
p ⊕ {s} p′ = p + p′ (subshape positions)
Streams are represented similarly withS = 1 and P ∗ = Nat
![Page 15: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/15.jpg)
Non-empty lists illustrated
s = 5
![Page 16: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/16.jpg)
Non-empty lists illustrated
s = 5
p = 2
![Page 17: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/17.jpg)
Non-empty lists illustrated
s = 5
s↓p = 5 - 2 = 3
p = 2
![Page 18: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/18.jpg)
Non-empty lists illustrated
s = 5
p = 2
p’ = 3
s↓p = 5 - 2 = 3
![Page 19: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/19.jpg)
Non-empty lists illustrated
s = 5
p = 2
p’ = 3
p ⊕ p’ =
2 + 3 = 5
s↓p = 5 - 2 = 3
![Page 20: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/20.jpg)
Non-empty lists with a focus
Zippers (tree-like datastructures with a focus position)consist of a context (path from the root to the focusposition, with side subtrees) and a focal subtree
Non-empty lists with a focus
S = Nat× Nat (shapes)
P (s0, s1) = [−s0..s1] = [−s0..− 1] ∪ [0..s1] (positions)
(s0, s1) ↓ p = (s0 + p, s1 − p) (subshapes)
o {s0, s1} = 0 (root)
p ⊕ {s0, s1} p′ = p + p′ (subshape positions)
![Page 21: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/21.jpg)
Non-empty list zippers illustrated
s = (4 , 5)
![Page 22: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/22.jpg)
Non-empty list zippers illustrated
p = 3
s = (4 , 5)
![Page 23: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/23.jpg)
Non-empty list zippers illustrated
p = 3
s = (4 , 5)s ↓ p = (7 , 2)
![Page 24: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/24.jpg)
Non-empty list zippers illustrated
s ↓ p = (7 , 2)
![Page 25: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/25.jpg)
Non-empty list zippers illustrated
p’ = -5
s ↓ p = (7 , 2)
![Page 26: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/26.jpg)
Non-empty list zippers illustrated
p’ = -5
p = 3
s = (4 , 5)
![Page 27: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/27.jpg)
Non-empty list zippers illustrated
p’ = -5
p = 3
p ⊕ p’ = 3 - 5 = - 2
s = (4 , 5)
![Page 28: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/28.jpg)
Directed container morphismsA directed container morphism t C q between(S C P , ↓, o,⊕) and (S ′ C P ′, ↓′, o′,⊕′) is given by
t : S → S ′
q : Π{s : S}.P ′ (t s)→ P s
such that
∀{s, p}. t (s ↓ q p) = t s ↓′ p∀{s}. o {s} = q (o′ {t s})∀{s, p, p′}. q p ⊕ {s} q p′ = q (p ⊕′ {t s} p′)
Identity iddc = id {S}C λ{s}. id {P s}Composition (t ′ C q′) ◦dc (t C q) =
= (t ′ ◦ t) C (λ{s}. q {s} ◦ q′ {t s})
Directed containers form a category DCont
![Page 29: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/29.jpg)
Directed container morphismsA directed container morphism t C q between(S C P , ↓, o,⊕) and (S ′ C P ′, ↓′, o′,⊕′) is given by
t : S → S ′
q : Π{s : S}.P ′ (t s)→ P s
such that
∀{s, p}. t (s ↓ q p) = t s ↓′ p∀{s}. o {s} = q (o′ {t s})∀{s, p, p′}. q p ⊕ {s} q p′ = q (p ⊕′ {t s} p′)
Identity iddc = id {S}C λ{s}. id {P s}Composition (t ′ C q′) ◦dc (t C q) =
= (t ′ ◦ t) C (λ{s}. q {s} ◦ q′ {t s})
Directed containers form a category DCont
![Page 30: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/30.jpg)
Interpretation (semantics) of directed containers
Any directed container (S C P , ↓, o,⊕)
defines a functor������/comonad JS C P , ↓, o,⊕Kdc = (D, ε, δ)
where
D : Set→ Set
D X = Σs : S .P s → X
D f (s, v) = (s, f ◦ v)
ε : ∀{X}.(Σs : S .P s → X )→ X
ε (s, v) = v (o {s})
δ : ∀{X}. (Σs : S .P s → X )→Σs : S .P s → Σs ′ : S .P s ′ → X
δ (s, v) = (s, λp. (s ↓ p, λp′. v (p ⊕ {s} p′)))
![Page 31: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/31.jpg)
Interpretation (semantics) of directed containers
Any directed container (S C P , ↓, o,⊕)
defines a�����functor/comonad JS C P , ↓, o,⊕Kdc = (D, ε, δ)
where
D : Set→ Set
D X = Σs : S .P s → X
D f (s, v) = (s, f ◦ v)
ε : ∀{X}.(Σs : S .P s → X )→ X
ε (s, v) = v (o {s})
δ : ∀{X}. (Σs : S .P s → X )→Σs : S .P s → Σs ′ : S .P s ′ → X
δ (s, v) = (s, λp. (s ↓ p, λp′. v (p ⊕ {s} p′)))
![Page 32: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/32.jpg)
Interpretation of directed container morphisms
Any directed container morphism t C q between
(S C P , ↓, o,⊕) and (S ′ C P ′, ↓′, o′,⊕′) defines
a natural transformation(((
((((((((
/comonad morphism Jt C qKdc
between JS C P , ↓, o,⊕Kdc and JS ′ C P ′, ↓′, o′,⊕′Kdc
Jt C qKdc : ∀{X}. (Σs : S .P s → X )→Σs ′ : S ′.P ′ s ′ → X
Jt C qKdc (s, v) = (t s, v ◦ q {s})
J−Kdc preserves the identities and composition
J−Kdc is a functor from DCont to Endo�����/Cmnds(Set)
![Page 33: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/33.jpg)
Interpretation of directed container morphisms
Any directed container morphism t C q between
(S C P , ↓, o,⊕) and (S ′ C P ′, ↓′, o′,⊕′) defines
a((((
(((((((
(natural transformation/comonad morphism Jt C qKdc
between JS C P , ↓, o,⊕Kdc and JS ′ C P ′, ↓′, o′,⊕′Kdc
Jt C qKdc : ∀{X}. (Σs : S .P s → X )→Σs ′ : S ′.P ′ s ′ → X
Jt C qKdc (s, v) = (t s, v ◦ q {s})
J−Kdc preserves the identities and composition
J−Kdc is a functor from DCont to����Endo/Cmnds(Set)
![Page 34: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/34.jpg)
Interpretation is fully faithful
A natural transformation((((
(((((((
/comonad morphism τbetween JS C P , ↓, o,⊕Kdc and JS ′ C P ′, ↓′, o′,⊕′Kdc
defines a directed container morphism pτqdc = (t C q)between (S C P , ↓, o,⊕) and (S ′ C P ′, ↓′, o′,⊕′)
t : S → S ′
t s = fst (τ {P s} (s, id))q : Π{s : S}.P ′ (t s)→ P sq {s} = snd (τ {P s} (s, id))
pτqdc satisfies,
pJhKdcqdc = h
pτqdc = pτ ′qdc implies τ = τ ′
J−Kdc is a fully faithful functor
![Page 35: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/35.jpg)
Interpretation is fully faithful
A((((
((((((((
natural transformation/comonad morphism τbetween JS C P , ↓, o,⊕Kdc and JS ′ C P ′, ↓′, o′,⊕′Kdc
defines a directed container morphism pτqdc = (t C q)between (S C P , ↓, o,⊕) and (S ′ C P ′, ↓′, o′,⊕′)
t : S → S ′
t s = fst (τ {P s} (s, id))q : Π{s : S}.P ′ (t s)→ P sq {s} = snd (τ {P s} (s, id))
pτqdc satisfies,
pJhKdcqdc = h
pτqdc = pτ ′qdc implies τ = τ ′
J−Kdc is a fully faithful functor
![Page 36: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/36.jpg)
Containers ∩ comonads = directed containers
Any comonad (D, ε, δ), such that D = JS C PKc,determines a directed container
d(D, ε, δ), S C Pe = (S C P , ↓, o,⊕)
wheres ↓ p = snd (tδ s) p
o {s} = qε{s} ∗p ⊕ {s} p′ = qδ {s} (p, p′)
using the container morphisms
tε C qε : S C P → Idc
tε C qε = pe ◦ εqc
tδ C qδ : S C P → (S C P) ·c (S C P)tδ C qδ = pm {S C P} {S C P} ◦ δqc
It is forced that∀{s}. tε s = ∗ and ∀{s}. fst (tδ s) = s
![Page 37: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/37.jpg)
Containers ∩ comonads = directed containers ctd.For any comonad (D, ε, δ), such that D = JS C PKc,
Jd(D, ε, δ),S C PeKdc = (D, ε, δ)
For any directed container (S C P , ↓, o,⊕),
dJS C P, ↓, o,⊕Kdc,S C Pe = (S C P, ↓, o,⊕)
The following is a pullback in CAT:
DCont U //
J−Kdc f.f.
��
Cont
J−Kc f.f.
��Cmnd(Set) U // [Set,Set]
![Page 38: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/38.jpg)
Constructions
Coproduct of directed containers
Cofree directed containers
Focussing of a container
Strict directed containers
Composition of a strict and non-strict directed container
Product of strict directed containers
Distributive laws between directed containers
![Page 39: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/39.jpg)
Conclusion
Directed containers are a natural notion—cover a naturalclass of examples and admit an elegant theory
They give a characterization of containers whoseinterpretation carries a comonad structure
![Page 40: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/40.jpg)
Questions?
![Page 41: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/41.jpg)
Extra material
![Page 42: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/42.jpg)
Coproduct of directed containers
Given directed containers E0 = (S0 C P0, ↓0, o0,⊕0),E1 = (S1 C P1, ↓1, o1,⊕1), their coproduct is
E = E0 + E1 given as (S C P , ↓, o,⊕) where
S = S0 + S1
P (inl s) = P0 sP (inr s) = P1 s
inl s ↓ p = inl (s ↓0 p)inr s ↓ p = inr (s ↓1 p)
o {inl s} = o0 {s}o {inr s} = o1 {s}
p ⊕ {inl s} p′ = p ⊕0 {s} p′p ⊕ {inr s} p′ = p ⊕1 {s} p′
JE0 + E1Kdc ∼= JE0Kdc + JE1Kdc
![Page 43: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/43.jpg)
The cofree directed containerGiven a container C = (S0 C P0), the cofree directedcontainer on it is E = (S C P , ↓, o,⊕) where
S = νZ .Σs : S0.P0 s → Z ,P = µZ . λ(s, v). 1 + Σp : P0 s.Z (v p),o {s, v} = inl ∗,(s, v) ↓ inl ∗ = (s, v),(s, v) ↓ inr (p, p′) = v p ↓ p′,inl ∗ ⊕ {s, v} p′′ = p′′,inr (p, p′) ⊕ {s, v} p′′ = inr (p, p′ ⊕ {v p} p′′).
D X = νZ .X × JCKc Zis the carrier of the cofree comonad on the functor JCKc
Instead of ν, one could also use µ in S , to get the directedcontainer representation of the cofree recursive comonad.
![Page 44: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/44.jpg)
Focussing a container
Given a container C0 = (S0 C P0), we can focus it by
defining a directed container E = (S C P , ↓, o,⊕) where
S = Σs : S0.P0 s
P (s, p) = P0 s
o {s, p} = p
(s, p) ↓ p′ = (s, p′)
p′ ⊕ {s, p} p′′ = p′′
Focussed container interprets into the canonical comonadstructure on ∂JCKc × Id where ∂F denotes the derivativeof F
![Page 45: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/45.jpg)
Directed container from a monoid
Any monoid (M , e, •) gives a directed container
E = (S C P , ↓, o,⊕) by
S = 1
P ∗ = M
∗ ↓ p = ∗
o{∗} = e
p ⊕ {∗}p′ = p • p′
JEKdc X = Σs : ∗.M → X ∼= M → X
![Page 46: When Is a Container a Comonad? · Container syntax of datatypes Many datatypes can be represented in terms ofshapes andpositions in shapes Examples: lists, streams, colists, trees,](https://reader034.vdocuments.site/reader034/viewer/2022042807/5f7fd2a3bc8fa2188e462932/html5/thumbnails/46.jpg)
Containers ∩ Monads = ?
Given a container C = (S C P)
The structure (η, µ) of a monad on JS C PKc could berepresented as
e : S (for the shape map for η)
• : Πs : S .(P s → S)→ S (for the shape map for µ)
0 : Π{s : S}.Πv : P s → S .P (s • v)→ P s(for the position map for µ)
1 : Π{s : S}.Πv : P s → S .Πp : P (s • v).P (v (v 0 {s}p))
(for the position map for µ)