Thierry Coquand

Steve Awodey

Vladimir Voevodsky

Dan Licata

Carlo Angiuli

Eric Favonia

Bob Finster

Simon Harper

André Huber

Peter Joyal

Egbert Lumsdaine

Rijke

Keywords: homotopy type theory, homotopy theory, algebraic topology, cohomology, type theory, logic, constructive mathematics

The goal of this thesis is to prove that π 4 (S 3 ) Z/2Z in homotopy type theory. In particular it is a constructive and purely homotopy-theoretic proof. We first recall the basic concepts of homotopy type theory, and we prove some well-known results about the homotopy groups of spheres: the computation of the homotopy groups of the circle, the triviality of those of the form π k (S n ) with k < n, and the construction of the Hopf fibration. We then move to more advanced tools. In particular, we define the James construction which allows us to prove the Freudenthal suspension theorem and the fact that there exists a natural number n such that π 4 (S 3 ) Z/nZ. Then we study the smash product of spheres, we construct the cohomology ring of a space, and we introduce the Hopf invariant, allowing us to narrow down the n to either 1 or 2. The Hopf invariant also allows us to prove that all the groups of the form π 4n-1 (S 2n ) are infinite. Finally we construct the Gysin exact sequence, allowing us to compute the cohomology of CP 2 and to prove that π 4 (S 3 ) Z/2Z and that more generally π n+1 (S n ) Z/2Z for every n ≥ 3.

Résumé

L'objectif de cette thèse est de démontrer que π 4 (S 3 ) Z/2Z en théorie des types homotopiques. En particulier, c'est une démonstration constructive et purement homotopique. On commence par rappeler les concepts de base de la théorie des types homotopiques et on démontre quelques résultats bien connus sur les groupes d'homotopie des sphères : le calcul des groupes d'homotopie du cercle, le fait que ceux de la forme π k (S n ) avec k < n sont triviaux et la construction de la fibration de Hopf. On passe ensuite à des outils plus avancés. En particulier, on définit la construction de James, ce qui nous permet de démontrer le théorème de suspension de Freudenthal et le fait qu'il existe un entier naturel n tel que π 4 (S 3 ) Z/2Z. On étudie ensuite le produit smash des sphères, on construit l'anneau de cohomologie des espaces et on introduit l'invariant de Hopf, ce qui nous permet de montrer que n est égal soit à 1, soit à 2. L'invariant de Hopf nous permet également de montrer que tous les groupes de la forme π 4n-1 (S 2n ) sont infinis. Finalement, on construit la suite exacte de Gysin, ce qui nous permet de calculer la cohomologie de CP 2 et de démontrer que π 4 (S 3 ) Z/2Z, et que plus généralement on a π n+1 (S n ) Z/2Z pour tout n ≥ 3.

Mots-clés : théorie des types homotopiques, théorie de l'homotopie, topologie algébrique, cohomologie, théorie des types, logique, mathématiques constructives

Introduction

The aim of this PhD thesis is to prove the following theorem, whose statement and proof will be explained in due time.

Theorem 1. We have a group isomorphism π 4 (S 3 ) Z/2Z. This is actually a well-known theorem in classical homotopy theory, originally proved by Freudenthal in [START_REF] Freudenthal | Über die Klassen der Sphärenabbildungen, I. Große Dimensionen[END_REF] (see also [START_REF] Hatcher | Algebraic Topology[END_REF]corollary 4J.4]). The main difference is that in this thesis we work in homotopy type theory (also known as univalent foundations), which is a new framework for doing mathematics introduced by Vladimir Voevodsky in 2009 and which is particularly well-suited for homotopy theory. From the point of view of a homotopy theorist, the most striking difference between classical homotopy theory and homotopy type theory is that in homotopy type theory all constructions are invariant under homotopy equivalences. One of the advantages is that all the constructions and proofs done in this framework are completely independent of the definition of "spaces". In particular, nothing depends on point-set topology or on combinatorics of simplicial sets. Moreover, as we hope the reader will be convinced after reading this thesis, the constructions and proofs have often a more "homotopy-theoretic feel" and are closer to intuition.

However, this also poses a number of challenges as it is not a priori obvious which concepts can or cannot be defined in a purely homotopy-invariant way. For instance, even though singular cohomology is homotopy-invariant, the classical definition uses the set of singular cochains which is not homotopy-invariant. Therefore the classical definition cannot be reproduced verbatim in homotopy type theory. An even simpler example is the universal cover of the circle which is classically defined using the exponential function R → S 1 , but that function is actually homotopic to a constant function. Homotopy type theory gives us a number of tools to work in a completely homotopy-invariant way and in this thesis we show how to prove theorem 1 in homotopy type theory, starting essentially from scratch.

Another advantage of homotopy type theory over classical homotopy theory is that proofs written in homotopy type theory are much more amenable to being formally checked by a computer. While the present work hasn't been formalized yet, many intermediate results (in particular from the first two chapters) have already been formalized INTRODUCTION by various people, see for instance the libraries [HoTTCoq] and [Unimath] for Coq, [HoTTAgda] for Agda and [HoTTLean] for Lean.

INTRODUCTION

Analytic versus synthetic

The main difference between classical homotopy theory and homotopy type theory is that the first one is analytic whereas the second one is synthetic. To understand the difference between analytic and synthetic homotopy theory, it is helpful to go back to elementary geometry.

Analytic geometry is geometry in the sense of Descartes. The set R 2 is our object of study, points are defined as pairs (x, y) of real numbers and lines are defined as sets of points satisfying an equation of the form ax + by = c. Then in order to prove something we use the properties of R 2 . For instance we can determine whether two lines intersect by solving a particular system of equations.

In contrast, synthetic geometry is geometry in the sense of Euclid. Points and lines are not defined in terms of other notions, they are just primitive notions, and a collection of axioms stipulating how they are supposed to behave is given. Then in order to prove something we have to use the axioms. For instance we cannot use the equation of a line or the coordinates of a point because lines do not have equations and points do not have coordinates.

Analytic geometry can be used to justify synthetic geometry. Indeed, analytic geometry gives a meaning to the notions of point and line and all the axioms of synthetic geometry can be proved to hold in analytic geometry. Therefore the axioms are consistent and everything which is true is synthetic geometry is also true in analytic geometry. The converse doesn't hold, so one could think that synthetic geometry is less powerful than analytic geometry as less theorems are provable. But from a different point of view, one can also argue that synthetic geometry is actually more powerful than analytic geometry because the theorems that can be proved are more general. They are true for any interpretation of the primitive notions for which the axioms are validated, whereas a proof in analytic geometry is by nature only valid in R 2 . Another disadvantage of analytic geometry is that because it reduces geometry to the resolution of equations, it is easy to lose track of the geometrical intuition. To sum up, in analytic geometry we give an explicit definition to the concepts we are interested in, and we can prove a lot of things about them, but we are restricted to this particular model, whereas in synthetic geometry we only axiomatize the basic properties of the concepts we are interested in, less theorems are provable, but they have a wider range of applicability and they are closer to the geometrical intuition.

The situation of homotopy theory is very similar. In analytic homotopy theory (or classical homotopy theory), the sphere S n is defined as the set {(x 0 , . . . , x n ) ∈ R n+1 , x 2 0 + • • • + x 2 n = 1} equipped with the appropriate topology, continuous maps are defined as functions preserving the topology in the appropriate way, and π 4 (S 3 ) is defined as the quotient of the set of continuous pointed maps S 4 → S 3 by the relation of homotopy. We can then use various techniques to prove that π 4 (S 3 ) Z/2Z, i.e. that π 4 (S 3 ) contains exactly two elements.

In synthetic homotopy theory, which is what this thesis is about, the notion of space does not come from topology. Instead it is axiomatized as a primitive notion (under the name type) together with primitive notions of point of a type and of path between two points. In particular, a path is not seen anymore as a continuous function from the interval, it is a primitive notion. We also introduce a primitive notion of continuous function. Note that in classical homotopy theory, we need to define first what is a possibly-non-continuous function before being able to define what a continuous function is, but here we directly take the concept of continuous function as primitive. For us a continuous function is not a possibly-non-continuous function which has the additional property of being continuous, indeed there is not any notion of possibly-non-continuous function. Therefore, the adjective "continuous" is superfluous, and we will simply use the word "function" or "map" for what would be called "continuous function" in classical homotopy theory.

Various basic spaces are also axiomatized, for instance the space N of natural numbers is axiomatized together with an element 0, a function S : N → N and the principle of induction/recursion. The circle is axiomatized together with a point called base, a path called loop from base to base and a similar principle of induction/recursion stating intuitively that the circle is freely generated by base and loop. Similarly, we describe the higher-dimensional spheres S n and the set of connected components of a space. Combining all of that with the notion of (continuous) functions mentioned above, we can define π 4 (S 3 ) and we will see that we can still prove that it is isomorphic to the group Z/2Z. Type theory Homotopy type theory is a variant of type theory and more precisely of Per Martin-Löf's intuitionistic theory of types (called simply dependent type theory here), which was introduced in the 1970s as a foundation for constructive mathematics (cf [START_REF] Martin-Löf | An Intuitionistic Theory of Types: Predicative Part[END_REF]). Constructive mathematics is a philosophy of mathematics based on the idea that in order to prove that a particular object exists, we have to give a method to construct it. It works by restricting the logical principles we are allowed to use and only allows those which are constructive. A proof in constructive mathematics isn't necessarily presented as an algorithm but an algorithm can always be extracted from it. Therefore constructive mathematics rejects principles like the axiom of choice, which asserts the existence of a function without giving a way to compute it, and reasoning by contradiction, which allows us to prove that something exists simply by proving that it cannot not exist. In particular, a proof that there exists a natural number having a specific property has to give (at least implicitly) a method to compute this number. This isn't true in classical mathematics. For instance, let's define n ∈ N as the smallest odd perfect number or 0 if no odd perfect number exists. In classical mathematics, this is a correct and complete definition of n, but it doesn't give any way to compute n. Indeed, at the time of writing it isn't known whether n is equal to 0 or not. On the other hand, this would not be considered a valid definition in constructive mathematics because we used the principle of excluded middle (either there exists an odd perfect number or there doesn't exist any) which isn't constructive. There are various flavors of constructive mathematics and note that the one we are using here, homotopy type theory, is not incompatible with classical logic. It would be perfectly possible to add the axiom of choice or excluded middle, but the drawback is that constructivity, which is one of the main advantages of type theory, would be lost.

INTRODUCTION

In dependent type theory the primitive notions are types and elements of types (or terms). We write u : A for the statement that u is an element of type A. Intuitively, one can think of a type as being something like a set, but there are several important differences with traditional set theory. Elements of types do not exist in isolation, they are always elements of a given type which is an intrisic part of the nature of the element. The type of an element is always known and it doesn't make sense to "prove" that an element u has type A. It is similar to the fact that it doesn't make sense to "prove" that x 2 + y 2 = 0 is an equation. Just looking at it we see that it is an equation and not a matrix. Moreover the type of an element is always unique (modulo computation rules as we will see later). For instance, we cannot say that the number 2 has both type N and type Q. Instead there are two different elements, one of which is 2 N of type N and the other is 2 Q of type Q (which may both be written as 2 in a mathematical text if there is no risk of confusion) and they satisfy i(2 N ) = 2 Q for i : N → Q the canonical inclusion. Similarly, if we are given a rational number q : Q, we cannot ask whether q has type N. By nature q has type Q which is different from N. What we can ask, however, is whether there exists a natural number k : N such that i(k) = q. This is what proving that q is a natural number would mean.

Mathematics is traditionally based on a two-layer system: the logical layer where propositions and proofs live and the mathematical layer where mathematical objects live. The logical layer is used to reason about the mathematical layer. For instance, constructing a specific mathematical object is an activity carried out in the mathematical layer, while proving a theorem happens in the logical layer. In dependent type theory those two layers are merged into one unique layer where types and their elements live. Apart from representing mathematical objects, types also play the role of (logical) propositions, and their elements play the role of "proofs" or witnesses of those propositions. Proving a given proposition is done by constructing an element of the corresponding type. For example, proving an implication A =⇒ B corresponds to constructing an element in the function type A → B, i.e. a function taking proofs of A to proofs of B. Proving a conjunction A ∧ B corresponds to constructing an element in the product type A × B, i.e. a pair composed of a proof of A and a proof of B. This correspondence between types and propositions and between elements of types and proofs is known as the Curry-Howard correspondence. We will sometimes distinguish between types "seen as propositions" and "seen as types" in order to explain the intuition between various constructions, but the difference between the two is often blurry. For instance, the type A B can be seen both as the proposition "A and B are isomorphic" and as the type of all isomorphisms between them. Indeed, in constructive mathematics proving that A and B are isomorphic is the same thing as constructing an isomorphism between them.

The word "dependent" in "dependent type theory" refers to the fact that types can depend on elements of other types. Such types are called dependent types or families of types. Given a type A, having a dependent type B over A means that for every element a : A there is a type B(a). Dependent types are essential for the representation of quantified propositions as we see in chapter 1. For instance, a proposition depending on a natural number n : N is represented by a type depending on the variable n. A dependent type B over A where all the types B(a) are seen as propositions is called a predicate on A.

The constructivity property of dependent type theory enables one to see it as a programming language. In dependent type theory all primitive constructions have computation rules (or reduction rules), which essentially explain how to execute the programs of the language. All elements of types can then be seen as programs and can be executed, simply by repeatedly applying the computation rules. Note that in dependent type theory there are no infinite loops. All programs terminate and therefore a result is always obtained when executing a program. From the point of view of mathematics, the computation rules are the defining equations of the primitive constructions, and applying a computation rule corresponds to replacing something by its definition. Two elements u and v of a given type A are said to be definitionally equal (or judgmentally equal) if they become syntactically equal after replacing everything by their definition, i.e. after executing u and v. An important rule of type theory, known as the conversion rule, states that if u is of type A and A is definitionally equal to A , then u has also type A . In particular, types are unique only up to definitional equality, but definitional equality is decidable because it is simply a matter of repeatedly unfolding the definitions. In the same way as it doesn't make sense to prove that a term u is of type A, it also doesn't make sense to prove that two terms or two types are definitionally equal. This is something that can simply be checked algorithmically.

Given the correspondence between proofs and elements of types it follows that proofs themselves can be executed, which is what gives dependent type theory its constructive nature. For instance, given a proof that there exists a natural number having a certain property, one can execute the proof and the final result will be a pair of the form (n, p) where n is a natural number of the form either 0, 1, 2, . . . (i.e. we know its value) and p is a proof that n does satisfy the property. This close relation between type theory and computer science led to the development of proof assistants like Coq, Agda or Lean (see [Coq], [Agda], [Lean]). They are essentially type-checkers for dependent type theory together with various features making them easier to use. In a proof assistant, one can state a theorem by defining the corresponding type and then prove it by constructing a term (i.e. writing a program) having this type. If the proof assistant accepts it, it means that the program representing the proof is well-typed and that, therefore, the proof is correct.

Homotopy type theory Dependent type theory is very successful but suffers from a few problems, in particular when it comes to the treatment of equality. Given a type A and two elements u, v : A, the proposition "u is equal to v" is reified as a type u = A v called the identity type (whose elements are proofs that u is equal to v). Martin-Löf gave several versions of dependent type theory with different rules for the identity types. In one of them, called extensional type theory, the identity types are behaving in a nice way but typing is not decidable, i.e. there is no algorithm checking whether a term has a given type. This is usually an undesirable feature for a type theory. In another one, called intensional type theory, the rules of the identity types are different and typing is INTRODUCTION decidable. However, the treatment of equality in intensional type theory is sometimes unsatisfactory. For instance, two functions f, g : A → B can satisfy f (x) = g(x) for every x : A without being equal themselves as functions. Defining the quotient of a set by an equivalence relation is also quite problematic. A different issue is that the principle of uniqueness of identity proofs, which states that for any u, v : A, any two proofs of u = A v are equal, isn't provable anymore, which is contrary to the intuition which was behind the identity types. Indeed, the idea of the identity types in Martin-Löf's type theory is that every type represents a set and that u = A v represents the set having exactly one element if u and v are equal, and the empty set if u and v are different.

Homotopy type theory is based on intensional type theory and resolves this last problem by changing the intuition behind types and the identity types. In homotopy type theory, types are not seen as sets anymore but as spaces, dependent types are seen as fibrations, and the identity type u = A v is seen as the space of all continuous paths from u to v in the space A. Rather surprisingly, it can be shown that under this interpretation, all rules of intensional type theory are still satisfied. Moreover, in this interpretation, uniqueness of identity proofs isn't a desirable property anymore. Given two points u and v in a space A there can be many non-homotopic paths from u to v and many non-homotopic homotopies between two paths, and so on. This connection between type theory and homotopy theory was discovered around 2006 independently by Vladimir Voevodsky and by Steve Awodey and Michael Warren in [START_REF] Awodey | Homotopy theoretic models of identity types[END_REF]. Then in 2009 Vladimir Voevodsky stated the univalence axiom, proved its consistency in the simplicial set model, and started the project of formalizing mathematics in this system, intensional type theory with the univalence axiom, named univalent foundations. Given a universe Type, i.e. a type whose elements are themselves types, and two elements A and B of Type, the univalence axiom identifies the identity type A = Type B with the type of equivalences A B. This axiom makes precise the idea that "isomorphic structures have the same properties", which is often used implicitly in mathematics. Note that it is not compatible with the principle of uniqueness of identity proofs because, for instance, it implies that there are two different equalities 2 = Type 2 corresponding to the two bijections 2 2 (where 2 is the type with two elements). Voevodsky also noticed that the univalence axiom implies function extensionality, i.e. that if f (x) = B g(x) for all x : A, then f = A→B g, and that it makes the definition of quotients possible and well-behaved.

In 2011, the notion of higher inductive types started to emerge. Ordinary inductive types are types defined by giving some generators (the constructors) and an induction principle making precise the idea that the type is freely generated by the constructors. Higher inductive types are a generalization of ordinary inductive types where we can give not only point-constructors but also path-constructors. For instance, the circle has one point-constructor base and one path-constructor loop which is a path from base to base. In combination with univalence, fibrations can be defined by induction on the base space, which is a very powerful way of defining fibrations. For instance in order to define a fibration over the circle it is enough to give the fiber over base and the action of loop on this fiber (this action must be an equivalence).

One of the drawbacks of homotopy type theory is that by adding the univalence axiom or higher inductive types, we lose the constructivity property which, as we mentioned previously, is an essential feature of type theory. However, unlike the axiom of choice or excluded middle it is widely believed that the univalence axiom and higher inductive types are constructive in some way, and several people are trying to give an alternative description of homotopy type theory in which univalence and higher inductive types compute, see in particular [START_REF] Cohen | Cubical Type Theory: a constructive interpretation of the univalence axiom[END_REF]. A related conjecture is Voevodsky's homotopy canonicity conjecture: for every closed term n : N constructed using the univalence axiom, there exists a closed term k : N constructed without using the univalence axiom and a proof of k = N n.

Constructivity of π 4 (S 3 ) The first major result of this thesis is corollary 3.4.5 which states that there exists a natural number n such that π 4 (S 3 ) Z/nZ. This statement is quite curious, because it is a statement of the form "there exists a natural number n satisfying a given property" hence according to the constructivity conjecture it should be possible to extract from its proof the value of n. However, nobody has managed to do it so far, mainly because the proof is relatively complicated and that constructivity of the univalence axiom and of higher inductive types isn't very well understood yet. In chapters 4, 5 and 6 we present a proof that this number is equal to 2, but note that this is a mathematical proof, as opposed to a computation extracted from the definition of n, so it doesn't address the constructivity conjecture. However, it shows that we can define and work with cohomology and the Gysin sequence in homotopy type theory, which is interesting in its own right.

Models of homotopy type theory

We do not talk much about the relationship between homotopy type theory (synthetic homotopy theory) and classical homotopy theory (analytic homotopy theory) in this thesis, apart from the fact that many definitions and proofs look quite similar to their classical counterpart. A construction of a model of homotopy type theory (minus higher inductive types) in classical homotopy theory is presented in [START_REF] Kapulkin | The Simplicial Model of Univalent Foundations[END_REF] and a proof that they also model higher inductive types is in preparation in [LS]. As we mentioned previously, one of the consequence of working synthetically is that all the work done in this thesis is also valid in any other model of homotopy type theory, not only the classical one. Michael Shulman gave in [START_REF] Shulman | Univalence for inverse EI diagrams[END_REF] various other models of homotopy type theory and it is widely believed that any ∞-topos in the sense of Lurie (cf [START_REF] Lurie | Higher topos theory[END_REF]) gives a model of homotopy type theory.

Another very important model is the model of Thierry Coquand et al. described [START_REF] Bezem | A model of type theory in cubical sets[END_REF], which is a constructive model of homotopy type theory in cubical sets. Note that, in theory, this model should allow us to compute the number n of chapter 3, but this hasn't been done at the time of writing. This model also suggests a different version of homotopy type theory, called cubical type theory (cf. [START_REF] Cohen | Cubical Type Theory: a constructive interpretation of the univalence axiom[END_REF]), but in this work we decided to stay with the type theory used in [START_REF]Homotopy Type Theory: Univalent Foundations of Mathematics[END_REF]. Various squares and cubes are nevertheless used whenever convenient.

Chapter 1

Homotopy type theory

In this first chapter we give an introduction to homotopy type theory and to a few basic results that are used throughout this work. The reader is encouraged to read [START_REF]Homotopy Type Theory: Univalent Foundations of Mathematics[END_REF] for a more comprehensive presentation of homotopy type theory. Unlike in [UF13], we do not notate definitional equalities differently from propositional equalities, we simply use the terminology "u = v by definition" when we want to insist on the fact that the equality is definitional. We also use the standard notation u := v when introducing new definitions. We use the word "proposition" in its standard mathematical meaning. A proposition is either a statement which might be true or false, for instance "the negation of the proposition 1 + 1 = 2 is the proposition 1 + 1 = 2", or a statement for which we do provide a proof. In particular when we say that a type is "seen as a proposition" or when we state a proposition, it doesn't mean that the type in consideration is assumed to be (-1)-truncated in the sense of section 1.10. We reserve the expression "mere proposition" for such types.

All types are seen as elements of a particular type called Type. For consistency reasons, Type cannot be an element of itself so we have an infinite sequence of universes Type 0 , Type 1 , Type 2 , . . . , with Type n : Type n+1 for every n. In practice, though, we rarely need to worry about which universe we are in, so from now on we simply write Type for any of the Type n , as is often done in type theory.

Function types

We first present function types. Given two types A and B, there is a type written

A → B
representing the type of functions from A to B. A function can be defined by an explicit formula as follows:

f : A → B, f (x) := Φ[x],
11 where Φ[x] is a syntactical expression which may use the variable x (and usually do, unless the function is constant) and which is of type B when we assume that x is of type A. We can also use the notation λx.Φ[x] which is the same thing as the function f above except that it avoids the need to give it a name. Given a function f : A → B and an element a : A, we can apply f to a and we obtain an element of type B,

f (a) : B.
Moreover, if f is defined as above then f (a) is equal to Φ[a/x] by definition, where Φ[a/x] is the expression Φ[x] where all instances of the variable x have been replaced by a.

When we see A and B as spaces, an element of A → B should be thought of as a continuous function from A to B. When we see A and B as propositions, an element of A → B is a function turning a proof of A into a proof of B. In other words, it corresponds to a proof of "A implies B". In particular, this means that logical implications are translated into function types in type theory.

An element P : A → Type is called a dependent type over A and it represents a family of types indexed by A, or a fibration over A if A and all types P (a) are seen as spaces, or a predicate on A if all types P (a) are seen as propositions.

Definition 1.1.1. Given a type A, the identity function of A is the function

id A : A → A, id A (x) := x.
Definition 1.1.2. Given three types A, B and C and two functions f : A → B and g : B → C, the composition of f and g is the function

g • f : A → C, (g • f )(x) := g(f (x)).

Dependent functions

A function f : A → B always returns an element of type B no matter what its argument is. It is possible to generalize function types in order to allow the output type to depend on the value of the input. More precisely, given a type A and a dependent type B : A → Type, there is a type written

(x : A) → B(x) or x:A B(x)
representing dependent functions from A to B, i.e. functions sending an element x of A to an element of the corresponding type B(x). Just as with regular functions, a dependent function can be defined by an explicit formula as follows:

f : (x : A) → B(x), f (x) := Φ[x],

FUNCTION TYPES

where Φ[x] is an expression of type B(x), and we can also write it λx.Φ[x]. When we apply a dependent function f : (x : A) → B(x) to an element a : A, we get an element of type B(a) (which depends on a in general)

f (a) : B(a).
When we see A as a space and B as a fibration over A, a dependent function f : (x : A) → B(x) should be seen as a continuous section of B. When we see A as a space and B as a predicate on A, the dependent function type (x : A) → B(x) corresponds to the universally quantified proposition ∀x : A, B(x). Indeed, proving the proposition ∀x : A, B(x) corresponds to proving B(x) for every x in A, which is exactly what a dependent function of type (x : A) → B(x) does.

For instance, let us assume we have a type A seen as a space and a dependent type B over A seen as a fibration over A. Then a theorem of the form "For every section f of B, if P (f ) holds then Q(f ) holds" should be interpreted as the type

(f : (x : A) → B(x)) → (P (f ) → Q(f )).
The arrow on the left represents the type of sections of B, the arrow on the right represents the logical implication between P (f ) and Q(f ) and the arrow in the middle represents universal quantification. A proof of such a theorem is a function taking a function f of type (x : A) → B(x) (i.e. f is a function taking an argument x of type A and returning a result of type B(x)) and returning a function of type P (f ) → Q(f ), i.e. which takes an element of type P (f ) (a proof that f satisfies P ) and returns an element of type Q(f ) (a proof that f satisfies Q).

Functions with several arguments

There are several ways to talk about functions with several arguments. Let's say for instance that we are interested in a function f taking two arguments, of types A and B, and returning a result of type C. One way to state it is to say that f has type (A × B) → C, i.e. f takes one argument of the product type A × B (that we define in the next section) and returns an element of C. Another way to state it is to say that f has type A → (B → C), i.e. f takes one argument of type A and returns another function taking the second argument of type B and returning the result of type C. The two versions turn out to be equivalent, and in general we use the second version (called the curried form), as is common in type theory, with the syntax

f : A → B → C, f (a, b) := Φ[a, b].
Of course, the type B could be a dependent type over A and the type C could be a dependent type over both A and B, and it can be generalized to functions with more than two arguments.

Pair types

We now present pair types. Given two types A and B, there is a type written One can deconstruct an element of A × B as follows. If P : A × B → Type is a dependent type over A × B, then a section of it can be defined by

A × B
f : (z : A × B) → P (z), f ((x, y)) := f × (x, y),
where

f × : (x : A)(y : B) → P ((x, y)).
For instance, we can define the first and the second projection by

fst : A × B → A, snd : A × B → B, fst((a, b)) := a, snd((a, b)) := b.
When we see A and B as propositions, the type A × B represents the conjunction of A and B. Indeed proving that "A and B" holds is equivalent to proving that both A and B hold, therefore a proof of "A and B" can be seen as a pair (a, b) where a is a proof of A and b is a proof of B.

Dependent pairs

The second component of an element of A × B always has type B. It is possible to generalize pair types in order to allow the type of the second component to depend on the value of the first component. More precisely, given a type A and a dependent type B over A, there is a type written

INDUCTIVE TYPES

One can define a function out of it in the same way as for non-dependent pair types. For instance the first and second projections are defined by fst :

x:A B(x) → A, snd : z :

x:A B(x) → B(fst(z)), fst((x, y)) := x, snd((x, y)) := y.
Note that, this time, the second projection is a dependent function because the type of the second component of a dependent pair depends on the first component. It is possible to nest Σ-types in order to obtain types of arbitrary n-tuples. For instance the type of semigroups can be defined as the type

SemiGroup : Type, SemiGroup := G:Type m:G→G→G ((x, y, z : G) → m(m(x, y), z) = G m(x, m(y, z))).
In other words, a semigroup is a triple (G, (m, a)) where G is a type, m is a function of type G → G → G (the multiplication operation), and a is a proof of associativity of m, i.e., a is a function taking three arguments x, y and z of type G and returning an equality between m(m(x, y), z) and m(x, m(y, z)). Note that the type of m depends on G, and that in turn the type of a depends on m.

When we see B as a fibration over A, the type x:A B(x) corresponds to the total space of B. This will be used in particular in the flattening lemma in section 1.9. When we see B as a predicate on A, the type x:A B(x) corresponds to the type of elements of A which satisfy B. Note that there is a subtlety here because if for some a : A there are several distinct elements in B(a), then a is counted several times which isn't what we want in general. We can also see x:A B(x) as corresponding to the proposition "there exists an x : A satisfying B(x)". Indeed, one can prove this proposition by exhibiting an x : A and a proof that B(x) holds, i.e. an element of x:A B(x). However this would be more accurately called explicit existence because it requires us to choose an explicit x satisfying B, which might be a too strong requirement in some cases. We will come back to both problems in section 1.10.3.

Inductive types

We now present inductive types, which give a wide variety of type formers, including base types. The general idea is that an inductive type T is presented by a list of constructors which describe all the different ways of constructing elements of T and, in some sense which is made precise by an induction principle (or elimination rule), the only elements of T are those given by the constructors. In this section, all equalities (introduced by the symbol :=) are equalities by definition. We now give various examples of inductive types.

Natural numbers

The canonical example of an inductive type is the type of natural numbers N. The two constructors are 0 : N,

S : N → N.
In other words there are two ways to construct a natural number: either we take 0 or we take the successor of an already constructed natural number. We use the usual notation 1 := S(0), 2 := S(S(0)), and so on, and we write n + 1 for S(n).

The induction principle states that given a dependent type P over N, we can define a section of it by giving f 0 and f S as follows:

f : (n : N) → P (n), f (0) := f 0 , f (n + 1) := f S (n, f (n)),
where we have

f 0 : P (0), f S : (n : N) → P (n) → P (n + 1).
For instance, one can define addition and multiplication on natural numbers by

add : N → N → N, mul : N → N → N, add(0, n) := n, mul(0, n) := 0, add(m + 1, n) := add(m, n) + 1, mul(m + 1, n) := add(mul(m, n), n).

The unit type

The unit type is the inductive type 1 with one constructor

1 : 1.
Its induction principle states that if P (x) is a dependent type over x : 1, then we can construct a section of P (x) by

f : (x : 1) → P (x), f ( 1 ) := f 1 ,
where f 1 : P ( 1 ).

The type of booleans

The type of booleans or 2-element type is the inductive type 2 with two constructors true, false : 2.

Its induction principle states that if P (x) is a dependent type over x : 2, then we can construct a section of P (x) by

f : (x : 2) → P (x), f (true) := f true , f (false) := f false ,
where f true : P (true) and f false : P (false).

Disjoint sum Given two types A and B, their disjoint sum is the inductive type A+B with the two constructors

inl : A → A + B, inr : B → A + B.
Its induction principle states that if P (x) is a dependent type over x : A + B, then we can construct a section of P (x) by This type can also be used to represent explicit disjunction. Indeed, when A and B are seen as propositions, an element of A + B is either a proof of A or a proof of B, hence it's a proof of "A or B". As for explicit existence, the drawback is that it requires us to choose whether we proved the left-hand side or the right-hand side which might be a too strong requirement. We will come back to that in section 1.10.3.

f : (x : A + B) → P (x), f (inl(a)) := f inl (a), f (inr(b)) := f inr (b),

Integers

The type of integers is the inductive type Z with the three constructors

neg : N → Z, 0 Z : Z, pos : N → Z.
An integer is either 0 Z , pos(n) for n : N (which represents n + 1) or neg(n) for n : N (which represents -(n + 1)). There is again an induction principle derived from the CHAPTER 1. HOMOTOPY TYPE THEORY constructors. For instance one can define the operation of adding one by

succ Z : Z → Z, succ Z (neg(n + 1)) := neg(n), succ Z (neg(0)) := 0 Z , succ Z (0 Z ) := pos(0), succ Z (pos(n)) := pos(n + 1).
Note that here we have used both the induction principle for Z and the one for N (in the case neg).

The empty type

The empty type is the inductive type ⊥ (also called 0) without any constructor. In particular there is no way to construct an element of it. Its induction principle states that any dependent type over ⊥ has a section. For instance there is a canonical map ⊥ → A for any type A.

The empty type is used to represent the proposition False. Indeed, False is the proposition that doesn't have any proof. It is also used for defining negation. When A is a type seen as a proposition, the type representing its negation is ¬A := (A → ⊥). For instance, we can prove the principle of reasoning by contraposition by

contraposition : (A → B) → (¬B → ¬A), contraposition(f, b , a) := b (f (a)).
Here f is a function from A to B, b is a function from B to ⊥ and a is a element of A, therefore by applying f and then b to a we get an element of type ⊥ which is what we wanted.

General inductive types

More generally one can introduce new inductive types whenever needed, but there are a few constraints that have to be satisfied in order for them to make sense and be consistent. In particular:

• Every constructor must end with the type being defined, i.e. a constructor cannot give elements in a different type (we will slightly relax this condition in section 1.7 on higher inductive types).

• The recursive occurrences of the type being defined have to be in strictly positive positions, i.e. they can only appear as the codomain of an argument of the constructors.

We refer to [UF13, chapter 5] for more details on inductive types.

Identity types

Given a type A and two elements u and v of type A, there is a type u = A v (or simply u = v when A is clear from the context) called the identity type or equality type. Its elements are called paths, equalities or identifications. The idea is that when we see A as a space, the type u = A v corresponds to the space of (continuous) paths from u to v.

To understand the notation, note that if A is just a set seen as a discrete space, then there is a path between u and v if and only if u and v are equal. Therefore, in that case the type u = A v does correspond to the logical proposition "u is equal to v".

For every point a : A, there is a path

idp a : a = A a
which we call the constant path at a. Moreover, we have an "induction principle". Given an point a : A, a dependent type P : (x : A)(p : a = A x) → Type and an element d : P (a, idp a ), there is a function

J P (d) : (x : A)(p : a = A x) → P (x, p)
together with an equality (called the computation rule of J)

J P (d)(a, idp a ) = d. (J comp )
We refer to the use of this operator J as path induction. The idea is that when we want to prove/construct something depending on a path p where one endpoint of p is free (the x above), then it is enough to prove/construct it in the case where p is the constant path. It is important that one of the endpoints be free, for instance if we only have P : (a = A a) → Type and d : P (idp a ), we cannot deduce that P (p) hold for every p : a = A a. This last statement is known as the "K rule" and is equivalent to the principle of uniqueness of identity proofs which we do not want.

There is some debate on whether the equality (J comp ) should be taken as a definitional equality or not. On the one hand it was assumed definitional in the original definition of the identity type by Per Martin-Löf in [START_REF] Martin-Löf | An Intuitionistic Theory of Types: Predicative Part[END_REF] and most of the work done in homotopy type theory so far has been done assuming it is definitional, in particular the reference book [START_REF]Homotopy Type Theory: Univalent Foundations of Mathematics[END_REF]. On the other hand the original motivation for having a definitional equality was that the family of identity types was supposed to be inhabited only by elements of the form idp a , but homotopy type theory challenges this intuition by adding new elements to the identity types via the univalence axiom and higher inductive types. In this thesis we assume that it holds definitionally, but the only place where we really use it is in the definition of the structure of weak ∞-groupoid, and we conjecture that it is not actually required.

The weak ∞-groupoid structure of types

The path induction principle allows us to equip every type A with a very rich structure making A into what is known as an weak ∞-groupoid. In this chapter we give an intuitive presentation by giving many examples of operations part of this structure, and we give a precise definition of weak ∞-groupoids in appendix A.

The first thing to notice is that the identity type operation can be iterated. If we have p, q : u = A v we can consider the type p = u= A v q, and if α, β : p = u= A v q we can consider the type α = p=u= A v q β, and so on. If we see p and q as proofs of equality between u and v, it seems rather odd to talk about equalities between them, let alone equalities between equalities between them. However, when seeing u and v as two points in a space A and p and q as two paths between u and v, it makes sense to think of p = u= A v q as the type of homotopies between p and q and then α = p=u= A v q β as the type of homotopies between the homotopies α and β, and so on. Let's now look at several examples of operations (called coherence operations) that we can do on those paths and higher paths.

Inverse If p : a = b is a path in A, then there is a path p -1 : b = a called the inverse path of p. We write this operation as follows:

(a, b : A)(p : a = b) → (p -1 : b = a).
To define it, the idea is to do a path induction on p, where the dependent type P is P (b, p) := (b = a). We then need to give an element of P (a, idp a ) (i.e. a = a) and we use idp a . In particular, we get the equality by definition idp -1 a := idp a . If we do not take (J comp ) as an equality by definition, then the equality still holds but only in the sense that there is a path

inv-def : idp -1 a = idp a .
Composition If p : a = b and q : b = c are two paths in A, then there is a path p • q : a = c called the composition of p and q. This operation is written as

(a, b : A)(p : a = b)(c : A)(q : b = c) → (p • q : a = c).
It is obtained by applying the J rule successively to q and p and we have the equality idp a • idp a := idp a by definition. If (J comp ) is not an equality by definition, then we have instead a term comp-def : idp a • idp a = idp a .

Associativity If we take three composable paths p : a = b, q : b = c and r : c = d, then there are two ways to compose them and we define an operation as follows:

(a, b : A)(p : a = b)(c : A)(q : b = c)(d : A)(r : c = d) → (α p,q,r : (p • q) • r = p • (q • r)).
By path induction on r, q and p, it suffices to give α idp a ,idp a ,idp a of type (idp a •idp a )•idp a = idp a • (idp a • idp a ). But we have idp a • idp a = idp a by definition, therefore the equality holds by definition and idp idp a fits:

α idp a ,idp a ,idp a := idp idp a .
Note that if we do not take (J comp ) as an equality by definition, then it is still possible to find a term of type (idp a • idp a ) • idp a = idp a • (idp a • idp a ) but it is more complicated to define as we need to explicitly combine several uses of comp-def. The complexity would increase even more for more complicated coherence operations.

Inverse and identity laws Similarly we have the inverse and identity laws:

(a, b : A)(p : a = b) → (ζ p : p • p -1 = a=a idp a ), (a, b : A)(p : a = b) → (η p : p -1 • p = b=b idp b ), (a, b : A)(p : a = b) → (ρ p : p • idp b = a=b p), (a, b : A)(p : a = b) → (λ p : idp a • p = a=b p).
These four operations are defined by path induction on p, using the fact that idp -1 a = idp a and idp a • idp a = idp a by definition, and we have

ζ idp a := idp idp a , η idp a := idp idp a , ρ idp a := idp idp a , λ idp a := idp idp a .
Vertical and horizontal composition Higher dimensional paths can be composed in a variety of ways. For 2-dimensional paths, we first consider vertical composition, which is the operation

(a, b : A)(p, q : a = b)(α : p = a=b q)(r : a = b)(β : q = a=b r) → α • β : p = a=b r
and which corresponds to the diagram

a b p q r α β
Note that vertical composition is the same thing as regular composition in the type a = b, therefore we use the same notation. We also have horizontal composition, which is the operation

(a, b : A)(p, q : a = b)(α : p = a=b q) (c : A)(p , q : b = c)(β : p = b=c q ) → α β : (p • p ) = a=c (q • q )
and which corresponds to the diagram

a b c p q p q α β
These two operations are defined by successive path inductions and we have

idp idp a • idp idp a := idp idp a , idp idp a idp idp a := idp idp a .
Exchange law Given four 2-dimensional paths as follows:

a b c p q r p q r α β α β
we can consider the two compositions

(α • β) (α • β ) : p • p = r • r and (α α ) • (β β ) : p • p = r • r .
The exchange law states that there is a 3-dimensional path equating them and is defined by successive path inductions, using the fact that

(idp idp a • idp idp a ) (idp idp a • idp idp a ) = idp idp a , (idp idp a idp idp a ) • (idp idp a idp idp a ) = idp idp a
by definition. We use it in the Eckmann-Hilton argument in proposition 2.1.6.

Pentagon of associativities

Given four composable paths p, q, r and s, there are two different ways to go from ((p

• q) • r) • s to p • (q • (r • s))
, and the following pentagon states that there is a 3-dimensional path between them:

• p • (q • (r • s)) • (p • q) • (r • s) • ((p • q) • r) • s • (p • (q • r)) • s • p • ((q • r) • s) α p•q,r,s α p,q,r idp s α p,q,r•s α p,q•r,s idp p α q,r,s It corresponds to the coherence operation (a, b : A)(p : a = b)(c : A)(q : b = c)(d : A)(r : c = d)(e : A)(s : d = e) → (π p : (α p•q,r,s • α p,q,r•s ) = (α p,q,r idp s ) • α p,q•r,s • (idp p α q,r,s )).
and it is defined by successive path inductions and using the fact that

α idp a •idp a ,idp a ,idp a • α idp a ,idp a ,idp a •idp a = idp idp a and (α idp a ,idp a ,idp a idp idp a ) • α idp a ,idp a •idp a ,idp a • (idp idp a α idp a ,idp a ,idp a ) = idp idp a by definition.

General coherence operations

The operations we just presented are only examples of coherence operations. There are many others and in all dimensions. The structure of a general coherence operation is as follows: the list of arguments needs to form a "contractible" shape in the sense that one can apply J to it until there is only one point a : A left, and the return type can be any iterated identity type between two terms built using the variables and other coherence operations. All coherence operations have the property that they are equal by definition to the iterated constant path when applied only to constant paths. This property allows us to define coherence operations by successive path inductions as we did above in the examples. A precise definition of weak ∞-groupoids together with a proof that path induction gives such a structure on types is presented in appendix A.

Continuity of maps

Given a map f : A → B and a path p : a = A b in A, we can apply f to p, and obtain a path in B between f (a) and f (b):

ap f (p) : f (a) = B f (b).
This path is defined by path induction on p and we have the equality

ap f (idp a ) = idp f (a) .
Here are some useful properties of ap, which can all be proved by path induction.

• If f = (λx.a) is a constant function, then ap f (p) = idp a for every p.

• If f = (λx.x) is the identity function, then ap f (p) = p for every p.

• If f = g • h, then ap g•h (p) = ap g (ap h (p)).
Note that we have defined ap only for non-dependent functions, we will see later how to define it for dependent functions as well.

If we see a = A b as the proposition "a and b are equal", then ap simply states that application of functions respects equality, which is something very reasonable to ask. However, if we see a = A b as the space of paths from a to b, then ap states that we can apply functions not only to points but also to paths. One can also apply functions to 2-dimensional paths by

ap 2 f : (p = a= A b q) → (ap f (p) = f (a)= B f (b) ap f (q)), ap 2 f (p) := ap ap f (p).
The fact that we can apply functions to paths and to higher dimensional paths is compatible with the intuition that, in homotopy type theory, all functions are continuous. When we see types as weak ∞-groupoid as sketched previously, then any map f : A → B should be seen as an ∞-functor. Indeed , it turns out that (the iterated versions of) ap f commute with all coherence operations. For instance given any two composable paths p : a = A b and q : b = A c in A, we have an equality

ap f (p • q) = ap f (p) • ap f (q),
which can be proved by path induction on p and q. It also holds for higher coherences but it is more complicated to write. For instance for associativity, given p : a = A b, q : b = A c and r : c = A d we have

ap 2 f (α p,q,r ) : ap f ((p • q) • r) = ap f (p • (q • r)), α ap f (p),ap f (q),ap f (r) : ((ap f (p) • ap f (q)) • ap f (r)) = (ap f (p) • (ap f (q) • ap f (r)))
and the commutation of ap 2 f with α states that they are equal after composition with the two paths

ap f ((p • q) • r) = (ap f (p) • ap f (q)) • ap f (r), ap f (p • (q • r)) = ap f (p) • (ap f (q) • ap f (r))
constructed using the fact that ap f commutes with composition of paths.

The univalence axiom

Given two types A and B, we can consider the identity type A = Type B of paths between A and B in Type. An equality between two types allows us to transport elements from one type to the other, we have the two functions

coe : (A = Type B) → (A → B), coe -1 : (A = Type B) → (B → A),
which are defined by path induction, and which satisfy

coe idp A (a) = a, coe -1 idp A (a) = a.
We do not take these equalities as definitional equalities because we never need it and we wish to limit the use of the definitional (J comp ). We can also easily check that those two functions are inverse to each other, again by path induction:

coeidp : (p : A = Type B)(a : A) → coe -1 p (coe p (a)) = A a, coeidp : (p : A = Type B)(b : B) → coe p (coe -1 p (b)) = B b.
Another function related to coe is the transport function. Given a type A and a dependent type P : A → Type, we have the function

transport P : (a = A b) → (P (a) → P (b)), transport P p (x) := coe ap P (p) (x)
defined using the fact that ap P (p) is a path in the universe from P (a) to P (b). We can also transport in the other direction and it gives an equivalence between P (a) and P (b).

The univalence axiom states that conversely, any "equivalence" between two types can be turned into a path in the universe. We first define equivalences.

Proposition 1.5.1. There is a predicate isequiv : (A, B : Type)(f : A → B) → Type where isequiv(f ) is read as "f is an equivalence", which has the following properties.

• A function f is an equivalence if and only if there is a function g : B → A such that g(f (x)) = x for all x : A and f (g(y)) = y for all y : B.

• Given a function f : A → B, any two elements of isequiv(f ) are equal.

Proof. The first point makes it seem like we could define isequiv by isequiv(f )

? := g:B→A (((x : A) → g(f (x)) = A x) × ((y : B) → f (g(y)) = B y)) ,
but it turns out that this definition does not satisfy the second point of the proposition.

One possibility to fix it is to consider separately one left-inverse and one right-inverse, instead of one two-sided inverse:

isequiv(f ) := g:B→A ((x : A) → g(f (x)) = A x) × h:B→A ((y : B) → f (h(y)) = B y) .
The two inverses turn out to be equal and that definition now satisfies the second point of the proposition. We refer to [UF13, section 4.3] for a proof that this definition of equivalences is suitable and to [UF13, chapter 4] for many other equivalent definitions of equivalences.

We can now state the univalence axiom. We first define the type of equivalences between two types by A B :=

f :A→B isequiv(f ).
There is a map (A = Type B) → (A B) sending a path p to the equivalence given by (coe p , coe -1 p , coeidp p , coeidp p ).

Axiom 1.5.2 (Univalence axiom). The map

(A = Type B) → (A B)
is an equivalence.

In particular, it means that there is a map

ua : (A B) → (A = Type B),
which allows us to construct an equality between two types given an equivalence between them, and if e : A B is an equivalence then coe ua(e) is equal to the underlying function of e.

Dependent paths and squares

The notion of path we described in section 1.4 is homogeneous in that it can only be applied between two elements of the same type A. It does not make sense, at least in homotopy type theory, to talk about a path between a point a : A and a point b : B for A and B two unrelated types. However, if A and B are themselves connected by a path in Type, then we can make sense of it.

Proposition 1.6.1. Given a path p : A = Type B in Type between two types A and B and two terms a : A and b : B, there is a type of heterogeneous paths between a and b over p written a = p b and satisfying the two equivalences

(a = p b) (coe p (a) = B b), (a = p b) (a = A coe -1 p (b)). Either (coe p (a) = B b) or (a = A coe -1 p (b)
) can be used as the definition of a = p b. We could also define it by path induction on p, or as an inductive family of types. As a special case, if a and b have the same type A and p is the constant path, then the type a = idp A b is equivalent to the type a = A b. Therefore homogeneous paths can be seen as a special case of heterogeneous paths via this equivalence.

Heterogeneous paths allow us to define dependent paths, which are useful in many different situations as we will see.

Proposition 1.6.2. Given a dependent type B : A → Type over a type A and a path p : x = A y in A, for every u : B(x) and v : B(y) there is a type of dependent paths in B over p from u to v written u = B p v and satisfying the two equivalences

(u = B p v) (transport B (p, u) = B(y) v), (u = B p v) (u = transport B (p -1 , v)).
We can define the type of dependent paths by

(u = B p v) := (u = ap B (p) v).
This makes sense because ap B (p) is a path in the universe between B(x) and B(y). As with the type of heterogeneous paths, there are many other ways to define it. Dependent paths are used in particular to define ap for dependent functions.

Definition 1.6.3. Given a dependent function f : (x : A) → B(x) and a path p : a = A b in A, there is a dependent path

ap f (p) : f (a) = B p f (b)
defined by path induction and satisfying

ap f (idp a ) = idp f (a) .
Note that this last equation uses implicitly the equivalence between u = B idp a v and u = B(a) v.

If B does not depend on x, then the types f (a) = B p f (b) and f (a) = B f (b) are equivalent and the element ap f (p) defined here and the one defined in section 1.4.2 are identified by this equivalence. Therefore we keep the same notation for both and there will be no ambiguity.

In many cases, we can give a different characterization of u = B p v depending on B. A very useful instance of that is when B is an identity type. Proposition 1.6.4. Given A, B : Type, f, g :

A → B, p : a = A b, u : f (a) = B g(a) and v : f (b) = B g(b), the type u = λz.f (z)= B g(z) p v is equivalent to the type (u • ap g (p)) = (ap f (p) • v).
We have the picture

• • • • • • f (a) = g(a) f (b) = g(b) p a b A B ap g (p) ap f (p) u v
The type (u • ap g (p)) = (ap f (p) • v) can be seen as the type of fillers of the square

• • • • ap f (p) u v ap g (p)
There are many other equivalent ways to define the type of fillers of such a square. We could use for instance any of the following four types (which are all equivalent):

u = (ap f (p) • v • ap g (p) -1 ), v = (ap f (p) -1 • u • ap g (p)), ap f (p) = (u • ap g (p) • v -1 ), ap g (p) = (u -1 • ap f (p) • v).
There is also a direct inductive definition, similar to the definition of the identity type, which states that in order to construct a section of a dependent type over all squares whose upper-left corner is a fixed point a : A, it is enough to define it over the identity square ids a (which has idp a on all four sides).

We can generalize the notion of coherence operation to include the case of squares or other geometrical shapes. For instance in the diagram

: a = c)(b : A)(p : a = b)(t : c = b)(α : q -1 • p = t) (1.6.5) (d : A)(s : c = d)(r : b = d)(β : t -1 • s = r) → α β : (p • r) = (q • s).
(1.6.6)

