module Homotopy.Space.Circle.Base where
private variable
: Level
ℓ ℓ' : Type ℓ X
The circle🔗
The first example of nontrivial space one typically encounters when studying synthetic homotopy theory is the circle: it is, in a sense, the perfect space to start with, having exactly one nontrivial path space, which is a free group, and the simplest nontrivial free group at that: the integers.
data S¹ : Type where
: S¹
base : base ≡ base
loop
: Type∙ lzero
S¹∙ = S¹ , base S¹∙
Diagrammatically, we can picture the circle as being the generated by the following diagram:
In type theory with K, the circle is exactly the same type as ⊤
. However, with univalence
, it can be
shown that the circle has at least two different paths:
_ = ⊤
: S¹ → Type
möbius = Bool
möbius base (loop i) = ua not≃ i möbius
When pattern matching on the circle, we are asked to provide a
basepoint b
and a path l : b ≡ b
, as can be
seen in the definition above. To make it clearer, we can also define a
recursion principle:
: ∀ {ℓ} {A : Type ℓ} (b : A) (l : b ≡ b) → S¹ → A
S¹-rec = b
S¹-rec b l base (loop i) = l i S¹-rec b l
: ∀ {ℓ} {A : S¹ → Type ℓ} (b : A base) (l : PathP (λ i → A (loop i)) b b)
S¹-elim → ∀ s → A s
= b
S¹-elim b l base (loop i) = l i S¹-elim b l
We call the map möbius
a
double cover of the circle, since the fibre at each point is a
discrete space with two elements. It has an action by the fundamental
group of the circle, which has the effect of negating the “parity” of
the path. In fact, we can use möbius
to show that loop
is not refl
:
: base ≡ base → Bool
parity = subst möbius l true
parity l
_ : parity refl ≡ true
_ = refl
_ : parity loop ≡ false
_ = refl
: refl ≠ loop
refl≠loop = true≠false (ap parity path) refl≠loop path
The circle is also useful as a source of counterexamples: we can
prove that there is an inhabitant of (x : S¹) → x ≡ x
which is not constantly refl
.
: (x : S¹) → x ≡ x
always-loop = S¹-elim loop (double-connection loop loop) always-loop