# Quotient manifold

`Manifolds.IsQuotientManifold`

โ Type`IsQuotientManifold <: AbstractTrait`

Specify that a certain decorated manifold is a quotient manifold in the sense that it provides implicitly (or explicitly through `QuotientManifold`

properties of a quotient manifold.

See `QuotientManifold`

for more details.

`Manifolds.QuotientManifold`

โ Type`QuotientManifold{M <: AbstractManifold{๐ฝ}, N} <: AbstractManifold{๐ฝ}`

Equip a manifold $\mathcal M$ explicitly with the property of being a quotient manifold.

A manifold $\mathcal M$ is then a a quotient manifold of another manifold $\mathcal N$, i.e. for an equivalence relation $โผ$ on $\mathcal N$ we have

\[ \mathcal M = \mathcal N / โผ = \bigl\{ [p] : p โ \mathcal N \bigr\},\]

where $[p] โ \{ q โ \mathcal N : q โผ p\}$ denotes the equivalence class containing $p$. For more details see Subsection 3.4.1 [AMS08].

This manifold type models an explicit quotient structure. This should be done if either the default implementation of $\mathcal M$ uses another representation different from the quotient structure or if it provides a (default) quotient structure that is different from the one introduced here.

**Fields**

`manifold`

โ the manifold $\mathcal M$ in the introduction above.`total_space`

โ the manifold $\mathcal N$ in the introduction above.

**Constructor**

`QuotientManifold(M,N)`

Create a manifold where `M`

is the quotient manifold and `N`

is its total space.

## Provided functions

`Manifolds.canonical_project!`

โ Method`canonical_project!(M, q, p)`

Compute the canonical projection $ฯ$ on a manifold $\mathcal M$ that `IsQuotientManifold`

, e.g. a `QuotientManifold`

in place of `q`

.

See `canonical_project`

for more details.

`Manifolds.canonical_project`

โ Method`canonical_project(M, p)`

Compute the canonical projection $ฯ$ on a manifold $\mathcal M$ that `IsQuotientManifold`

, e.g. a `QuotientManifold`

. The canonical (or natural) projection $ฯ$ from the total space $\mathcal N$ onto $\mathcal M$ given by

\[ ฯ = ฯ_{\mathcal N, \mathcal M} : \mathcal N โ \mathcal M, p โฆ ฯ_{\mathcal N, \mathcal M}(p) = [p].\]

in other words, this function implicitly assumes, that the total space $\mathcal N$ is given, for example explicitly when `M`

is a `QuotientManifold`

and `p`

is a point on `N`

.

`Manifolds.differential_canonical_project!`

โ Method`differential_canonical_project!(M, Y, p, X)`

Compute the differential of the canonical projection $ฯ$ on a manifold $\mathcal M$ that `IsQuotientManifold`

, e.g. a `QuotientManifold`

. See `differential_canonical_project`

for details.

`Manifolds.differential_canonical_project`

โ Method`differential_canonical_project(M, p, X)`

Compute the differential of the canonical projection $ฯ$ on a manifold $\mathcal M$ that `IsQuotientManifold`

, e.g. a `QuotientManifold`

. The canonical (or natural) projection $ฯ$ from the total space $\mathcal N$ onto $\mathcal M$, such that its differential

\[ Dฯ(p) : T_p\mathcal N โ T_{ฯ(p)}\mathcal M\]

where again the total space might be implicitly assumed, or explicitly when using a `QuotientManifold`

`M`

. So here `p`

is a point on `N`

and `X`

is from $T_p\mathcal N$.

`Manifolds.get_orbit_action`

โ Method`get_orbit_action(M::AbstractDecoratorManifold)`

Return the group action that generates the orbit of an equivalence class of the quotient manifold `M`

for which equivalence classes are orbits of an action of a Lie group. For the case that

\[\mathcal M = \mathcal N / \mathcal O,\]

where $\mathcal O$ is a Lie group with its group action generating the orbit.

`Manifolds.get_total_space`

โ Method`get_total_space(M::AbstractDecoratorManifold)`

Return the total space of a manifold that `IsQuotientManifold`

, e.g. a `QuotientManifold`

.

`Manifolds.horizontal_component`

โ Method`horizontal_component(N::AbstractManifold, p, X)`

Compute the horizontal component of tangent vector `X`

at point `p`

in the total space of quotient manifold `N`

.

`Manifolds.horizontal_lift!`

โ Method```
horizontal_lift!(N, Y, q, X)
horizontal_lift!(QuotientManifold{M,N}, Y, p, X)
```

Compute the `horizontal_lift`

of `X`

from $T_p\mathcal M$, $p=ฯ(q)$. to ``T_q\mathcal N`

in place of `Y`

.

`Manifolds.horizontal_lift`

โ Method```
horizontal_lift(N::AbstractManifold, q, X)
horizontal_lift(::QuotientManifold{๐ฝ,MT<:AbstractManifold{๐ฝ},NT<:AbstractManifold}, p, X) where {๐ฝ}
```

Given a point `q`

in total space of quotient manifold `N`

such that $p=ฯ(q)$ is a point on a quotient manifold `M`

(implicitly given for the first case) and a tangent vector `X`

this method computes a tangent vector `Y`

on the horizontal space of $T_q\mathcal N$, i.e. the subspace that is orthogonal to the kernel of $Dฯ(q)$.

`Manifolds.vertical_component`

โ Method`vertical_component(N::AbstractManifold, p, X)`

Compute the vertical component of tangent vector `X`

at point `p`

in the total space of quotient manifold `N`

.