In mathematics, **obstruction theory** is a name given to two different mathematical theories, both of which yield cohomological invariants.

In the original work of Stiefel and Whitney, characteristic classes were defined as obstructions to the existence of certain fields of linear independent vectors. Obstruction theory turns out to be an application of cohomology theory to the problem of constructing a cross-section of a bundle.

The older meaning for obstruction theory in homotopy theory relates to the procedure, inductive with respect to dimension, for extending a continuous mapping defined on a simplicial complex, or CW complex. It is traditionally called *Eilenberg obstruction theory*, after Samuel Eilenberg. It involves cohomology groups with coefficients in homotopy groups to define obstructions to extensions. For example, with a mapping from a simplicial complex *X* to another, *Y*, defined initially on the 0-skeleton of *X* (the vertices of *X*), an extension to the 1-skeleton will be possible whenever the image of the 0-skeleton will belong to the same path-connected component of *Y*. Extending from the 1-skeleton to the 2-skeleton means defining the mapping on each solid triangle from *X*, given the mapping already defined on its boundary edges. Likewise, then extending the mapping to the 3-skeleton involves extending the mapping to each solid 3-simplex of *X*, given the mapping already defined on its boundary.

At some point, say extending the mapping from the (n-1)-skeleton of *X* to the n-skeleton of *X*, this procedure might be impossible. In that case, one can assign to each n-simplex the homotopy class *π*_{n-1}(*Y*) of the mapping already defined on its boundary, (at least one of which will be non-zero). These assignments define an n-cochain with coefficients in *π*_{n-1}(*Y*). Amazingly, this cochain turns out to be a **cocycle** and so defines a cohomology class in the nth cohomology group of *X* with coefficients in *π*_{n-1}(*Y*). When this cohomology class is equal to 0, it turns out that the mapping may be modified within its homotopy class on the (n-1)-skeleton of *X* so that the mapping may be extended to the n-skeleton of *X*. If the class is not equal to zero, it is called the obstruction to extending the mapping over the n-skeleton, given its homotopy class on the (n-1)-skeleton.

Suppose that B is a simply connected simplicial complex and that *p* : *E* → *B* is a fibration with fiber F. Furthermore, assume that we have a partially defined section *σ*_{n} : *B*_{n} → *E* on the n-skeleton of B.

For every (*n* + 1)-simplex Δ in B, *σ*_{n} can be restricted to the boundary *∂Δ* (which is a topological n-sphere). Because p sends each *σ*_{n}(*∂Δ*) back to ∂Δ, *σ*_{n} defines a map from the n-sphere to *p*^{−1}(*Δ*). Because fibrations satisfy the homotopy lifting property, and Δ is contractible; *p*^{−1}(*Δ*) is homotopy equivalent to F. So this partially defined section assigns an element of *π*_{n}(*F*) to every (*n* + 1)-simplex. This is precisely the data of a *π*_{n}(*F*)-valued simplicial cochain of degree *n* + 1 on B, i.e. an element of *C*^{n + 1}(B; *π*_{n}(*F*)). This cochain is called the **obstruction cochain** because it being the zero means that all of these elements of *π*_{n}(*F*) are trivial, which means that our partially defined section can be extended to the (*n* + 1)-skeleton by using the homotopy between (the partially defined section on the boundary of each Δ) and the constant map.

The fact that this cochain came from a partially defined section (as opposed to an arbitrary collection of maps from all the boundaries of all the (*n* + 1)-simplices) can be used to prove that this cochain is a cocycle. If one started with a different partially defined section *σ*_{n} that agreed with the original on the (*n* − 1)-skeleton, then one can also prove that the resulting cocycle would differ from the first by a coboundary. Therefore we have a well-defined element of the cohomology group *H*^{n + 1}(*B*; *π*_{n}(*F*)) such that if a partially defined section on the (*n* + 1)-skeleton exists that agrees with the given choice on the (*n* − 1)-skeleton, then this cohomology class must be trivial.

The converse is also true if one allows such things as *homotopy sections*, i.e. a map *σ* : *B* → *E* such that *p* ∘ *σ* is homotopic (as opposed to equal) to the identity map on B. Thus it provides a complete invariant of the existence of sections up to homotopy on the (*n* + 1)-skeleton.

- By inducting over n, one can construct a
*first obstruction to a section*as the first of the above cohomology classes that is non-zero. - This can be used to find obstructions to trivializations of principal bundles.
- Because any map can be turned into a fibration, this construction can be used to see if there are obstructions to the existence of a lift (up to homotopy) of a map into B to a map into E even if
*p*:*E*→*B*is not a fibration. - It is crucial to the construction of Postnikov systems.

In geometric topology, obstruction theory is concerned with when a topological manifold has a piecewise linear structure, and when a piecewise linear manifold has a differential structure.

In dimension at most 2 (Rado), and 3 (Morse), the notions of topological manifolds and piecewise linear manifolds coincide. In dimension 4 they are not the same.

In dimensions at most 6 the notions of piecewise linear manifolds and differentiable manifolds coincide.

The two basic questions of surgery theory are whether a topological space with *n*-dimensional Poincaré duality is homotopy equivalent to an *n*-dimensional manifold, and also whether a homotopy equivalence of *n*-dimensional manifolds is homotopic to a diffeomorphism. In both cases there are two obstructions for *n>9*, a primary topological K-theory obstruction to the existence of a vector bundle: if this vanishes there exists a normal map, allowing the definition of the secondary surgery obstruction in algebraic L-theory to performing surgery on the normal map to obtain a homotopy equivalence.