A type of squares which is often used is the naturality squares of homotopies.

Definition 1.6.7. Given two functions f, g : A → B, a pointwise equality h : (x : A) → f (x) = B g(x) between f and g (also called a homotopy) and a path p : a = A a in A, the naturality square of h on p is the filler of the square

• • • • ap f (p) h(a) h(a ) ap g (p)
obtained by applying proposition 1.6.4 to ap h (p). Note that h is a dependent function, so this ap is the dependent one defined in definition 1.6.3.

The next proposition shows that paths in Σ-types can be seen as pairs of paths. There is an operation of pairing of paths and one can take the first and second component of a path in a pair type. Note also that the second path is a dependent path over the first one.

Proposition 1.6.8. Given a type A, a dependent type B : A → Type over A and two elements (a, b) and (a , b ) of x:A B(x), there is an equivalence of types

(a, b) = x:A B(x) (a , b )   p:a= A a b = B p b   .
Proof. The map from the left-hand side to the right-hand side is given by the two maps and the map from the right-hand side to the left-hand side is defined by path induction twice. The fact that these two maps are inverse to each other is immediate by path induction.

For function types we have that paths between functions correspond to homotopies (pointwise equalities).

Proposition 1.6.9 (Function extensionality). Given a type A, a dependent type B : A → Type and two functions f, g : (x : A) → B(x), we have an equivalence

(f = (x:A)→B(x) g) ((x : A) → f (x) = B(x) g(x)).

CHAPTER 1. HOMOTOPY TYPE THEORY

Proof. The map from the left-hand side to the right-hand side is defined by

happly : (f = (x:A)→B(x) g) → ((x : A) → f (x) = B(x) g(x)), happly(p)(x) := ap λh.h(x) (p).
The map in the other direction, which turns a homotopy between f and g into a path between f and g, cannot be defined by path induction as in the previous proposition. But it turns out that we can define it using the univalence axiom, and we can also prove that it is an inverse to happly, see [UF13, section 4.9].

Higher inductive types

In ordinary inductive types, the constructors only generate elements of the type T we are defining. But in homotopy type theory, we are seeing paths and higher paths in T as being somehow still part of T . This leads to the notion of higher inductive types, which are similar to inductive types with the difference that there might be path-constructors which give new paths or new equalities in the type being defined. Here are some of the most important examples of higher inductive types.

Circle

The circle S 1 is the simplest non-trivial higher inductive type. It is generated by the two constructors base : S 1 , loop : base = S 1 base.

• base loop S 1
Just as with inductive types, there is an induction principle which states that given a dependent type P : S 1 → Type, a function f : (x : S 1 ) → P (x) can be defined by f : (x : S 1 ) → P (x),

f (base) := f base , ap f (loop) := f loop ,
where the terms f base and f loop satisfy f base : P (base),

f loop : f base = P loop f base .
Note that we need to give the value of ap f (loop) and not of f (loop) (which would not make sense given that loop is not an element of S 1 ) and that f loop is a dependent path in P over loop.

There is a subtlety here in that, in the standard presentation of homotopy type theory, the second equation ap f (loop) := f loop is not taken as a definitional equality but only as an equality in the sense of section 1.4. There are two main reasons for that. The first one is that most of the known models of homotopy type theory do not model it as a definitional equality, and the second one is that most proof assistants do not allow it to be a definitional equality either. These difficulties are being resolved. For instance the cubical model described in [START_REF] Bezem | A model of type theory in cubical sets[END_REF] models them as definitional equalities and one can now add custom new definitional equalities in Agda as well (see [Agd]), but this is all very much work in progress. There are a few places (for instance in the 3 × 3-lemma in section 1.8) where it would be very useful to have it as a definitional equality, together with various other equalities, but for proofs written on paper (as opposed to proofs written in a proof assistant) one can usually gloss over these kinds of issues. We use the same symbol := for aesthetic reasons.

Here are two examples of usage of the induction principle. We first define a function i :

S 1 → S 1 by i : S 1 → S 1 , i(base) := base, ap i (loop) := loop -1 .
Note that i is a non-dependent function, therefore in the last line we just need to give a path in S 1 from i(base) to itself, and we choose loop -1 . We now prove that i is involutive by

invol : (x : S 1 ) → i(i(x)) = S 1 x, invol(base) := idp base , ap invol (loop) := invol loop ,
with invol loop to be defined. This time, the dependent type is P (x) := (i(i(x)) = S 1 x). In the case for base we need to prove that i(i(base)) = base, but using the fact that i(base) is equal to base by definition we have idp base : i(i(base)) = base. In the case for loop, we need to give a dependent path invol loop in P over loop from idp base to idp base . Using proposition 1.6.4 we see that invol loop has to be a filler of the square

inl : A → A C B, inr : B → A C B, push : (c : C) → inl(f (c)) = A C B inr(g(c)).
In particular, we have the commutative square

C B A A C B g f push inr inl
The idea is that we start with the disjoint sum A + B and for every element c of C, we add a new path from inl(f (c)) to inr(g(c)). What we obtain would rather be called a "homotopy pushout" in classical homotopy theory, but in homotopy type theory this is the only sort of pushout which is possible to define therefore we call them simply "pushouts". The induction principle states that, given a dependent type P :

A C B → Type,
h push : (c : C) → h inl (f (c)) = P push(c) h inr (g(c)).
This induction principle looks similar to the usual universal property of pushouts, but there are two differences. On the one hand this is only an existence result, we say nothing about uniqueness a priori. On the other hand we state it for every dependent type whereas the universal property talks only about non-dependent types. It turns out that one can prove the universal property from the induction principle using the fact that uniqueness-up-to-homotopy can be seen as existence of a particular equality which is constructed using the induction principle (see [UF13, section 6.8] and [START_REF] Sojakova | Higher Inductive Types as Homotopy-Initial Algebras[END_REF]). However the universal property only implies a weak version of the induction principle, where the equalities of the form h(inl(a)) = h inl (a) are only propositional equalities. Moreover, the statement of the induction principle is very natural from the point of view of type theory, while the statement of the universal property looks more contrived. Many interesting constructions are defined as pushouts, in particular we have the following definitions.

• The suspension ΣA of a type A is the pushout of the span

1 A 1.
We write north, south and merid(a) for the terms inl( 1 ), inr( 1 ) and push(a). If A is a pointed type (i.e. a type A equipped with a basepoint A ), we write ΩA for the type A = A and we define the map

ϕ A : A → ΩΣA, ϕ A (a) := merid(a) • merid( A ) -1 ,
(where ΣA is pointed by north) which satisfies

ϕ A ( A ) = idp A .
• The spheres S n for n : N are defined by induction on n. For n = 0 we define S 0 := 2 and for n + 1 we define

S n+1 := ΣS n .
Note that Σ2 is equivalent to the type S 1 defined above, so we could alternatively define the spheres by iterated suspensions of S 1 . In practice, we often use the direct inductive definition of S 1 using base and loop instead of Σ2.

• The join A * B of two types A and B is the pushout of the span

A A × B B.
fst snd

• The wedge sum A ∨ B of two pointed types A and B is the pushout of the span

A 1 B,
where the two maps pick the basepoints of A and B

• The smash product A ∧ B of two pointed types A and B is the pushout of the span

1 A ∨ B A × B, i ∨ A,B
where the map on the right is defined by

i ∨ A,B : A ∨ B → A × B, i ∨ A,B (inl(a)) := (a, B ), i ∨ A,B (inr(b)) := ( A , b), ap i ∨ A,B (push( 1 )) := idp ( A , B ) .
The smash product is studied in more detail in chapter 4.

The 3 × 3-lemma

The 3 × 3-lemma is a technical lemma that we will use a few times to construct equivalences between various nested pushouts. Its usefulness has been suggested to me by Eric Finster.

Let's consider the diagram

A 00 A 02 A 04 A 20 A 22 A 24 A 40 A 42 A 44 f 01 f 03 H 13 H 11 f 30 f 10 f 21 f 23 f 32 f 12 f 34 f 14 f 41 f 43 H 33 H 31 (1.8.1)
where the A ij are types, the f ij are maps and the H ij are fillers of the squares, i.e. homotopies between compositions of maps (for instance H 11 has type (x : A 22 ) → f 01 (f 12 (x)) = f 10 (f 21 (x))). The pushouts of the three columns fit in the diagram

A •0 A •2 A •4 , f •1 f •3 (1.8.2)
where the map f •1 is defined by

f •1 : A •2 → A •0 , f •1 (inl(x 02 )) := inl(f 01 (x 02 )), f •1 (inr(x 42 )) := inr(f 41 (x 42 )), ap f •1 (push(x 22 )) := ap inl (H 11 (x 22 )) • push(f 21 (x 22 )) • ap inr (H 31 (x 22 )) -1
and the map f •3 is defined in a similar way. We denote by A • the pushout of diagram 1.8.2. We can also first consider the pushout of all three rows of diagram 1.8.1 and then the pushout A • of the resulting column.

1.8. THE 3 × 3-LEMMA Lemma 1.8.3 (3 × 3-lemma). There is an equivalence

A • A • .
Sketch of proof. The map f : A • → A • basically takes an element of A • and swaps the two constructors. For instance, it sends inl(inr(x 40 )) to inr(inl(x 40 )), and so on. It is defined by

f : A • → A • , f (inl(x 0 )) := f inl (x 0 ), f (inr(x 4 )) := f inr (x 4 ), ap f (push(x 2 )) := f push (x 2 ),
where

f inl : A •0 → A • , f inr : A •4 → A • , f inl (inl(x 00 )) := inl(inl(x 00 )), f inr (inl(x 04 )) := inl(inr(x 04 )), f inl (inr(x 40 )) := inr(inl(x 40 )), f inr (inr(x 44 )) := inr(inr(x 44 )), ap f inl (push(x 20 )) := push(inl(x 20 )), ap f inr (push(x 24 )) := push(inr(x 24 )),
and

f push : (x 2 : A •2 ) → f inl (f •1 (x 2 )) = f inr (f •3 (x 2 )),
f push (inl(x 02 )) := ap inl (push(x 02 )), f push (inr(x 42 )) := ap inr (push(x 42 )), ap f push (push(x 22 )) := f push,push .

The last term f push,push is trickier. We want something filling the middle square of the diagram

• • • • • • • • push(inl(f 21 (x 22 ))) ap inl • inl (H 11 (x 22 )) ap inl (push(f 12 (x 22 ))) ap inr • inl (H 31 (x 22 ))
ap inr (push(f 32 (x 22 )))

ap inl • inr (H 13 (x 22 )) ap inr • inr (H 33 (x 22 )) push(inr(f 23 (x 22 )))
where the dotted paths are the composites of the upper and lower squares. What we have is ap push (push(x 22 )) which fills the middle square of the diagram

• • • • • • • • ap inl • inl (H 11 (x 22 )) ap inl (push(f 12 (x 22 ))) push(inl(f 21 (x 22 ))) ap inr • inl (H 31 (x 22 ))
ap inr (push(f 32 (x 22 )))

ap inl • inr (H 13 (x 22 )) push(inr(f 23 (x 22 ))) ap inr • inr (H 33 (x 22 ))
where the dotted paths are the composites of the left and right square. We notice that the eight paths around are the same in both diagrams, therefore there is a coherence operation going from one middle square to the other. The inverse map g is then defined in a similar way.

In order to prove that they are inverse to each other, we use again the induction principle twice in order to construct two functions

(x : A • ) → g(f (x)) = x, (y : A • ) → f (g(y)) = y.
For elements of the form inl(inl(x 00 )), inl(inr(x 40 )), inr(inl(x 04 )) and inr(inr(x 44 )) the equality is true by definition, so we use idp. For paths of the form push(inl(x 02 )), push(inr(x 42 )), ap inl (push(x 20 )) and ap inr (push(x 24 )) it is not true definitionally but not difficult to prove. Finally, for squares of the form ap push (push(x 22 )) it is more tricky because we have to prove an equality along the equalities proved in the previous step, but it can be done. A proof checked in Agda is available at [Bru15].

Here are two propositions which are very useful when using the 3 × 3-lemma.

Proposition 1.8.4. Given a map f : A → B, the pushout of the diagram

A A B id A f is equivalent to B.
Proof. We define g :

B → A A B by g(b) := inr(b) and h : A A B → B by h : A A B → B, h(inl(a)) := f (a), h(inr(b)) := b, ap h (push(a)) := idp f (a) .
It is straightforward to show that these functions are inverse to each other.

Proposition 1.8.5. Given two maps f : C → A and g : C → B and a type X, the pushout of the diagram

A × X C × X B × X (c,x) →(f (c),x) (c,x) →(g(c),x) is equivalent to (A C B) × X.
1.8. THE 3 × 3-LEMMA Proof. We define the two maps

h 1 : (A C B) × X → (A × X) C×X (B × X), h 1 (inl(a), x) := inl(a, x), h 1 (inr(b), x) := inr(b, x), ap h 1 (-,x) (push(c)) := push(c, x), h 2 : (A × X) C×X (B × X) → (A C B) × X, h 2 (inl(a, x)) := (inl(a), x), h 2 (inr(b, x)) := (inr(b), x), ap h 2 (push(c, x)) := ap (-,x) (push(c)).
It is again easy to prove that those two functions are inverse to each other.

We now present a proposition that we can prove using the 3 × 3-lemma and which will be used in the next chapter. It has also been formally proved in Agda by Evan Cavallo in [Cav14], directly, without using the 3 × 3-lemma.

Proposition 1.8.6. Given three types A, B and C, there is an equivalence

(A * B) * C A * (B * C).

Proof. Let's consider the diagram

A A × B B A × C A × B × C B × C A × C A × C C
where the arrows are the obvious projections and the four squares are filled by idp. The pushout of the first row is A * B, the pushout of the second row is (A * B) × C according to proposition 1.8.5 and the pushout of the third row is C according to proposition 1.8.4. Moreover, the two maps (A * B) × C → A * B and (A * B) × C → C are equal to the two projections, as can be checked by hand by induction. Therefore the pushout of the pushouts of the rows is equivalent to

(A * B) * C.
Similarly, the pushout of the first column is A, the pushout of the second column is A × (B * C), the pushout of the third column is B * C, and the two maps are the two projections, hence the pushout of the pushouts of the columns is equivalent to A * (B * C). Therefore, we have

(A * B) * C A * (B * C).
Here is another simple application, which could also be proved directly.

Proposition 1.8.7. For any type A there is an equivalence 2 * A ΣA.

Proof. We apply the 3 × 3-lemma to the diagram

1 A A 0 0 A 1 A A
and we conclude by noticing that 1 + 1 2 and that A + A 2 × A.

Combining the two previous results, we obtain Proposition 1.8.8. For every m, n : N, there is an equivalence

S m * S n S m+n+1 . Proof.
We proceed by induction on m. For m = 0 it is proposition 1.8.7, and for m + 1 we have

S m+1 * S n (ΣS m ) * S n (2 * S m ) * (S n ) by proposition 1.8.7 2 * (S m * S n ) by proposition 1.8.6
2 * S m+n+1 by induction hypothesis ΣS m+n+1 by proposition 1.8.7

S (m+1)+n+1 .
Another simple application is the following, which we will use in chapter 3.

Proposition 1.8.9. Given four types A, B, C and D and three functions f : B → A, g : C → B and h : C → D, there is an equivalence

A B (B C D) A C D
where the map B → B C D on the left is inl and the map C → A on the right is f • g.

Proof. We apply the 3 × 3-lemma to the diagram

A 0 0 B 0 0 B C D f id B g h
All the examples of use of the 3 × 3-lemma presented so far are simpler to prove than the full version either because it is degenerate or because H 11 (x), H 13 (x), H 31 (x) and H 33 (x) are all equal to idp. However in proposition 3.3.2 we will use one instance of the 3 × 3-lemma where H 11 (x) is not a constant path.

The flattening lemma

In classical homotopy theory, the usual way to construct a fibration is to define a continuous map f : E → B between two spaces E and B and prove that it has the property of being a fibration. In homotopy type theory the story is quite different because there is no predicate "being a fibration". Indeed, being a fibration is not a property invariant under homotopy of maps. Instead, fibrations are replaced by dependent types, which encode directly the fact that every point of the base space has a fiber over it. One way to understand why we can see dependent types as fibrations is with the function transport of section 1.5 which shows that one can transport elements between fibers of a dependent type along a path in the base type, and we could similarly lift any homotopy in the base space. Constructing a fibration in homotopy type theory consists simply in defining a map P : B → Type. There is no need to "prove" that it is a fibration, but what is non-trivial is to understand its total space. In general, the total space of a fibration P : B → Type is the type

x:B P (x),
but this is not a description which is easy to work with in general.

A special case of fibrations in homotopy type theory are fibrations over higher inductive types which are defined by induction using the univalence axiom. For instance, one can define a fibration P over S 1 by P : S 1 → Type, P (base) := P base , ap P (loop) := ua(P loop ), where P base is a type and P loop is an equivalence between P base and itself. Similarly, one can define a fibration over a pushout A C B by

P : A C B →
P push : (c : C) → P inl (f (c)) P inr (g(c)).
The flattening lemma gives us a nice description of the total space of such fibrations. We refer to [UF13, section 6.12] for the general statement and proof, and we state here only these two special cases.

Proposition 1.9.1. The total space of a fibration P : S 1 → Type defined by P base and P loop as above is equivalent to the higher inductive type T generated by base : P base → T, loop : (x : P base ) → base(x) = T base(P loop (x)). Proposition 1.9.2. Given the pushout D of the diagram

A C B f g
and P : D → Type defined by P inl , P inr and P push as above, the total space of P is equivalent to the pushout of the diagram

x:A P inl (x) z:C P inl (f (z)) y:B P inr (y),
where the left map sends the pair (z, u) to (f (z), u) and the right map sends the pair (z, v) to (g(z), P push (z)(v)).

Truncatedness and truncations

Finally we introduce n-truncated types and truncations, which are an essential part of this work and of homotopy type theory in general. The notion of n-truncated type was introduced in 2009 by Vladimir Voevodsky under the name "type of h-level n + 2" and proved invaluable in the understanding of homotopy type theory. Intuitively, a type is ntruncated if it doesn't contain any interesting information in its k-iterated identity types for k > n. From the point of view of homotopy theory they correspond to homotopy n-types. For instance, 0-truncated types corresponds to sets (i.e. discrete spaces). We can also make sense of (-1)-truncated types which are types whose elements are all equal, and of (-2)-truncated types which are the contractible types.

Truncatedness of types

Definition 1.10.1. A type A is contractible or (-2)-truncated if there is a point a : A (sometimes called the center of contraction) and an equality from a to x for every x : A.

In other words, being contractible is defined by the predicate

is-contr(A) := a:A ((x : A) → a = A x).
Note that if we read the definition of contractibility as "there exists a : A such that for every x : A there exists a path from a to x", we might think that it is only a definition of connectedness. The error is that the existential quantifier is a explicit existential quantifier, which means that the path from a to x should not only exist but it should depend continuously on x, which is much stronger than connectedness.

An important example of contractible type is the space of all paths in a type with one endpoint fixed.

Proposition 1.10.2. Given a type A and a point a : A, the type

x:A (a = A x) is contractible.
Proof. We first notice that the pair (a, idp a ) is an element of this type. We take it as the center of contraction and we now have to prove that for every x : A and p : a = A x, there is a path (a, idp a ) = (x, p) in x:A (a = A x). Using propositions 1.6.8 and 1.6.4, we see that we need to find a path q : a = A x together with a filler of the square

• • • • idp a idp a p q
We take q := p and the filler coming from the equality idp idp a •p : idp a • p = idp a • q.

Definition 1.10.3. For n ≥ -2, a type A is (n + 1)-truncated if for every x, y : A, the type x = A y is n-truncated.

As a special case, a type which is (-1)-truncated is called a mere proposition and a type which is 0-truncated is called a set. Proposition 1.10.4. We have the following properties.

• Being n-truncated is a mere proposition.

• A type A satisfies x = A y for every x, y : A if and only if A is a mere proposition.

• If

B : A → Type is a family of n-truncated types, then (x : A) → B(x) is itself n-truncated.
• If A is n-truncated and B : A → Type is a family of n-truncated types, then

x:A B(x) is itself n-truncated. • If A is n-truncated and m ≥ n, then A is m-truncated as well. • If A is n-truncated and x, y : A, then x = A y is n-truncated.
We refer to [UF13, section 7.1] for a proof of these properties.

Proposition 1.10.5. The unit type is contractible and the empty type is a proposition.

Proof. For the unit type, the center of contraction is 1 and for every x : 1 we have x = 1 because we only need to check it for x := 1 and in that case we use idp 1 . Hence, the type 1 is contractible.

For the empty type, we have to prove that given x, y : ⊥ we have x = ⊥ y, but the induction principle of ⊥ says that given x : ⊥ everything is true. Hence, the type ⊥ is a proposition.

A large class of sets (0-truncated types) is given by types with decidable equality. Proposition 1.10.6 (Hedberg's theorem). If a type A is such that for every x, y : A,

either x = A y or ¬(x = A y) (explicit disjunction), then A is a set.
We say that a type A has decidable equality if it satisfies the hypothesis of the proposition.

Proof. Given x, y : A and p, q : x = A y, we want to prove that p = x= A y q. Let's call d the witness of decidable equality on A. We have

d : (x, y : A) → ((x = A y) + ¬(x = A y)).
Decidable equality at (x, x) gives us either a loop at x or an element of ¬(x = A x), but this last case cannot hold because there exists at least one loop at x, namely idp x . Therefore, for every x : A we have a loop

p x : x = A x, with d(x, x) = inl(p x ). Let's now consider ap d(x,-) (p • q -1
) which is a dependent path from inl(p x ) to itself over p • q -1 . Using proposition 1.6.4, we obtain a filler of the square

• • • • idp x p x p x p • q -1
Therefore, we have

p x = p x • (p • q -1 ),
which shows that p = q.

Corollary 1.10.7. The type 2, the type N of natural numbers and the type Z of integers are sets.

Proof. In all cases, we can easily define by induction on x and y a function of type

(x, y : A) → ((x = A y) + ¬(x = A y)),
and then we apply Hedberg's theorem.

Note that the circle S 1 does not have decidable equality because we cannot give a path from x to y, for every x, y : S 1 , which depends continuously on x and y.

Truncations

Not every type is an n-type for some n, but we can turn any type A into an n-type A n in a universal way. This operation is called the truncation. There is a map | -| : A → A n and the type A n satisfies the following induction principle: given a dependent type P : A n → Type such that P (x) is n-truncated for every x : A n , we can define a section of P by defining it only on elements of the form |a|:

g : (x : A n ) → P (x), g(|a|) := g |-| (a), where g |-| : (a : A) → P (|a|).
Note that we can only apply this induction principle if all fibers of P are n-truncated. In particular, it is not possible to use it directly to define a function from A n to a type B which is not n-truncated. When we need to go around this limitation, the usual technique is to construct an n-truncated type B together with a map B → B and to use the induction principle for B instead of B.

We can implement truncations using higher inductive types as described in [UF13, section 7.3] and to some extent in appendix B of this thesis, but in practice we always use the induction principle given above.

Note that truncating a type which is already truncated gives back an equivalent type.

Proposition 1.10.8.

If A is n-truncated, then the map | -| : A → A n is an equiva- lence.
Proof. We define f : A n → A using the induction principle of A n by

f : A n → A, f (|a|) := a.
Note that this is allowed because A is n-truncated. We then have f • | -| = id A by definition and we prove that

| -| • f = id A n by h : (x : A n ) → |f (x)| = A n x, h(|a|) := idp |a| .
This is allowed because for every x : We can truncate maps as well.

A n the type |f (x)| = A n x is n-truncated,
Proposition 1.10.9. Given an integer n and a map f : A → B, there is a map f n :

A n → B n

and a filler of the diagram

A A n B B n |-| f f n |-|
Proof. The map f n is defined by

f n : A n → B n , f n (|a|) := |f (a)|, which is allowed because B n is n-truncated.
An important property of truncations is the fact that loop spaces "go under" truncations (see [UF13, theorem 7.3.12] for a proof) Proposition 1.10.10. Given a type A, two elements x, y : A, and n ≥ -2, the map

f : x = A y n → |x| = A n+1 |y|, f (|p|) := ap |-| (p)
is an equivalence.

Note that the right-hand side is an identity type in A n+1 , hence |x| = A n+1 |y| is n-truncated so the induction principle applies.

Mere propositions and logic

We saw in section 1.2 that given a type A and a predicate B : A → Type, the type

x:A B(x)
can be seen as the type of elements of A satisfying B. However, if B is arbitrary, there could be some a : A and b 0 , b 1 : B(a) distinct, and (a, b 0 ) and (a, b 1 ) would be two different elements of x:A B(x) which means that a would be counted twice. In order for x:A B(x) to accurately represent the type of elements of A satisfying B, we need to assume additionally that B(x) is a mere proposition for every x : A. This ensures that each element of A is counted at most once.

The type x:A B(x) can also be seen as the proposition "there exists x : A such that B(x) holds". Now the problem is that even if B is a family of mere propositions, then x:A B(x) may not be a mere proposition anymore because there could be several elements of A satisfying B. For instance a natural number k is composite if there exists n, m ≥ 2 such that nm = N k, but defining the type of composite numbers by k:N n,m:N (n ≥ 2 and m ≥ 2 and nm = N k) is incorrect because, for instance, 6 is counted twice as it is equal to both 2 × 3 and 3 × 2 (note that the k:N is interpreted in the sense of the previous paragraph while the n,m:N is interpreted in the sense of this paragraph). One way to solve this issue is to use the (-1)-truncation and to consider the type

k:N n,m:N (n ≥ 2 and m ≥ 2 and nm = N k) -1
, which forces the inner Σ-type to be a mere-proposition. Now the number 6 is counted only once because the two proofs that it is composite have been identified in the truncation. Therefore, a statement of the form "there exists x : A such that B(x) holds" can be interpreted in two different ways: either as the type x:A B(x) if we care about the witness x (explicit existence) or as the type

