SLIDE 1
1
Seifert-van Kampen Theorem in Homotopy Type Theory
* Favonia @ CMU Michael Shulman @ U of San Diego
[ Toronto version ]
SLIDE 2 2
Homotopy Type Theory
- types ~= spaces
- terms ~= points
- functions ~= continuous maps
- identifications ~= paths
* Non-trivial identifications * Type theory <-> topology
SLIDE 3
3
a b
terms
Iterated Paths
SLIDE 4
3
a b
terms paths
Iterated Paths
SLIDE 5
3
a b
terms paths
Iterated Paths
SLIDE 6
3
a b
terms paths paths of paths
Iterated Paths
SLIDE 7
4
a b f(a) f(b) ~> f A B Functorial
SLIDE 8
5
Subject of Study
fundamental groups of pushouts
SLIDE 9
5
Subject of Study
"structure of loops" fundamental groups of pushouts
SLIDE 10
5
Subject of Study
"structure of loops" fundamental groups of pushouts "disjoint union added with bridges"
SLIDE 11
6
Fundamental Groups a
(unique) ways to travel from a to a
SLIDE 12
6
Fundamental Groups a
(unique) ways to travel from a to a
here they correspond to integers
positive <--> clockwise negative <--> counter zero <--> staying
SLIDE 13
6
Fundamental Groups a
(unique) ways to travel from a to a
here they correspond to integers
positive <--> clockwise negative <--> counter zero <--> staying
Trunc 0 (a == a) ~= Z
SLIDE 14
7
Fundamental Groups a
(unique) ways to travel from a to a
much more if a new path is added
Trunc 0 (a == a) ~= Z * Z
(free product)
SLIDE 15
8
(Homotopy) Pushouts A B C
SLIDE 16
8
(Homotopy) Pushouts A B C
data Pushout (A B C : Type) (f : C -> A) (g : C -> B) : Type where left : A -> Pushout A B C f g right : B -> Pushout A B C f g glue : (c : C) -> left (f c) == right (g c)
c f(c) g(c)
SLIDE 17
9
A B C
ways to travel from to ?
(Homotopy) Pushouts
SLIDE 18
10
A B C (Homotopy) Pushouts
SLIDE 19
10
A B C
alternative paths in A and B
(Homotopy) Pushouts
SLIDE 20
11
Theorem Statement
fund.grp(pushout) ~= ?(??(A), ??(B), C)
??: paths between any two points for any A, B, C, f and g,
SLIDE 21
12
Fundamental Groupoids a
(unique) ways to travel from a to b
b
Trunc 0 (a == b)
SLIDE 22
13
Theorem Statement
fund.groupoid(pushout) ~= ?(fund.groupoid(A), fund.groupoid(B), C) ?: "seqs of alternative elems" for any A, B, C, f and g,
SLIDE 23
14
Alternative Sequences
induction on both ends: A to A, A to B, B to A, B to B [p1, p2, ..., pn] A B
SLIDE 24
15
Alternative Sequences
A B = A B A B = A B quotients of alternative sequences by killing trivial identifications
SLIDE 25 16
Alternative Sequences
each case is a quotient
induction on both ends: A to A, A to B, B to A, B to B [p1, p2, ..., pn] A B
SLIDE 26 17
Alternative Sequences
next: unify four cases into
SLIDE 27 17
Alternative Sequences
next: unify four cases into
alt.seq a (f c) ~= alt.seq a (g c)
~=
show respects for bridges by C. ex:
SLIDE 28
18
alt.seq a (f c) ~= alt.seq a (g c)
~=
SLIDE 29
18 [..., p] |--> [..., p, trivial]
alt.seq a (f c) ~= alt.seq a (g c)
~=
|-->
SLIDE 30
18 [..., p] |--> [..., p, trivial]
alt.seq a (f c) ~= alt.seq a (g c)
[..., p, trivial] <--| [..., p]
~=
|--> <--|
SLIDE 31
19
Alternative Sequences
A -> A A -> B B -> A B -> B
seq a (f c) ~= seq a (g c) seq b (f c) ~= seq b (g c) seq (f c) a ~= seq (g c) a seq (f c) b ~= seq (g c) b
commutes
SLIDE 32
20
Theorem
fund.groupoid(pushout) ~= alt.seqs(fund.groupoid(A), fund.groupoid(B), C)
(zero pages left before the proofs)
for any A, B, C, f and g,
SLIDE 33
21
Recipe of Equivalences
* two functions back and forth ("decode" and "encode") * round-trips are identity
SLIDE 34
22
fund.groupoid -> alt.seqs
(all paths)
encode
Trunc 0 (p == q) -> alt.seqs p q
SLIDE 35
22
fund.groupoid -> alt.seqs
path induction: consider only trivial paths
(all paths)
encode
Trunc 0 (p == q) -> alt.seqs p q (p : Pushout) -> alt.seqs p p
SLIDE 36
22
fund.groupoid -> alt.seqs
path induction: consider only trivial paths
(all paths)
encode
Trunc 0 (p == q) -> alt.seqs p q (p : Pushout) -> alt.seqs p p
pushout induction
A B A A B B
bridges by C (next page)
SLIDE 37
23
A B A B A B
applying the diagonal in coherence square
=?
case A case B
SLIDE 38
23
A B A B A B
applying the diagonal in coherence square
=?
case A case B witnessed by the quotient
SLIDE 39
24
alt.seq -> fund.groupoid
just compositions!
decode
SLIDE 40
24
alt.seq -> fund.groupoid
just compositions!
decode
grpd -> seqs -> grpd
again by path induction (similar to "encode")
decode encode
SLIDE 41
24
alt.seq -> fund.groupoid
just compositions!
decode
grpd -> seqs -> grpd
again by path induction (similar to "encode")
seqs -> grpd -> seqs
induction on sequences
lemma: encode(decode[p1,p2,...]) = p1 :: encode(decode[p2,...])
decode encode encode decode
SLIDE 42
25
Theorem
fund.groupoid(pushout) = alt.seqs(fund.groupoid(A), fund.groupoid(B), C) for any A, B, C, f and g,
SLIDE 43 26
Final Notes
* Refined version: Can focus on just the set of base points of C covering its components.
github.com/HoTT/HoTT-Agda/blob/1.0/Homotopy/VanKampen.agda
* All mechanized in Agda
www.cs.cmu.edu/~kuenbanh/files/vankampen.pdf
* Submitted to CSL 2016