Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From HoTT Require Import Basics Types.From HoTT Require Import Basics Types.From HoTT.WildCat Require Import Core UniverseEquiv NatTrans Yoneda.Require Import Pointed.From HoTT.Algebra.Groups Require Import Group FreeGroup.Require Import Modalities.ReflectiveSubuniverse Truncations.Core.Require Import Homotopy.Suspension.Require Import Homotopy.ClassifyingSpace.Require Import Homotopy.HomotopyGroup.LocalOpen Scope trunc_scope.LocalOpen Scope pointed_scope.Import ClassifyingSpaceNotation.(** In this file we show that the fundamental group of a bouquet of circles indexed by a type S is the free group on that type S. We begin by defining S-indexed wedges of circles as the suspension of the pointification of S. *)SectionAssumeUnivalence.Context `{Univalence}.(** An S-indexed wedge of circles a.k.a a bouquet can be defined as the suspension of the pointification of S. *)DefinitionBouquet (S : Type) : pType := psusp (pointify S).
H: Univalence S: Type
IsConnected (Tr 0) (Bouquet S)
H: Univalence S: Type
IsConnected (Tr 0) (Bouquet S)
exact isconnected_susp.Defined.(** We can directly prove that it satisfies the desired equivalence together with naturality in the second argument. *)
H: Univalence S: Type
NatEquiv (opyon (Pi 1 (Bouquet S))) (opyon S o group_type)
H: Univalence S: Type
NatEquiv (opyon (Pi 1 (Bouquet S))) (opyon S o group_type)
(** Pi1-BG adjunction *)rapply natequiv_bg_pi1_adjoint.Defined.(** For the rest of this file, we don't need to unfold this. *)LocalOpaque natequiv_pi1bouquet_rec.
H: Univalence S: Type G: Group
(Pi 1 (Bouquet S) $-> G) <~> (S -> G)
H: Univalence S: Type G: Group
(Pi 1 (Bouquet S) $-> G) <~> (S -> G)
apply natequiv_pi1bouquet_rec.Defined.
H: Univalence S: Type
Is1Natural (opyon (Pi 1 (Bouquet S))) (opyon S o group_type)
(funG : HomotopyGroup_type 1 => equiv_pi1bouquet_rec S G)
H: Univalence S: Type
Is1Natural (opyon (Pi 1 (Bouquet S))) (opyon S o group_type)
(funG : HomotopyGroup_type 1 => equiv_pi1bouquet_rec S G)
exact (is1natural_natequiv (natequiv_pi1bouquet_rec _)).Defined.(** We can define the inclusion map by using the previous equivalence on the identity group homomorphism. *)
H: Univalence S: Type
S -> Pi 1 (Bouquet S)
H: Univalence S: Type
S -> Pi 1 (Bouquet S)
H: Univalence S: Type
Pi 1 (Bouquet S) $-> Pi 1 (Bouquet S)
exact grp_homo_id.Defined.(** The fundamental group of an S-bouquet is the free group on S. *)
H: Univalence S: Type
IsFreeGroupOn S (Pi 1 (Bouquet S)) (pi1bouquet_incl S)
H: Univalence S: Type
IsFreeGroupOn S (Pi 1 (Bouquet S)) (pi1bouquet_incl S)
H: Univalence S: Type
forallG : Group,
IsEquiv (fun (f : Pi 1 (Bouquet S) $-> G) (x : S) => f (pi1bouquet_incl S x))
H: Univalence S: Type G: Group
IsEquiv (fun (f : Pi 1 (Bouquet S) $-> G) (x : S) => f (pi1bouquet_incl S x))
H: Univalence S: Type G: Group
(Pi 1 (Bouquet S) $-> G) <~> (S -> G)
H: Univalence S: Type G: Group
?f == (fun (f : Pi 1 (Bouquet S) $-> G) (x : S) => f (pi1bouquet_incl S x))
H: Univalence S: Type G: Group
equiv_pi1bouquet_rec S G ==
(fun (f : Pi 1 (Bouquet S) $-> G) (x : S) => f (pi1bouquet_incl S x))
H: Univalence S: Type G: Group f: Pi 1 (Bouquet S) $-> G
equiv_pi1bouquet_rec S G f = (funx : S => f (pi1bouquet_incl S x))
H: Univalence S: Type G: Group f: Pi 1 (Bouquet S) $-> G
equiv_pi1bouquet_rec S G f =
(equiv_pi1bouquet_rec S G $o fmap (opyon (Pi 1 (Bouquet S))) f) grp_homo_id
H: Univalence S: Type G: Group f: Pi 1 (Bouquet S) $-> G