x:A B(x) -1 if we want a mere proposition (mere existence).

The same phenomenon happens for disjunctions. Given two types A and B, the disjunction "A or B" can be interpreted as either A + B if we care about which of A or B holds (explicit disjunction) or as A + B -1 if we want a mere proposition (mere disjunction). For the universal quantifier and conjunction, however, there is no need to truncate given that a product of mere propositions is a mere proposition.

A related issue arises with equalities. When defining a type of algebraic structures, for instance groups, we usually want to assume that some equalities hold between some elements. But in homotopy type theory, that means that we have to choose specific paths, and there might be several such paths. For instance a type together with a binary operation could be seen as group in several different ways if there are several paths witnessing associativity. Instead of using truncations as above, we instead require the carrier type to be a set so that there cannot be several different equalities between its elements. Therefore we take the following definition of group. Definition 1.10.11. A group is a set G (i.e. a 0-truncated type) together with a multiplication operation m : G → G → G, an inverse operation i : G → G, and a neutral element e : G, such that the following equalities hold:

m(m(x, y), z) = G m(x, m(y, z)) for all x, y, z : G, m(x, i(x)) = G e for all x : G, m(i(x), x) = G e for all x : G, m(x, e) = G x for all x : G, m(e, x) = G x for all x : G.
It is easy to see that given a set G and a function m : G → G → G, the type corresponding to "(G, m) is a group" is a mere proposition. In other words, there is at most one proof that (G, m) is a group. This wouldn't be the case if we hadn't assumed G to be a set.

Chapter 2

First results on homotopy groups of spheres

For every pointed type A and every integer k ≥ 1, we define a group π k (A) called the k-th homotopy group of A. In some sense, it describes the structure of k-dimensional loops in A. The definition of π k (A) alone isn't very informative, so we usually want to compute it, i.e. to prove that it is equivalent to some well-known group, for instance by giving an explicit presentation. Computing homotopy groups is notoriously difficult even for very simple types like the spheres S n . In classical homotopy theory, one can show that the first few homotopy groups of spheres are those given in table 2.1 on page 48, and in this thesis we show that we can compute some of them in homotopy type theory.

In section 2.2 we compute those in the first column (the homotopy groups of S 1 ), in section 2.4 we compute all the 0s in the upper-right part (π k (S n ) for k < n), and in section 2.5 we compute π 2 (S 2 ) and show that the second and third column are identical apart for π 2 . In the next chapter we prove that the diagonals are constant above the zigzag line (Freudenthal suspension theorem) and that there exists an n : N such that π 4 (S 3 ) Z/nZ, and in the rest of this thesis we prove that this n is equal to 2.

Homotopy groups

Definition 2.1.1. A pointed type is a type A equipped with a point A . Given two pointed types A and B, a pointed function between A and B is a function f : A → B equipped with a path f : f ( A ) = B . We write A→ B for the type of pointed functions between A and B. The type S 1 is pointed by base, and the type ΣA is pointed by north for every type A. Definition 2.1.2. Given a pointed type A, its loop space is the type

ΩA := ( A = A ) S 1 S 2 S 3 S 4 S 5 S 6 S 7 S 8 S 9 S 10 π 1 Z 0 0 0 0 0 0 0 0 0 π 2 0 Z 0 0 0 0 0 0 0 0 π 3 0 Z Z 0 0 0 0 0 0 0 π 4 0 Z 2 Z 2 Z 0 0 0 0 0 0 π 5 0 Z 2 Z 2 Z 2 Z 0 0 0 0 0 π 6 0 Z 12 Z 12 Z 2 Z 2 Z 0 0 0 0 π 7 0 Z 2 Z 2 Z × Z 12 Z 2 Z 2 Z 0 0 0 π 8 0 Z 2 Z 2 Z 2 2 Z 24 Z 2 Z 2 Z 0 0 π 9 0 Z 3 Z 3 Z 2 2 Z 2 Z 24 Z 2 Z 2 Z 0 π 10 0 Z 15 Z 15 Z 24 × Z 3 Z 2 0 Z 24 Z 2 Z 2 Z π 11 0 Z 2 Z 2 Z 15 Z 2 Z 0 Z 24 Z 2 Z 2 π 12 0 Z 2 2 Z 2 2 Z 2 Z 30 Z 2 0 0 Z 24 Z 2 π 13 0 Z 12 × Z 2 Z 12 × Z 2 Z 3 2 Z 2 Z 60 Z 2 0 0 Z 24 Figure 2
.1: Homotopy groups of spheres (where Z n denotes the group Z/nZ) of paths from A to A , pointed by the constant path. We can iterate this construction by defining the n-fold iterated loop space of A, for n : N, by

Ω 0 A := A, Ω n+1 A := Ω(Ω n A).
Definition 2.1.3. Given a pointed function f : A → B between pointed types, its looping is

Ωf : ΩA → ΩB, (Ωf )(p) := -1 f • ap f (p) • f . Note that ap f (p) has type f ( A ) = f ( A )
, therefore we need to compose it with f on both sides in order to obtain a loop at B . The function Ωf is pointed by the proof of

-1 f • ap f (idp A ) • f = idp B obtained by canceling ap f (idp A ) (which is equal to idp f ( A )
) and then canceling both f together.

We can now define the homotopy groups of a pointed type. The idea is that π n (A) is the set of connected components of the type of n-dimensional loops in A. The first homotopy group π 1 (A) is called the fundamental group of A and the π n (A) are called the higher homotopy groups of A. Definition 2.1.4. Given a pointed type A and n ≥ 1, the n-th homotopy group of A is the set

π n (A) := Ω n A 0 .
It is equipped with the group structure induced by composition of paths, inversion of paths and the constant path.

The homotopy groups of the loop space of a type A are the homotopy groups of A shifted by one.

Proposition 2.1.5. Given a pointed type A and n ≥ 1, we have an isomorphism of groups π n (ΩA) π n+1 (A).

Proof. We first construct an equivalence Ω n (ΩA) Ω(Ω n A) by induction on n. For n = 0 we take the identity equivalence and for n + 1 we take the composition Ω n+1 (ΩA) Ω(Ω n (ΩA)) by definition Ω(Ω(Ω n A)) by induction hypothesis Ω(Ω n+1 A).

We then have

π n (ΩA) Ω n (ΩA) 0 Ω(Ω n A) 0 Ω n+1 A 0 π n+1 (A).
It is a group homomorphism because the equivalence Ω n (ΩA) Ω(Ω n A) preserves composition of paths.

It turns out that the higher homotopy groups are always abelian, as we prove now.

Proposition 2.1.6 (Eckmann-Hilton argument). For any pointed type A and n ≥ 2, the group π n (A) is abelian.

Proof. We prove by induction on n ≥ 2 that for every A the group π n (A) is abelian. For n = 2 we have to prove that α • β = β • α for α, β : idp A = ΩA idp A and the idea is to use horizontal composition and the exchange law. Note that for an arbitrary 2-dimensional path γ : p = a= A b q, we do not have idp idp a γ = γ. Indeed this is not well-typed as the left-hand side has type (idp b • p) = (idp b • q). In order to get something having the same type as γ we need to compose on both sides with the paths λ p : idp b • p = p and λ q : idp b • q = q. We get the following two unit laws for horizontal composition, which are proved like other coherence operations:

(a, b : A)(p, q : a = b)(γ : p = q) → γ = λ -1 p • (idp idp a γ) • λ q , (a, b : A)(p, q : a = b)(γ : p = q) → γ = ρ -1 p • (γ idp idp b ) • ρ q .
In the case of α and β, both p and q are equal to idp and λ idp and ρ idp are both equal. We write c for short for both of them. Note that c is equal to idp idp A by definition if we take (J comp ) definitional, but the computation below does not depend on this fact. Using these two unit laws and the exchange law twice we have

α • β = c -1 • (idp α) • c • c -1 • (β idp) • c = c -1 • (idp α) • (β idp) • c = c -1 • ((idp • β) (α • idp)) • c = c -1 • ((β • idp) (idp • α)) • c = c -1 • (β idp) • (idp α) • c = c -1 • (β idp) • c • c -1 • (idp α) • c = β • α. Therefore π 2 (A) is abelian.
For n > 2, we know from proposition 2.1.5 that π n+1 (A) π n (ΩA) and π n (ΩA) is abelian by induction hypothesis, hence π n+1 (A) is abelian as well.

We can also define homotopy groups using pointed maps from spheres. We first show the following proposition.

Proposition 2.1.7. Given two pointed types A and B, there is an equivalence

(ΣA → B) (A → ΩB).
Proof. We remind that we defined in section 1.7 a pointed map ϕ A : A → ΩΣA for every type A. We have to define two maps between ΣA → B and A → ΩB and prove that they are inverse to each other.

The map from left to right sends f : ΣA → B to λa.(Ωf )(ϕ A (a)). That map is pointed because ϕ A is. The map from right to left sends g : A → ΩB to the map ΣA → B sending both north and south to B and the path merid(a) to g(a). That map is pointed by idp B .

Starting from f : ΣA → B, its image by the composite is the map f sending both north and south to B and the path merid(a)

to -1 f • ap f (ϕ A (a)) • f . That function is equal to f via -1
f for north and ap f (merid( A )) -1 • f for south. In the other direction, if we start from g : A → ΩB, its image is the map

λa.(idp -1 • g(a) • g( A ) -1 • idp),
which is pointwise equal to g because g is pointed.

It is easy to see that 2 → A is equivalent to A and that Σ2 is equivalent to S 1 , therefore given that S n+1 is defined to be ΣS n , we have the following by induction on n. Proposition 2.1.8. For every pointed type A and n : N, we have

Ω n A (S n → A)
and in particular π n (A)

S n → A 0 .
Moreover, one can define the group operation directly on S n → A 0 as follows.

Definition 2.1.9. For every type A, we define the map

θ A : ΣA → ΣA ∨ ΣA, θ A (north) := inl(north), θ A (south) := inr(north), ap θ A (merid(a)) := ap inl (ϕ A (a)) • push( 1 ) • ap inr (ϕ A (a)).
Given two pointed maps f : X → A and g : Y → A, we define the map

f, g : X ∨ Y → A, f, g (inl(x)) := f (x), f, g (inr(y)) := g(y), ap f,g (push( 1 )) := f • -1 g .
Proposition 2.1.10. Given two pointed maps f, g : S n → A, their multiplication when seen as elements of π n (A) corresponds to the composition f, g • θ S n-1 .

Proof. Using proposition 2.1.7 we have the equivalence

e : (S n → A) (S n-1 → ΩA), e(h) := λx.( -1 h • ap h (ϕ S n-1 (x)) • h ).
There is a group structure on the right-hand side given by composition of paths in ΩA, and by proposition 2.1.5 it is the same as the group structure on π n (A). We then have to check that e( f, g • θ S n-1 ) is the composition of e(f ) and e(g). For every x : S n-1 we have

e( f, g • θ S n-1 )(x) = -1 f • ap f,g •θ S n-1 (ϕ S n-1 (x)) • f = -1 f • ap f,g (ap θ S n-1 (ϕ S n-1 (x))) • f = -1 f • ap f,g (ap inl (ϕ S n-1 (x)) • push( 1 ) • ap inr (ϕ S n-1 (x)) • push( 1 ) -1 ) • f = -1 f • ap f,g (ap inl (ϕ S n-1 (x))) • ap f,g (push( 1 )) • ap f,g (ap inr (ϕ S n-1 (x))) • ap f,g (push( 1 )) -1 • f = -1 f • ap f (ϕ S n-1 (x)) • f • -1 g • ap g (ϕ S n-1 (x)) • g = e(f )(x) • e(g)(x).
which concludes the proof.

Homotopy groups of the circle

In order to compute the homotopy groups of the circle we define a map U : S 1 → Type, which corresponds classically to the universal cover of S 1 , by

U : S 1 → Type, U (base) := Z, ap U (loop) := ua(succ Z ).
This definition is valid because the function succ Z : Z → Z, which adds one to its argument, is an equivalence as is easy to check. Intuitively it means that U is a fibration over S 1 whose fiber over base is the type of integers Z and such that transporting an integer along loop in that fibration corresponds to adding 1 to it. We have the picture

• base loop • • • • • -2 -1 0 1 2
According to the flattening lemma (proposition 1.9.1), the total space of this fibration is equivalent to the higher inductive type E generated by Z-many points c n : E, and Z-many paths p n : c n = E c n+1 relating each point with the next one.

. . . • • • • . . . p -2 p -1 c -1 p 0 c 0 p 1 c 1 p 2 c 2
It is easy to check that this type is contractible. We first construct a path n : c 0 = c n by induction on n : Z as a composition of the paths p i or their inverses, and then for every n : Z we prove that n • p n = n+1 , which follows from associativity of composition of paths and from the fact that p -1 • p = idp for any path p. Therefore U is a fibration over S 1 with fiber Z and a contractible total space and we have the following proposition (which is a consequence of [UF13, theorem 4.7.7] and of proposition 1.10.2) Proposition 2.2.1. Given a pointed type A and a dependent type P : A → Type whose total space is contractible, for every a : A and x : P ( A ) the map

transport P (-, x) : ( A = a) → P (a)
is an equivalence Therefore we get Proposition 2.2.2. We have an equivalence ΩS 1 Z and

π n (S 1 ) Z for n = 1, 0 for n > 1.
Proof. Applying proposition 2.2.1 to U , a := base and x := 0 gives us an equivalence between ΩS 1 and U (base), and U (base) is equal to Z by definition. Therefore ΩS 1 Z.

Given that Z is a set by proposition 1.10.7, we have Z 0 Z and Ω k Z is contractible for every k ≥ 1, therefore we get the equivalences of types

π n (S 1 ) Z for n = 1, 0 for n > 1.
Moreover transport commutes with composition of paths, therefore for every n : Z the map ΩS 1 → Z sends loop n to n, where loop n is defined by

loop 0 := idp base , loop n+1 := loop • loop n , loop -n-1 := loop -1 • loop -n .
This shows that the equivalence π 1 (S 1 ) Z is a group isomorphism for the usual group structure on Z.

Proposition 2.2.3. The circle S 1 is 1-truncated.

Proof. We have to prove that for every x, y : S 1 , the type x = S 1 y is a set (i.e. 0truncated). We proceed by induction on x. Note that we only have to do the case x = base because for loop it follows immediately from the fact that being a set is a mere proposition. We proceed now by induction on y. For the same reason we only have to do the case y = base. Therefore we now have to prove that base = S 1 base is a set, but this follows immediately from the fact that ΩS 1 Z and that Z is a set.

Connectedness

We introduce now the notion of n-connectedness of types and maps, which can be thought of as dual to the notion of n-truncatedness. A type is n-truncated if it has no homotopical information above dimension n while a type in n-connected if it has no homotopical information below dimension n. We take the same convention as in [START_REF]Homotopy Type Theory: Univalent Foundations of Mathematics[END_REF], which differs from the one in classical homotopy theory. Connectivity of spaces coincides with the classical notion while an n-connected map for us corresponds to an (n + 1)-connected map for the classical definition. For instance the fiber of the unique map A → 1 is equivalent to A (because 1 is contractible), and the fiber at a of a map f :

1 → A is equivalent to the type f ( 1 ) = A a. Definition 2.3.2. A type A is said n-connected if its n-truncation A n is contractible. A map f : A → B is said n-connected if all
of its fibers are n-connected. For short we simply say connected for 0-connected.

A type A is n-connected if and only if the canonical map A → 1 is n-connected, given that the only fiber of that map is equivalent to A. On the other hand if A is pointed and n-connected, then the canonical map 1 → A is only (n -1)-connected as we show below.

Proposition 2.3.3. Every type and every map is (-2)-connected and every pointed type is (-1)-connected.

Proof. The (-2)-truncation of a type is contractible by definition, hence every type is (-2)-connected and then every map is (-2)-connected as well.

In order to prove that a type A is (-1)-connected, we have to prove that A -1 is contractible. Given that A -1 is a mere proposition, it is enough to prove that it is pointed, and it is the case if A is pointed.

Proposition 2.3.4. A pointed type A is n-connected if and only if the canonical map

1 → A is (n -1)-connected.
Proof. For every a : A, the fiber of 1 → A over a is the type (a = A A ) and according to proposition 1.10.10 we have

a = A A n-1 |a| = A n | A |.
Therefore if A is n-connected, then the right-hand side is contractible which shows that the fiber (a = A A ) is (n -1)-connected and that the map

1 → A is (n -1)-connected. Conversely, if the map 1 → A is (n -1)-connected, i.e. |a| = A n | A | is contractible
for every a : A, let's prove that A n is contractible. We need to prove that for every x : A n , we have x = A n | A |. This type is n-connected, hence it's enough to prove it for x of the form |a|, but it's true for such x by assumption.

Proposition 2.3.5. Given a pointed type

A, if A is (n + 1)-connected then ΩA is n- connected.
Proof. We have ΩA n Ω A n+1 which is contractible.

Proposition 2.3.6. Given a type A and m ≤ n, we have

A n m A m .
Proof. We define two maps f and g by

f : A n m → A m , g : A m → A n m , f (||a||) := |a|, g(|a|) := ||a||.
Note that in the definition of f we use the induction principle for truncations twice and the fact that A m is n-truncated (which follows from m ≤ n and proposition 1.10.4).

Then we define two homotopies h and k by

h : (x : A n m ) → g(f (x)) = x, k : (y : A m ) → f (g(y)) = y, h(||a||) := idp ||a|| , k(|a|) := idp |a| ,
which proves that f and g are inverse to each other.

Proposition 2.3.7. Given a type A and m ≤ n, if A is n-connected then A is mconnected as well.

Proof. We assume that A is n-connected and we want to prove that A m is contractible.

From the previous proposition we know that A m is equivalent to A n m , and A n is contractible by assumption, therefore A m is contractible as well.

The following very important property can be thought of as an "induction principle" for n-connected maps. It is proved in [UF13, lemma 7. Then the following are equivalent:

• f is n-connected,
• for every family of n-types P , the map (λs.s • f ) is an equivalence,

• for every family of n-types P , the map (λs.s • f ) has a section.

One way to use it is as follows. In order to define a map g : (b : B) → P (b), where P is a family of n-types, it is enough to define g on elements of the form f (a) for f : A → B an n-connected map. For instance if B is an (n + 1)-connected pointed type and P is a family of n-types over B, then in order to construct a section of P it is enough to give an element of P ( B ).

Proposition 2.3.9. Given two n-connected maps f : A → B and g : B → C, the composition g • f : A → C is also n-connected.

Proof. We consider P : C → Type a family of n-truncated types over C together with d : (a : A) → P (g(f (a))). The composition P • g is a family of n-truncated types over B and we have d : (a : A) → (P • g)(f (a)) therefore, using the fact that f is n-connected, there is a function d : (b : B) → P (g(b)) such that d (f (a)) = d(a) for every a : A. Using now the fact that g is n-connected, there is a function d : (c :

C) → P (c) such that d (g(b)) = d (b). We have in particular d (g(f (a))) = d (f (a)) = d(a), therefore g • f is n-connected. Proposition 2.3.10. Given two maps f : C → A and g : C → B such that f is n-connected, the map inr : B → D is n-connected, where D := A C B. C B A D g f inr inl
Proof. Let's consider P : D → Type a family of n-truncated types and h : (b : B) → P (inr(b)). We want to construct a map k : (d : D) → P (d). We define Q : A → Type by Q(a) := P (inl(a)). It's a fibration of n-types and there is an element of (c :

C) → Q(f (c))
given by transporting (λc.h(g(c))) in P backwards along the equality push(c) : inl(f (c)) = inr(g(c)). Therefore, given that f is n-connected, there is a section : (a : A) → Q(a) of Q together with a dependent equality e(c) between (f (c)) and h(g(c)) in P over push(c).

We can now define k by

k : (d : D) → P (d), k(inl(a)) := (a), k(inr(b)) := h(b), ap k (push(c)) := e(c),
and it agrees with h on element of the form inr(b). Therefore, inr is n-connected.

Proposition 2.3.11. For any X, the map

| -| : X → X n is n-connected.
Proof. It's an immediate consequence of proposition 2.3.8 and of the induction principle for truncations.

Lower homotopy groups of spheres

We can now prove that all homotopy groups of spheres of the form π k (S n ) for k < n are trivial.

Proposition 2.4.1. For every k, n : N such that k < n, we have

π k (S n ) 1.
It follows from the following proposition, as shown below.

Proposition 2.4.2. For every n : N, the n-sphere S n is (n -1)-connected.

Proof. For n = 0 this is true because S 0 := 2 is pointed hence (-1)-connected. If we assume now that S n is (n -1)-connected, we have the following pushout diagram where the top map is (n -1)-connected, hence the bottom map is (n -1)-connected as well by proposition 2.3.10.

S n 1 1 S n+1 Therefore by proposition 2.3.4 the type S n+1 is n-connected, which concludes the proof.

Proof of proposition 2.4.1. Given k, n : N such that k < n, the type S n is (n -1)connected and taking Ω k decreases the connectivity by

k hence Ω k (S n ) is (n -1 -k)- connected and we have (n -1 -k) ≥ 0 because k < n. Therefore Ω k (S n ) is 0-connected, which shows that π k (S n ) is contractible.

The Hopf fibration

Given a fibration P : B → Type we often use the notation

F E B, i p
where F := P ( B ) is the fiber, E := x:B P (x) is the total space, i sends y to ( B , y) and p is the first projection.

In this section we introduce H-spaces and the Hopf construction which is a fibration

A A * A ΣA
for any connected H-space A. Applying this construction to the circle gives us the Hopf fibration S 1 S 3 S 2 . Using the long exact sequence of homotopy groups, it will imply that π 2 (S 2 ) Z and that π n (S 2 ) π n (S 3 ) for all n ≥ 3. Definition 2.5.1. An H-space is a pointed type A together with a binary operation µ : A → A → A and equalities

µ l : (a : A) → µ( A , a) = A a, µ r : (a : A) → µ(a, A ) = A a, µ lr : µ l ( A ) = µ r ( A ).
For instance every group has an obvious structure of H-space, where µ is given by the multiplication of the group, µ l and µ r follow from the unit laws, and µ lr follows from the fact that a group is a set. In the classical definition of H-spaces, the homotopies µ l and µ r are required to fix the basepoint (which cannot be expressed in homotopy type theory), and as a consequence the two-dimensional path µ lr is not required anymore.

Proposition 2.5.2. If A is a connected H-space, then for every a : A the functions µ(a, -) : A → A and µ(-, a) : A → A are equivalences.

Proof. What we want to prove is a mere proposition depending on a : A. Given that A is pointed and 0-connected, it is enough to prove it for the basepoint A . But the functions µ( A , -) and µ(-, A ) are both equal to the identity function (using µ l and µ r ), hence they are equivalences.

Proposition 2.5.3. Given a connected H-space A, there is a fibration over ΣA with fiber A and whose total space is equivalent to A * A.

Proof. We define H : ΣA → Type by

H(north) := A, H(south) := A, ap H (merid(a)) := ua(µ(-, a)).
The definition is valid because µ(-, a) is an equivalence by proposition 2.5.2.

By the flattening lemma (proposition 1.9.2), the total space of this fibration is equivalent to the pushout of the span

A A × A A. fst µ
The map α : A × A → A × A defined by α(x, y) = (x, µ(x, y)) is an equivalence, its inverse is the map α -1 (u, v) = (u, µ(u, -) -1 (v)), hence we have the equivalence of spans

A A × A A A A × A A fst µ α fst snd
This shows that the total space of the fibration we constructed is equivalent to the join A * A.

Proposition 2.5.4. There is a structure of H-space on the circle.

Proof. We define the map µ : S 1 → S 1 → S 1 by induction on the first argument.

• For base, we take µ(base, x) := x.

• For loop, we have to construct an equality between the identity function and itself in the type S 1 → S 1 . By function extensionality, it is equivalent to construct a function loop -: (x : S 1 ) → x = S 1 x, i.e. a path loop x from x to itself for every point x : S 1 . We proceed again by induction on x.

-For base, we take loop base := loop.

-For loop, we have to fill the square

• • • • ap λx.x (loop) loop base loop base ap λx.x (loop)
which is equal to the square

• • • • loop loop loop loop
which is filled by idp loop•loop .

We construct µ l , µ r and µ lr :

• For µ l we have µ(base, x) = S 1 x by definition, so we take µ l (x) := idp base for every x.

• For µ r : (x : S 1 ) → µ(x, base) = S 1 x, we proceed by induction on x.

-For base, it's true by definition, so we take µ r (base) := idp base .

-For loop, we have to fill the square

• • • • ap λx.µ(x,base) (loop) idp base idp base ap λx.x (loop)
which is equal to the square

• • • • loop idp base idp base loop
which is again filled by some coherence operation.

• Finally, both µ l (base) and µ r (base) are equal to idp base by definition, therefore we take µ lr := idp idp base .

Proposition 2.5.5. There is a fibration over S 2 with fiber S 1 and whose total space is equivalent to S 3 .

Proof. We apply the Hopf construction to the circle, which is a connected H-space according to the previous proposition. We get a fibration over ΣS 1 with fiber S 1 and total space S 1 * S 1 , and we have constructed in proposition 1.8.8 an equivalence S 1 * S 1 S 3 so we get the Hopf fibration.

This fibration is called the Hopf fibration and the induced map S 3 → S 2 is called the Hopf map.

The long exact sequence of a fibration

The long exact sequence of homotopy groups of a fibration is a long exact sequence relating the homotopy groups of the base space, the fiber space and the total space of a fibration. A construction of it in homotopy type theory is also presented in [UF13, section 8.4]. We present here a different construction.

Definition 2.6.1. A sequence of pointed sets (0-truncated types) and pointed maps

. . . A n-1 A n A n+1 . . . f n-1 fn
is called a long exact sequence (of sets) if for every n and for every x : A n , then x is merely in the image of f n-1 if and only if it is in the kernel of f n . In other words, it means that we have for every x : A n an equivalence

a:A n-1 f n-1 (a) = An x -1 f n (x) = A n+1 A n+1 .
Note that the left-hand side is a mere proposition by definition, and the right-hand side as well because A n+1 is assumed to be a set. Therefore having an equivalence is equivalent to having two functions going back and forth. When all the A n are groups and all the f n are group homomorphisms (as is usually the case), we talk about a long exact sequence of groups.

When the A n are not assumed to be sets, we introduce instead the notion of fiber sequence.

Definition 2.6.2. A sequence of pointed types and pointed maps

. . . A n-1 A n A n+1 . . . f n-1 fn
is called a fiber sequence if for every n and for every x : A n , the untruncated types "x is in the image of f n-1 " and "x is the kernel of f n " are equivalent. In other words, it means that we have for every x : A n an equivalence

  a:A n-1 f n-1 (a) = An x   f n (x) = A n+1 A n+1 .
The relationship between long exact sequences and fiber sequences is given by the following proposition.

Proposition 2.6.3. Given a fiber sequence

. . . A n-1 A n A n+1 . . . , f n-1 fn then its 0-truncation . . . A n-1 0 A n 0 A n+1 0 . . . f n-1 0 fn 0 is a long exact sequence.
Proof. Given x : A n 0 , we want to construct an element of the type

a : A n-1 0 f n-1 0 (a ) = An 0 x -1 f n 0 (x ) = A n+1 0 | A n+1 | .
This type is a set, therefore we can assume that x is of the form |x| with x : A n . Applying proposition 1.10.10, we see that the right-hand side is equivalent to the type

f n (x) = A n+1 A n+1 -1
, and by assumption we have

  a:A n-1 f n-1 (a) = An x   f n (x) = A n+1 A n+1 .
Therefore it is enough to construct an equivalence

a:A B(a) -1 a : A 0 B (a ) -1
given a family of equivalences e : (a : ). Note that the fiber of P Ω is ΩF and that the total space of P Ω is the loop space of the total space of P , according to proposition 1.6.8. Moreover there is a map

A) → B(a) -1 B (|a|), where A is A n-1 , B(a) is (f n-1 (a) = An x),
d : ΩB → F, d(p) := transport P (p, F ).
Let E be the total space of P . By iterating the previous construction, we get the diagram . . .

Ω 3 F Ω 3 E Ω 3 B Ω 2 F Ω 2 E Ω 2 B ΩF ΩE ΩB,
and after 0-truncating, we get . . .

π 3 (F ) π 3 (E) π 3 (B) π 2 (F ) π 2 (E) π 2 (B) π 1 (F ) π 1 (E) π 1 (B).
(2.6.5)

It is easy to see that the maps π n (F ) → π n (E) and π n (E) → π n (B) are group homomorphisms and for the maps π n+1 (B) → π n (F ) it follows from the following proposition.

Proposition 2.6.6. The map

d : Ω 2 B → ΩF, d(p) := transport P Ω (p, idp F ) satisfies d(p • q) = d(p) • d(q) for every p, q : Ω 2 B.
Proof. The key observation is that for every : ΩB, α : idp B = and r : ΩF , we have

transport P Ω (α, r) = P Ω ( ) r • transport P Ω (α, idp F ) ,
where on the right-hand side we compose the homogeneous path r with the dependent path transport P Ω (α, idp F ). This observation is simply proved by path induction on α.

Then we have

d(p • q) = transport P Ω (p • q, idp F ) = transport P Ω (q, transport P Ω (p, idp F )) = transport P Ω (q, d(p)) = d(p) • transport P Ω (q, idp F ) = d(p) • d(q).
Proposition 2.6.7. The sequence 2.6.5 is a long exact sequence of groups. An element f of F is in the kernel of the map F → E if and only if ( B , f ) = ( B , F ), i.e. that there is a path p : B = B such that f = transport P (p, F ), which is exactly the condition that f is in the image of ΩB → F .

A loop p : ΩB is in the kernel of the map ΩB → F if and only if transport P (p, F ) = F , and is in the image of ΩE → ΩB if and only if there exists a dependent path of type F = P p F . These two conditions are equivalent.

Proposition 2.6.8. We have π 2 (S 2 ) Z and for every k ≥ 3 we have π k (S 2 ) π k (S 3 ).

Proof. Using the results already obtained in this chapter, the long exact sequence of homotopy groups of the Hopf fibration is . . .

0 π 4 (S 3 ) π 4 (S 2 ) 0 π 3 (S 3 ) π 3 (S 2 ) 0 0 π 2 (S 2 ) Z 0 0
therefore the result follows.

We can also use the long exact sequence of homotopy groups to describe how nconnected maps act on homotopy groups.

Proposition 2.6.9. Given two pointed types A and B and an n-connected pointed map

f : A → B, the map π k (f ) : π k (A) → π k (B) is an isomorphism for k ≤ n and a surjection for k = n + 1.
Proof. The dependent type

P : B → Type, P (b) := a:A f (a) = B b corresponds to a fibration fib f ( B ) A B. f Moreover, fib f ( B ) is n-connected, therefore for k ≤ n we have π k (fib f ( B )) Ω k fib f ( B ) k Ω k fib f ( B ) n k ,
which is contractible. Therefore, the long exact sequence of homotopy groups for the fibration above has n zeros on the left column, which shows that π n+1 (f ) is surjective and that π k (f ) is bijective for k ≤ n.

Chapter 3

The James construction

Given a pointed type A, the James construction is a sequence of approximations of ΩΣA which are often easier to study than ΩΣA. We define the James construction and use it to prove the Freudenthal suspension theorem and the fact that there exists a natural number n such that π 4 (S 3 ) Z/nZ.

Sequential colimits

In this section we define sequential colimits and we prove a few properties about them.

Definition 3.1.1. Given a family of types (A n ) n:N and a family of functions (i n ) n:N with i n : A n → A n+1 , as in the diagram

A 0 A 1 A 2 A 3 . . . , i 0 i 1 i 2
we define the sequential colimit of (A n ) n:N as the higher inductive type A ∞ generated by the two constructors

in : (n : N) → A n → A ∞ , push : (n : N)(x : A n ) → in n (x) = A∞ in n+1 (i n (x)).
The induction principle for sequential colimits states that given a dependent type P : A ∞ → Type, a function f : (x : A ∞ ) → P (x) can be defined by

f : (x : A ∞ ) → P (x), f (in n (x)) := f in (n, x), ap f (push n (x)) := f push (n, x),
where we have

f in : (n : N)(x : A n ) → P (in n (x)), f push : (n : N)(x : A n ) → f in (n, x) = P push n (x) f in (n + 1, i n (x)).
We have the diagram

A 0 A 1 A 2 A 3 . . . A ∞ i 0 in 0 i 1 in 1 i 2 in 2 in 3
and the map in 0 : A 0 → A ∞ is called the transfinite composition of the family (i n ) n:N .

The following proposition shows (among other things) that in k is the transfinite composition of the family (i n+k ) n:N .

Proposition 3.1.2. There is an equivalence between A ∞ and the sequential colimit A ∞ of the diagram

A 1 A 2 A 3 A 4 . . . , i 1 i 2 i 3
and the maps in n :

A n+1 → A ∞ correspond to the maps in n+1 : A n+1 → A ∞ .
Proof. We write in and push for the constructors of A ∞ . The map from A ∞ to A ∞ sends in n (x) to in n+1 (x) and push n (x) to push n+1 (x), and the map from A ∞ to A ∞ sends in 0 (x) to in 0 (i 0 (x)), in n+1 (x) to in n (x), push 0 (x) to idp i 0 (x) and push n+1 (x) to push n (x).

One can easily check that those two functions are inverse to each other.

The main result of this section is the fact that connectedness is stable under transfinite composition.

Proposition 3.1.3. If all the maps i 0 , i 1 , . . . are k-connected, then the transfinite composition of (i n ) n:N is also k-connected.

Proof. Let's consider P : A ∞ → Type a family of k-truncated types and d 0 : (x : A 0 ) → P (in 0 (x)). Using proposition 2.3.8, it is enough to construct a section d of P which is equal to d 0 on A 0 to conclude that in 0 is k-connected. We define a family of maps d n : (x : A n ) → P (in n (x)) by induction on n, starting with the given d 0 for n = 0, as follows. Let's consider

P n+1 : A n+1 → Type, P n+1 (x) := P (in n+1 (x)).
It is a family of k-truncated types, the map i n is k-connected, and we have

d n : (x : A n ) → P n+1 (i n (x)), d n (x) := transport P (push n (x), d n (x)),
therefore, using proposition 2.3.8 again, there is a map d n+1 : (x :

A n+1 ) → P (in n+1 (x)) satisfying d n+1 (i n (x)) = P push n (x) d n (x)
. The family (d n ) n:N together with those equalities gives a section of P which is equal to d 0 on A 0 . Therefore, the map in 0 is k-connected, which is what we wanted to prove.

The James construction

Proposition 3.2.1. Given a k-connected pointed type A, with k ≥ 0, there is a sequence of types (J n A) n:N and maps i n : J n A → J n+1 A, as in the diagram

J 0 A J 1 A J 2 A J 3 A . . . , i 0 i 1 i 2 i 3
such that for every n : N, the map i n is (n(k + 1) + (k -1))-connected, and such that the sequential colimit of (J n A) n:N is equivalent to ΩΣA. Moreover, for low values of n we have

• J 0 A 1,
• J 1 A A, the map i 0 is the inclusion of the basepoint, and the induced map from

A to ΩΣA is equal to ϕ A , • J 2 A (A × A) A∨A A,
where the two maps are the folding map

∇ A : A ∨ A → A, ∇ A (inl(x)) := x, ∇ A (inr(y)) := y, ap ∇ A (push( 1 )) := idp A
and the inclusion of the wedge in the product

i ∨ A,A : A ∨ A → A × A, i ∨ A,A (inl(a)) := (a, A ), i ∨ A,A (inr(a)) := ( A , a), ap i ∨ A,A (push( 1 )) := idp ( A , A ) , and i 1 : A → J 2 A is equal to inr.
Given that connectedness of maps is downward-closed and stable by transfinite composition, the map in n from J n A to the colimit is (n(k + 1) + (k -1))-connected, hence there is an (n(k + 1) + (k -1))-connected map from J n A to ΩΣA which allows us to study low-dimensional homotopy groups of ΩΣA by studying those of some J n A instead. We have in particular the following two corollaries, which are the only two properties of the James construction that we use here.

Corollary 3.2.2 (Freudenthal suspension theorem). Given a k-connected pointed type A, the map ϕ

A : A → ΩΣA is 2k-connected.
Corollary 3.2.3. Given a k-connected pointed type A, there is a (3k +1)-connected map

(A × A) A∨A A → ΩΣA.
Note that both corollaries are also true in the case k = -1 because every map is (-2)-connected.

We will define the types (J n A) as pushouts, by induction on n, and prove that their colimit J ∞ A is equivalent to another type JA which has a much simpler definition. Intuitively, JA corresponds to the free monoid on A with unit A , while J n A corresponds to the "subtype" of JA consisting of products of length at most n. We then prove that the space ΩΣA is equivalent to JA, where we crucially use the fact that A is connected.

Definition of the family (J n A)

We define the types J n A together with three functions

i n : J n A → J n+1 A, α n : A × J n A → J n+1 A, β n : (x : J n A) → α n ( A , x) = J n+1 A i n (x),
by induction on n as follows.

• J 0 A := 1 (whose unique element is called ),

• J 1 A := A, i 0 ( ) := A , α 0 (a, ) := a and β 0 ( ) := idp A , • J n+2 A, i n+1 , α n+1 and β n+1 := push • inr are defined by the pushout diagram

(A × J n A) JnA J n+1 A J n+1 A A × J n+1 A J n+2 A g f i n+1 α n+1 (3.2.4)
where the pushout at the top-left of the diagram is defined by the maps x → ( A , x) and i n , and the maps f and g are defined by

f (inl(a, x)) := (a, i n (x)), g(inl(a, x)) := α n (a, x), f (inr(y)) := ( A , y), g(inr(y)) := y, ap f (push(x)) := idp, ap g (push(x)) := β n (x).
The pushout also consists of

γ n : (a : A)(x : J n A) → α n+1 (a, i n (x)) = J n+2 A i n+1 (α n (a, x)), γ n (a, x) := push(inl(a, x))
and

η n : (x : J n A) → (γ n ( A , x) • ap i n+1 (β n (x))) = β n+1 (i n (x)),
which follows from ap push (push(x)) and which is an equality in the type

α n+1 ( A , i n (x)) = J n+2 A i n+1 (i n (x)).
Note that, in order to define a map out of J n+2 A, it is enough to define it for elements of the form i n+1 (x) and α n+1 (a, x), for paths of the form β n+1 (x) and γ n (a, x), and for 2-paths of the form η n (x).

Colimit of the family (J n A)

We now prove that the colimit J ∞ A of the family (J n A) is equivalent to the higher inductive type JA with constructors

ε : JA, α : A → JA → JA, δ : (x : JA) → x = JA α( A , x).
In JA we just have a unit called ε, an action of A on JA called α and a proof that multiplying by A is the identity, called δ. The induction principle for JA states that given a dependent type P : JA → Type, a function f : (x : JA) → P (x) can be defined by f : (x : JA) → P (x),

f (ε) := f ε , f (α(a, x)) := f α (a, x, f (x)), ap f (δ(x)) := f δ (x, f (x)),
where we have

f ε : P (ε), f α : (a : A)(x : JA) → P (x) → P (α(a, x)), f δ : (x : JA)(y : P (x)) → y = P δ(x) f α ( A , x, y).
Note that f is used recursively in f (α(a, x)) and in ap f (δ(x)), because JA is a recursive higher inductive type.

In order to prove that JA and J ∞ A are equivalent, we first define equivalents of γ n , η n , in n and push n in JA and then equivalents of ε, α, δ, γ and η in J ∞ A.

Structure on JA We define the map γ, where we simply apply δ twice, by

γ : (a : A)(x : JA) → α(a, α( A , x)) = α( A , α(a, x)), γ(a, x) := (ap α(a,-) (δ(x))) -1 • δ(α(a, x)).
Then we define the map η : (x : JA) → γ( A , x) = idp using naturality of δ on δ(x), which is the square

x α( A , x) α( A , x) α( A , α( A , x)) δ(x) δ(x) δ(α( A , x)) ap α( A ,-) (δ(x))
which shows that δ(α

( A , x)) = ap α( A ,-) (δ(x)),
which is what we wanted to prove. We define now (in J n ) and (push J n ) by

in J n : J n A → JA, push J n : (x : J n A) → in J n (x) = in J n+1 (i n (x)), in J 0 ( ) := ε, push J n (x) := δ(in J n (x)). in J 1 (a) := α(a, ε), in J n+2 (i n+1 (x)) := α( A , in J n+1 (x)), in J n+2 (α n+1 (a, x)) := α(a, in J n+1 (x)), ap in J n+2 (β n (x)) := idp, ap in J n+2 (γ n (a, x)) := γ(a, in J n (x)), ap 2 in J n+2 (η n (x)) := η(in J n (x)), Structure on J ∞ A The equivalent of ε is the term ε ∞ := in 0 ( ) of type J ∞ A. We then define the action of A on J ∞ A by α ∞ : A → J ∞ A → J ∞ A, α ∞ (a, in n (x)) := in n+1 (α n (a, x)), ap α∞(a,-) (push n (x)) := push n+1 (α n (a, x)) • ap in n+2 (γ n (a, x)) -1 .
The equivalent of δ is δ ∞ defined by

δ ∞ : (x : J ∞ A) → x = α ∞ ( A , x), δ ∞ (in n (x)) := push n (x) • ap in n+1 (β n (x)) -1 , ap δ∞ (push n (x)) := δ push n ∞ (x),
where δ push n ∞ (x) is the filler of the square

• • • • • • • push n (x) push n (x) push n+1 (i n (x)) idp ap inn+1 (β n (x)) push n+1 (α n ( A , x)) ap inn+2 (ap in+1 (β n (x))) ap inn+2 (γ n ( A , x)) ap inn+2 (β n+1 (i n (x))) (3.2.5)
where the lower right triangle is filled using η n (x) and the pentagon in the middle is filled using the naturality square of push n+1 on β n (x).

We finally define

γ ∞ : (a : A)(x : J ∞ A) → α ∞ (a, α ∞ ( A , x)) = α ∞ ( A , α ∞ (a, x)), η ∞ : (x : J ∞ A) → γ ∞ ( A , x) = idp
in the same way as we defined γ and η, but using δ ∞ instead of δ. In the case of γ ∞ (a, in n (x)) we note that

γ ∞ (a, in n (x)) = ap α∞(a,-) (δ ∞ (in n (x))) -1 • δ ∞ (α ∞ (a, in n (x))) = ap α∞(a,-) (push n (x) • ap in n+1 (β n (x)) -1 ) -1 • δ ∞ (in n+1 (α n (a, x))) = (push n+1 (α n (a, x)) • ap in n+2 (γ n (a, x)) -1 • ap in n+2 (ap α n+1 (a,-) (β n (x))) -1 ) -1 • (push n+1 (α n (a, x)) • ap in n+2 (β n+1 (α n (a, x))) -1 ) = ap in n+2 (ap α n+1 (a,-) (β n (x))) • ap in n+2 (γ n (a, x)) • ap in n+2 (β n+1 (α n (a, x))) -1 .
Therefore γ ∞ (a, in n (x)) fits in the square

• • • • ap inn+2 (ap αn+1(a,-) (β n (x))) γ ∞ (a, in n (x)) ap inn+2 (γ n (a, x)) ap inn+2 (β n+1 (α n (a, x))) (3.2.6)
For η ∞ (in n (x)), it is defined using ap δ∞ (δ ∞ (in n (x))) and we have

ap δ∞ (δ ∞ (in n (x))) = ap δ∞ (push n (x) • ap in n+1 (β n (x) -1 )) = δ push n ∞ (x) • ap λx. push n+1 (x)•ap in n+2 (β n+1 (x) -1 ) (β n (x) -1 ).
The ap push n+1 (β n (x) -1 ) part cancels with the naturality square of push n+1 on β n (x) used in δ push n ∞ (x) and the remaining part ap ap in n+2 (β n+1 (-) -1 ) (β n (x) -1 ) is the naturality square of β n+1 on β n (x). Therefore η ∞ (in n (x)) fits in the three-dimensional diagram

• • • • • ap inn+2 (ap αn+1( A ,-) (β n (x))) γ ∞ ( A , in n (x)) idp ap inn+2 (γ n ( A , x)) ap inn+2 (β n+1 (i n (x))) ap inn+2 (β n+1 (α n ( A , x))) ap inn+2 (ap in+1 (β n (x))) (3.2.7)
where the half-disc on the left is η ∞ (in n (x)), the square in the middle is square 3.2.6, the triangle on the right is the application of in n+2 to η n (x) and the outer diagram is the application of in n+2 to the naturality square of β n+1 on β n (x), which is

• • • • ap αn+1( A ,-) (β n (x)) β n+1 (α n ( A , x)) β n+1 (i n (x)) ap in+1 (β n (x))
The two maps We can now define the maps back and forth by to :

J ∞ A → JA, from : JA → J ∞ A, to(in n (x)) := in J n (x), from(ε) := ε ∞ , ap to (push n (x)) := push J n (x), from(α(a, x)) := α ∞ (a, from(x)), ap from (δ(x)) := δ ∞ (from(x)).
First composite Let's prove first that from • to = id J∞A . By induction on the argument, it is enough to show that for every n : N and x : J n A, we have from(in J n (x)) = in n (x) and ap from (push J n (x)) = push n (x) (in the appropriate dependent path type). We proceed by induction on n, and then by induction on x.

• For 0 and , we have

from(in J 0 ( )) = from(ε) = ε ∞ = in 0 ( ).
• For 1 and a : A, we have

from(in J 1 (a)) = from(α(a, ε)) = α ∞ (a, from(ε))
= in 1 (a).

• For n + 2 and i n+1 (x), we have

from(in J n+2 (i n+1 (x))) = from(α( A , in J n+1 (x))) = α ∞ ( A , from(in J n+1 (x))) = α ∞ ( A , in n+1 (x)) by induction hypothesis = in n+2 (α n+1 ( A , x)) = in n+2 (i n+1 (x)) using β n+1 (x).
• For n + 2 and α n+1 (a, x), we have

from(in J n+2 (α n+1 (a, x))) = from(α(a, in J n+1 (x))) = α ∞ (a, from(in J n+1 (x))) = α ∞ (a, in n+1 (x)) by induction hypothesis = in n+2 (α n+1 (a, x)).
• For n + 2 and β n+1 (x), we have

ap from (ap in J n+2 (β n+1 (x))) = ap from (idp α( A ,in J n+1 (x)) ) = idp from(α( A ,in J n+1 (x))) = idp α∞( A ,from(in J n+1 (x))) = idp α∞( A ,in n+1 (x)) by induction hypothesis = idp in n+2 (α n+1 ( A ,x)) ,
hence it follows from the fact that the square

• • • • idp inn+2(αn+1( A ,x)) idp inn+2(αn+1( A ,x)) ap inn+2 (β n+1 (x)) ap inn+2 (β n+1 (x))
can be filled. Here the left side is ap from (ap in J n+2 (β n+1 (x))) as computed above, the right side is ap in n+2 (β n+1 (x)) and the top and bottom side are the equalities from(in J n+2 (x)) = in n+2 (x) for x := α n+1 ( A , x) and x := i n+1 (x) respectively (the endpoints of β n+1 (x)) that we constructed above. Note that the paths corresponding to the induction hypothesis do not appear on the diagram because they were taken into account in the computation of ap from (ap in J n+2 (β n+1 (x))).

• For n + 2 and γ n (a, x), we have

ap from (ap in J n+2 (γ n (a, x))) = ap from (γ(a, in J n (x))) = γ ∞ (a, from(in J n (x))) = γ ∞ (a, in n (x)
) by induction hypothesis hence it follows from diagram 3.2.6.

• For n + 2 and η n (x), we have

ap 2 from (ap 2 in J n+2 (η n (x))) = ap 2 from (η(in J n (x))) = η ∞ (from(in J n (x))) = η ∞ (in n (x)
) by induction hypothesis hence there is some three-dimensional diagram to fill and it follows from diagram 3.2.7.

We then have to show that for every n : N and x : J n A, we have an equality between ap from (push J n (x)) and push n (x) along the equalities from(in J n (x)) = in n (x) and from(in J n+1 (i n (x))) = in n+1 (i n (x)) that we just constructed. We have

ap from (push J n (x)) = δ ∞ (from(in J n (x))) = δ ∞ (in n (x)) by induction hypothesis = push n (x) • ap in n+1 (β n (x)) -1 ,
hence we have a filler of the square

• • • • • p ap from (push J n (x)) push n (x) ap α∞( A ,-) (p) ap inn+1 (β n (x))
where p is the equality from(in J n (x)) = in n (x), which concludes this part of the proof.

Second composite Let's now prove that to • from = id JA . The idea is very similar, we have to prove that to(ε ∞ ) = ε (which is true by definition), that to(α ∞ (a, x)) = α(a, to(x)), and that ap to (δ ∞ (x)) = δ(to(x)) along some equalities constructed before. Let's first do the case of α ∞ by induction on x. There are two cases.

• For an element of the form in n (x), we have

to(α ∞ (a, in n (x))) = to(in n+1 (α n (a, x))) = α(a, in J n (x)) = α(a, to(in n (x))),
which is what we wanted.

• For a path of the form push n (x), we have

ap to (ap α∞(a,-) (push n (x))) = ap to (push n+1 (α n (a, x)) • ap in n+2 (γ n (a, x)) -1 ) = δ(in J n+1 (α n (a, x))) • γ(a, in J n (x)) -1 = δ(α(a, in J n (x))) • γ(a, in J n (x)) -1 = ap α(a,-) (δ(in J n (x))) by definition of γ = ap α(a,-) (push J n (x)) = ap α(a,-) (ap to (push n (x))),
which is again what we wanted.

We now prove that the path ap to (δ ∞ (x)) : to(x) = to(α ∞ ( A , x)) composed with the path from to(α ∞ ( A , x)) to α( A , to(x)) that we have just constructed is equal to the path δ(to(x)) : to(x) = α( A , to(x)).

• For an element of the form in n (x), we have

ap to (δ ∞ (in n (x))) = ap to (push n (x) • ap in n+1 (β n (x)) -1 ) = push J n (x) = δ(in J n (x)) = δ(to(in n (x))),
which proves the result, as the path from to(α ∞ ( A , in n (x))) to α( A , to(in n (x))) is the constant path.

• For a path of the form push n (x), we have to compare ap 2 to (ap δ∞ (push n (x))) and ap δ (ap to (push n (x))). For the first one, we just apply to to diagram 3.2.5. We obtain

• • • • • • • push J n (x) push J n (x) δ(α( A , in J n (x))) idp idp δ(α( A , in J n (x))) idp γ( A , in J n (x)) idp
where the bottom right triangle is filled using η(in J n (x)) and the rest is degenerate. On the other hand, we have

ap δ (ap to (push n (x))) = ap δ (push J n (x)) = ap δ (δ(in J n (x)))
and η(in J n (x)) is defined from ap δ (δ(in J n (x))) by a coherence operation. Therefore some coherence operation proves that ap 2 to (ap δ∞ (push n (x))) and ap δ (ap to (push n (x))) are equal. This concludes the proof that J ∞ A is equivalent to JA.

Equivalence between JA and ΩΣA

We now prove that JA is equivalent to ΩΣA. The function δ shows that the map α( A , -) is equal to the identity function, hence α( A , -) is an equivalence. Given that A is 0-connected it follows that α(a, -) is an equivalence for every a. We define F : ΣA → Type by

F (north) := JA, F (south) := JA, ap F (merid a) := ua(α(a, -)),
which is a valid definition because α(a, -) is an equivalence.

We now prove that the total space of F is contractible. According to the flattening lemma (proposition 1.9.2), the total space of F is equivalent to the type

T := JA A×JA JA,
where the two maps A × JA → JA are snd and α respectively. We want to construct, for every x : T , a path p(x) from inl(ε) to x.

• For inl(ε), we take the constant path idp inl(ε)

• For an element of the form inl(α(a, x)), we take the composition inl(α(a, x))

inr(α( A , α(a, x)))

inl(x) inr(α(a, x))

inl(ε).

push( A , α(a, x))

ap inr (δ(α(a, x))) p(inl(x)) push(a, x)
• For a path of the form ap inl (δ(x)), we need to fill the diagram

inl(α( A , x)) inr(α( A , α( A , x))) inl(x) inr(α( A , x)) push( A , α( A , x)) ap inl (δ(x)) ap inr (δ(α( A , x))) push( A , x)
By naturality of push( A , -) on the path δ(x), we get a filler of the similar diagram which has ap inr (ap α( A ,-) (δ(x))) on the right side. Moreover, we know that ap inr (ap α( A ,-) (δ(x))) and ap inr (δ(α( A , x))) are equal via η(x), which concludes.

• For a point of the form inr(x), we take the composition inr(x) inr(α( A , x)) inl(x) inl(ε).

ap inr (δ(x)) p(inl(x)) push( A , x)

• Finally for a path of the form push(a, x), it is enough to notice that the path from inr(α(a, x)) to inl(ε) constructed as above is equal to the composition inr(α(a, x)) inl(x) inl(ε).

p(inl(x)) push(a, x)

This concludes the proof that T is contractible, and by the same argument as for ΩS 1 we obtain that ΩΣA is equivalent to F ( ΣA ), which is equal to JA by definition.

Connectivity of the maps i n

Given two maps f : X → A and g : Y → B, the pushout-product of f and g is the map

f × g : (X × B) X×Y (A × Y ) → (A × B), (f × g)(inl(x, b)) := (f (x), b), (f × g)(inr(a, y)) := (a, g(y)), ap f × g (push(x, y)) := idp (f (x),g(y)) .
We have the commutative square

X × Y A × Y (X × B) X×Y (A × Y ) X × B A × B f ×1 Y 1 X ×g 1 A ×g inr f × g f ×1 B inl
The main result of this subsection is the following.

Proposition 3.2.8. If f is m-connected and g is n-connected, then f × g is (m + n + 2)- connected.
Proof

P (b) → a:A P (f (a))
is (k -2)-truncated (in the sense that all its fibers are (k -2)-truncated).

We now prove that f × g is (m + n + 2)-connected. We consider P : A × B → Type a family of (n + m + 2)-types together with

k : (u : (X × B) X×Y (A × Y )) → P ((f × g)(u)).
By splitting k in three parts and currying, we have to prove the following proposition. Proposition 3.2.10. Suppose we have P : A → B → Type a family of (n + m + 2)-types together with

u : (x : X)(b : B) → P (f (x), b), v : (a : A)(y : Y ) → P (a, g(y)), w : (x : X)(y : Y ) → u(x, g(y)) = P (f (x),g(y)) v(f (x), y).
Then there exists a map h : (a : A)(b : B) → P (a, b)

together with homotopies p : (x : X)(b : B) → h(f (x), b) = u(x, b), q : (a : A)(y : Y ) → h(a, g(y)) = v(a, y), r : (x : X)(y : Y ) → p(x, g(y)) -1 • q(f (x), y) = w(x, y).

WHITEHEAD PRODUCTS

Proof. Let's define F : A → Type by

F (a) := k:(b:B)→P (a,b) ((y : Y ) → k(g(y)) = v(a, y)).
For a given a : A, the type F (a) is the fiber of the map λs.s • g : at v(a, -). Given that g is n-connected and P is a family of (n + m + 2)-truncated types, proposition 3.2.9 shows that F (a) is m-truncated.

For every x : X we have an element of F (f (x)) given by (u(x, -), w(x, -)). Hence, using the fact that f is m-connected, there is a map k : (a : A) → F (a) together with a homotopy ϕ between k • f and λx.(u(x, -), w(x, -)). We can now define h, p, q, and r by This concludes the proof that f × g is (n + m + 2)-connected.

We can now compute the connectivity of the maps i n .

Proposition 3.2.11. For every n : N, the map i n is (n(k + 1) + (k -1))-connected.

Proof. We proceed by induction on n. For 0, the map i 0 is the inclusion of the basepoint of A, hence i 0 is (k -1)-connected because A is k-connected.

For n + 1, the map f in diagram 3.2.4 (the diagram defining J n+2 A) is the pushoutproduct of i n and of the map 1 → A (which is (k -1)-connected). Hence f is ((n + 1)(k + 1) + (k -1))-connected by proposition 3.2.8. Therefore, by proposition 2.3.10, the map i n+1 is ((n + 1)(k + 1) + (k -1))-connected as well. This concludes the James construction.

Whitehead products

In proposition 3.3.1 we give a decomposition of a product of spheres into a pushout of spheres. This allows us to define Whitehead products, which are used in the next section in the definition of the natural number n such that π 4 (S 3 ) Z/nZ. Proposition 3.3.1. Given n, m : N * , there is a map W n,m : S n+m-1 → S n ∨ S m such that

S n × S m 1 S n+m-1 (S n ∨ S m ) and such that the induced map S n ∨ S m → S n × S m is i ∨ S n ,S m .
We first prove the following more general version which isn't more complicated to prove.

Proposition 3.3.2. Given two types A and B, there is a map W

A,B : A * B → ΣA ∨ ΣB such that ΣA × ΣB 1 A * B (ΣA ∨ ΣB)
and such that the induced map ΣA ∨ ΣB → ΣA × ΣB is i ∨ ΣA,ΣB .

Proof. We use the 3 × 3-lemma with the diagram

ΣA B 1 B A × B A B B 1 north α south id snd fst snd snd id
where α : A × B → north = ΣA south is defined by α(x, y) := merid(x).

The pushout of the top row is equivalent to ΣA ∨ ΣB, the pushout of the middle row is equivalent to the join A * B and the pushout of the bottom row is contractible, so the pushout of the pushouts of the rows is equivalent to 1 A * B (ΣA ∨ ΣB) for the map A * B → ΣA ∨ ΣB defined by The pushouts of the left and of the right columns are both equivalent to ΣA, and the pushout of the middle column is equivalent to ΣA × B. Moreover, the horizontal map on the left between ΣA × B and ΣA is equal to fst, as can be proved by induction using the definition of α.The horizontal map on the right is also equal to fst. Hence the pushout of the pushout of the columns is equivalent to ΣA × ΣB. Therefore we have ΣA × ΣB 1 A * B (ΣA ∨ ΣB) and it can be checked that the induced map ΣA∨ΣB → ΣA×ΣB is equal to i ∨ ΣA,ΣB .

W A,B : A * B → ΣA ∨ ΣB,
Proof of proposition 3.3.1. We apply proposition 3.3.2 to A := S n-1 and B := S m-1 , and we obtain

S n × S m 1 S n-1 * S m-1 (S n ∨ S m ).
Moreover, we have S n-1 * S m-1 S n+m-1 by proposition 1.8.8, which concludes.

This allows us to define the following operation on homotopy groups.

Definition 3.3.3. Given a pointed type X and two positive integers n and m, the Whitehead product is the function

[-, -] : π n (X) × π m (X) → π n+m-1 (X)
defined by composition with W n,m when representing elements of homotopy groups as maps from the spheres.

Application to homotopy groups of spheres

The sphere S n is (n -1)-connected, therefore by the Freudenthal suspension theorem 3.2.2, the map ϕ S n : S n → ΩS n+1 is (2n -2)-connected. On homotopy groups it gives the following result.

Proposition 3.4.1. For k, n : N, the map

π n+k (S n ) → π n+k+1 (S n+1 ) is an isomorphism if n ≥ k + 2 and surjective if n = k + 1.
On the table 2.1 of homotopy groups of spheres this corresponds to the fact that the diagonals π n+k (S n ) (for a fixed k) are constant above the zigzag line. In particular, for k = 0 and k = 1 we have the following result. I already obtained the result for π n (S n ) in collaboration with Dan Licata in [START_REF] Daniel | π n (S n ) in Homotopy Type Theory[END_REF] but with a different technique.

Corollary 3.4.2. For n ≥ 2 we have π n (S n ) π 2 (S 2 ) Z.
For n ≥ 3 we have π n+1 (S n ) π 4 (S 3 ) and the map π 3 (S 2 ) → π 4 (S 3 ) is surjective.

Note that as we are working constructively this does not imply that π 4 (S 3 ) is of the form Z/nZ for some n : Z. Indeed, it cannot be proved constructively that every subgroup of Z is of the form nZ for some n : Z, as there is no way to compute this n in general. In this case, however, we can use the James construction to give an explicit definition of the kernel of that map. We will need the Blakers-Massey theorem ([Hou+16]), which is stated as [UF13, theorem 8.10.2] and which is proved in Agda in

C E B A D

g f h inr inl If f is n-connected and g is m-connected, then h is (n + m)-connected.
We now prove the following proposition.

Proposition 3.4.4. For n ≥ 2, the map π 2n-1 (S n ) → π 2n (S n+1 ) induced by ϕ S n is surjective and its kernel is generated by the Whitehead product [i n , i n ], where i n is the generator of π n (S n ).

Proof. Applying corollary 3.2.3 to S n which is (n -1)-connected, we get a (3n -2)connected map from J 2 (S n ) to ΩS n+1 . In particular, given that 2n -

1 < 3n -2, it means that π 2n-1 (J 2 (S n )) π 2n-1 (ΩS n+1 ) π 2n (S n+1
), so we now study the map π 2n-1 (S n ) → π 2n-1 (J 2 (S n )). We know from the James construction that

J 2 (S n ) (S n × S n ) S n ∨S n S n ,
hence using the decomposition of S n × S n given in proposition 3.3.1, we get

J 2 (S n ) (1 S 2n-1 (S n ∨ S n )) S n ∨S n S n
where the map from S n ∨ S n to the pushout on the left is inr (i.e. it's the identity on the second component). Using proposition 1.8.9, this reduces to

J 2 (S n ) 1 S 2n-1 S n ,
where the map S 2n-1 → S n is the Whitehead map W n,n : S 2n-1 → S n ∨ S n composed with the folding map ∇ S n : S n ∨ S n → S n . We now take the fiber P of the map S n → J 2 (S n ), which is the pullback of the two maps from S n and 1 to J 2 (S n )

S 2n-1 S n P 1 J 2 (S n ) ∇ S n •Wn,n
The relevant part of the long exact sequence of homotopy groups for

P → S n → J 2 (S n ) is π 2n-1 (P ) π 2n-1 (S n ) π 2n-1 (J 2 (S n )) π 2n-2 (P ).
The map from S 2n-1 to 1 is (2n -2)-connected and the map from S 2n-1 to S n is (n -2)connected (indeed, every map between two (n-1)-connected types is (n-2)-connected), hence using the Blakers-Massey theorem, the dashed map from S 2n-1 to P is (3n -4)connected. Given that 2n -2 ≤ 3n -4, it follows that π 2n-2 (P ) π 2n-2 (S 2n-1 ) 0.

Hence π 2n-1 (J 2 (S n )) is the quotient of π 2n-1 (S n ) by the image of the map π 2n-1 (P ) → π 2n-1 (S n ). But the dashed map is surjective on π 2n-1 , so it's the same as the image of the map π 2n-1 (S 2n-1 ) → π 2n-1 (S n ), which is generated by [i n , i n ], by definition of the Whitehead product.

Therefore, the kernel of the map π 2n-1

(S n ) → π 2n (S n+1 ) is generated by [i n , i n ].
In particular, applying this result to n = 2 and using the fact that π 3 (S 2 ) Z, we get the following corollary.

Corollary 3.4.5. We have

π 4 (S 3 ) Z/nZ,
where n is the absolute value of the image of [i 2 , i 2 ] by the equivalence

π 3 (S 2 ) ∼ -→ Z.
This result is quite remarkable in that even though it is a constructive proof, it is not at all obvious how to actually compute this n. At the time of writing, we still haven't managed to extract its value from its definition. A complete and concise definition of this number n is presented in appendix B, for the benefit of someone wanting to implement it in a prospective proof assistant. In the rest of this thesis, we give a mathematical proof in homotopy type theory that n = 2.

Chapter 4

Smash products of spheres

In this chapter we prove various properties of the smash product, in particular concerning its symmetric monoidal structure, the smash product of spheres, and the connectedness of the smash product of two maps. The results of this chapter are essential for the definition and the basic properties of the multiplicative structure on cohomology, which we will see in the next chapter.

We recall that the smash product of two pointed types A and B is the pushout of the span

1 A ∨ B A × B. i ∨ A,B
The smash product A ∧ B is pointed by A∧B := inl( 1 ) and there is a map and a 2-dimensional path

proj : A → B → A ∧ B, proj (
proj rl : proj r ( A ) = proj l ( B ),
proj rl := ap push (push( 1 )).

In particular, we can also see A ∧ B as the higher inductive type with constructors A∧B , proj, proj r , proj l and proj rl .

The monoidal structure of the smash product

Let's first define the notion of 1-coherent symmetric monoidal product on pointed types.

Definition 4.1.1. A 1-coherent symmetric monoidal product on pointed types is a binary operation ⊗ between pointed types equipped with

• a pointed map f ⊗ g : A ⊗ B → A ⊗ B given any two pointed maps f : A → A and g : B → B ,

• a pointed equality id A ⊗ id B = id A⊗B given any two pointed types A and B,

• a pointed equality (f

• f ) ⊗ (g • g) = (f ⊗ g ) • (f ⊗ g) given any four pointed maps f : A → A , f : A → A , g : B → B and g : B → B , • a pointed equivalence α A,B,C : (A ⊗ B) ⊗ C ∼ → A ⊗ (B ⊗ C)
given any three pointed types A, B and C, and a pointed filler of the square

(A ⊗ B) ⊗ C A ⊗ (B ⊗ C) (A ⊗ B ) ⊗ C A ⊗ (B ⊗ C ) α A,B,C (f ⊗g)⊗h f ⊗(g⊗h) α A ,B ,C
given any three pointed maps f :

A → A , g : B → B and h : C → C ,
• a pointed filler of the pentagon

((A ⊗ B) ⊗ C) ⊗ D (A ⊗ (B ⊗ C)) ⊗ D A ⊗ ((B ⊗ C) ⊗ D) A ⊗ (B ⊗ (C ⊗ D)) (A ⊗ B) ⊗ (C ⊗ D) α A,B,C ⊗id D α A,B⊗C,D id A ⊗α B,C,D α A⊗B,C,D α A,B,C⊗D
given any four pointed types A, B, C and D,

• a pointed map σ A,B : A ⊗ B → B ⊗ A (which will turn out to be an equivalence) given any two pointed types A and B, and a pointed filler of the square

A ⊗ B B ⊗ A A ⊗ B B ⊗ A σ A,B f ⊗g g⊗f σ A ,B
given any two pointed maps f : A → A and g : B → B ,

• a pointed filler of the hexagon

(B ⊗ C) ⊗ A A ⊗ (B ⊗ C) (A ⊗ B) ⊗ C (B ⊗ A) ⊗ C B ⊗ (A ⊗ C) B ⊗ (C ⊗ A) α A,B,C σ A,B⊗C α B,C,A σ A,B ⊗id C α B,A,C id B ⊗σ A,C
given any three pointed types A, B and C,

• a pointed filler of the triangle

A ⊗ B A ⊗ B B ⊗ A id A⊗B σ A,B σ B,A
given any two pointed types A and B,

• a pointed type I : Type,

• a pointed equivalence λ A : I ⊗ A ∼ → A given any pointed type A and a pointed filler of the square

I ⊗ A A I ⊗ A A λ A id I ⊗f f λ A given any pointed map f : A → A ,
• a pointed filler of the triangle

(I ⊗ A) ⊗ B I ⊗ (A ⊗ B) A ⊗ B α I,A,B λ A ⊗id B λ A⊗B
given any two pointed types A and B.

We call this a 1-coherent symmetric monoidal structure because we do not ask the fillers of the diagrams to satisfy any further coherence condition. It's an open question to give a definition in homotopy type theory of the notion of fully coherent (or even only n-coherent) symmetric monoidal structure, but here we only need the 1-coherent structure of the smash product. The following result is the main result of this section even though we essentially admit it.

x : ((A ∧ B) ∧ C) ∧ D) → P (x),
where each time P (x) is either a smash product like B ∧ A or A ∧ (B ∧ C), or an equality in a smash product between combinations of some of those functions.

The idea is that the smash product A ∧ B can be seen as the product A × B where all elements of the form (a, B ) and ( A , b) have been identified together. Therefore, in order to define a map out of A ∧ B it should be enough to define it on elements of the form proj(a, b) in such a way that the image of elements of the form proj(a, B ) and proj( A , b) are identified to the basepoint in the codomain. But it is not enough to simply give paths from the images of proj(a, B ) and proj( A , b) to the basepoint of the codomain, because we also need to check that the two induced paths from the image of proj( A , B ) to the basepoint are equal, and this is often the most technical part. Intuitively, however, the idea (that we do not make precise here) is the following. In the type A ∧ B, the "subtype" generated (using coherence operations) by A∧B , all proj(a, B ), all proj( A , b), all proj r (a), all proj l (b), and proj rl is "contractible" in the sense that there is a path between any two points, a 2-dimensional path between any two parallel paths, and so on. Similarly, the subtype of (A ∧ B) ∧ C generated by all the proj(proj(a, b), c) where either a, b, or c is the basepoint and by all the combinations of proj r , proj l , and proj rl that one can write is contractible in the same sense. Therefore, in order to define (say) a map from (A ∧ B) ∧ C to A ∧ (B ∧ C), it is enough to define it on elements of the form proj(proj(a, b), c) in such a way that when either a, b, or c is the basepoint, the image is in the contractible part of A ∧ (B ∧ C). The contractibility takes care of all the other constructors.

Finally the unit is I := 2, the unitor and its inverse are defined by

λ A : 2 ∧ A → A, λ -1 A : A → 2 ∧ A, λ A (true, a) := A , λ -1 A (a) := (false, a), λ A (false, a) := a,
and a similar reasoning applies for the remaining diagrams.

Smash product of spheres

We now study the structure of the smash product on spheres. We first notice that taking the smash product with S 1 is equivalent to taking the suspension. Proposition 4.2.1. For every pointed type A, there is an equivalence

S 1 ∧ A ΣA.
Proof. We define the map f : We also need to give the images by f of the other constructors of S 1 ∧ A. We send the basepoint S 1 ∧A to north. For proj l (a) we can take idp north because f (proj(base, a)) is equal to north by definition. For proj r (x) we need to construct a path from f (x, A ) to north for every x : S 1 and we proceed by induction on x. For base they are equal by definition so we take idp north , and for loop we use the fact that ϕ A ( A ) = idp north . Finally, we have to prove that the two paths from f (base, A ) to north that we just constructed are equal, but it is true because they are both equal to idp north .

S 1 ∧ A → ΣA by f : S 1 ∧ A → ΣA, f (proj(x, a)) := f (x, a),
The inverse function is defined by

g : ΣA → S 1 ∧ A, g(north) := S 1 ∧A , g(south) := S 1 ∧A , ap g (merid(a)) := proj l (a) -1 • ap proj(-,a) (loop) • proj l (a).
The composition f • g : ΣA → ΣA sends both north and south to north and sends merid(a) to ϕ A (a). Therefore we have f (g(x)) = x via idp north for x = north, merid( A ) for x = south, and the filler of the square

• • • • ϕ A (a) idp north merid( A ) merid(a)
given by the definition of ϕ A (a) for merid(a).

For the composition g • f : S 1 ∧ A → S 1 ∧ A, we first prove that g( f (x, a)) = proj(x, a) for all x : S 1 and a : A, by induction on x. For base we have g( f (base, a)) = g(north) = S 1 ∧A by definition, which is equal to proj(base, a) along proj l (a), and for loop we have

ap g (ap f (-,a) (loop)) = ap g (ϕ A (a)) = proj l (a) -1 • ap proj(-,a) (loop) • proj l (a) • proj l ( A ) -1 • ap proj(-, A ) (loop) -1 • proj l ( A ).
Moreover the naturality square of proj r on loop is

• • • • ap proj(-, A ) (loop) proj r (base) proj r (base) idp S 1 ∧A
which, in conjunction with the equality proj rl : proj r (base) = proj l ( A ), shows that

ap g (ap f (-,a) (loop)) = proj l (a) -1 • ap proj(-,a) (loop) • proj l (a),
which is what we wanted. Now we have to prove that g(f (x)) = x for the other constructors of S 1 ∧ A. For the basepoint it's true by definition. The path proj l (a) is sent to idp S 1 ∧A which is what we want because the equality g(f (proj(base, a))) = proj(base, a) is already given by proj l (a). For proj r (x), we have to prove that ap g (ap f (proj r (x))) is equal to the composition of the path g(f (proj(x, A ))) = proj(x, A ) constructed above with the path proj r (x), and we proceed by induction on x. For base, the image of proj r (base) by g • f is the constant path, and the equality g(f (proj(x, A ))) = proj(x, A ) is proj l ( A ) -1 , therefore the result follows from proj rl . For loop, the image by g • f is a coherence operation (coming from the equality ϕ A ( A ) = idp north ) and the equality g(f (proj(x, A ))) = proj(x, A ) is essentially ap proj l (loop) -1 , therefore it follows. Finally, for proj rl it follows automatically as well.

The previous proposition together with associativity of the smash product shows that S n ∧ S m S n+m for every n, m : N, but we need to prove that this collection of equivalences is compatible with associativity of the smash product in the following sense. Proposition 4.2.2. For every n, m : N * , there is an equivalence

∧ n,m : S n ∧ S m S n+m
together with a filler of the diagram

(S n ∧ S m ) ∧ S k S n+m ∧ S k S n+m+k S n ∧ (S m ∧ S k ) S n ∧ S m+k (∧n,m)∧id S k α S n ,S m ,S k ∧ n+m,k id S n ∧(∧ m,k ) ∧ n,m+k
Proof. We define the family of types (S n ) n:N * by

S 1 := S 1 , S n+1 := S 1 ∧ S n .
Using proposition 4.2.1 we can easily construct by induction on n an equivalence between S n and S n , therefore it is enough to prove the result for the family (S n ) instead of (S n ).

The equivalence ∧ n,m is defined by induction on n.

• For n = 1 we take the identity equivalence, as S 1 ∧ S m is equal to S m+1 by definition.

• For n + 1 we take the composition

S n+1 ∧ S m S n+m+1 (S 1 ∧ S n ) ∧ S m S 1 ∧ (S n ∧ S m ) S 1 ∧ S n+m ∼ ∼
where we used associativity of the smash product and then the smash by S 1 of ∧ n,m .

The compatibility for n = 1 holds by definition (as both ∧ n,m and ∧ n,m+k are the identity), and for n + 1 let's consider the following diagram where we omitted the names of the arrows for readability.

S 1 ∧ ((S n ∧ S m ) ∧ S k ) (S 1 ∧ (S n ∧ S m )) ∧ S k S 1 ∧ (S n+m ∧ S k ) ((S 1 ∧ S n ) ∧ S m ) ∧ S k (S 1 ∧ S n+m ) ∧ S k S 1 ∧ S n+m+k (S 1 ∧ S n ) ∧ (S m ∧ S k ) (S 1 ∧ S n ) ∧ S m+k S 1 ∧ (S n ∧ (S m ∧ S k )) S 1 ∧ (S n ∧ S m+k )
We want to fill the inner pentagon. The three triangles are the definition of the maps of the form (S 1 ∧ S i ) ∧ S j → S 1 ∧ S i+j . The two squares are filled by naturality of the associativity of the smash product. The left part of the diagram is filled by the pentagon of coherences of associativity. Finally the outer diagram is filled by the smash product by S 1 of the induction hypothesis. Therefore, we get a filler of the inner pentagon.

The definition of the equivalences ∧ n,m is rather indirect, because it goes through the family of types (S n ). A more direct way to see them is as follows.

Proposition 4.2.3. Given n, m : N * , the map ∧ n+1,m of type (ΣS n ) ∧ S m → Σ(S n+m ) satisfies, for every x : S n and y : S m , ap ∧ n+1,m (ap proj(-,y) (ϕ S n (x))) = ϕ S n+m (∧ n,m (proj(x, y))).

Proof. It follows from the definition of ∧ n+1,m as we defined it by first using associativity of the smash product (which corresponds to moving the ϕ to the outside) and then by applying ∧ n,m .

The compatibility with commutativity of the smash product is a bit more subtle as there is a sign. where (-1) nm is

• the identity map, if nm is even,

• the map (-1) sending merid(a) to merid(a) -1 , if nm is odd.

Proof. As in the proof of the previous proposition, we work with the family (S n ) instead of (S n ), the map (-1) corresponding to the map (-1) :

S 1 ∧ S n → S 1 ∧ S n , (-1) := i ∧ id S n ,
where the map i : S 1 → S 1 is the map sending base to base and loop to loop -1 . The idea is quite simple. The map exchanging S n and S m has to swap every S 1 -factor of S m with every S 1 -factor of S n . Therefore in total we have nm permutations between two S 1 factors, so when nm is even they all cancel, and otherwise one remains. And it turns out that the map swapping the two factors of S 1 ∧ S 1 is equal to the map (-1) on S 2 .

We first consider the case n = m = 1.

Proposition 4.2.5. There is a filler of the diagram

S 1 ∧ S 1 S 1 ∧ S 1 S 2 S 2 σ S 1 ,S 1 (-1)
Proof. We have to construct an equality between the two functions

f : S 1 ∧ S 1 → S 1 ∧ S 1 , g : S 1 ∧ S 1 → S 1 ∧ S 1 ,
f (proj(x, y)) := proj(y, x), g(proj(x, y)) := proj(-x, y).

We prove that they are equal on points of the form proj(x, y) by double induction on x and y. When either x or y is base, both f (proj(x, y)) and g(proj(x, y)) are equal to S 1 ∧S 1 via either a proj l or a proj r . For the case (loop, loop), the idea is that we are given a square and we want to show that flipping it diagonally (using f ) or horizontally (using g) gives equal squares along some coherence operations.

If we start with the square

• • • • r p q s
then we consider the cube

• • • • • • • • r -1 q p r p r s p -1 q q s -1 s -1 (4.2.6)
The inner and outer faces are the diagonal and horizontal flipping of the square, and the four other sides are defined using the equalities

r • r -1 = p • p -1 , p -1 • p = s • s -1 , q • s -1 = q • s -1 , r • q = r • q.
In order to fill this cube we proceed by induction on the whole square. Another way to see it is to do a path induction on p, q and r, and then a fourth path induction on the square seen as the equality s = p -1 • r • q. Then we only have to fill the cube in the case where the square is the constant square with idp on all four sides. In that case, all of the sides of the cube are constant squares so we can take the constant cube. It concludes the proof that f and g are equal.

Note that the proof above works because we managed to write the cube 4.2.6 starting from an arbitrary square. There is no way to make a similar cube between the original square and its diagonal flipping, for instance.

We now prove that the maps (-1) are stable under smash product by S m on the right and by S 1 on the left. Proposition 4.2.7. For every n, m : N, there is a filler of the square

S n ∧ S m S n ∧ S m S n+m S n+m (-1)∧id S m ∧n,m ∧n,m (-1)
Proof. We proceed by induction on n. For n = 1 it is the definition of the map (-1) on S m+1 . For n + 1 we take the composition of the two squares

(S 1 ∧ S n ) ∧ S m (S 1 ∧ S n ) ∧ S m S 1 ∧ (S n ∧ S m ) S 1 ∧ (S n ∧ S m ) S n+m+1 S n+m+1 α S 1 ,S n ,S m (i∧id S n )∧id S m α S 1 ,S n ,S m id S 1 ∧(∧n,m) i∧(id S n ∧id S m ) id S 1 ∧(∧n,m) i∧id S n+m
where the top square comes from naturality of associativity of the smash product and the bottom square comes from the fact that id

S n ∧ id S m = id S n ∧S m .
Proposition 4.2.8. For every n : N, the map

id S 1 ∧ (-1) : S 1 ∧ S n → S 1 ∧ S n is equal to (-1) : S n+1 → S n+1 .
Proof. We proceed by induction on n. For n = 1 the proof is entirely analogous to the proof of proposition 4.2.5, except that we equate the vertical flipping of a square with its horizontal flipping. For n + 1 we take the composition of squares

S 1 ∧ (S 1 ∧ S n ) S 1 ∧ (S 1 ∧ S n ) (S 1 ∧ S 1 ) ∧ S n (S 1 ∧ S 1 ) ∧ S n (S 1 ∧ S 1 ) ∧ S n (S 1 ∧ S 1 ) ∧ S n S n+2 S n+2 α -1 S 1 ,S 1 ,S n id S 1 ∧(i∧id S n ) α -1 S 1 ,S 1 ,S n id (S 1 ∧S 1 )∧S n (id S 1 ∧i)∧id S n id (S 1 ∧S 1 )∧S n ∧ 2,n (i∧id S 1 )∧id S n ∧ 2,n (-1)
where the top one comes from naturality of associativity of the smash product, the middle one comes from the case n = 1 and the bottom one comes from proposition 4.2.7.

We now come back to the proof of proposition 4.2.4. Given n and m, we assume by induction that we have constructed a filler of the diagram for (n, 1) and for (n, m), and we construct one for (n, m+1). Let's consider the diagram 4.1 where we want to fill the upper square. The outer hexagon is the coherence hexagon between the commutator and the associator. The three curved squares come from the compatibility of the maps ∧ i,j with the associator (proposition 4.2.2). The lower left square is the smash product of the case (n, 1) with S m and the lower right square is the smash product of S 1 with the case (n, m). Finally, the inner diagram has a filler given by the equality (-1) nm •(-1) n = (-1) n(m+1) which can easily be verified. Finally, if the property is true for (n, m), then it is true for (m, n) as well. Combining that with the case above and the base case, we obtain that the property is true for every (n, m).

S n+m+1 S n+m+1 S n+m+1 S n+m+1 S n+m+1 S n+m+1 S 1 ∧ (S m ∧ S n ) (S 1 ∧ S m ) ∧ S n S n ∧ (S 1 ∧ S m ) (S n ∧ S 1 ) ∧ S m (S 1 ∧ S n ) ∧ S m S 1 ∧ (S n ∧ S m ) id (-1) n(m+1) id (-1) n id (-1) nm α S 1 ,S m ,S n σ S n ,S 1 ∧S m α S n ,S 1 ,S m σ S n ,S 1 ∧id S m α S 1 ,S n ,S m id S 1 ∧σ S n ,S m

Smash product and connectedness

The connectedness of a smash product is given by the following proposition.

Proposition 4.3.1. Given two pointed types A and B, if

A is m-connected and B is n-connected then A ∧ B is (m + n + 1)-connected.

Proof. Notice that the map i ∨

A,B : A ∨ B → A × B is the pushout-product of the two maps 1 → A and 1 → B, which are (m-1)-and (n-1)-connected, therefore proposition 3.2.8 shows that i ∨ A,B is (m + n)-connected. Given that we have a pushout square

A ∨ B A × B 1 A ∧ B i ∨ A,B
and that the top map is (m + n)-connected, we conclude that the map 1 → A ∧ B is (m + n)-connected as well and therefore A ∧ B is (m + n + 1)-connected.

For the smash product of maps, it's not as easy because the answer depends not only on the connectivity of the maps but also on the connectivity of the types. We first prove the following proposition.

Proposition 4.3.2. Given a pointed map

f : A → B and a pointed type C, if f is n f - connected and C is n C -connected then the map f ∧ id C : A ∧ C → B ∧ C is (n f + n C + 1)- connected.
As a sanity check, note that if C = 2, then f ∧ id C = f and n C = -1, and we do have

n f + n C + 1 = n f .
Proof. We consider P : B ∧ C → Type a family of (n f + n C + 1)-truncated types and

d : (x : A ∧ C) → P ((f ∧ id C )(x)).
According to proposition 3.2.9 and given that f is n f -connected, if we take an arbitrary c : C then the function

λs.s • f : b:B P (proj(b, c)) → a:A P (proj(f (a), c))
is (n C -1)-truncated. Note also that there is an element in the codomain given by d • proj(-, c). Let's now consider Q : C → Type such that Q(c) is the fiber of the function λs.s • f above over d • proj(-, c). We just proved that Q is a family of (n C -1)truncated types, therefore in order to construct a section of it it is enough to give an element of

Q( C ). An element of Q( C )
g( B , c) g(f ( A ), c) d(proj( A , c)) d( A∧C ) 4.3.3
(note that the last equality is a dependent equality over proj l (c)). Finally for proj rl we have to check that in the case c = C , the composition we just defined is equal to the one obtained by transporting d( A∧C ) along proj r ( B ), and this follows from the 2-dimensional equality for g(f (a), C ) mentioned above.

We can now compute the connectedness of a smash product of maps.

Proposition 4.3.5. Given two maps f : A → A and g :

B → B , if f is n f -connected, g is n g -connected, A is n A -connected and B is n B -connected, then f ∧ g is k-connected, where k = min(n f + n B + 1, n g + n A + 1).
Proof. We have

f ∧ g = (f ∧ id B ) • (id A ∧ g).
Chapter 5

Cohomology

In this chapter we introduce the cohomology groups with integer coefficients of a space, together with their additive and multiplicative structure, and we prove that they form a graded ring. This means that for every space X we define a sequence of abelian groups (H n (X)) n:N and a multiplication operation : H i (X) × H j (X) → H i+j (X) which is distributive over addition, associative, and graded-commutative in the sense that for every x : H i (X) and y : H j (X) we have

x y = (-1) ij (y x).
We also construct the Mayer-Vietoris sequence, and we compute the cohomology ring of a product of two spheres. We then define the Hopf invariant, which is an invariant of maps of the form S 2n-1 → S n constructed using the multiplicative structure of cohomology. Finally we show that the James construction provides functions of Hopf invariant 2 for every even n, which proves that all groups of the form π 4n-1 (S 2n ) are infinite and that π 4 (S 3 ) is equal to either Z/2Z or Z/1Z.

The usual definition of singular cohomology using singular cochains cannot be reproduced in homotopy type theory because defining the set of singular cochains requires taking the underlying set of a topological space which is not an operation invariant under homotopy equivalence, hence it cannot exist in homotopy type theory. We define cohomology instead via the Eilenberg-MacLane spaces K(Z, n), which can be defined directly very easily by truncating the spheres. It is also possible to define the Eilenberg-MacLane spaces K(G, n) for an arbitrary group G (abelian if n ≥ 2), as was shown by Dan Licata and Eric Finster in [START_REF] Daniel | Eilenberg-MacLane Spaces in Homotopy Type Theory[END_REF], and to use them to define cohomology with coefficients in G. However, given that we only use cohomology with integer coefficients in this work and that the definition of K(Z, n) is much simpler, we restrict ourselves to this case. For readability, we only write

K n instead of K(Z, n).
It is well-known that this definition of cohomology is the right one in homotopy type theory, but the multiplicative structure and everything which depends on it is new to our knowledge. The Mayer-Vietoris sequence has already been studied by Evan Cavallo in homotopy type theory in [START_REF] Cavallo | Synthetic Cohomology in Homotopy Type Theory[END_REF], but with a rather different approach. His construction starts from the Eilenberg-Steenrod axioms for cohomology and uses extensively the 103 cubical machinery whereas the construction presented here is more concrete.

The cohomology ring of a space

Definition 5.1.1. For n : N, the type K n is the n-truncated and (n -1)-connected pointed type defined by

K 0 := Z, K n := S n n for n ≥ 1.
An important property of the family (K n ) is that K n is equivalent to ΩK n+1 for every n : N. Proposition 5.1.2. For every n : N, there is an equivalence σ n : K n ΩK n+1 and, when n ≥ 1, a filler of the diagram

S n ΩΣS n K n ΩK n+1 ϕ S n |-| Ω|-| σn ∼ Proof. We define σ n by σ 0 (k) := (ap |-| (loop)) k , σ n (|x|) := ap |-| (ϕ S n (x)) for n ≥ 1,
and the diagram is filled by idp. We now have to prove that σ n is an equivalence. For n = 0, we proved it in section 2.2. For n ≥ 1, the composition

K n = S n n ΩS n+1 n Ω S n+1 n+1 = ΩK n+1 ϕ S n n ∼
is equal to σ n , hence it is enough to prove that ϕ S n n is an equivalence. For n = 1, we know from section 2.5 that the map d : ΩS 2 → S 1 sending p to transport Hopf (p, base) has fiber ΩS 3 and, hence, is 1-connected. Moreover, for every x : S 1 we have

transport Hopf (ϕ S 1 (x), base) = transport Hopf (merid S 1 (x) • merid S 1 (base) -1 , base) = transport Hopf (merid S 1 (base) -1 , transport Hopf (merid S 1 (x), base)) = transport Hopf (merid S 1 (x), base) = µ(base, x) = x,
which shows that the composition

S 1 ΩS 2 S 1 ϕ S 1 d
is equal to the identity function. Given that the map d 1 is an equivalence, the map ϕ S 1 1 is an equivalence as well, which concludes the case n = 1.

For n ≥ 2, the Freudenthal suspension theorem states that the map ϕ S n : S n → ΩS n+1 is (2n-2)-connected, and we have 2n-2 ≥ n; hence, ϕ S n n is an equivalence. Definition 5.1.3. Given a type X and n : N, the n-th cohomology group of X is the type

H n (X) := X → K n 0 ,
and, if X is pointed, the n-th reduced cohomology group of X is the type

H n (X) := X → K n 0 .
Note that for every type X we have H n (X) H n (X 1), where X 1 is pointed by inr( 1 ), given that a map from X to K n can be seen as a pointed map from X 1 to K n . Elements of H n (X) can also be seen as elements of H n (X) by forgetting the pointedness.

We now construct the group structure on cohomology groups. The idea is to construct the whole structure on K n and then lift it to H n (X). We write 0 for Kn . Proposition 5.1.4. There are two maps + : K n × K n → K n and -: K n → K n , and equalities

x + 0 = x, 0 + x = x, x + (-x) = 0, (-x) + x = 0, (x + y) + z = x + (y + z),
x + y = y + x, for every x, y, z : K n .

Proof. We use the equivalence K n ΩK n+1 . We define the addition of two elements x and y of K n as the composition of the corresponding loops in ΩK n+1 , and the opposite of an element of K n as the inverse of the corresponding loop. Note that Kn corresponds to the constant path of ΩK n+1 . The unit laws, inverse laws, and associativity law come from the corresponding facts about paths, and commutativity comes from the Eckmann-Hilton argument (proposition 2.1.6), given that ΩK n+1 is equivalent to the double loop space Ω 2 K n+2 . Definition 5.1.5. Given a type X and a natural number n, we equip H n (X) with the structure of abelian group given by + :

H n (X) × H n (X) → H n (X), |α| + |β| := |λx.(α(x) + β(x))|, -: H n (X) → H n (X), -|α| := |λx.(-α(x))|, 0 : H n (X), 0 := |λx.0|.
The group laws are proved in a similar fashion. For instance we prove associativity by

a : (α, β, γ : H n (X)) → (α + β) + γ = α + (β + γ), a(|α|, |β|, |γ|) := ap |-| (funext(λx.a (α(x), β(x), γ(x)))),
where a is associativity of + on K n . We also equip H n (X) with the structure of abelian group defined in the exact same way, and the forgetful map from H n (X) to H n (X) is a group homomorphism.

For the multiplicative structure, we first define a map :

K i ∧ K j → K i+j . It induces a map K i × K j → K i+j
by composition with proj which then induces a product on cohomology groups called the cup product:

: H i (X) × H j (X) → H i+j (X).
Definition 5.1.6. For every i, j : N * , there is a map : K i ∧ K j → K i+j together with a filler of the square This definition doesn't work when either i or j is equal to 0, because then we have K 0 = Z, which is not equal to S 0 0 . In those cases we define the cup product by

S i ∧ S j S i+j K i ∧ K j K i+j ∧ i,j |-| i ∧|-| j |-| i+j
: K 0 ∧ K j → K j , n β := β + • • • + β (n terms), : K i ∧ K 0 → K i , α m := α + • • • + α (m terms).
These two definitions are consistent in the case i = j = 0 because multiplication of integers is commutative.

Proposition 5.1.7. The collection of maps : K i ∧ K j → K i+j we just defined is distributive with respect to addition, graded-commutative, and associative.

Proof. Distributivity Given x : K n and y, z : K m we want to prove that

x (y + z) = (x y) + (x z).
If m = 0, it's clear, so we assume now m > 0. The idea is to show that we can assume that either y or z is equal to 0. Distributivity is equivalent to giving a filler of the diagram

K n ∧ (K m × K m ) K n ∧ K m (K n ∧ K m ) × (K n ∧ K m ) K n+m × K n+m K n+m Kn∧+ × +
where the map on the left sends proj(x, (y, z)) to (proj(x, y), proj(x, z)).

The map i ∨ Km,Km : K m ∨ K m → K m × K m is (2m -2)-connected; therefore, the map f : K n ∧ (K m ∨ K m ) → K n ∧ (K m × K m ), f (proj(x, inl(y))) := proj(x, (y, 0)), f (proj(x, inr(z))) := proj(x, (0, z)) is (n + 2m -2)-connected.
Given that what we have to prove is (n + m -1)-truncated and that n + 2m -2 ≥ n + m -1, it is enough to prove commutativity of the diagram for elements given by f . For an element of the form proj(x, inl(y)), we have to prove

x (y + 0) = (x y) + (x 0), which is true because y + 0 = y and x 0 = 0. It is true in the same way for elements of the form proj(x, inr(z)).

Graded commutativity Given x : K i and y : K j , we want to prove that

x y = (-1) ij y x.

If either i or j is equal to 0, it is immediate from the definition of the cup product by an element of degree 0. We assume now that i and j are positive and we consider the diagram

S i ∧ S j S j ∧ S i K i ∧ K j K j ∧ K i S i+j S i+j K i+j K i+j ∧ i,j ∧ j,i (-1) ij (-1) ij
where we have to fill the front face. The left and right faces are filled by definition of the cup product. The back face is filled by proposition 4.2.4. The top face is filled by naturality of commutativity of the smash product. The bottom face is filled by definition of (-1) on K i+j . This is not yet enough to fill the front face, it only gives a filler of it after composition with the map S i ∧ S j → K i ∧ K j . But that map is (i + j)-connected and we want to construct an equality in K i+j which is (i + j)-truncated. Therefore, proposition 2.3.8 gives a filler of the front face.

Associativity Given x : K i , y : K j and z : K k , we want to prove that (x y) z = x (y z).

If either i, j, or k is equal to 0, it follows from distributivity. For instance we have

(n x) y = (x + • • • + x) y = x y + • • • + x y = n (x y).
We assume now that i, j, and k are positive and we consider the diagram

(S i ∧ S j ) ∧ S k S i+j ∧ S k (K i ∧ K j ) ∧ K k K i+j ∧ K k S i+j+k S i ∧ (S j ∧ S k ) S i ∧ S j+k K i+j+k K i ∧ (K j ∧ K k ) K i ∧ K j+k ∧id K k id K i ∧
We want to fill the front face, and proposition 4.2.2 gives a filler of the back face. The left square is filled by naturality of associativity of the smash product, the top-right and bottom-right squares are filled by definition of the cup product, and the top-left and bottom-left squares are filled by definition of the cup product and naturality of the smash product. The map

(S i ∧ S j ) ∧ S k → (K i ∧ K j ) ∧ K k is (i + j + k)
-connected, and we want to construct an equality in K i+j+k , which is (i + j + k)-truncated. Therefore, we get a filler of the front face of the diagram.

This concludes the construction of the structure of graded ring on cohomology. Moreover, as we see now, the operation associating the cohomology ring to a space is a contravariant functor. Definition 5.1.8. Given n : N and a map f :

X → Y , we define f * : H n (Y ) → H n (X) by f * : H n (Y ) → H n (X), f * (|β|) := |β • f |.
Similarly, if X and Y are pointed and f : X → Y is a pointed map, we have f * : H n (Y ) → H n (X) defined in the same way.

The following proposition is straightforward given that all operations are defined first on K n and then transferred to H n (X) by composition.

Proposition 5.1.9. For every n, m :

N, f : X → Y , g : Y → Z, β : H n (Y ), β : H n (Y ) and γ : H m (Y ), we have • (id X ) * = id H n (X) and (g • f ) * = f * • g * , • f * (0 H n (Y ) ) = 0 H n (X) , f * (-β) = -f * (β) and f * (β + β ) = f * (β) + f * (β ), • f * (β γ) = f * (β) f * (γ).

The Mayer-Vietoris sequence

The Mayer-Vietoris sequence is a long exact sequence relating the cohomology groups of a pushout A C B with those of A, B, and C. We prove a "half-reduced" version of the Mayer-Vietoris sequence which allows us to deduce easily both the unreduced version of the Mayer-Vietoris sequence and the long exact sequence of a cofiber.

We consider three types A, B, and C, with A pointed, and two functions f : C → A and g : C → B. We define D := A C B pointed by D := inl( A ). We define the maps

i : H n (D) → H n (A) × H n (B), ∆ : H n (A) × H n (B) → H n (C), i(δ) := (inl * (δ), inr * (δ)), ∆(α, β) := f * (α) -g * (β), and
d : H n (C) → H n+1 (D), d(|γ|) := d(γ),
where

d : (C → K n ) → (D → K n+1 ), d(γ)(inl(a)) := 0, d(γ)(inr(b)) := 0, ap d(γ) (push(c)) := σ n (γ(c)),
where in the last line we see γ(c) as an element of ΩK n+1 via the equivalence σ n : K n ΩK n+1 . The first thing to note is that i, ∆ and d are group homomorphisms. It's obvious for i and ∆, and for d it follows from the fact that

ap d(|γ|+|γ |) (push(c)) = σ n (γ(c) + γ (c)) = σ n (γ(c)) • σ n (γ (c)) = ap d(|γ|) (push(c)) • ap d(|γ |) (push(c)) = ap d(|γ|)+d(|γ |) (push(c)).
We then have the following sequence of groups and homomorphisms of groups, which starts at H 0 (D) and then extends infinitely.

H n+1 (D) H n+1 (A) × H n+1 (B) H n+1 (C) H n (D) H n (A) × H n (B) H n (C) H n-1 (D) H n-1 (A) × H n-1 (B) H n-1 (C) i ∆ i ∆ d i ∆ d (5.

Ker(i) ⊂ Im(d)

A map f from D to K n+1 is in the kernel of i if and only if both f • inl and f • inr are equal to 0. Given such a map we construct a map from C to ΩK n+1 by sending c to ap f (push(c)) composed with the equalities from the hypothesis. This gives a map from C to K n after composition with σ -1 n and we can easily check that its image by f is equal to d.

Im(i) ⊂ Ker(∆) Given δ : D → K n ,
Im(∆) ⊂ Ker(d) Given α : A → K n and β : B → K n , we have d(∆(|α|, |β|)) = d(f * (|α|) -g * (|β|)) = d(f * (|α|)) -d(g * (|β|)) = d(|α • f |) -d(|β • g|) = d(α • f ) -d(β • g).
We show that d(α • f ) is equal to 0, and a similar proof apply to d(β • g). We proceed by induction on the argument, which is of type D.

• For an element of the form inl(a), we use the path σ n (α(a)) : ΩK n+1 between d(α • f )(inl(a)) and 0 and the fact that d(α • f )(inl(a)) is equal to 0 by definition. It might be tempting to take the constant path instead, but then the induction wouldn't work for the push(c) case.

• For an element of the form inr(b), we use the constant path.

• For a path of the form push(c), we have to prove that σ n (α(f (c))) is equal to the constant path, along ap d(α•f ) (push(c)), which is also equal to σ n (α(f (c))), hence it works.

Ker(d) ⊂ Im(∆)

Given a map γ : C → K n the hypothesis d(γ) = 0 is an equality between two functions from D to K n+1 . If we look at what that means for each constructor of D, we get

α : A → ΩK n+1 , β : B → ΩK n+1 , c : (c : C) → α(f (c)) -1 • σ n (γ(c)) • β(g(c)) = idp.
This gives us α and β, and, moreover, we have

f * (|α|) -g * (|β|) = |γ| because α(f (c)) • β(g(c)) -1 = σ n (γ(c)).
In the special case where we have a pushout of the form C f = 1 A B for some map f : A → B, we obtain the following long exact sequence relating the cohomology of A and B with the reduced cohomology of C f , where i is the inclusion B → C f .

H n+1 (C f ) H n+1 (B) H n+1 (A) H n (C f ) H n (B) H n (A) H n-1 (C f ) H n-1 (B) H n-1 (A) i * f * i * f * d i * f * d
We also obtain the unreduced Mayer-Vietoris sequence, which is formally identical to the Mayer-Vietoris sequence 5.2.1 with the exception that all reduced cohomology groups are replaced by regular cohomology groups. The idea is to apply the Mayer-Vietoris sequence 5.2.1 to A := 1 + A and to notice that H n (A )

H n (A) and that

H n (D ) H n (D) because D := (1 + A) C B 1 + (A C B) 1 + D.

Cohomology of products of spheres

Proposition 5.3.1. The cohomology groups of the point are

H k (1) Z if k = 0, 0 otherwise. Proof. We have (1 → K k ) K k , which is equal to Z for k = 0 and is connected otherwise.
The cohomology of spheres is easy to compute using the Mayer-Vietoris sequence.

Proposition 5.3.2. For n > 0 we have

H k (S n ) Z if k = n or k = 0, 0 otherwise.
We write c n for the generator of H n (S n ).

Proof. It follows easily, by induction, from the application of the Mayer-Vietoris sequence to the pushout S n := 1 S n-1 1.

Note that the cup product of c n with itself in H n (S n ) vanishes because it is an element of H 2n (S n ) which is the trivial group. We now look at the cohomology of a product of two spheres.

Proposition 5.3.3. Given n, k : N, the cohomology groups of S n × S k are generated (additively) by

1 : H 0 (S n × S k ), x : H n (S n × S k ), y : H k (S n × S k ), z : H n+k (S n × S k ).
Note that n and k may be equal, which is why we state it in this way. Moreover in the diagram

S n S n × S k S n , in:x →(x, S k ) pn:(x,y) →x
the map p * n sends c n to x and the map i * n sends x (resp. y) to c n (resp. to 0). Similarly, in the diagram

S k S n × S k S k , i k :y →( S n ,y) p k :(x,y) →y
the map p k * sends c k to y and the map i k * sends y (resp. x) to c k (resp. to 0). Finally, we have

x x = 0, y y = 0, x y = z.
Proof. For the additive structure, we use the Mayer-Vietoris sequence and the fact that

S n × S k 1 S n+k-1 (S n ∨ S k ),
S n × S k → S n ∧ S k → S n+k induces an isomorphism on H n+k .
By definition, the cup product of x and y corresponds to the composition

S n × S k S n × S k S n ∧ S k S n+k K n+k . (x,y) →(x,y) proj ∼ |-|
Note that the first map is the identity function because it's the pairing of the two projections, the first projection coming from x and the second from y. Therefore, we have x y = z.

The cup product of x with itself corresponds to the composition

S n × S k S n × S n S n ∧ S n S 2n K 2n .
S

∼ |-| x →(x,x) n (x,y) →(x,x) (x,y) →x proj
But the first map factors through S n which has no cohomology in dimension 2n, therefore

x x = 0, and similarly y y = 0.

The Hopf invariant

Given a map f : S k → S n , we can consider the pushout 1 S k S n , which has cohomology Z in dimensions 0, n and k + 1 (using the Mayer-Vietoris sequence). The cup product structure on this space is often trivial, unless k = 2n -1 in which case the square of the generator in dimension n may be a nontrivial multiple of the generator in dimension 2n. This is what we study in this section. Definition 5.4.1. Given a pointed map f : S 2n-1 → S n , we define

C f := 1 S 2n-1 S n , α f := (i * ) -1 (c n ) : H n (C f ), β f := p * (c 2n ) : H 2n (C f ),
where i : S n → C f is the inclusion on the right and p : C f → S 2n is the map collapsing the S n term in 1 S 2n-1

S n to a point. The Mayer-Vietoris sequence shows that the map i * induces an isomorphism on H n and that the map p * induces an isomorphism on H 2n , hence the elements α f and β f are generators of the respective cohomology groups.

Definition 5.4.2. The Hopf invariant of a pointed map f : S 2n-1 → S n is the integer

H(f ) : Z such that α 2 f = H(f )β f ,
where

α 2 f is α f α f .
Note that, if n is odd, we have α 2 f = -α 2 f by graded-commutativity; therefore, the Hopf invariant of any map f : S 2n-1 → S n is 0.

Proposition 5.4.3. The Hopf invariant H : π 2n-1 (S n ) → Z is a homomorphism of groups.
Proof. Let f and g be two pointed maps from S 2n-1 to S n . The sum of f and g when seen as elements of π 2n-1 (S n ) is represented by the map

f + g : S 2n-1 S 2n-1 ∨ S 2n-1 S n . θ f ∨g
Let's consider the type C f ∨g defined by the pushout

S 2n-1 ∨ S 2n-1 S n 1 C f ∨g f ∨g i
The cohomology groups of C f ∨g are Z in dimensions 0 and n, Z 2 in dimension 2n, and the trivial group otherwise. We denote by α f ∨g the generator in dimension n coming from i and by β f f ∨g and β g f ∨g the two generators in dimension 2n coming from the two S 2n-1 terms. The three maps θ, inl and inr of type S 2n-1 → S 2n-1 ∨ S 2n-1 induce three maps q :

C f +g → C f ∨g , j f : C f → C f ∨g and j g : C g → C f ∨g satisfying q * (α f ∨g ) = α f +g , j * f (α f ∨g ) = α f , j * g (α f ∨g ) = α g , q * (β f f ∨g ) = β f +g , j * f (β f f ∨g ) = β f , j * g (β f f ∨g ) = 0, q * (β g f ∨g ) = β f +g , j * f (β g f ∨g ) = 0, j * g (β g f ∨g ) = β g .
Given that the square of α f ∨g is an element of H 2n (C f ∨g ), it is a linear combination of β f f ∨g and β g f ∨g i.e. there are two natural numbers x and y such that

α 2 f ∨g = xβ f f ∨g + yβ g f ∨g .
By applying j * f to this equation we obtain α 2 f = xβ f , hence x = H(f ). Similarly we get y = H(g). Therefore, we can compute the square of α f +g :

α 2 f +g = q * (α f ∨g ) 2 = q * (α 2 f ∨g ) = q * (H(f )β f f ∨g + H(g)β g f ∨g ) = (H(f ) + H(g))β f +g .
This shows that H(f + g) = H(f ) + H(g) and that H is a group homomorphism. Proposition 5.4.4. If n is even, then the Hopf invariant of the map

∇ S n • W n,n : S 2n-1 → S n is equal to 2.
Proof. We consider the space C ∇ S n •Wn,n and we write α := α ∇ S n •Wn,n and β := β ∇ S n •Wn,n for short. We saw in proposition 3.4.4 that C ∇ S n •Wn,n is equivalent to the pushout

S n ∨ S n S n × S n S n J 2 (S n ) q i
via the sequence of equivalences

C ∇•Wn,n 1 S 2n-1 S n (1 S 2n-1 (S n ∨ S n )) S n ∨S n S n (S n × S n ) S n ∨S n S n J 2 (S n ).
This shows that the map i * : H n (J 2 (S n )) → H n (S n ) sends α to c n and the map q * : H 2n (J 2 (S n )) → H 2n (S n × S n ) sends β to x y, where x and y are the two generators of H n (S n × S n ) given by proposition 5.3.3.

The composition of q : S n × S n → J 2 (S n ) with any of the two inclusions S n → S n × S n is homotopic to the map i : S n → J 2 (S n ). Therefore, q * (α) = x + y : H n (S n × S n ). Moreover we have x y = y x by graded-commutativity, because we assumed n even, and then

q * (α 2 ) = q * (α) 2 = (x + y) (x + y) = (x x) + (x y) + (y x) + (y y) = 2(x y) = 2q * (β) = q * (2β).
Finally, we know that q * is an equivalence on H 2n , which shows that α 2 = 2β and that the Hopf invariant of the map ∇ S n • W n,n : S 2n-1 → S n is equal to 2. This allows us to define new non-trivial elements in the homotopy groups of spheres.

Proposition 5.4.5. For every n ≥ 1, the group π 4n-1 (S 2n ) is infinite.

Proof. We define a group homomorphism h from Z to π 4n-1 (S 2n ) sending 1 to the element corresponding to the function ∇ • W 2n,2n : S 4n-1 → S 2n . For every n : Z we have H(h(n)) = 2n, hence all the h(n) are different, which shows that π 4n-1 (S 2n ) is infinite.

Proposition 5.4.6. The natural number n satisfying π 4 (S 3 ) Z/nZ is equal to either 1 or 2.

Proof. By definition of n in proposition 3.4.5, we have [i 2 , i 2 ] = ±nη in π 3 (S 2 ), for η a generator of π 3 (S 2 ). Applying the Hopf invariant to this equality we get

2 = H([i 2 , i 2 ]) = H(±nη) = ±nH(η),
which shows that n divides 2 and that, therefore, it is equal to either 1 or 2.

What is missing to prove that n is equal to 2 is to know whether there is an element of π 3 (S 2 ) of Hopf invariant 1. More exactly we have the following.

Corollary 5.4.7. We have π 4 (S 3 ) Z/2Z if and only if there exists a map S 3 → S 2 of Hopf invariant ±1. Otherwise π 4 (S 3 ) is the trivial group.

Proof. If π 4 (S 3 ) Z/2Z, then the computation above shows that any generator of π 3 (S 2 ) has Hopf invariant ±1. Conversely, if there is a map η : S 3 → S 2 of Hopf invariant ±1, then the Hopf invariant homomorphism H : π 3 (S 2 ) → Z sends η to ±1, which shows that η is a generator of π 3 (S 2 ). The computation above then shows that π 4 (S 3 ) Z/2Z.

Chapter 6

The Gysin sequence

We now present a tool called the Gysin sequence, which gives some information on the cup product structure of a space, given a fibration of spheres over it. More precisely, given a fibration

S n-1 E B p
where B is 1-connected, we prove that there is an element e : H n (B) and a long exact sequence

. . . H i-1 (E) H i-n (B) H i (B) H i (E) . . . , e p *
where the middle arrow is the operation of cup product by e. We then define the complex projective plane CP 2 using the Hopf map, and we construct a fibration of circles over CP 2 with total space S 5 . The Gysin sequence allows us to compute the cohomology of CP 2 , to show that the Hopf invariant of the Hopf map is ±1, and, therefore, that π 4 (S 3 ) Z/2Z. The projective spaces CP n have also independently been defined in homotopy type theory by Ulrik Buchholtz and Egbert Rijke.

The Gysin sequence

The following proposition is the main ingredient in the construction of the Gysin sequence. It relates the cup product in dimensions (n, m) with the one in dimensions (n + 1, m). Proposition 6.1.1. Given n, m : N, p : K n and y : K m , we have the equality

ap λx.x y (σ n (p)) = σ n+m (p y).
Note that the cup product on the left is the one in dimensions (n + 1, m) while the one on the right is the one in dimensions (n, m).

Proof. For n = 0, we have p : Z and we write k := p in order to remember that it is an integer. We then have σ 0 (p) = ap |-| (loop) k and what we want to prove is

ap λx.x y (ap |-| (loop) k ) = σ m (ky).
The left-hand side is equal to ap λx.|x| y (loop) k and the right-hand side is equal to σ m (y) k . Therefore it is enough to prove that ap λx.|x| y (loop) = σ m (y) for all y : S m m . What we have to prove is an (m -1)-type, so we can assume that y is of the form |z| for z : S m . Let's consider the diagram

Ω(S 1 ∧ S m ) ΩS m+1 Ω(K 1 ∧ K m ) ΩK m+1
which is obtained by looping the diagram defining the cup product in definition 5.1.6. If we start with ap proj(-,z) (loop) on the top left and go down and then right, we obtain ap λx.|x| |z| (loop) while going right and then down gives ap |-|m (ϕ S m (z)) which is equal to σ m (|z|).

For n > 0, we want to fill the front face of the diagram

S n ∧ S m S n+m K n ∧ K m K n+m (ΩΣS n ) ∧ S m ΩK n+1 ∧ K m Ω((ΣS n ) ∧ S m ) ΩΣS n+m Ω(K n+1 ∧ K m ) ΩK n+m+1 Ω
where the two vertical maps of the form ΩA

∧ B → Ω(A ∧ B) send (p, b) to ap proj(-,b) (p).
The top and bottom squares are filled by definition of the cup product. The rectangle on the right and the upper-left square are filled by definition of σ n . The lower-left square is filled by naturality of the family of maps ΩA ∧ B → Ω(A ∧ B). The back rectangle is filled by proposition 4.2.3. Therefore, given that the map

S n ∧ S m → K n ∧ K m is (n + m)-connected
and that what we want to prove is (n + m)-truncated, the result follows.

The main technical result of this section is the following. Proposition 6.1.3 (Thom isomorphism). Given a map c : (b :

B) → (Q(b) → K n ) such that c B is a generator of H n (S n ), the map Φ : H i (B) → H i+n ( E), Φ(|β|) := |ι i+n (λb, x.β(b) c b (x))|
is an isomorphism of groups. Moreover, such a c always exists if B is 1-connected.

Proof. Applying proposition 6.1.2 to Q, we obtain that Φ is an equivalence and that c always exists if B is 1-connected. The map Φ is a group homomorphism by distributivity of the cup product and because ι i+n preserves the group structure.

We can finally construct the Gysin sequence. Let's consider a 1-connected pointed type B and a fibration P : B → Type such that P ( B ) = S n-1 . We write E for the total space of P , p : E → B for the projection and E for the cofiber of p. The long exact sequence of the cofiber of p is

. . . H i ( E) H i (B) H i (E) H i+1 ( E) . . . , j * p *
where j is the inclusion B → E. The Thom isomorphism gives a map c : (b : Therefore we get the Gysin sequence. Proposition 6.1.4 (Gysin sequence). There is an element e : H n (B) and a long exact sequence

B) → (Q(b) → K n ) together with an isomorphism Φ : H i-n (B) H i ( E), and the induced map H i-n (B) → H i (B) is H i-n (B) → H i (B), |β| → j * (Φ(|β|)) = j * (|ι i+n (λb, x.β(b) c b (x))|) = |λb .ι i+n (λb, x.β(b) c b (x))(j(b ))| = |λb .(λb, x.β(b) c b (x))(b , south Q(b ) )| = |λb .β(b ) c b (south Q(b ) )| = |β| e,
. . . H i-1 (E) H i-n (B) H i (B) H i (E) . . . e p *

The iterated Hopf construction

We saw in chapter 2 that to every H-space A we can associate a fibration over ΣA with fiber A and total space A * A. We now prove that if we assume additionally that the Hspace structure is associative, then we can iterate this construction once, by constructing a fibration over 1 A * A ΣA with fiber A and total space A * A * A. Definition 6.2.1. An associative H-space is an H-space (A, µ) equipped with a map

α : (x, y, z : A) → µ(µ(x, y), z) = µ(x, µ(y, z))
and a filler of the diagram

µ(µ( A , y), z) µ( A , µ(y, z)) µ(y, z) α A ,y,z ap µ(-,z) (µ l (y)) µ l (µ(y,z))
If A is connected, then the three other triangles follow from this one, but we do not need them here. Proposition 6.2.2. Given a connected associative H-space A, there is a fibration over 1 A * A ΣA (where the map A * A → ΣA is induced by the Hopf construction on A) with fiber A, and whose total space is equivalent to A * A * A.

Proof. We recall that the Hopf construction is the fibration H : ΣA → Type defined by

H(north) := A, H(south) := A,
ap H (merid(y)) := ua(µ(-, y)).

Its total space is equivalent to the pushout A A×A A of the span

A A × A A fst µ
via the map

ψ : A A×A A → x:ΣA H(x), ψ(inl(x)) := (north, x), ψ(inr(z)) := (south, z), ap ψ (push(x, y)) := (merid(y), ψ push (x, y)),
where ψ push (x, y) : x = H merid(y) µ(x, y) comes from the fact that transport H (merid(y), x) = µ(x, y). The induced map h :

A A×A A → ΣA is defined by h(inl(x)) := north, h(inr(z)) := south, ap h (push(x, y)) := merid(y).
We first prove the following proposition.

THE ITERATED HOPF CONSTRUCTION

123 Proposition 6.2.3. There is a map ν : (x : A A×A A) → A H(h(x)) such that for every a : A, the map

ν a : A A×A A → x:ΣA H(x), ν a (x) := (h(x), ν(x, a))
is an equivalence.

Proof. We define ν by

ν(inl(x)) := µ(-, x), ν(inr(z)) := µ(-, z), ap ν (push(x, y)) := ν push (x, y),
where ν push (x, y) is a filling of the square

A A A A id A µ(-,x) µ(-,µ(x,y)) µ(-,y)
In other words, ν push (x, y) proves that for every a : A, we have

µ(µ(a, x), y) = µ(a, µ(x, y)),
which we have by associativity of the H-space structure.

In order to prove that ν a is an equivalence for every a : A, it is enough to do it in the case a = A because A is connected. We now show that ν A is equal to the function ψ : A A×A A → x:ΣA H(x) by induction on the argument.

• For inl(x), we have

ν A (inl(x)) = (north, µ( A , x)) via µ l (x) = (north, x) = ψ(inl(x)).
• For inr(z), we have

ν A (inr(z)) = (south, µ( A , z)) via µ l (z) = (south, z) = ψ(inr(z)).
• For push(x, y), using the fact that ap H (merid(y)) = µ(-, y) we have to give a filling of the square

µ(µ( A , x), y) µ( A , µ(x, y)) µ(x, y) µ(x, y)
which follows from the fact that A is an associative H-space.

We now define P : 1 A A×A A ΣA → Type by P (inl( 1 )) := A, P (inr(y)) := H(y), ap P (push(x)) := ν(x).

The total space of P is equivalent to the pushout of the span

A A × (A A×A A) x:ΣA H(x), fst (a,x) →ν a (x)
and we have the equivalence of spans

A A × (A A×A A)
x:ΣA

H(x)

A A ×

x:ΣA

H(x)

x:ΣA

H(x) id fst (a,x) →ν a (x) (a,x) →(a,ν a (x)) id fst snd
where the inverse of the middle map is the map (a, y) → (a, ν -1 a (y)). Therefore, the total space of P is equivalent to the join of A and x:ΣA H(x). But we already know that the total space of H is equivalent to A * A; hence, the total space of P is equivalent to A * A * A.

The complex projective plane

Proposition 6.3.1. The H-space structure on the circle is associative.

Proof. We want to prove that for every x, y, z : S 1 , we have µ(µ(x, y), z) = µ(x, µ(y, z)). We proceed first by induction on x.

For base, we have µ(µ(base, y), z) = µ(y, z) = µ(base, µ(y, z)) by definition, so we can just use the constant path. For loop, we have to prove that ap µ(-,z) (loop y ) = loop µ(y,z) . We proceed again by induction on y.

For base we have ap µ(-,z) (loop base ) = ap µ(-,z) (loop) = loop z and loop µ(base,z) = loop z , so it's true, and for loop we have to construct a 3-dimensional path in S 1 and S 1 is 1connected, so it's immediate. Moreover the commutativity of the triangle is immediate because both α base,y,z and µ l (-) are constant paths.

We now define the complex projective plane as CP 2 := 1 S 3 S 2 , where the map S 3 → S 2 is the Hopf map. Its cohomology groups are Z in dimensions 0, 2 and 4, and the trivial group otherwise, and the iterated Hopf construction on the circle gives us a fibration K over CP 2 with fiber S 1 and total space S 1 * S 1 * S 1 , which is equivalent to S 5 . Proposition 6.3.2. The Hopf invariant of the Hopf map S 3 → S 2 is equal to ±1. v Proof. We apply the Gysin sequence to the fibration over CP 2 defined by the iterated Hopf construction as above. We obtain a cohomology class e : H 2 (CP 2 ) and the two short exact sequences

0 H 1 (S 5 ) H 0 (CP 2 ) H 2 (CP 2 ) H 2 (S 5 ) 0, 0 H 3 (S 5 ) H 2 (CP 2 ) H 4 (CP 2 ) H 4 (S 5 ) 0. e e
From the first one we see that e is a generator of H 2 (CP 2 ), and from the second one we see that e e is a generator of H 4 (CP 2 ). Therefore, the Hopf invariant of the Hopf map is equal to ±1.

We have found a map S 3 → S 2 of Hopf invariant ±1, so we can conclude.

Corollary 6.3.3. We have π 4 (S 3 ) Z/2Z and more generally π n+1 (S n ) Z/2Z for every n ≥ 3.

Proof. We apply corollary 5.4.7 to the Hopf map, which is of Hopf invariant ±1, and we obtain that π 4 (S 3 ) Z/2Z. We then apply the Freudenthal suspension theorem, more precisely corollary 3.4.2, and we obtain that π n+1 (S n ) Z/2Z for every n ≥ 3.

Conclusion

In this thesis we saw that homotopy type theory is powerful enough to prove that π 4 (S 3 ) Z/2Z. Even though from the point of view of classical homotopy theory this is a well-known result, it was not obvious that the univalence axiom and higher inductive types would suffice to prove it and that a constructive and purely homotopytheoretic proof exists at all. Moreover, taking into account the fact that it has been only about five years between the definition of the circle in homotopy type theory and the computation of π 4 (S 3 ), the progress has been rather quick, and one can hope that in a few years homotopy type theory will have reached a level comparable to that of classical homotopy theory and will help to obtain completely new results.

Comparison with classical proofs

As mentioned before, the main difference between classical homotopy theory and homotopy type theory is that, in homotopy type theory, everything is homotopy-invariant. I have used the book [START_REF] Hatcher | Algebraic Topology[END_REF], presenting classical algebraic topology, quite regularly during this research, but I often had to find completely different definitions, proofs or statements that would work in homotopy type theory.

In the construction of the universal cover of the circle and of the Hopf fibration, the most obvious difference is that, instead of defining a map from the total space to the base space, we define directly the fibers and how to transport along the fibers, and determining the total space is the non-trivial part. For the universal cover of the circle it is rather transparent, but for the Hopf fibration it wasn't clear to me at first that defining it with the multiplication on S 1 would indeed give the Hopf fibration.

Proving that the smash product is associative isn't easy, neither in homotopy type theory nor in classical homotopy theory, but for very different reasons. In homotopy type theory the problem comes from the fact that we have many different paths and higher paths to manage and that it quickly becomes complicated to take care of all coherences between them. In point-set topology, however, there is already a canonical bijection between the two spaces, but the problem is that it may not be continuous unless we assume that the spaces are nice enough. The difference is that in point-set topology we literally identify various points together, which makes the bijection easy to define but might mess up the topology, whereas in homotopy type theory we add new paths instead of identifying points.

For cohomology we already mentioned the need to use Eilenberg-MacLane spaces instead of the classical definition via singular cochains, as the set of singular cochains is not a homotopy invariant of a space. The notion of truncations gives a very nice definition of the Eilenberg-MacLane spaces K(Z, n) and a very nice definition of the cup product. Note that, when working constructively, there are some unexpected phenomena related to cohomology. Indeed, without some version of the axiom of choice, it is not possible to prove the additivity axiom of cohomology. Even the cohomology group H 1 (N, Z) cannot be proved to be trivial, as explained in [START_REF] Shulman | Cohomology. The Homotopy Type Theory Blog[END_REF]. It is nice to see that no such problem arises in the computation of π 4 (S 3 ). Finally, for computing the cohomology of CP 2 , I couldn't manage to adapt the very geometrical proof presented for instance in [START_REF] Hatcher | Algebraic Topology[END_REF]theorem 3.19] and I had to use the Gysin sequence, which is usually considered a more advanced result in classical homotopy theory. Moreover, the construction of the Gysin sequence in [Hat02, section 4.D] is based on the Leray-Hirsch theorem whose proof uses induction on the cells of a CW complex, which is something that cannot be done in homotopy type theory. Instead, the proof presented here is new and based on proposition 6.1.1 which directly relates the cup product in dimensions n and n + 1.

Cubical homotopy type theory I first tried to write this thesis using cubical ideas explicitely as much as possible, as was done for instance in my previous work with Dan Licata in [START_REF] Daniel | A Cubical Approach to Synthetic Homotopy Theory[END_REF] and in [START_REF] Cavallo | Synthetic Cohomology in Homotopy Type Theory[END_REF], but it turned out not to be such a good idea, much to my disappointment. Even though many squares and cubes appear naturally in homotopy type theory, like for instance the naturality squares of homotopies, there are also many other shapes that can appear, and treating squares differently might not be the wiser choice. For instance trying to write diagram 3.2.5 on page 73 as a Kan composition of squares and cubes is not very natural or useful. Using instead a general notion of composition of diagrams (as described at the end of page 28) seems much more natural in that case. Cubical ideas still have some benefits, in particular [START_REF] Cohen | Cubical Type Theory: a constructive interpretation of the univalence axiom[END_REF] uses cubical sets to give a computational interpretation of homotopy type theory, and in [START_REF] Daniel | A Cubical Approach to Synthetic Homotopy Theory[END_REF] and [START_REF] Cavallo | Synthetic Cohomology in Homotopy Type Theory[END_REF] cubes are used mainly to simplify formalizations in Agda. I believe, however, that for informal synthetic homotopy theory as done in this thesis, cubical ideas aren't especially helpful in general.

Future work

Maybe the most compelling next target is to formalize the present work in a proof assistant. There might be some issues in the formalization of the James construction and even more so in the monoidal structure of the smash product, which are rather heavy in terms of manipulation of paths and higher paths, but it should be possible to do.

A few results in this thesis have been stated and proved in a restricted form as my main goal was to arrive at the result π 4 (S 3 ) Z/2Z. For instance one ought to be able to compute the cohomology ring of all the J n (S k ), including J ∞ (S k ) ΩS k+1 , and of all the CP n , including CP ∞ K(Z, 2). Moreover we only defined cohomology with integer coefficients but it should be possible to define cohomology with coefficients in an arbitrary group, ring or spectra and to extend most of the results presented here.

Finally the long-term goal is of course to continue the development of synthetic homotopy theory in homotopy type theory. There are many concepts that haven't been much studied yet but seem accessible like K-theory, Steenrod operations, spectral sequences, Toda brackets, and many others. I will definitely keep on pursuing this line of research, and I hope this work will inspire other people to join the study of synthetic homotopy theory as there are so many things waiting to be found. Proof. For the first point, we proceed by induction on the typing derivation of the judgment Γ ctx. If Γ is empty, then (x : T ) ∈ Γ cannot be true so there is nothing to prove. If Γ = (Γ 0 , y : T ), then if x is equal to y, the types T and T are also equal and we have Γ 0 T type. If x is not equal to y, then (x : T ) ∈ Γ 0 , hence Γ 0 T type by the induction hypothesis. In both cases we get Γ 0 T type, hence Γ T type holds by the weakening lemma.

For the second point, we proceed by induction on the typing derivation of the judgment Γ γ : Γ. If Γ is empty, then (x : T ) ∈ Γ cannot be true so there is nothing to prove. If Γ = (Γ 0 , y : T ) and γ = (γ 0 , u), then if x is equal to y, the terms π Γ

x (γ) and u are also equal and we have Γ • If Γ θ : Θ holds, then Θ ctx holds.

π Γ x (γ) : T [γ 0 /Γ 0 ]. If x is not equal to y, then (x : T ) ∈ Γ 0 , hence Γ π Γ x (γ) : T [γ 0 /Γ 0 ]. In both cases we get Γ π Γ x (γ) : T [γ 0 /Γ 0 ] hence Γ π Γ x (γ) : T [γ/Γ] holds.
Proof. The lemmas of substitution and compatibility are proved by a simultaneous induction on the main judgment. For the case of a variable, we use lemma A.2.3. For the other cases we use the induction hypothesis.

A.3 Syntactic weak ∞-groupoids

We can now define weak ∞-groupoids. The definition is mutually recursive with the interpretation of the syntax, and the various lemmas below are needed to make sure that the interpretation of the syntax is well-defined. Because many coherence operations depend on other coherence operations which may in turn depend on other coherence operations, and so on, we first define a notion of n-partial weak ∞-groupoid and then we define the notion of weak ∞-groupoids. In other words, the depth is the highest level of nestedness of coherence operations, where a coherence operation is nested inside coh ∆.T (δ) if it appears in ∆ or T . Definition A.3.2. A 0-partial weak ∞-groupoid is a globular set, and for n ≥ 0, an (n + 1)-partial weak ∞-groupoid is an n-partial weak ∞-groupoid G together with, for every contractible context ∆ and every type T in ∆ of depth n, a function

coh G ∆.T : (η : ∆ G ) → Ob( T G ∆ (η)),
where ∆ G and T G ∆ are defined below. This means that for every η ∈ ∆ G , we have an element coh G ∆.T (η) ∈ Ob( T G ∆ (η)). Using the structure of n-partial weak ∞-groupoid on G, we can extend coh G ∆.T to the case where T is of depth less than or equal to n.

Definition A.3.3. Given an n-partial weak ∞-groupoid G, we interpret well-typed contexts, context morphisms, types and terms of depth at most n as follows:

• The interpretation of a well-typed context Γ of depth at most n is a set Γ G defined below.

• The interpretation of a well-typed context morphism θ of depth at most n from Γ to Θ is a map θ G Γ,Θ : Γ G → Θ G defined below.

• The interpretation of a well-typed type T of depth at most n in context Γ is a map T G Γ : Γ G → Glob defined below.

• The interpretation of a well-typed term u of depth at most n of type T in context Γ is a dependent map u G Γ,T : (γ : Γ G ) → Ob( T G Γ (γ)) defined below.

We now give the definitions.

• The definition of Γ G is

∅ G = {()}, (Γ, x : T ) G = {(γ, a) | γ ∈ Γ G , a ∈ Ob( T G Γ (γ))}. • The definition of θ G Γ,Θ : Γ G → Θ G is () G Γ,∅ (γ) = (), (θ, u) G Γ,(Θ,x:T ) (γ) = ( θ G Γ,Θ (γ), u G Γ,T [θ/Θ] (γ)). • The definition of T G Γ : Γ G → Glob is G Γ (γ) = G, u T v G Γ (γ) = Hom T G Γ (γ) ( u G Γ,T (γ), v G Γ,T (γ)).
• The definition of u G Γ,T : (γ :

Γ G ) → Ob( T G Γ (γ)) is x G Γ,T (γ) = π Γ x (γ), coh ∆.T (δ) G Γ,T [δ/∆] (γ) = coh G ∆.T ( δ G Γ,Θ (γ)).
Note that we use the structure of n-partial weak ∞-groupoid in the last clause.

The fact that the previous definition is well-typed follows from the following three lemmas which are straightforward to prove by induction. Lemma A.3.4 (semantic weakening). Let Γ = (Γ 0 , y : T ) be a nonempty context and assume that Γ ctx holds. Let γ = (γ 0 , b) be an element of Γ G . Then we have

• If Γ 0 T type, then T G Γ 0 (γ 0 ) = T G Γ (γ) in Glob. • If Γ 0 u : T , then u G Γ 0 ,T (γ 0 ) = u G Γ,T (γ) in Ob( T G Γ 0 (γ 0 )) which is equal to Ob( T G Γ (γ)). • If Γ 0 θ : Θ, then θ G Γ 0 ,Θ (γ 0 ) = θ G Γ,Θ (γ) in Θ G .
Lemma A.3.5. We have

• If Γ ctx and (x : T ) ∈ Γ then, for every γ ∈ Γ G , π Γ x (γ) ∈ Ob( T G Γ (γ)).
• If Γ θ : Θ and (y :

T ) ∈ Θ then, for every γ ∈ Γ G , π Θ y (θ) G Γ,T [θ/Θ] (γ) = π Θ y ( θ G Γ,Θ (γ)).
Lemma A.3.6 (semantic substitution). Assume we have Γ θ : Θ and γ ∈ Γ G . Then

• If Θ T type, then T [θ/Θ] G Γ (γ) = T G Θ ( θ G Γ,Θ (γ)). • If Θ u : T , then u[θ/Θ] G Γ,T [θ/Θ] (γ) = u G Θ,T ( θ G Γ,Θ (γ)). • If Θ θ : Θ , then θ [θ/Θ] G Γ,Θ (γ) = θ G Θ,Θ ( θ G Γ,Θ (γ)).
Finally, we can define weak ∞-groupoids.

Definition A.3.7. A syntactic weak ∞-groupoid is a globular set G together with for every n ∈ N, a structure of (n + 1)-partial weak ∞-groupoid over the previous structure of n-partial weak ∞-groupoid. In particular, that means that for every contractible context ∆ and every type T in ∆ (without restriction on depth) we have a function

coh G ∆.T : (η : ∆ G ) → Ob( T G ∆ (η)),
where the contexts, context morphisms, types and terms are interpreted as above.

Let's give some examples of coherence operations.

Example A.3.8. The constant path coherence operation is coh (x: ).x x .

• The definition of (γ : Γ A ) ML u A Γ,T :

T A Γ (γ) is x A Γ,x:T (γ) = π Γ x (γ), coh ∆.T (δ) A Γ,T [δ/∆] (γ) = J ∆ ( T A ∆ , (λa.i (A,a) dim(T ) ))( δ A Γ,∆ (γ)).
The things to note are that the interpretation of is the type A we are interested in, that the interpretation of u T v uses the identity type in T ML , and that coherence operations are implemented using J ∆ and (λa.i

:= (id ∆ a , u A ∆ ,T (id ∆ a ), idp u A ∆ ,T (id ∆ a ) ).
We remind that J has type (u : A)(P : (y : A)(z : In other words, in order to apply J ∆ to (δ , y, z), we first apply the regular J rule to z and then we apply J ∆ to δ . The reduction rule holds because in the case id ∆ a we have idp for z, hence the reduction rule of the regular J applies, and then id ∆ a for δ hence the reduction rule for J ∆ applies.

Id A (u, y)) → Type)(d : P (u, idp u )) ML J(u, P, d) : (v : A)(p : Id A (u, v)) → P (v, p).
Proof of lemma A.4.4. We want to prove that T A ∆ (id ∆ a ) is definitionally equal to I (A,a) dim(T ) . We proceed by induction on T . If T is , then it's true as they are both equal to A. If T is of the form u T v, then it's true by lemma A.4.6.

Proof of lemma A.4.5. We want to prove that δ A ∆ ,∆ (id ∆ a ) is definitionally equal to id ∆ a . We proceed by induction on ∆ and it follows from lemma A.4.6. and unary dependent function extensionality

funext dep : {A, B : Type}{C : A → B → Type}(p : b = B b ){f : (x : A) → C(x)(b)} {g : (x : A) → C(x)(b )} → ((x : A) → f (x) = C(x) p g(x)) → f = λt.(x:A)→C(x)(t) p g.
Finally we assume the univalence axiom

ua : (A B) → (A = Type B).
The map ua is itself an equivalence, but we won't need to give that a name here.

B.1.4 Truncation levels

A type A is (-2)-truncated (or contractible) if the type a:A ((x : A) → a = A x)
has an element. For n ≥ -1, a type A is n-truncated if for every x, y : A, the type x = A y is (n -1)-truncated. We have the following properties:

• The type of proofs that A is n-truncated is (-1)-truncated.

• To prove that a type A is (-1)-truncated it is enough to construct a term of type (x, y : A) → x = A y.

• n-truncated types are stable under products.

B.2 The definition

The number n is defined as the absolute value of the image of 1 by the following composition of maps. The types and maps involved are defined below.

Z ΩS 1 Ω 2 S 2 Ω 3 S 3 Ω 3 (S 1 * S 1 ) Ω 3 S 2 Ω 3 (S 1 * S 1 ) Ω 3 S 3 Ω 2 S 2 2 Ω ΩS 2 1 Ω 2 S 2 0 ΩS 1 Z n →loop n Ωϕ S 1 Ω 2 ϕ S 2 Ω 3 e Ω 3 α h Ω 3 (e -1 ) e 3 Ωκ 2,S 2 κ 1,ΩS 2 e 2 e 1
We do not repeat the definition of Z and of the two maps between Z and ΩS 1 here. The map f * g is pointed as soon as f is pointed.

B.6 The

B.6.2 Suspension and join with the booleans

The type 2 of booleans, with constructors true, false : 2 is pointed by true. For any type A we define the following two pointed maps, inverse to each other: • push(false, true) -1

ψ A : ΣA → 2 * A,
• push(false, false)

• push(true, false) -1 .

B.6.3 Equivalence between S 3 and S 1 * S 1

We define the pointed map e : S 3 → S 1 * S 1 as the composition

S 3 2 * S 2 2 * (2 * S 1 ) (2 * 2) * S 1 S 1 * S 1 ψ S 2 id 2 * ψ S 1 α 2,2,S 1 c * id S 1
and the pointed map e -1 : S 1 * S 1 → S 3 as the opposite composition with the inverse maps.

Finally we prove the uniqueness principle: if B is n-truncated and g, h : A n → B are two functions such that (a :

A) → g(|a|) = B h(|a|), then (x : A n ) → g(x) = B h(x).
We prove it by induction on x (using the induction principle derived from the hub and spoke constructors). For the | -| constructor, it's true by assumption. For the hub and spoke constructors, let's take f : S n+1 → A n . Using hub and spoke on A n we have a filler of f , hence by applying g and h to it we get a filler of g • f and a filler of h • f . Now by induction hypothesis, g and h agree on the image of f , hence g • f = h • f and by composing the filler of h • f with that equality, we get another filler of g • f , and we have to prove that those two fillers of g • f are equal. Let's call (hub, spoke) and (hub , spoke ) those two fillers of g • f and let's prove that they are equal. The type B is n-truncated, hence its identity types are also n-truncated, hence they have all (n + 1)-spheres filled. We define the map

k : S n+1 → hub = B hub , k(t) := spoke(t) • spoke (t) -1 .
That map can be filled, hence we have

hub k : hub = B hub , spoke k : (t : S n+1 ) → hub k = hub= B hub spoke(t) • spoke (t) -1 .
In order to prove that (hub, spoke) and (hub , spoke ) are equal, we need

B.9.2 Truncated higher Hopf fibration

The fibration we define now is similar to the Hopf fibration with S 2 instead of S 1 . The main difference is that, unlike for S 1 , there is no appropriate multiplication operation follows by induction on x that all of them are equivalences, using the fact that being an equivalence is a proposition.

We can now define the fibration we are interested in by tHopf 3 : S 3 → Type, tHopf 3 (north) := S 2 2 , tHopf 3 (south) := S 2 2 , ap tHopf 3 (merid(x)) := ua( µ 2 (x)), and we have tHopf Ω 2 3 : Ω 2 S 3 → Type with fiber Ω 2 S 2 2 . A point p : Ω 3 S 3 can be seen as a loop in Ω 2 S 3 , and we can transport along it in tHopf Ω 2 3 . We define the map

e 3 : Ω 3 S 3 → Ω 2 S 2 2 , e 3 (p) := transport tHopf Ω 2 3 (p, idp idp |north| ).

B.10 Loop spaces of truncations

Let A be a pointed type and n ≥ -1, the goal here is to construct a pointed map κ n,A : Ω A n+1 → ΩA n . Let's first prove that for n ≥ -1, the type of n-types is (n + 1)-truncated.

If A and B are two n-types, their identity types in the type of n-types and in Type are equivalent, because being an n-type is a proposition. Using univalence, we get that A = Type B is equivalent to A B. Using the fact that isequiv is a mere proposition, the identity type between two equivalences between A and B is the same as the identity type between the underlying functions, and using function extensionality it is equivalent to a product of identity types of B. But B is n-truncated, hence the identity types of A B are (n -1)-truncated, hence A B is n-truncated, hence the type of n-types is (n + 1)-truncated.

We can now define the family of n-types P n,A : A n+1 → Type,

P n,A (|x|) := A = A x n .
The function κ n,A is then defined by

κ n,A : Ω A n+1 → ΩA n , κ n,A (p) := transport P n,A (p, |idp A |).

B.11 Down one more dimension

We're almost done, we now just need to go from Ω 2 S 2 0 to ΩS 1 . This step is quite easy using the Hopf fibration. Using the fact that ΩS 1 is a set, we only have to build a map

Introduction (français)

L'objectif de cette thèse est de démontrer le théorème suivant dont l'énoncé et la démonstration seront expliqués en temps voulu.

Théorème 1. On a un isomorphisme de groupes π 4 (S 3 ) Z/2Z. À proprement parler, c'est un théorème bien connu en théorie de l'homotopie classique, démontré par Freudenthal dans [START_REF] Freudenthal | Über die Klassen der Sphärenabbildungen, I. Große Dimensionen[END_REF] (voir aussi [START_REF] Hatcher | Algebraic Topology[END_REF]corollary 4J.4]). La principale différence est que dans cette thèse on se place en théorie des types homotopiques (aussi connu sous le nom de fondations univalentes) qui est un nouveau cadre pour faire des mathématiques, introduit par Vladimir Voevodsky en 2009, et qui est particulièrement bien adapté pour la théorie de l'homotopie. Du point de vue de la théorie de l'homotopie, la différence la plus frappante entre la théorie de l'homotopie classique et la théorie des types homotopiques est qu'en théorie des types homotopiques, toutes les constructions sont invariantes par équivalences d'homotopie. Un des avantages est que toutes les constructions et toutes les démonstrations faites dans ce cadre sont complètement indépendantes de la définition de la notion d'« espace ». En particulier, rien ne dépend de la topologie générale ou de la combinatoire des ensembles simpliciaux. De plus, les constructions et les démonstrations ont souvent un aspect plus « homotopique », comme nous espérons que le lecteur en sera convaincu après la lecture de cette thèse.

Cependant, cela pose un certain nombre de défis, étant donné qu'il n'est pas clair a priori quels sont les concepts qui peuvent ou ne peuvent pas être définis d'une façon purement invariante par homotopie. Par exemple, même si la cohomologie singulière est invariante par homotopie, la définition classique utilise l'ensemble des cochaînes singulières qui, lui, n'est pas invariant par homotopie. Par conséquent, la définition classique ne peut pas être reproduite telle quelle en théorie des types homotopiques. Un exemple encore plus simple est le revêtement universel du cercle qui est défini classiquement en utilisant la fonction exponentielle R → S 1 , mais il se trouve que cette fonction est homotope à une fonction constante. La théorie des types homotopiques nous donne divers outils pour travailler de façon complètement invariante par homotopie et dans cette thèse on montre comment démontrer le théorème 1 en théorie des types homotopiques, en partant essentiellement de zéro.

Un autre avantage de la théorie des types homotopiques par rapport à la théorie de l'homotopie classique est que les démonstrations écrites en théorie des types homoto-piques sont beaucoup plus appropriées à une vérification formelle sur ordinateur. Même si le travail présenté ici n'a pas encore été formalisé, beaucoup de résultats intermédiaires (en particulier des deux premiers chapitres) ont été formalisés par diverses personnes, voir par exemple les bibliothèques [HoTTCoq] Contenu de la thèse Les deux premiers chapitres de cette thèse rappellent les bases de la théorie des types homotopiques. Une référence alternative est le livre [START_REF]Homotopy Type Theory: Univalent Foundations of Mathematics[END_REF], mais on a essayé ici d'être plus concis et de garder en vue notre objectif principal. Cependant, il se peut que le style de présentation soit similaire entre [UF13] et l'introduction et les deux premiers chapitres de cette thèse. La plupart du contenu des quatre derniers chapitres est nouveau en théorie des types homotopiques, même si les concepts sont bien connus en théorie de l'homotopie classique. La définition de la notion d'∞-groupoïde faible présentée dans le premier appendice est également nouvelle.

Dans le chapitre 1, on introduit tous les concepts de base de la théorie des types homotopiques, c'est-à-dire tous les constructeurs de types et en particulier l'axiome d'univalence et les types inductifs supérieurs. On énonce également le lemme 3 × 3 et le lemme d'aplatissement dans les sections 1.8 et 1.9, qui seront utilisés à plusieurs endroits. Finalement on parle de types et d'applications n-tronqués et de troncations. La notion de type n-tronqué correspond à la notion classique de n-type d'homotopie, c'est-à-dire un espace qui n'a pas de contenu homotopique en dimension supérieure à n, et la troncation est une opération transformant n'importe quel espace en un espace n-tronqué d'une façon universelle. À nouveau, tout ceci est standard en théorie des types homotopiques.

Dans le chapitre 2, on définit les groupes d'homotopie des sphères. Le groupe π k (S n ) est défini comme étant la 0-troncation (c'est-à-dire l'ensemble des composantes connexes) de l'espace des lacets itérés de dimension k dans S n . On démontre ensuite que π 1 (S 1 ) Z, qui est un résultat initialement dû à Michael Shulman en 2011 et qui apparaît dans [UF13, section 8.1], voir aussi [Shu11] et [START_REF] Daniel | Calculating the Fundamental Group of the Circle in Homotopy Type Theory[END_REF]. L'idée est qu'en théorie des types homotopique, afin de définir une fibration on ne donne pas une application de l'espace total vers la base. Au lieu de cela, on donne directement la fibre au dessus de chaque point de la base. Dans le cas d'une fibration au dessus du cercle, il est suffisant de donner la fibre au dessus du point base de S 1 et l'action sur la fibre du lacet faisant le tour du cercle. Dans le cas qui nous intéresse, la fibre est l'espace des entiers relatifs Z et le lacet faisant le tour du cercle agit dessus en ajoutant 1. Cela donne une fibration au dessus de S 1 et on peut montrer que son espace total est contractile, ce qui donne l'isomorphisme π 1 (S 1 ) Z. On définit ensuite la notion de n-connectivité et on démontre diverses propriétés des espaces et des application n-connectés, ce qui nous permet de montrer que π k (S n ) est trivial pour tout k < n. Ce résultat a déjà été obtenue dans [UF13, section 8.3] avec une démonstration un peu plus compliquée également due à l'auteur. Finalement, on définit la fibration de Hopf, qui est une fibration au dessus de S 2 , de fibre S 1 et d'espace total S 3 . L'idée de la définition de la fibration de Hopf est la suivante. Afin de définir une fibration au dessus de S 2 , il suffit de donner la fibre N au dessus du pôle Hopf et on calcule son anneau de cohomologie en utilisant la suite exacte de Gysin. Ceci démontre que l'invariant de Hopf de l'application de Hopf est égal à ±1 et que π 4 (S 3 ) Z/2Z. Dans l'appendice A, on présente une définition élémentaire des ∞-groupoïdes faibles, basée sur des idées venant de théorie des types homotopiques, ainsi qu'une démonstration du fait que tout type en théorie des types homotopiques a une structure d'∞-groupoïde faible.

Dans l'appendice B, on donne une définition complète de l'entier n défini à la fin du chapitre 3 et qui satisfait π 4 (S 3 ) Z/nZ. La raison est que, comme on le verra un peu plus tard, calculer cet entier à partir de sa définition est un problème ouvert important en théorie des types homotopiques et il est donc utile pour les personnes essayant de résoudre ce problème d'avoir la définition complète en un seul endroit.

Analytique et synthétique La différence principale entre la théorie de l'homotopie classique et la théorie des types homotopiques est que la première est analytique alors que la deuxième est synthétique. Afin de comprendre la différence entre théorie de l'homotopie analytique et synthétique, il est utile de retourner à la géométrie élémentaire.

La géométrie analytique est la géométrie dans le sens de Descartes. L'objet que l'on étudie est l'ensemble R 2 , les points sont définis comme étant des couples (x, y) de nombres réels et les droites sont définies comme étant les ensembles de points satisfaisant une équation de la forme ax + by = c. Ensuite, afin de démontrer quelque chose, on utilise les propriétés de R 2 . Par exemple, on peut déterminer si deux droites se croisent en résolvant un certain système d'équations.

En revanche, la géométrie synthétique est la géométrie dans sens d'Euclide. Les points et les lignes ne sont pas définies en fonction d'autres notions, il s'agit de notions primitives, et on se donne une collection d'axiomes qui spécifie comment elles sont censées se comporter. Ensuite, afin de démontrer quelque chose, on doit utiliser les axiomes. Par exemple on ne peut pas utiliser l'équation d'une droite ou les coordonnées d'un point parce que les droites n'ont pas d'équations et les points n'ont pas de coordonnées.

La géométrie analytique peut être utilisée pour justifier la géométrie synthétique. En effet, la géométrie analytique donne une signification aux notions de point et de ligne et tous les axiomes de la géométrie synthétique peuvent être démontrés en géométrie analytique. Ainsi les axiomes sont consistants et tout ce qui est vrai en géométrie synthétique est également vrai en géométrie analytique. La réciproque n'est pas vraie, donc on pourrait penser que la géométrie synthétique est moins puissante que la géométrie analytique étant donné que moins de théorèmes sont démontrables. Mais d'un autre côté on peut également considérer que la géométrie synthétique est plus puissante que la géométrie analytique, parce que les théorèmes qui peuvent être démontrés sont plus généraux. Ils sont valides pour n'importe quelle interprétation des concepts primitifs qui satisfait les axiomes, alors qu'une démonstration en géométrie analytique est par nature valide uniquement dans R 2 . Un autre inconvénient de la géométrie analytique est qu'en réduisant la géométrie à la résolution d'équations il est facile de perdre de vue l'intuition géométrique. En résumé, en géométrie analytique on donne une définition explicite des concepts qui nous intéressent et on peut démontrer beaucoup de choses mais on est restreint à ce modèle particulier, alors qu'en géométrie synthétique on ne fait qu'axiomatiser les propriétés de base des concepts qui nous intéressent, moins de théorèmes sont démontrables mais ils sont applicable plus largement et sont plus proches de l'intuition géométrique.

La situation en théorie de l'homotopie est très similaire. En théorie de l'homotopie analytique (ou théorie de l'homotopie classique), la sphère S n est définie comme étant l'ensemble {(x 0 , . . . , x n ) ∈ R n+1 , x 2 0 + • • • + x 2 n = 1} équipé de la topologie appropriée, les fonctions continues sont les fonctions qui préservent la topologie de façon appropriée, et π 4 (S 3 ) est défini comme étant le quotient de l'ensemble des fonctions continues pointées S 4 → S 3 par la relation d'homotopie. On peut ensuite utiliser diverses techniques pour démontrer que π 4 (S 3 ) Z/2Z, c'est-à-dire que π 4 (S 3 ) contient exactement deux éléments.

En théorie de l'homotopie synthétique, qui est ce sur quoi cette thèse porte, la notion d'espace ne provient pas de la topologie. Au lieu de cela, la notion d'espace est considérée comme une notion primitive (sous le nom type) et on a également les notions primitives de point et de chemin entre deux points. En particulier, un chemin n'est pas vu comme étant une fonction continue depuis l'intervalle, c'est simplement une notion primitive. On introduit aussi une notion primitive de fonction continue. Notons qu'en théorie de l'homotopie classique, on doit d'abord définir ce qu'est une fonction possiblement-non-continue avant de pouvoir définir ce qu'est une fonction continue, mais ici on prend directement le concept de fonction continue comme étant primitif. Pour nous, une fonction continue n'est pas une fonction possiblement-non-continue qui a la propriété additionnelle d'être continue, il n'y a pas du tout de notion de fonction possiblement-non-continue. Ainsi, l'adjectif « continue » est superflu et on utilisera simplement le mot « fonction » ou « application » pour désigner ce qui correspondrait à une « fonction continue » en théorie de l'homotopie classique.

Divers espaces sont également axiomatisés, par exemple l'espace N des entiers naturels est axiomatisé avec un élément 0, une fonction S : N → N et le principe d'induction/récursion. Le cercle est axiomatisé avec un point appelé base, un chemin appelé loop de base vers base, et un principe similaire d'induction/récursion qui dit intuitivement que le cercle est librement engendré par base et loop. On décrit de façon similaire les sphères de dimension supérieure S n et l'ensemble des composantes connexes d'un espace. En combinant tout ceci avec la notion de fonction (continue) mentionnée ci-dessus, on peut définir π 4 (S 3 ) et on verra qu'on peut encore montrer qu'il est isomorphe au groupe Z/2Z. Théorie des types La théorie des types homotopiques est une variante de la théorie des types et plus précisément de la théorie intuitionniste des types de Per Martin-Löf (qu'on appellera simplement théorie des types dépendants ici), qui a été introduite dans les années 1970 en tant que fondements des mathématiques constructives (voir [START_REF] Martin-Löf | An Intuitionistic Theory of Types: Predicative Part[END_REF]). Les mathématiques constructives sont une philosophie des mathématiques basée sur l'idée qu'afin de démontrer qu'un certain objet existe, il faut donner une méthode permettant de le construire. Cela fonctionne en restreignant les principes logiques que l'on peut utiliser et en n'autorisant que ceux qui sont constructifs. Une démonstration en mathématiques constructives n'est pas nécessairement présentée sous la forme d'un algorithme, mais un algorithme peut toujours en être extrait. Par conséquent, les mathématiques constructives rejettent les principes comme l'axiome du choix, qui affirme l'existence d'une fonction sans donner de moyen de la calculer, et le raisonnement par l'absurde qui permet de montrer que quelque chose existe en montrant simplement qu'il ne peut pas ne pas exister. En particulier, une démonstration du fait qu'il existe un entier naturel ayant une certaine propriété doit donner (au moins implicitement) une méthode pour calculer cet entier. Ce n'est pas vrai en mathématiques classiques. Par exemple considérons l'entier n ∈ N défini comme étant le plus petit nombre parfait impair, ou 0 s'il n'existe pas de nombre parfait impair. En mathématiques classiques, c'est une définition valide de n mais qui ne donne aucun moyen de le calculer. En effet, au moment où j'écris ces lignes personne ne sait si n est égal à 0 ou pas. En revanche, ce n'est pas considéré une définition valide en mathématiques constructives parce qu'on a utilisé le principe du tiers exclu (soit il existe un nombre parfait impair, soit il n'en existe pas) qui n'est pas constructif. Il y a diverses variantes des mathématiques constructives et notons que celle utilisée ici, la théorie des types homotopiques, n'est pas incompatible avec la logique classique. Il serait tout à fait possible de rajouter l'axiome du choix ou le tiers exclu mais l'inconvénient est que la constructivité, qui est un des principaux avantages de la théorie des types, serait perdue.

En théorie des types dépendants, les notions primitives sont les types et les éléments de types (ou termes). On écrit u : A l'énoncé que u est un élément du type A. Intuitivement, on peut imaginer un type comme étant une sorte d'ensemble, mais il y a plusieurs différences avec la théorie des ensembles traditionnelle. Les éléments de types n'existent pas isolément, il s'agit toujours d'éléments d'un certain type qui fait intrinsèquement partie de la nature de l'élément. Le type d'un élément est toujours connu et cela n'a pas de sens de « démontrer » qu'un élément u est de type A. Ceci est similaire au fait que cela n'a pas de sens de « démontrer » que x 2 + y 2 = 0 est une équation. Il suffit de la regarder et on voit que c'est une équation et pas une matrice. De plus, le type d'un élément est toujours unique (modulo règles de réduction, comme on le verra un peu plus loin). Par exemple on ne peut pas dire que le nombre 2 a à la fois le type N et le type Q. Au lieu de cela, il y a deux éléments différents, le premier étant 2 N de type N et le deuxième étant 2 Q de type Q (qui peuvent être écrits tous les deux 2 s'il n'y a pas de risque de confusion), et qui satisfont i(2 N ) = 2 Q pour i : N → Q l'inclusion canonique. De façon similaire, étant donné un nombre rationnel q : Q, on ne peut pas demander si q est de type N. Le nombre q est de type Q par nature et Q est différent de N. Par contre, ce qu'on peut demander est s'il existe un entier naturel k : N tel que i(k) = q. C'est ce qu'il faudrait faire pour démontrer que q est un entier naturel. La propriété de constructivité de la théorie des types dépendants nous permet de le voir comme un langage de programmation. En théorie des types dépendants, toutes les constructions primitives ont des règles de réduction qui expliquent essentiellement comment exécuter les programmes du langage. Tous les éléments de types peuvent ainsi être vus comme des programmes et peuvent être exécutés, simplement en appliquant répétitivement les règles de réduction. Il n'y a pas de boucle infinie en théorie des types, tous les programmes terminent et on obtient donc toujours un résultat quand on exécute un programme. Du point de vue mathématique, les règles de réduction sont les équation de définition des notion primitives, et appliquer une règle de réduction correspond à remplacer quelque chose par sa définition. Deux éléments u et v d'un type A sont dits définitionnellement égaux s'ils deviennent syntaxiquement égaux après qu'on ait tout remplacé par leurs définitions, c'est-à-dire après avoir exécuté u et v. Une règle importante de la théorie des types, connue sous le nom de règle de conversion, stipule que si u est de type A et que A est définitionnellement égal à A , alors u est aussi de type A . En particulier, les types sont uniques seulement à égalité définitionnelle près, mais l'égalité définitionnelle est décidable car il s'agit simplement de développer les définitions. De la même façon que cela n'a pas de sens de démontrer qu'un terme u est de type A, cela n'a pas non plus de sens de démontrer que deux termes ou deux types sont définitionnellement égaux. C'est quelque chose qui peut simplement être vérifié algorithmiquement.

Étant donné la correspondance entre démonstrations et éléments de types, il en résulte que les démonstrations elles-mêmes peuvent être exécutées, ce qui donne à la théorie des types dépendants sa nature constructive. Par exemple, étant donné une démonstration qu'il existe un entier naturel ayant une certaine propriété, on peut exécuter la démonstration et le résultat que l'on obtient est un couple de la forme (n, p) où n est un entier naturel de la forme 0, ou 1, ou 2, etc. (c'est-à-dire qu'on connaît sa valeur), et p est une démonstration du fait que n satisfait la propriété. Cette relation étroite entre la théorie des types et l'informatique a donné lieu au développement d'assistants de preuve comme Coq, Agda ou Lean (voir [Coq], [Agda], [Lean]). Il s'agit essentiellement de compilateurs pour la théorie des types dépendants avec diverses fonctionnalités pour les rendre plus faciles à utiliser. Dans un assistant de preuve, on peut énoncer un théorème en définissant le type correspondant et on peut ensuite le démontrer en construisant un terme (c'est-à-dire en écrivant un programme) ayant ce type. Si l'assistant de preuve l'accepte, cela signifie que le programme est bien typé et que la démonstration est donc correcte.

Théorie des types homotopiques La théorie des types dépendants est très fructueuse mais elle souffre de quelques problèmes, en particulier en ce qui concerne le traitement de l'égalité. Étant donné un type A et deux éléments u, v : A, la proposition « u est égal à v » est réifiée en un type u = A v qu'on appelle le type identité (ses éléments sont les témoins de l'égalité entre u et v). Martin-Löf a donné plusieurs versions de la théorie des types dépendants avec différentes règles pour les types identité. Dans une de ces versions, appelée la théorie des types extensionnelle, les types identité se comportent de façon agréable mais le typage n'est pas décidable, c'est-à-dire qu'il n'y a pas d'algorithme vérifiant qu'un terme a un type donné. C'est une propriété en général indésirable pour une théorie des types. Dans une autre version, appelée la théorie des types intensionnelle, les règles des types identité sont différentes et le typage est décidable. Cependant, le traitement de l'égalité en théorie des types intensionnelle n'est pas tout le temps satisfaisant. Par exemple, deux fonctions f, g : A → B peuvent vérifier f (x) = g(x) pour tout x : A sans être égales elles-mêmes en tant que fonctions. Définir le quotient d'un ensemble par une relation d'équivalence est aussi plutôt problématique. Un problème différent est le principe d'unicité des preuves d'égalités qui stipule que pour tous u, v : A, tous les éléments de u = A v sont égaux, n'est plus démontrable, ce qui est contraire à l'intuition qui était derrière les types identité. En effet, l'idée des types identité dans la théorie des types de Martin-Löf est que tout type représente un ensemble et que u = A v représente l'ensemble ayant exactement un élément si u et v sont égaux ou l'ensemble vide si u et v sont différents.

La théorie des types homotopiques est basée sur la théorie des types intensionnelle et résoud ce dernier problème en changeant l'intuition derrière les types et les types identité.

En théorie des types homotopiques, les types ne sont plus vus comme des ensembles mais comme des espaces, les types dépendants sont vus comme des fibrations, et le type identité u = A v est vu comme le type des chemins continus de u vers v dans l'espace A. De façon plutôt surprenante, on peut montrer que sous cette interprétation toutes les règles de la théorie des types intensionnelle sont toujours vérifiées. De plus, dans cette interprétation, l'unicité des preuves d'égalités n'est plus une propriété désirable. Étant donné deux points u et v dans un espace A, il peut y avoir beaucoup de chemins non homotopes entre u et v et beaucoup d'homotopie non homotopes entre deux chemins, et ainsi de suite.

Cette connection entre la théorie des types et la théorie de l'homotopie a été découverte vers 2006 indépendemment par Vladimir Voevodsky et par Steve Awodey et Michael Warren dans [START_REF] Awodey | Homotopy theoretic models of identity types[END_REF]. Ensuite, en 2009, Vladimir Voevodsky a énoncé l'axiome d'univalence, a démontré sa consistance dans le modèle simplicial et a commencé le projet de formalisation des mathématiques dans ce système, la théorie des types intensionnelle augmentée de l'axiome d'univalence, sous le nom de fondations univalentes. Étant donné un univers Type, c'est-à-dire un type dont les éléments sont eux-mêmes des types, et deux éléments A et B de Type, l'axiome d'univalence identifie le type identité A = Type B avec le type des équivalences A B. Cet axiome rend précise l'idée que « deux structures isomorphes ont les mêmes propriétés », qui est souvent utilisé implicitement en mathématiques. Notons que l'axiome d'univalence n'est pas compatible avec le principe d'unicité des preuves d'égalité, il implique par exemple qu'il y a deux égalités 2 = Type 2 différentes correspondant aux deux bijections 2 2 (où 2 est le type ayant deux éléments). Voevodsky a aussi remarqué que l'axiome d'univalence implique l'extensionnalité des fonctions, c'est-à-dire que si f (x) = B g(x) pour tout x : A, alors f = A→B g, et qu'il rend possible la définition des quotients.

En 2011, la notion de type inductif supérieur a commencé à émerger. Les types inductifs ordinaires sont des types définis en donnant des générateurs (les constructeurs) et un principe d'induction qui rend précise l'idée que le type est librement engendré par les constructeurs. Les types inductifs supérieurs sont une généralisation des types inductifs ordinaires où on peut non seulement donner des constructeurs de points, mais aussi des constructeurs de chemins. Par exemple, le cercle a un constructeur de points appelé base et un constructeur de chemins loop qui est un chemin de base vers base. En combinaison avec l'axiome d'univalence, une fibration peut être définie par induction sur l'espace de base, ce qui est un moyen très puissant pour définir des fibrations. Par exemple, afin de définir une fibration sur le cercle il suffit de donner la fibre au dessus de base et l'action de loop sur cette fibre (cette action devant être une équivalence).

Un des inconvénients de la théorie des types homotopiques est qu'en ajoutant l'axiome d'univalence ou les types inductifs supérieurs on perd la propriété de constructivité qui, comme on l'a déjà mentionné, est une propriété essentielle de la théorie des types. Cependant, contrairement au cas de l'axiome du choix ou du tiers exclu, il est généralement admis que l'axiome d'univalence et les types inductifs supérieurs sont constructifs d'une façon ou d'une autre, et diverses personnes cherchent à donner une description alternative de la théorie des types homotopiques dans laquelle on peut calculer avec l'axiome d'univalence et les types inductifs supérieurs, voir en particulier [START_REF] Cohen | Cubical Type Theory: a constructive interpretation of the univalence axiom[END_REF]. Une conjecture associée est la conjecture de canonicité homotopique de Voevodsky : pour tout terme clos n : N construit en utilisant l'axiome d'univalence, il existe un terme clos k : N construit sans utiliser l'axiome d'univalence et une démonstration de k = N n. Constructivité de π 4 (S 3 ) Le premier résultat majeur de cette thèse est le corollaire 3.4.5, qui dit qu'il existe un entier naturel n tel que π 4 (S 3 ) Z/nZ. Cet énoncé est assez étrange parce que c'est un énoncé de la forme « il existe un entier naturel n satisfaisant une certaine propriété » donc selon la conjecture de constructivité il devrait être possible d'extraire la valeur de n de la démonstration. Cependant, pour l'instant personne n'a réussi à le faire, principalement parce que la démonstration est relativement compliquée et que la constructivité de l'axiome d'univalence et des types inductifs supérieurs n'est pas encore bien comprise. Dans les chapitres 4, 5 et 6 on présente une démonstration du fait que cet entier est égal à 2, mais il s'agit d'une démonstration mathématique et non pas d'un calcul extrait de la définition de n donc cela n'aborde pas la conjecture de constructivité. En revanche cela montre que l'on peut définir et travailler avec la cohomologie et la suite exacte de Gysin en théorie des types homotopiques, ce qui est intéressant en soi.

Modèles de la théorie des types homotopiques On ne va pas beaucoup parler de la relation entre la théorie des types homotopiques (théorie de l'homotopie synthétique) et la théorie de l'homotopie classique (théorie de l'homotopie analytique) dans cette thèse, mis à part le fait que beaucoup de définitions et de démonstrations sont assez similaires à leurs homologues classiques. Une construction d'un modèle de la théorie des types homotopiques (sans types inductifs supérieurs) en théorie de l'homotopie classique est présentée dans [START_REF] Kapulkin | The Simplicial Model of Univalent Foundations[END_REF] et une démonstration qu'il modèle également les types inductifs supérieurs est en préparation dans [LS]. Comme on l'a mentionné plus haut, une des conséquences de travailler de façon synthétique est que tout le travail effectué dans cette thèse est également valide dans n'importe quel autre modèle de la théorie des types homotopiques, pas seulement le modèle classique. Michael Shulman a donné dans [START_REF] Shulman | Univalence for inverse EI diagrams[END_REF] divers autres modèles de la théorie des types homotopiques et il est généralement admis que tout ∞-topos au sens de Lurie (voir [START_REF] Lurie | Higher topos theory[END_REF]) devrait donner un modèle de la théorie des types homotopiques.

Un autre modèle très important est le modèle de Thierry Coquand et coauteurs décrit dans [START_REF] Bezem | A model of type theory in cubical sets[END_REF], qui est un modèle constructif de la théorie des types homotopiques dans les ensemble cubiques. En théorie, ce modèle devrait nous permettre de calculer le nombre n du chapitre 3, mais cela n'a pas encore été fait. Ce modèle suggère également une version différente de la théorie des types homotopiques, appelée théorie des types cubiques (voir [START_REF] Cohen | Cubical Type Theory: a constructive interpretation of the univalence axiom[END_REF]), mais dans cette thèse on restera avec la théorie des types décrite dans [START_REF]Homotopy Type Theory: Univalent Foundations of Mathematics[END_REF]. On utilisera néanmoins divers carrés et cubes à chaque fois que cela sera jugé utile.

Résumé substantiel (français) 1 La théorie des types homotopiques

On commence par introduire tous les types de base et le constructeurs de types de la théorie des types homotopiques. Le premier constructeur de types est le types des On introduit ensuite les types inductifs. L'idée est qu'un type inductif est librement engendré par un certain nombre de constructeurs, ce qui est exprimé par un principe d'induction. Par exemple le type vide, le type singleton, l'union disjointe de deux types, le type des entiers naturels et le type des entiers relatifs peuvent être définis comme des types inductifs.

Le quatrième constructeur de types que l'on introduit est le type identité ou type des chemins entre deux points. Étant donné un type A et deux éléments u, v : A, le type u = A v représente le type des chemins continus du u vers v, et la principale règle de typage gouvernant les types identité est la règle J. Cette règle permet de munir chaque type d'une structure d'∞-groupoïde faible, par exemple on peut inverser et composer les chemins, cette composition est associative, et ainsi de suite. Une définition plus précise de la notion d'∞-groupoïde est décrite dans l'appendice A.

Une fonction f : A → B est appelée une équivalence s'il existe une fonction g : B → A telle que les deux composées g • f et f • g soient homotopes à la fonction identité. Une petite modification de cette définition nous permet de définir le type A B des équivalences entre A et B ainsi qu'une application (A = Type B) → (A B). L'axiome d'univalence est l'énoncé stipulant que cette application est elle-même une équivalence.

La notion de chemin introduite précédemment est homogène, dans le sens où on ne peut parler d'un chemin entre deux éléments u et v qu'à condition que u et v aient le même type. On introduit alors la notion de chemin dépendant. Étant donné un type dépendant B : A → Type, un chemin p : x = A y dans A et deux éléments u : B(x) et v : B(y), le type u = B p v représente le type des chemins de u vers v au dessus de p. Cette notion est utilisée en particulier pour définir le type de l'application d'une fonction dépendante à un chemin. Lorsque B(x) est un type identité, il est naturel d'introduire le type des remplissages d'un carré, étant donné quatre chemins correspondant aux quatre côtés. Finalement on a la propriété d'extensionalité des fonctions qui permet de construire une égalité entre deux fonctions f et g étant donné une égalité entre f (x) et g(x) pour tout x.

Les derniers types que l'on introduit sont les types inductifs supérieurs. L'idée est similaire aux types inductifs, mis à part la possibilité d'avoir des constructeurs de chemins. Ceci permet de définir de nombreux espace de la théorie de l'homotopie, comme par exemple le cercle S 1 qui est engendré par les deux constructeurs Les pushouts permettent de définir de nombreux autres types comme la suspension d'un type, les sphères, le join de deux types, la somme pointée et le produit smash. Comme pour les types inductifs ordinaires, les types inductifs supérieurs ont un principe d'induction, qui utilise la notion de chemin dépendant vue ci-dessus. Étant donné un diagramme 3 × 3 où l'on peut prendre le pushout de chacune des lignes et de chacune des colonnes (voir le diagramme 1.8.1 de la page 34), le pushout du pushout des lignes est équivalent au pushout du pushout des colonnes. Ce résultat est appelé le lemme 3 × 3 et est utilisé entre autres pour montrer que le join de S n et de S m est équivalent à S n+m+1 .

Étant donné un type inductif T , on peut définir un type dépendant P : T → Type en utilisant le principe d'induction de T et l'axiome d'univalence pour les constructeurs de chemin de T . Le lemme d'aplatissement est un résultat décrivant l'espace total d'une telle fibration.

On introduit finalement le concept de type n-tronqué, c'est à dire intuitivement un type qui n'a pas d'information homotopique en dimension supérieure à n. Un type est (-2)-tronqué (ou contractile) lorsque qu'il possède un point égal à tous les autres points, et un type est (n + 1)-tronqué lorsque tous ses types identité sont n-tronqués. On a également une opération de troncation qui transforme un type A en un type n-tronqué A n d'une façon universelle, c'est-à-dire qu'on a une application |-| : A → A n et afin de définir une application f : A n → B pour un type B qui est lui-même n-tronqué, il suffit de définir f sur les éléments de la forme |a|. où µ : S 1 × S 1 → S 1 est défini par double induction sur le cercle. Les deux fonctions µ(-, base) et µ(base, -) sont égales à la fonction identité, ce qui montre que µ(-, x) est une équivalence pour tout x : S 1 . Le lemme d'aplatissement ainsi que le fait que µ(x, -) est une équivalence pour tout x : S 1 nous permet alors de montrer que l'espace total de la fibration de Hopf est équivalent au join S 1 * S 1 qui est équivalent à S 3 . On obtient alors π 2 (S 2 ) Z et π k (S 2 ) π k (S 3 ) pour tout k ≥ 3.

Résultats préliminaires sur les groupes d'homotopie des sphères

La construction de James

Étant donné un type pointé connexe A, la construction de James donne une suite d'approximation du type ΩΣA. Plus précisément, si A est k-connexe, on obtient une suite de types et de fonctions

J 0 A J 1 A J 2 A J 3 A . . . , i 0 i 1 i 2 i 3
où pour tout n l'application i n est (n(k + 1) + (k -1))-connexe, et telle que la colimite J ∞ A du diagramme est équivalente à ΩΣA. Les types J n A sont définis par induction sur n par des pushouts. On définit ensuite un type inductif supérieur JA et on démontre que JA est équivalent à la colimite de (J n A) n:N ainsi qu'à ΩΣA. Une première conséquence de la construction de James est le théorème de suspension de Freudenthal, qui dit que l'application A → ΩΣA est 2k-connexe lorsque A est k-connexe. En particulier, cela implique que π n (S n ) π 2 (S 2 ) Z pour tout n ≥ 2 et que π n+1 (S n ) π 4 (S 3 ) pour tout n ≥ 3. On définit ensuite, pour tout n, m : N, une application W n,m : S n+m-1 → S n ∨ S m qui donne une équivalence S n × S m 1 S n+m-1 (S n ∨ S m ).

Cette application induit (par composition) une application [-, -] : π n (X) × π m (X) → π n+m-1 (X) pour tout type X. En combinaison avec la construction de James et le théorème de Blakers-Massey, on démontre alors que π 4 (S 3 ) Z/nZ, où n est l'image de [i 2 , i 2 ] par l'équivalence π 3 (S 2 ) Z et i 2 est le générateur de π 2 (S 2 ).

Produits smash de sphères

Le produit smash A ∧ B de deux types pointés A et B est le type inductif supérieur défini par les constructeurs Intuitivement, il s'agit du produit A × B où l'on a contracté les deux axes A et B sur un point. Le produit smash est un produit monoïdal symétrique sur les types pointés, en particulier il est fonctoriel, commutatif, associatif, unitaire et satisfait des hypothèses de naturalité et de cohérence en dimension 1. Le produit smash de sphères satisfait l'équivalence S n ∧ S m S n+m . On démontre que cette famille d'équivalences est compatible avec l'associativité du produit smash, dans le sens où les deux équivalences S n ∧ S m ∧ S n → S n+m+k provenant des deux parenthésages du codomaine sont égales. En ce qui concerne la commutativité, on obtient un résultat similaire à celui pour l'associativité, mis à part qu'il y a un signe lorsque les deux sphères sont de dimension impaire.

A∧B : A ∧ B, proj : A → B → A ∧ B,

La cohomologie

On définit ensuite les groupes de cohomologie (à coefficients entiers) d'un type. La première étape est la définition des espaces d'Eilenberg-MacLane K(Z, n) (notés plus simplement K n ). Pour n = 0, on définit K 0 := Z et pour n > 0 on définit K n := S n n . La principale propriété de ces espaces est le fait qu'il existe une équivalence K n ΩK n+1 . La construction de cette équivalence utilise le résultat sur π 1 (S 1 ) pour n = 0, la fibration de Hopf pour n = 1 et le théorème de suspension de Freudenthal pour n ≥ 2. Les groupes de cohomologie d'un type X sont alors définis par H n (X) := X → K n 0 et l'équivalence entre K n et ΩK n+1 donne une structure de groupe abélien sur H n (X).

On définit ensuite le produit cup : H n (X) × H m (X) → H n+m (X) en utilisant les équivalences S n ∧ S m S n+m , et la compatibilité de cette famille d'équivalences avec l'associativité et la commutativité du produit smash permettent de montrer que le produit cup est associatif, commutatif gradué et distributif.

La suite exacte longue de Mayer-Vietoris se déduit assez facilement de la définition de la cohomologie. Cela permet de montrer que H k (S n ) est équivalent à Z pour k = 0 et k = n, et trivial sinon. On calcule ensuite les groupes de cohomologie de S n × S k . La suite exacte longue de Mayer-Vietoris montre qu'ils sont engendrés (additivement) par un élément 1 de degré 0, un élément x de degré n, un élément y de degré k et un élément z de degré n + k. On montre de plus que le produit cup x y est égal à z.

Finalement on définit l'invariant de Hopf d'une application f : S 2n-1 → S n comme étant l'entier H(f ) vérifiant α α = H(f )β, où α et β sont les générateurs de la cohomologie en dimensions n et 2n du type C f := 1 S 2n-1 S n . L'invariant de Hopf est un homomorphisme de groupes H : π 2n-1 (S n ) → Z et on montre que pour tout n, l'invariant de Hopf de [i 2n , i 2n ] : π 4n-1 (S 2n ) est égal à 2. On en conclut que π 4n-1 (S 2n ) est infini, et que π 4 (S 3 ) est équivalent soit à Z/2Z s'il existe une application S 3 → S 2 d'invariant de Hopf égal à 1, ou est trivial s'il n'existe pas de telle application.

La suite de Gysin

Étant donné une fibration de sphères S n-1 sur un type B, on construit un élément e : H n (B) ainsi que la suite exacte longue de Gysin reliant le produit cup -e avec la cohomologie de l'espace total de la fibration. La principale propriété permettant la construction de cette suite exacte longue est le fait que pour n, m : N, p : K n et y : K m , on a ap λx.x y (σ n (p)) = σ n+m (p y), où σ n dénote l'équivalence K n ΩK n+1 . On en déduit que pour tout i, n : N, l'application f : K i → (S n → K i+n ) f (x) := (λy.x |y|) est une équivalence, ce qui est démontré par récurrence sur i.

On définit ensuite CP 2 comme étant le pushout 1 S 3 S 2 pour l'application η : S 3 → S 2 provenant de la fibration de Hopf. D'une façon similaire à la construction de la fibration de Hopf, on construit une fibration sur CP 2 de fibre S 1 et dont l'espace total est équivalent à S 5 . En appliquant la suite de Gysin à cette fibration, on en déduit que l'invariant de Hopf de η est égal à ±1, ce qui montre que π 4 (S 3 ) Z/2Z.

A Une définition des ∞-groupoïdes faibles par la théorie des types

Dans cet appendice on donne une définition de la notion d'∞-groupoïde faible, inspirée de la théorie des types. L'idée est de définir une théorie des types minimaliste dans laquelles les termes que l'on peut définir sont exactement ceux qui existent dans tout ∞-groupoïde. On explique ensuite comment cette théorie des types donne une définition des ∞-groupoïdes faibles et on montre que tout type en théorie des types homotopiques est un ∞-groupoïde faible.

B Le cardinal de π 4 (S 3 )

Dans cet appendice on résume la définition de l'entier n défini à la fin du chapitre 3, afin de faciliter une implémentation future dans un assistant de preuves muni d'une interprétation calculatoire de l'axiome d'univalence et des types inductifs supérieurs.

Conclusion (français)

On a vu dans cette thèse que la théorie des types homotopiques est suffisamment puissante pour démontrer que π 4 (S 3 ) Z/2Z. Même si du point de vue de la théorie de l'homotopie classique c'est un résultat bien connu, ce n'était pas évident que l'axiome d'univalence et les types inductifs supérieurs suffiraient à le démontrer, ni même qu'une démonstration constructive et purement homotopique existe. De plus, en prenant en compte le fait que seulement cinq années se sont écoulées entre la définition du cercle en théorie des types homotopiques et le calcul de π 4 (S 3 ), le progrès a été plutôt rapide et on peut espérer que d'ici quelques années la théorie des types homotopiques aura atteint un niveau comparable à celui de la théorie de l'homotopique classique et va aider à obtenir des résultats complètements nouveaux.

Comparaison avec les démonstrations classiques

Comme on l'a déjà mentionné, la principale différence entre la théorie de l'homotopie classique et la théorie des types homotopiques est qu'en théorie des types homotopique tout est invariant par homotopie. J'ai utilisé le livre [START_REF] Hatcher | Algebraic Topology[END_REF], qui présente la topologie algébrique classique, assez régulièrement pendant cette recherche, mais j'ai souvent dû trouver des définitions, des démonstrations et des énoncés complètement différents afin de pouvoir les reproduire en théorie des types homotopiques.

Dans la construction du revêtement universel du cercle et de la fibration de Hopf, la différence la plus évidente est qu'au lieu de définir une fonction de l'espace total vers la base, on définit directement les fibres et comment transporter le long des fibres, et déterminer l'espace total est la partie non triviale. Pour le revêtement universel du cercle c'est assez transparent mais pour la fibration de Hopf il n'était pas clair a priori pour moi que la définir avec la multiplication de S 1 donnerait effectivement la fibration de Hopf.

Démontrer que le produit smash est associatif n'est facile ni en théorie des types homotopiques ni en théorie de l'homotopie classique mais pour des raisons très différentes. En théorie des types homotopiques, le problème vient du fait qu'on a beaucoup de chemins et de chemins de dimension supérieure à gérer et que cela devient vite compliqué de s'occuper de toutes les cohérences entre eux. En topologie générale, en revanche, il y a une bijection canonique entre les deux espaces mais le problème est qu'elle peut ne pas être continue sauf si l'on suppose que les deux espaces se comportent suffisamment bien. La différence est qu'en topologie général on identifie littéralement divers points entre eux, ce qui fait que la bijection est facile à définir mais peut ne pas respecter la topologie, alors qu'en théorie des types homotopiques on rajoute de nouveaux chemins au lieu d'identifier des points.

Pour la cohomologie, on a déjà mentionné le besoin d'utiliser les espaces d'Eilenberg-MacLane au lieu de la définition classique par les cochaînes singulières, étant donné que l'ensemble des cochaînes singulières n'est pas invariant par homotopie. La notion de troncation donne une définition très agréable des espaces d'Eilenberg-MacLane K(Z, n) et une définition très agréable du produit cup. Notons que quand on travaille de façon constructive certains phénomènes inattendus peuvent se produire en cohomologie. En effet, sans l'axiome du choix il n'est pas possible de démontrer l'axiome d'additivité de la cohomologie. On ne peut même pas démontrer que le groupe de cohomologie H 1 (N, Z) est trivial, comme est expliqué dans [START_REF] Shulman | Cohomology. The Homotopy Type Theory Blog[END_REF]. Il est agréable de voir que ce genre de problème ne se pose pas dans le calcul de π 4 (S 3 ).

Finalement, afin de calculer la cohomologie de CP 2 je n'ai pas réussi à adapter la démonstration géométrique présentée par exemple dans [Hat02, theorem 3.19] and j'ai dû utiliser la suite exacte de Gysin qui est en général considérée comme étant un résultat plus avancé en théorie de l'homotopie classique. De plus, la construction de la suite exacte de Gysin présentée dans [Hat02, section 4.D] est basée sur le théorème de Leray-Hirsch dont la démonstration utilise une induction sur les cellules d'un CW complexe, ce qui est impossible à faire en théorie des types homotopiques. La démonstration présentée ici est nouvelle et basée sur la proposition 6.1.1 qui relie directement le produit cup en dimensions n et n + 1.

Théorie des types homotopiques cubique J'ai d'abord essayé d'écrire cette thèse en utilisant des idées "cubiques" autant que possible, comme nous l'avions fait par exemple avec Dan Licata dans [START_REF] Daniel | A Cubical Approach to Synthetic Homotopy Theory[END_REF] and comme a été fait dans [START_REF] Cavallo | Synthetic Cohomology in Homotopy Type Theory[END_REF], mais cela s'avéra être une mauvaise idée, à ma grande déception. Même si beaucoup de carrés et de cubes apparaissent naturellement en théorie des types homotopiques, comme par exemple le carré de naturalité des homotopies, il y a aussi d'autres formes qui peuvent apparaître, et traiter les carrés différemment n'est peut-être pas la meilleure idée. Par exemple, essayer d'écrire le diagramme 3.2.5 de la page 73 comme une composition de Kan de carrés et de cubes n'est pas très naturel ni utile. Il semble beaucoup plus naturel d'utiliser dans ce cas une notion générale de composition de diagrammes (comme décrite à la fin de la page 28). Les idées cubiques ont quand même des avantages, en particulier [START_REF] Cohen | Cubical Type Theory: a constructive interpretation of the univalence axiom[END_REF] utilise des ensembles cubiques pour donner une interprétation calculatoire de la théorie des types homotopiques, et dans [START_REF] Daniel | A Cubical Approach to Synthetic Homotopy Theory[END_REF] et [START_REF] Cavallo | Synthetic Cohomology in Homotopy Type Theory[END_REF] les cubes sont utilisés principalement pour simplifier les formalisations en Agda. Je pense, cependant, que pour la théorie de l'homotopie synthétique informelle, comme dans cette thèse, les idées cubiques ne sont pas spécialement utiles en général.

Travaux futurs Un des principaux objectifs futurs est la formalisation des résultats présentés ici dans un assistant de preuves. Il risque d'y avoir des problèmes dans la formalisation de la construction de James, et encore plus dans la structure monoïdale du produit smash, où il y a beaucoup de manipulations de chemins et de chemins supérieurs à faire, mais cela devrait être possible.

Quelques résultats de cette thèse ont été énoncés et démontrés sous une forme plutôt restreinte étant donné que mon objectif principal était d'arriver au résultat π 4 (S 3 ) Z/2Z. Par exemple on devrait pouvoir calculer l'anneau de cohomologie de tous les J n (S k ), y compris J ∞ (S k ) ΩS k+1 , et de tous les CP n , y compris CP ∞ K(Z, 2). De plus, on a défini seulement la cohomologie à coefficients entiers mais il devrait être possible de définir la cohomologie à coefficients dans un groupe, un anneau ou un spectre arbitraire, et d'étendre la plupart des résultats présentés ici.

Finalement, le projet à long terme est évidemment de continuer le développement de la théorie de l'homotopie synthétique dans la théorie des types homotopiques. Il y a beaucoup de concepts qui n'ont pas encore été beaucoup étudiés mais qui semblent accessibles, comme la K-théorie, les opérations de Steenrod, les suites spectrales, les crochets de Toda et beaucoup d'autres. Je vais certainement continuer de poursuivre cette ligne de recherche et j'espère que cette thèse va inspirer d'autres personnes à participer à l'exploration de la théorie de l'homotopie synthétique étant donné tout ce qui n'attend qu'à être découvert.

  representing the type of pairs consisting in one element of A and one element of B. One can construct an element of A × B by pairing one element a of A and one element b of B: (a, b) : A × B.

  representing dependent pairs. Such types are often called Σ-types. Given a : A and b : B(a), we can construct the dependent pair (a, b) :

  where f inl : (a : A) → P (inl(a)), f inr : (b : B) → P (inr(b)).

  the two triangles α and β in order to obtain a filler of the square. The coherence operation is the one given by (a, c : A)(q

  fst = : (r : (a, b) = (a , b )) → a = A a , fst = (r) := ap fst (r), snd = : (r : (a, b) = (a , b )) → b = B fst = (r) b , snd = (r) := ap snd (r)

  we can define a function h : (x : A C B) → P (x) by h : (x : A C B) → P (x), h(inl(a)) := h inl (a), h(inr(b)) := h inr (b), ap h (push(c)) := h push (c), where we have h inl : (a : A) → P (inl(a)), h inr : (b : B) → P (inr(b)),

  Type, P (inl(a)) := P inl (a), P (inr(b)) := P inr (b), ap P (push(c)) := ua(P push (c)), where P inl : A → Type, P inr : B → Type,

  and we use the fact that |f (|a|)| = |a| by definition. Therefore the map | -| : A → A n is an equivalence of inverse f .

Definition 2.3. 1 .

 1 Given f : A → B and b : B, the (homotopy) fiber of f at b is the type fib f (b) := a:A (f (a) = b) .

  5.7]. For readability we use the notation b:B P (b) for the function type (b : B) → P (b). Proposition 2.3.8. For f : A → B and P : B → Type, consider the map λs.s • f : b:B P (b) → a:A P (f (a)).

  and B (a ) is ( f n-1 0 (a ) = An 0 |x|). From left to right we do an induction on the outer truncation, and we send |(a, b)| to |(|a|, e a (|b|))|. From right to left we do an induction on the outer truncation, an induction on A 0 , and, using the equivalence e a , an induction on B(a) -1 , and we send |(|a|, e a (|b|))| to |(a, b)|. Definition 2.6.4. Given a pointed type B and a dependent type P : B → Type together with a pointing of F := P ( B ), we define P Ω : ΩB → Type, P Ω (p) := ( F = P p F

Proof. It suffices to prove that the

  sequence at E, F and ΩB. An element (b, f ) of E is in the kernel of the map E → B if and only if b = B and in the image of the map F → E if and only if there exists f : F such that (b, f ) = ( B , f ). They are equivalent because if (b, f ) = ( B , f ) then b = B , and conversely if we have p : b = B then we can define f by transporting f in P along p and we get an equality (b, f ) = ( B , f ) in E.

  h(a, b) := fst(k(a))(b), p(x, b) := fst(ϕ(x))(b), q(a, y) := snd(k(a))(y), r(x, y) := snd(ϕ(x))(y).

W

  A,B (inl(a)) := inr(north), W A,B (inr(b)) := inl(north), ap W A,B (push(a, b)) := ap inr (ϕ B (b)) • push( 1 ) • ap inl (ϕ A (a)).

  [Hou13]. Proposition 3.4.3 (Blakers-Massey theorem). Given two maps f : C → A and g : C → B, we consider D := A C B, E := a:A b:B (inl(a) = D inr(b)), and h : C → E defined by h(c) := (f (c), g(c), push(c)).

  a, b) := inr((a, b)) together with two equalities proj r : (a : A) → proj(a, B ) = A∧B , proj l : (b : B) → proj( A , b) = A∧B , proj r (a) := push(inl(a)), proj l (b) := push(inr(b))

Proposition 4.1. 2 .

 2 The smash product is a 1-coherent symmetric monoidal product on pointed types. Sketch of proof. Putting the unit aside for a moment, we have to define six functions of the form(x : A ∧ B) → P (x),four of the form (x : (A ∧ B) ∧ C) → P (x), two of the form (x : A ∧ (B ∧ C)) → P (x), and one of the form

(

  where f : S 1 → A → ΣA, f (base, a) := north, ap f (-,a) (loop) := ϕ A (a).

Proposition 4.2. 4 .

 4 For n, m : N * , there is a filler of the diagramS n ∧ S m S m ∧ S n

Figure 4 . 1 :

 41 Figure 4.1: Case (n, m + 1)

  consists of a function k : (b : B) → P (proj(b, C )) together with an equality between k(f (a)) and d(proj(a, C )) for every a : A. Therefore the map λb. transport P (proj r (b) -1 , d( A∧C )) together with the equality transport P (proj r (f (a)) -1 , d( A∧C )) = d(proj(a, C )) given by ap d (proj r (a)) is an element of Q( C ). Putting everything together, what we obtain is a function g : (b : B)(c : C) → P (proj(b, c)) together with paths, for all a : A, b : B and c : C, g(f (a), c) = d(proj(a, c)), (4.3.3) g(b, C ) = transport P (proj r (b) -1 , d( A∧C )) (4.3.4) which are equal (via a 2-dimensional path) in the case g(f (a), C ). Therefore we can now define h : (x : B ∧ C) → P (x) as follows. For the basepoint B∧C we take d( A∧C ). For an element of the form proj(b, c) we take g(b, c). For proj r (b) it is automatic by the equation 4.3.4. For proj l (c) we prove that g( B , c) is equal to d( A∧C ) over proj l (c) by the composition

Proof.

  For every k : N * , the type S k is (k -1)-connected by proposition 2.4.2 and the map | -| k : S k → K k is k-connected by proposition 2.3.11. Therefore, by proposition 4.3.5, the map | -| i ∧ | -| j on the left of the diagram is (i + j)-connected. Moreover, the type K i+j is (i + j)-truncated; hence, by proposition 2.3.8, we obtain the map and a filler of the diagram.

  we have ∆(i(|δ|)) = f * (inl * (|δ|)) -g * (inr * (|δ|)). Moreover we have f * (inl * (|δ|)) = λc.δ(inl(f (c))) and g * (inr * (|δ|)) = λc.δ(inr(g(c))) which are equal via the homotopy λc. ap δ (push(c)). Therefore ∆(i(|δ|)) = 0. Ker(∆) ⊂ Im(i) Given α : A → K n , β : B → K n , and γ : f * (|α|) = g * (|β|), i.e. γ : (c : C) → α(f (c)) = β(g(c)), we construct δ : D → K n by δ(inl(a)) := α(a), δ(inr(b)) := β(b), ap δ (push(c)) := γ(c). The image of |δ| by i is (|α|, |β|), which is what we wanted.

  which gives directly the first result together with the fact that i * n and i k * send x and y to c n and c k and the other one to 0. The two projections p * n and p k * send c n and c k back to x and y because we have p n • i n = id S n and p k • i k = id S k . The Mayer-Vietoris sequence also shows that the map ∧ n,k • proj :

  where e : H n (B),e := |λb.c b (south Q(b) )|.

  We have • If Γ ctx holds and (x : T ) ∈ Γ, then Γ T type holds. • If Γ γ : Γ holds and (x : T ) ∈ Γ, then Γ π Γ x (γ) : T [γ/Γ] where π Γ x is the nth projection, where n is the position of x in Γ (or in other words, π Γ x (γ) = x[γ/Γ]).

Lemma A.2. 4

 4 (substitution). Assume Γ ctx and Γ γ : Γ hold. Then:• If Γ T type holds, then Γ T [γ/Γ] type holds. • If Γ u : T holds, then Γ u[γ/Γ] : T [γ/Γ] holds. • If Γ θ : Θ holds, then Γ θ[γ/Γ] : Θ holds.Lemma A.2.5 (compatibility). Assume Γ ctx holds. Then we have • If Γ u : T holds, then Γ T type holds.

Definition A.3. 1 .

 1 The depth of a type/term/context morphism is defined by depth(coh ∆.T (δ)) := max(depth(δ), depth(T ) + 1, depth(∆) + 1), depth(u = T v) := max(depth(u), depth(v), depth(T )), depth((γ, u)) := max(depth(γ), depth(u)), and depth( ) = depth(x) = depth(()) = 0.

  ) ) in the base case, which is well-typed by lemma A.4.4.Definition of id ∆a and J ∆ . For a : A, the sequence of terms id ∆ a : ∆ A is defined by induction on ∆ by id (x: ) a := (a), id (∆ ,y:T,z:u= T y) a

For

  a : A, P : (δ : ∆ A ) → Type, and d : (a : A) → P (id ∆ a ), the term J ∆ (P, d) : (δ : ∆ A ) → P (δ) is defined by induction on ∆ by J (x: ) (P, d, a) := d(a), J (∆ ,y:T,z:u= T y)(P, d, δ , y, z) := J( u A ∆ ,T (δ ), P (δ ), J ∆ ((λδ .P (δ , u A ∆ ,T (δ ), idp u A ∆ ,T (δ ) )), d, δ )) (y, z).

  3-sphere and the join of two circles B.6.1 Join and associativityGiven two types A and B, the join of A and B is the higher inductive type A * B with constructorsinl : A → A * B, inr : B → A * B, push : (a : A)(b : B) → inl(a) = A * B inr(b). If A is pointed then A * B is pointed by inl( A ).This operation is associative, we have the pointed mapα A,B,C : A * (B * C) → (A * B) * C, α A,B,C (inl(a)) := inl(inl(a)),α A,B,C (inr(inl(b))) := inl(inr(b)), α A,B,C (inr(inr(c))) := inr(c), ap α A,B,C •inr (push(b, c)) := push(inr(b), c), ap α A,B,C (push(a, inl(b))) := ap inl (push(a, b)), ap α A,B,C (push(a, inr(c))) := push(inl(a), c), apd ap α A,B,C • push(a,-) (push(b, c)) := in = (op(out = (apd push(-,c) (push(a, b))))). For the last equation, inside the in = we need a term of type ap inl (push(a, b)) • push(inr(b), c) = idp inl(inl(a)) • push(inl(a), c) and the out = term has type push(inl(a), c) • idp inr(c) = ap inl (push(a, b)) • push(inr(b), c). Hence the term op is the path algebra mapping from one type to the other, which isn't complicated to define. The map α -1 A,B,C : (A * B) * C → A * (B * C) is defined in a similar way. Given two maps f : A → A and g : B → B , we define the map f * g : (A * B) → (A * B ), (f * g)(inl a) := inl(f (a)), (f * g)(inr b) := inr(g(b)), ap f * g (push(a, b)) := push(f (a), g(b)).

ψ

  A (north) := inl(true), ψ A (south) := inl(false),ap ψ A (merid(a)) := push(true, a) • push(false, a) -1 , ψ -1 A : 2 * A → ΣA, ψ -1 A (inl(true)) := north, ψ -1 A (inl(false)) := south, ψ -1 A (inr(a)) := south, ψ -1 A (push(true, a)) := merid(a), ψ -1A (push(false, a)) := idp south .We also define the following two pointed maps, again inverse to each other: c : (2 * 2) → S 1 , c(inl(b)) := base, c(inr(b )) := base, ap c (push(true, true)) := loop, ap c (push(b, b )) := idp base , c -1 : S 1 → (2 * 2), c -1 (base) := inl(true), ap c -1 (loop) := push(true, true)

  hub = : hub = B hub , spoke = : spoke = λh.(t:S n+1 )→h= B k(t) hub = spoke . We take hub = := hub k and spoke = := funext dep (spoke = ), where spoke= : (t : S n+1 ) → spoke(t) = λh.h= B k(t) hub = spoke (t), spoke = (t) := in = (spoke = (t)),wherespoke = : (t : S n+1 ) → spoke(t) = hub = • spoke (t)is deduced from spoke k by some coherence operation.

  et [Unimath] pour Coq, [HoTTAgda] pour Agda et [HoTTLean] pour Lean.

  fonctions. Étant donnés deux types A et B, le type des fonctions de A vers B est noté A → B. On peut appliquer une fonction f : A → B à un élément a : A, on obtient alors un élément f (a) : B, et on définit une fonction f : A → B en donnant la valeur de f (x) : B, pour x une variable de type A. Le type des fonctions se généralise au type des fonctions dépendantes, noté (x : A) → B(x), lorsque B est un type dépendant sur A. On introduit ensuite le type des paires A × B, pour deux types A et B. Étant donné a : A et b : B on peut considérer l'élément (a, b) de A × B, et étant donné un élément u : A × B on peut considérer fst(u) : A et snd(u) : B. Comme pour le type des fonctions, le type des paires se généralise au type des paires dépendantes x:A B(x) où le type du deuxième composant dépend du premier composant.

  base : S 1 , loop : base = S 1 base et le pushout d'un diagramme de la forme A C B f g qui est le type A C B engendré par les trois constructeurs inl : A → A C B, inr : B → A C B, push : (c : C) → inl(f (c)) = A C B inr(g(c)).

  Étant donné un type A pointé parA : A et un entier n ≥ 1, on définit l'espace des lacets itérés de A par Ω 0 A := A, Ω n+1 A := Ω(Ω n A), où ΩA := ( A = A ) est l'espace des lacets de A. On définit ensuite le nième groupe d'homotopie de A par π n (A) := Ω n A 0 . Afin de calculer les groupes d'homotopie du cercle, on définit la fibration U : S 1 → Type, U (base) := Z, ap U (loop) := ua(succ Z ). où on utilise l'axiome d'univalence ua et le fait que succ Z est une équivalence de Z. Le lemme d'aplatissement implique que l'espace total de U est contractile, ce qui implique que π 1 (S 1 ) Z et que π n (S 1 ) est trivial pour tout n > 1. On définit ensuite la notion de type n-connexe comme étant un type dont la ntroncation est contractile, et une fonction est dite n-connexe si toutes ses fibres sont n-connexes. Les fonctions n-connexes vérifient le principe d'induction suivant. Une fonction f : A → B est n-connexe si et seulement si pour toute famille P : B → Type de types n-connexes et toute fonction d : (a : A) → P (f (a)) il existe une section s : (b : B) → P (b) de P telle que pour tout a : A on ait s(f (a)) = d(a). Ceci permet de montrer entre autres que la fonction | -| : A → A n est n-connexe, que la composée de deux fonctions n-connexes est n-connexe et qu'un pushout d'une fonction n-connexe est n-connexe. On en déduit ensuite que la sphère S n est (n-1)-connexe et qu'en particulier tous les groupes π k (S n ) avec k < n sont triviaux. On définit enfin la fibration de Hopf par Hopf : S 2 → Type, Hopf(north) := S 1 , Hopf(south) := S 1 , ap Hopf (merid(x)) := ua(µ(-, x)),

  proj r : (a : A) → proj(a, B ) = A∧B , proj l : (b : B) → proj( A , b) = A∧B , proj rl : proj r ( A ) = proj l ( B ).

  . Let's first recall the following proposition which is a generalization of proposition 2.3.8. It is proved in [UF13, lemma 8.6.1].

Proposition 3.2.9. If f : A → B is n-connected and P : B → Type is a family of (n + k)-types, then the map λs.s • f : b:B

  Les mathématiques sont traditionellement basées sur un système à deux niveaux : le niveau logique où vivent les propositions et les démonstrations, et le niveau mathématique où vivent les objets mathématiques.Le niveau logique est utilisée pour raisonner sur le niveau mathématique. Par exemple, construire un certain objet mathématique est une activité qui se passe dans le niveau mathématique, alors que démontrer un théorème est une activité qui se passe dans le niveau logique. En théorie des types dépendants, ces deux niveaux sont fusionnées en un seul où vivent les types et leurs éléments. En plus de représenter des objets mathématiques, les types jouent aussi les rôle des propositions (logiques) et leurs éléments jouent le rôle des démonstrations de ces propositions. Démontrer une certaine proposition consiste en la construction d'un élément du type correspondant. Par exemple, démontrer une implication A =⇒ B corresponds à la construction d'un élément dans le type de fonctions A → B, c'est-à-dire c'est une fonction transformant une démonstration de A en une démonstration de B. Démontrer une conjonction A ∧ B correspond à la construction d'un élément dans le type produit A × B, c'est-à-dire c'est un couple formé d'une démonstration de A et d'une démonstration de B. Cette correspondance entre types et propositions et entre éléments de types et démonstrations est connue sous le nom de correspondance de Curry-Howard. On distinguera parfois entre les types « vus comme des propositions » et les types « vus comme des types » afin d'expliquer l'intuition derrière certaines constructions, mais la différence entre les deux est souvent floue. Par exemple, le type A B peut être vu à la fois comme la proposition « A et B sont isomorphes » et comme le type de tous les isomorphismes entre A et B. En effet, en mathématiques constructives, démontrer que A et B sont isomorphes est la même chose que construire un isomorphisme entre les deux. Le mot « dépendants » dans « théorie des types dépendants » fait référence au fait que les types peuvent dépendre d'éléments d'autres types. De tels types sont appelés des types dépendants ou des familles de types. Étant donné un type A, avoir un type dépendant B au dessus de A signifie que pour tout élément a : A on a un type B(a). Les types dépendants sont essentiels pour la représentation des propositions quantifiées comme on le verra dans le chapitre 1. Par exemple, une proposition dépendant d'un entier naturel n : N est représentée par un type dépendant de la variable n. Un type dépendant B au dessus de A où tous les types B(a) sont vus comme des propositions est appelé un prédicat sur A.

1.10. TRUNCATEDNESS AND TRUNCATIONS

• Γ ctx means that Γ is a well-typed context.• Γ γ : Γ means that γ is a well-typed context morphism from Γ to Γ .• Γ T type means that T is a well-typed type in the context Γ.• Γ t : T means that t is a well-typed term of type T in the context Γ.• ∆ contr means that the context ∆ is a contractible context.The ten typing rules of T ∞ are the following.Contexts∅ ctx Γ T type (Γ, x : T ) ctx (x ∈ Γ) Context morphisms Γ () : ∅ Γ T type Γ γ : Γ Γ u : T [γ/Γ ] Γ (γ, u) : (Γ , x : T ) (x ∈ Γ ) Types Γ type Γ u : T

Acknowledgments

For instance, given two pointed maps f : A → A and g : B → B , we define their smash product by f ∧ g : A ∧ B → A ∧ B , (f ∧ g)(proj(x, y)) := proj(f (x), g(y)).

The images of the other constructors is as follows. For A∧B we just take A ∧B . For proj r (x) we need to give a path from proj(f (x), g( B )) to A ∧B and the most obvious choice is ap proj(f (x),-) ( g ) • proj r (f (x))

and similarly for proj l (y). For proj rl we need to fill the square

and this is done by combining the two squares

)

where the first one and the two triangles of the second one are filled by naturality squares and the oval shape in the middle of the second one is filled by proj rl .

Similarly, we define associativity by For functoriality, naturality of associativity, naturality of commutativity, the pentagon, the hexagon, and the triangle, the idea is that we can easily check by hand that it holds by definition for elements of the form proj(a, b) (or proj(proj(a, b), c) or proj(proj(proj(a, b), c), d)), therefore by a similar argument of contractibility, they hold also for an arbitrary element of type A ∧ B (or (A ∧ B) ∧ C or ((A ∧ B) ∧ C) ∧ D). Proposition 6.1.2. Given a connected pointed type B, a family of pointed types Q : B → Type (i.e. a family of types equipped with a section) such that Q( B ) = S n , and a map c : (b :

such that c B : S n → K n is a generator of (S n → K n ) Z, then the map

is an equivalence. Moreover, such a c always exists if B is 1-connected.

Proof. The result is actually true for the untruncated map

and for all the fiberwise maps

Let's prove that all the g i b are equivalences. Given that B is connected, it is enough to do it for b = B . We proceed by induction on i. For i = 0, we have K 0 = Z, and

which is an equivalence by assumption. We now assume that g i B is an equivalence, and we want to prove that g i+1 B is also an equivalence. Note first that K i+1 and S n → K i+1+n are both pointed and connected, hence it's enough to prove that Ωg i+1

B is an equivalence in order to show that g i+1 B is, by [UF13, theorem 8.8.1]. We will also use the fact that given a function f : A → B → C and a path p : b = b , there is an equality

. This equality is proven by path induction on p.

Given p : ΩK i+1 , we have

All those functions are equivalences, hence Ωg i+1

B and then g i+1 B are equivalences as well. We have proved that g i b is an equivalence. We now have

), and Φ is an equivalence as well.

Let's now prove that c exists whenever

so it's enough to define c on the base point of B, and in this case we choose for c B any generator of (S n → K n ) Z.

We now apply this result to the special case of the fibration obtained by taking the fiberwise suspension of a family of spheres. This gives what is known as the Thom isomorphism.

Let B be a 0-connected pointed type and P : B → Type a fibration over B such that P ( B ) = S n-1 . We define E := x:B P (x) its total space and E := 1 E B the cofiber of the map E → B, and we have a map i : S n → E corresponding to the fiber S n-1 over B . We also define a family of pointed types Q : B → Type by Q(b) := Σ(P (b)) pointed by the north pole, F := x:B Q(x) its total space and F := 1 B F the cofiber of the map B → F sending b to (b, Q(b) ). It is easy to see that E and F are equivalent, with all identified north poles in F corresponding to the basepoint in E and all south poles corresponding to the B term in E. For every pointed type A we have an equivalence

because a pointed map from F to A corresponds to a family of pointed maps from all Q(b) to A. Therefore, we have an equivalence

for every k : N.

Appendix A

A type-theoretic definition of weak ∞-groupoids

In this appendix we give a type-theoretic definition of weak ∞-groupoids, and we prove that, using the J rule of dependent type theory, we can equip every type with a structure of weak ∞-groupoid. This definition has been partly inspired by Grothendieck's definition of weak ∞-groupoids as presented by Dimitri Ara and Georges Maltsiniotis, cf for instance [START_REF] Ara | Sur les ∞-groupoïdes de Grothendieck et une variante ∞-catégorique[END_REF]. A similar result has also been proved in [START_REF] Van Den | Types are weak ω-groupoids[END_REF] where it is shown that every type in dependent type theory can be equipped with the structure of a weak ω-groupoid in the sense of Batanin-Leinster. The definition of weak ∞-groupoids presented here is more directly related to type theory. It is not known, however, whether this definition is in some sense equivalent to the standard one (Kan complexes).

A.1 Globular sets

Just as a category is defined as a graph together with some structure on it, a weak ∞-groupoid is defined as a globular set (or ∞-graph) together with some structure on it. We recall the definition of globular set. Definition A.1.1. A globular set A is a sequence of sets (A n ) n∈N and maps s n , t n : A n+1 → A n (source and target) such that for every n ∈ N we have:

If A is a globular set, we write Ob(A) for A 0 and we call its elements the objects of A. If x and y are two objects of A, there is another globular set, called Hom A (x, y), defined by

The (large) set of all globular sets is denoted by Glob.

A.2 The internal language of weak ∞-groupoids

A weak ∞-groupoid is a globular set equipped with a large number of operations, with a few examples listed in section 1.4.1. In order to describe precisely what are those operations, the idea is to design a minimalist type theory T ∞ from which we can extract the specification of all the operations. Then we explain how to interpret this type theory into a globular set, and a weak ∞-groupoid will be defined as a globular set together with all the required operations.

There are four kind of things in T ∞ : contexts, types, terms, and context morphisms (sequences of terms). We have one base type , which represents our ambient weak ∞-groupoid, and a type u T v for each type T and terms u, v : T , which represents an iterated hom-set of the ambient weak ∞-groupoid. Apart from variables, the only way to create new terms is to use one of the coherence operations coh ∆.T (δ) that we describe below. Moreover, there is a special class of contexts called contractible contexts, which are used to define the coherence operations.

We use the letters Γ, Θ to represent contexts, ∆ to represent contractible contexts, T , U to represent types, t, u, v to represent terms, and γ, θ, δ to represent context morphisms.

The syntax of the language can be summarized by the following grammar.

In coh ∆.T (δ), the part coh ∆.T is the name of the coherence operation (corresponding for instance to "composition of paths" or "exchange law") while the δ is the list of points, paths, and higher paths to which we apply the coherence operation. The part coh ∆.T should be seen as an atomic symbol.

Given a term, type, or context morphism X, a free variable of X is a variable which appears at least once in X in a position which is not a subscript of the coh symbol. For instance in the term coh (x,y: ,f :x y).y x ((y, z, g)),

the free variables are y, z, and g, but x and f are not free.

If Γ is a context, γ is a context morphism having the same length as Γ and X is a type, term or context morphism such that every free variable of X is declared in Γ, we define X[γ/Γ] as the type/term/context morphism obtained by replacing every free variable of X by the corresponding term in γ. In particular, for terms of the form coh ∆.T (δ), substitution must be performed only in δ and not in ∆.T .

The five judgment forms of T ∞ are the following.

All the operations in section 1.4.1 give examples of contractible contexts. The idea is that a coherence operation has a list of arguments, whose shape forms a contractible context ∆, and a return type T , which can be any type in the context ∆ using only coherence operations, as they are the only terms available in T ∞ . The definition of weak ∞-groupoid should now be intuitively clear. A weak ∞-groupoid is a globular set together with, for every context ∆ and every type T such that ∆ contr and ∆ T type hold, an operation taking a list of arguments of types corresponding to ∆ and returning a result of type corresponding to T . Making this definition precise isn't as easy as it seems, though. We first need to prove some syntactic properties of T ∞ , and then we will explain how the syntax is translated into actual operations on a globular set.

Lemma A.2.1 (syntactic substitution). Let X be a type, a term or a context morphism, Γ and Θ two contexts, γ and θ two context morphisms, T a type and u a term. Then the following syntactic equalities hold whenever all the objects involved are well-defined (we consider that

Proof. We proceed by induction on X. If X is a variable it holds by definition of the objects involved, otherwise we apply the induction hypothesis.

Lemma A.2.2 (weakening). Let's assume that Γ ctx holds, for Γ = (Γ 0 , y : B). Then we have

Proof. We proceed by induction on the typing derivation of the judgment. For the case of a variable we use the fact that Γ ctx holds and that if (x : T ) ∈ Γ 0 , then (x : T ) ∈ Γ. For the other cases we apply the induction hypothesis.

Proof. Given a globular set G we have

and given a ∈ Ob(G) we have

Therefore, the operation coh G (x: ).x x takes an object a of G and returns a morphism from a to a. In particular, such an operation exists only when the graph is a reflexive graph.

Example A.3.9. The inverse coherence operation is coh (x,y: )(t:x y).y x .

Proof. Given a globular set G we have

and given a triple (a, b, p) in this set we have

Therefore, the operation coh G (x,y: )(t:x y).y x takes a morphism p in G between two objects a and b and returns a morphism p -1 going from b to a.

Example A.3.10. The involutivity of inverse coherence operation is coh (x,y: )(t:x y).t x y (coh (x,y: )(t:x y).y x (y,x,coh (x,y: )(t:x y).y x (x,y,t))) .

Proof. Here the coherence operation is of depth 1, therefore we need to start with a 1-partial weak ∞-groupoid G. In a 1-partial weak ∞-groupoid we have in particular the coh (x,y: )(t:x y).y x (a, b, p) coherence operation described in the previous example. We write it p → p -1 for short. We have

and given a triple (a, b, p) in this set we have t x y (coh (x,y: )(t:x y).y x (y, x, coh (x,y: )(t:x y).y x (x, y, t))) G (x,y:

Therefore, the operation we're looking at takes a morphism p in G between two objects a and b and returns a 2-morphism from p to (p -1 ) -1 . There are many coherence operations which seem completely superfluous like for instance coh (x,y: )(t:x y).x y (a, b, p) which gives a morphism from a to b given a morphism p from a to b. There are also various ways to order the arguments, for instance in the diagram for horizontal composition of 2-morphisms, which give different contexts hence different coherence operations. But this is not a problem because it is always possible to prove that they are all equal to one another via another coherence operation.

A.4 The underlying weak ∞-groupoid of a type

We now prove that in a dependent type theory T ML with identity types, the J rule, and the definitional computation rule, we can equip every type with a structure of syntactic weak ∞-groupoid. In this section we write ∞ for the judgments in the type theory T ∞ described above and ML for the judgments in T ML . We write Id A (u, v) for the identity type if T ML and ≡ for definitional equality in T ML .

We first define the iterated constant path and its type. We now consider a type A of T ML and we want to equip it with a structure of weak ∞-groupoid. The idea is that a coherence operation in a contractible context ∆ is defined by successive applications of the J rule until we reach the context (a : A). Then we have to prove an equality between two terms in this context and it turns out that all terms defined only using coherence operations in the context (a : A) are definitionally equal to the iterated constant path. Therefore we can define the coherence operation in the case (a : A) by an iterated constant path, and it preserves the invariant that a coherence operation applied to constant paths is definitionally equal to a constant path.

We define an interpretationof T ∞ into T ML , define two terms id ∆ and J ∆ for every contractible context ∆, and prove three lemmas stating that, in the context (a : A), all types are definitionally equal to I (A,a) n and all terms are definitionally equal to i (A,a) n . All of that has to be done simultaneously by induction. We also need a substitution and a weakening lemma, stating that the interpretation commutes with the operations of substitution and weakening, but we do not state them here for simplicity. The dimension of a type is defined by dim( ) = 0 and dim(u T v) = dim(T ) + 1. Definition A.4.2. The interpretation of T ∞ into T ML satisfies the following typing rules and is defined below.

Definition A.4.3. For every contractible context ∆, we define a context morphism Lemma A.4.5. For every contractible contexts ∆, ∆ and every context morphism ∆ ∞ δ : ∆, we have the definitional equality

Lemma A.4.6. For every contractible context ∆ and every term ∆ ∞ t : T , we have the definitional equality

Definition of the interpretation. The interpretation is defined as follows:

• The definition of Γ A is

• The definition of (γ :

Proof of lemma A.4.6. We want to prove that t A ∆,T (id ∆ a ) is definitionally equal to i (A,a) dim(T ) . We proceed by induction on ∆ and t. If t is a variable, then given the definition of id ∆ a , the interpretation of t is either a or of the form u A ∆ ,T (id ∆ a ) or idp u A ∆ ,T (id ∆ a ) ), which are definitionally equal to i (A,a) dim(T ) by induction hypothesis, as ∆ is strictly smaller that ∆.

If t is of the form coh ∆.T (δ), then we have

dim(T ) , using lemma A.4.5 and the reduction rule for J ∆ .

This concludes the proof that we can interpret all the coherence operations as terms of T ML . This is all we need when using type theory as a foundational system as is done in this thesis, but we can also get an actual set-based weak ∞-groupoid if desired.

Definition A.4.7. Given a type A in T ML , we define a globular set A G by

Proposition A.4.8. Given a type A in T ML , the globular set A G has a structure of weak ∞-groupoid.

Proof. Giventhe interpretation of T ∞ in T ML given in definition A.4.2, we define an interpretation of T ∞ in the globular set A G in the sense of definition A.3.3 by

It is easy to check that it satisfies the required properties and it gives an interpretation of all the coherence operations in A G .

Appendix B

The cardinal of π 4 (S 3 )

The purpose of this appendix is to give a self-contained definition of the natural number n : N satisfying π 4 (S 3 ) Z/nZ, in order to serve as a sophisticated test case for candidates for a computational interpretation of univalence and higher inductive types. It doesn't contain the proof that π 4 (S 3 ) Z/nZ nor the proof that n = 2, only the definition of n based on theorem 3.4.5.

If you wrote a proof assistant for homotopy type theory giving a computational interpretation of univalence and higher inductive types, please try to implement the following computation and check that you do get 2 as the result.

B.1 Preliminaries

Here are some basic definitions of homotopy type theory that we use, to fix the notations.

• The universe is Type.

• Given a type A and two elements a, b : A, the type of paths from a to b is a = A b (identity type).

• Given an element a : A, the constant path at a is idp a .

• Given a path p : a = A b, the reverse path of p is p -1 : b = A a.

• Given two composable paths p : a = A b and q : b = A c, their composition is p • q : a = A c (diagrammatic order).

• Given a function f : A → B and a path p : a = A b, the application of

• Given a dependent type P : A → Type, a path p : a = A b and an element u : P (a), the transport of u along p in P is transport P (p, u) : P (b).

B.1.1 Equivalences

Given a function f : A → B, there is a type isequiv(f ) of proofs that f is an equivalence. We do not specify this type here but it should have the following properties:

• A function f is an equivalence if and only if there exists g : B → A such that g(f (x)) = A x and f (g(y)) = B y for every x : A and y : B.

• Any two elements of isequiv(f ) are equal.

We write A B for the type f :A→B isequiv(f ).

B.1.2 Dependent paths

Given a dependent type P : A → Type, a path p : a = A b and two elements u : P (a) and v : P (b), we write u = P p v for the type of dependent paths from u to v over p. We assume that u = P idp a v is definitionally equal to u = P (a) v. The type of dependent paths u = P p v is equivalent to the type transport P (p, u) = P (b) v. We have the two maps

which are inverse to each other. If P is of the form P (x) := (f (x) = B g(x)), then we have two maps

B.1.3 Function extensionality and univalence

We assume unary function extensionality, which is a term of type

Moreover, funext{f }{g} is a equivalence. We also assume ternary function extensionality

B.2. THE DEFINITION

B.3 Suspensions and spheres

The circle is defined as the higher inductive type S 1 with constructors base : S 1 , loop : base = S 1 base.

Given a type A, we define the suspension of A as the higher inductive type ΣA with constructors north : ΣA, south : ΣA,

For n ≥ 1, we define the (n + 1)-sphere as the suspension of the n-sphere:

B.4 Pointed types, pointed maps and loop spaces

A pointed type is a type A together with a point A : A (often omitted when clear from the context). The circle is pointed by base and the suspension of any type by north. A pointed map between two pointed types A and B is a map f : A → B together with an equality f : f ( A ) = B (also often omitted). The loop space of a pointed type A is the type ΩA := ( A = A ) pointed by idp A . We can iterate this operation: Ω 1 A := ΩA and Ω n+1 A := Ω(Ω n A). If f is a pointed map between the pointed types A and B, then Ωf is the map between ΩA and ΩB defined by

We can again iterate this operation as above.

B.5 Loop space of a suspension

Given a pointed type A, we define the map

B.7 The main map

The map α : S 1 * S 1 → S 2 is the main map which appears in the proof that π 4 (S 3 ) Z/nZ; all the other maps appear already in the construction of the Hopf fibration or in the Freudenthal suspension theorem. In the notation of chapter 3 of this thesis, it is the map ∇ S 2 • W S 1 ,S 1 . It is defined by

and pointed by idp north .

B.8 The map defining π 3 (S 2 )

We now want to go from Ω 3 S 2 to Ω 3 (S 1 * S 1 ). We do that by going back one of the maps in the long exact sequence of the Hopf fibration, so it's not completely trivial. It's a priori a bit surprising that we can do it with actual loop spaces and not just homotopy groups, but this is because we can use the fact that the double loop space of the fiber S 1 is contractible (which is stronger than just having trivial homotopy groups).

B.8.1 The Hopf fibration

Using the fact that the identity function is an equivalence and that an equality between two equivalences is determined by an equality between the underlying functions, we define the map

The Hopf fibration is the dependent type

The total space of the Hopf fibration is equivalent to S 1 * S 1 , which means that in particular we have a map t : (x : S 2 ) → (Hopf(x) → S 1 * S 1 ), t(north) := inl, t(south) := inr, apd t (merid(x)) := funext 3 (t merid (x)), where t merid : (x : S 1 ){y, y : S 1 }(p : y = Hopf merid(x) y ) → inl(y) = S 1 * S 1 inr(y ), t merid (x)(p) := push(y, µ(x)(y)) • ap inr (out transport (p)), and then we have t :

x:S 2 Hopf(x) → S 1 * S 1 , t (x, y) := t(x)(y).

B.8.2 Looping a fibration

Let P : B → Type be a dependent type over a pointed type B and such that F := P ( B ) is pointed. The total space of P is pointed by ( B , F ). We define the dependent type P Ω : ΩB → Type, P Ω (p) := ( F = P p F ).

Note that the fiber of P Ω (over the basepoint of ΩB, i.e. idp B ) is definitionally equal to ΩF , and we point it by idp F . The total space of P Ω is equivalent to the loop space of the total space of P , in particular we have a (pointed) map p:ΩB (P Ω (p)) → Ω( x:B P (x)) given by 1-dimensional pairing. We can then iterate this construction, we write P Ω 2 for (P Ω ) Ω and P Ω 3 for (P Ω 2 ) Ω . Note that if F is (n + 1)-truncated, then every fiber of P Ω is n-truncated because every fiber of P Ω is equivalent to an identity type of F via in transport and out transport .

B.8.3 Looping the Hopf fibration

Let's consider the triple looping of the Hopf fibration:

The fiber of Hopf is S 1 which is 1-truncated, hence every fiber of Hopf Ω 3 is (-2)truncated, i.e. contractible. Therefore for every p : Ω 3 S 2 there is a q : Hopf Ω 3 (p), so we get a point (p, q) in p:Ω 3 S 2 (Hopf Ω 3 (p)). Using the maps above, we get a point in Ω 3 ( x:S 2 (Hopf(x))), and then in Ω 3 (S 1 * S 1 ) after applying Ω 3 t . This gives us the map h : Ω 3 S 2 → Ω 3 (S 1 * S 1 ).

B.9 Going back to π 2 (S 2 )

We now start decreasing the dimension by constructing a map Ω 3 S 3 → Ω 2 S 2 2 . This is the only place where we really need truncations. In the next subsection we implement truncations using regular higher inductive types. It can safely be skipped in a proof assistant with already a native support for truncations.

B.9.1 Truncations

In this subsection, we define the spheres slightly differently to make the inductive steps simpler. We define S 0 := 2 and S 1 := ΣS 0 . We do not need the other spheres at all here, so we keep the same notation for simplicity.

Given a type A and n ≥ -1, the n-truncation of A is the higher inductive type A n with constructors

Given a type B and a map f : S n+1 → B, a filler of f is a pair (hub f , spoke f ) with hub f : B and spoke f : (t : S n+1 ) → hub f = B f (t). If we have a filler for all maps S n+1 → B, we say that all (n+1)-spheres in B are filled. The hub and spoke constructors of A n state exactly that all (n + 1)-spheres in A n are filled. We prove that A n is n-truncated and that it has the following universal property: given an n-truncated type B, a map f : A → B can be extended in a unique way to a map f :

We prove first that if a type B has all (n + 1)-spheres filled, then B is n-truncated, by induction on n. It follows that A n is n-truncated.

For n = -1, given x, y : B, we define f : S 0 → B by f (true) := x, f (false) := y, and we assumed that B has all 0-spheres filled. We then have

For the induction step, we assume that B has all (n + 2)-spheres filled and we prove that every identity type of B has all (n + 1)-spheres filled. Let's take x, y : B. We define the maps

where spoke lemma has type spoke lemma : (f :

and is proved by path induction on p. This concludes.

We now prove the converse, i.e. that every n-truncated type has all (n + 1)-spheres filled. A consequence of that is the non-dependent elimination rule of truncations: if B is n-truncated, then any map f : A → B can be extended to a map f : A n → B such that f (|x|) := f (x), because for the application of f to the other constructors of A n we can just use the hub and spoke structure of B.

For n = -1, we know that B is a proposition and we define hub and spoke as follows: hub f is f (true) and spoke f is automatic because it's an equality in a proposition.

For n + 1, by induction hypothesis for every x, y : B, we have a hub x,y and spoke x,y for the type x = B y. We then define hub : (S n+2 → B) → B,

which shows that B has all (n + 2)-spheres filled. on S 2 , there is only one on S 2 2 so it is a bit more complicated to define. We write |p| 1 for ap λw.|w| (p).

We define the map is defined as follows:

• When x or y is base, using the fact that | -| 1 commutes with composition of paths, it's easy to prove the desired equality.

• When we apply µ merid,merid 2 to loop and loop, we need to construct a term in a 4-times iterated identity type of S 2 2 . But S 2 2 is 2-truncated, hence we need to construct something in a (-2)-truncated type which is automatic.

We have now defined µ 2 , but in order to use it to construct a fibration, we need to turn it into a map µ 2 : S 2 → ( S 2 2 S 2 2 ). For x : S 2 , the underlying map of µ 2 (x) is defined by applying the universal property of truncation to µ 2 (x). In other words, we have µ 2 (x)(|y|) := µ 2 (x)(y).

We prove that µ 2 (x) is an equivalence by noticing that µ 2 (north) is equal to the identity function, using the uniqueness principle for maps out of truncations, and then it from Ω 2 S 2 to ΩS 1 . That map is defined by e 2 : Ω 2 S 2 → ΩS 1 , e 2 (p) := transport Hopf Ω (p, idp base ).

This concludes the definition of n.

Online Resources

[Agd] The Agda team. Agda's documentation. Chap. Rewriting. url: http://agda. readthedocs.org/en/latest/language/rewriting.html.

[Agda] The Agda Team. The Agda Wiki. url: http://wiki.portal.chalmers.se/ agda/pmwiki.php.

[Bru15] Guillaume Brunerie. The 3 × 3-lemma in Agda. 2015. url: https://github. com/HoTT/HoTT-Agda/blob/master/homotopy/3x3/Commutes.agda.

[Cav14] Evan Cavallo. JoinAssocCubical.agda. 2014. url: https://github.com/HoTT/ HoTT-Agda/blob/master/homotopy/JoinAssocCubical.agda.

[Coq] The Coq Team. The Coq Proof Assistant. url: https://coq.inria.fr/.

[HoTTAgda] The HoTT-Agda library. url: https://github.com/HoTT/HoTT-Agda.

[HoTTCoq] The HoTT-Coq library. url: https://github.com/HoTT/HoTT.

[HoTTLean] The HoTT-Lean library. url: https://github.com/leanprover/lean/tree/ master/hott.

[Hou13] Kuen-Bang Hou. BlakersMassey.agda. 2013. url: https://github.com/HoTT/ HoTT-Agda/blob/1.0/Homotopy/BlakersMassey.agda.

[Lean] The Lean Theorem Prover. url: https://leanprover.github.io/.

[Shu11] Michael Shulman. A formal proof that π 1 (S 1 ) = Z. The Homotopy Type Theory Blog (2011). url: http://homotopytypetheory.org/2011/04/29/a-formalproof-that-pi1s1-is-z/.