manifolds-0.4.1.0: Coordinate-free hypersurfaces

Copyright(c) Justus Sagemüller 2015
LicenseGPL v3
Maintainer(@) sagemueller $ geo.uni-koeln.de
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Data.Manifold.Types

Contents

Description

Several commonly-used manifolds, represented in some simple way as Haskell data types. All these are in the PseudoAffine class.

Synopsis

Index / ASCII names

Linear manifolds

data ZeroDim s :: * -> *

Constructors

Origin 

Instances

LtdErrorShow ℝ⁰ Source 
Refinable ℝ⁰ Source 
Eq (ZeroDim s) 
Show (ZeroDim s) 
Monoid (ZeroDim s) 
VectorSpace (ZeroDim s) 
AffineSpace (ZeroDim s) 
HasBasis (ZeroDim s) 
AdditiveGroup s => InnerSpace (ZeroDim s) 
AdditiveGroup (ZeroDim s) 
RieszDecomposable (ZeroDim ℝ) 
(Fractional' s, SemiInner s) => SemiInner (ZeroDim s) 
Num' s => FiniteDimensional (ZeroDim s) 
Num' s => TensorSpace (ZeroDim s) 
Num' s => LinearSpace (ZeroDim s) 
PseudoAffine (ZeroDim k) 
Semimanifold (ZeroDim k) 
TensorDecomposable (ZeroDim ℝ) 
Atlas (ZeroDim s) Source 
Geodesic (ZeroDim s) Source 
NumPrime s => LocallyCoercible (V0 s) (ZeroDim s) Source 
NumPrime s => LocallyCoercible (ZeroDim s) (V0 s) Source 
NumPrime s => LocallyCoercible (ZeroDim s) (ZeroDim s) Source 
type Basis (ZeroDim k) = Void 
type Diff (ZeroDim s) = ZeroDim s 
type Scalar (ZeroDim s) = s 
data SubBasis (ZeroDim s) = ZeroBasis 
type DualVector (ZeroDim s) = ZeroDim s 
type Interior (ZeroDim k) = ZeroDim k 
type Needle (ZeroDim k) = ZeroDim k 
type ChartIndex (ZeroDim s) = () Source 
type TensorProduct (ZeroDim s) v = ZeroDim s 

type = Double

Hyperspheres

General form: Stiefel manifolds

newtype Stiefel1 v Source

Constructors

Stiefel1 

Fields

getStiefel1N :: DualVector v
 

Instances

(Geodesic v, FiniteFreeSpace v, FiniteFreeSpace (DualVector v), LinearSpace v, (~) * (Scalar v) , Geodesic (DualVector v), InnerSpace (DualVector v)) => Geodesic (Stiefel1 v) Source 
type Interior (Stiefel1 v) = Stiefel1 v 
type Needle (Stiefel1 v) 

stiefel1Project Source

Arguments

:: LinearSpace v 
=> DualVector v

Must be nonzero.

-> Stiefel1 v 

stiefel1Embed :: (HilbertSpace v, RealFloat (Scalar v)) => Stiefel1 v -> v Source

Specific examples

class (PseudoAffine v, InnerSpace v, NaturallyEmbedded (UnitSphere v) (DualVector v)) => HasUnitSphere v where Source

Minimal complete definition

Nothing

Associated Types

type UnitSphere v :: * Source

newtype :: *

Constructors

 

Fields

φParamS¹ :: Double
 

data Source

The ordinary unit sphere.

Constructors

 

Fields

ϑParamS² :: !Double

Range [0, π[.

φParamS² :: !Double

Range [-π, π[.

Projective spaces

type ℝP¹ =

data ℝP² Source

The two-dimensional real projective space, implemented as a unit disk with opposing points on the rim glued together.

Constructors

ℝP² 

Fields

rParamℝP² :: !Double

Range [0, 1].

φParamℝP² :: !Double

Range [-π, π[.

Intervals/disks/cones

newtype :: *

Constructors

 

Fields

xParamD¹ :: Double
 

data Source

The standard, closed unit disk. Homeomorphic to the cone over 'S¹', but not in the the obvious, “flat” way. (And not at all, despite the identical ADT definition, to the projective space 'ℝP²'!)

Constructors

 

Fields

rParamD² :: !Double

Range [0, 1].

φParamD² :: !Double

Range [-π, π[.

Instances

type ℝay = Cℝay ℝ⁰ Source

Better known as ℝ⁺ (which is not a legal Haskell name), the ray of positive numbers (including zero, i.e. closed on one end).

data CD¹ x Source

A (closed) cone over a space x is the product of x with the closed interval 'D¹' of “heights”, except on its “tip”: here, x is smashed to a single point.

This construct becomes (homeomorphic-to-) an actual geometric cone (and to 'D²') in the special case x = 'S¹'.

Constructors

CD¹ 

Fields

hParamCD¹ :: !Double

Range [0, 1]

pParamCD¹ :: !x

Irrelevant at h = 0.

Instances

Show x => Show (CD¹ x) Source 
type Interior (CD¹ m) 
type Needle (CD¹ m) 

data Cℝay x Source

An open cone is homeomorphic to a closed cone without the “lid”, i.e. without the “last copy” of x, at the far end of the height interval. Since that means the height does not include its supremum, it is actually more natural to express it as the entire real ray, hence the name.

Constructors

Cℝay 

Fields

hParamCℝay :: !Double

Range [0, ∞[

pParamCℝay :: !x

Irrelevant at h = 0.

Instances

Show x => Show (Cℝay x) Source 
type Interior (Cℝay m) 
type Needle (Cℝay m) 

Affine subspaces

Lines

data Line x Source

Constructors

Line 

lineAsPlaneIntersection :: forall x. (WithField Manifold x, FiniteDimensional (Needle' x)) => Line x -> [Cutplane x] Source

Hyperplanes

data Cutplane x Source

Oriented hyperplanes, naïvely generalised to PseudoAffine manifolds: Cutplane p w represents the set of all points q such that (q.-~.p) ^<.> w ≡ 0.

In vector spaces this is indeed a hyperplane; for general manifolds it should behave locally as a plane, globally as an (n−1)-dimensional submanifold.

Constructors

Cutplane 

Fields

sawHandle :: x
 
cutNormal :: Stiefel1 (Needle x)
 

fathomCutDistance Source

Arguments

:: (WithField PseudoAffine x, LinearSpace (Needle x)) 
=> Cutplane x

Hyperplane to measure the distance from.

-> Metric' x

Metric to use for measuring that distance. This can only be accurate if the metric is valid both around the cut-plane's sawHandle, and around the points you measure. (Strictly speaking, we would need parallel transport to ensure this).

-> x

Point to measure the distance to.

-> Maybe

A signed number, giving the distance from plane to point with indication on which side the point lies. Nothing if the point isn't reachable from the plane.

sideOfCut :: (WithField PseudoAffine x, LinearSpace (Needle x)) => Cutplane x -> x -> Maybe S⁰ Source

Linear mappings

data LinearMap s v w :: * -> * -> * -> *

Instances

Num' s => EnhancedCat (->) (LinearMap s) 
(Show (SubBasis (DualVector u)), Show (SubBasis v)) => Show (SubBasis (LinearMap s u v)) 
Num' s => Morphism (LinearMap s) 
Num' s => PreArrow (LinearMap s) 
Category (LinearMap s) 
Num' s => Cartesian (LinearMap s) 
Num' s => EnhancedCat (LinearMap s) (LinearFunction s) 
Num' s => EnhancedCat (LinearFunction s) (LinearMap s) 
EnhancedCat (Affine s) (LinearMap s) 
(Num' s, LinearSpace v, (~) * (Scalar v) s) => Monoidal (LinearMap s v) (LinearFunction s) (LinearFunction s) 
(LinearSpace v, Num' s, (~) * (Scalar v) s) => Functor (LinearMap s v) (LinearFunction s) (LinearFunction s) 
(LinearSpace v, (~) * (Scalar v) s) => Functor (LinearMap s v) (Coercion *) (Coercion *) 
(LinearSpace v, TensorSpace w, (~) * (Scalar v) s, (~) * (Scalar w) s) => VectorSpace (LinearMap s v w) 
(LinearSpace u, TensorSpace v, (~) * s (Scalar u), (~) * s (Scalar v)) => AffineSpace (LinearMap s u v) 
(LinearSpace v, TensorSpace w, (~) * (Scalar v) s, (~) * (Scalar w) s) => AdditiveGroup (LinearMap s v w) 
(LinearSpace u, SemiInner (DualVector u), SemiInner v, (~) * (Scalar u) s, (~) * (Scalar v) s) => SemiInner (LinearMap s u v) 
(LSpace u, FiniteDimensional (DualVector u), FiniteDimensional v, (~) * (Scalar u) s, (~) * (Scalar v) s, (~) * (Scalar (DualVector v)) s, Fractional' (Scalar v)) => FiniteDimensional (LinearMap s u v) 
(LinearSpace u, TensorSpace v, (~) * (Scalar u) s, (~) * (Scalar v) s) => TensorSpace (LinearMap s u v) 
(LinearSpace u, LinearSpace v, (~) * (Scalar u) s, (~) * (Scalar v) s) => LinearSpace (LinearMap s u v) 
(LinearSpace v, TensorSpace w, (~) * (Scalar v) s, (~) * (Scalar w) s) => PseudoAffine (LinearMap s v w) 
(LinearSpace v, TensorSpace w, (~) * (Scalar v) s, (~) * (Scalar w) s) => Semimanifold (LinearMap s v w) 
(LinearSpace v, (~) * (Scalar v) s, TensorSpace w, (~) * (Scalar w) s) => Atlas (LinearMap s v w) Source 
(LinearSpace v, (~) * (Scalar v) , TensorSpace w, (~) * (Scalar w) ) => Geodesic (LinearMap v w) Source 
(SimpleSpace a, SimpleSpace b, Refinable a, Refinable b, (~) * (Scalar a) , (~) * (Scalar b) , (~) * (Scalar (DualVector a)) , (~) * (Scalar (DualVector b)) , (~) * (Scalar (DualVector (DualVector a))) , (~) * (Scalar (DualVector (DualVector b))) ) => Refinable (LinearMap a b) Source 
type UnitObject (LinearMap s) = ZeroDim s 
type Object (LinearMap s) v = (LinearSpace v, (~) * (Scalar v) s) 
type PairObjects (LinearMap s) a b = () 
type Diff (LinearMap s u v) = LinearMap s u v 
type Scalar (LinearMap s v w) = s 
data SubBasis (LinearMap s u v) = LinMapBasis !(SubBasis (DualVector u)) !(SubBasis v) 
type DualVector (LinearMap s u v) = Tensor s u (DualVector v) 
type Interior (LinearMap s v w) = LinearMap s v w 
type Needle (LinearMap s v w) = LinearMap s v w 
type ChartIndex (LinearMap s v w) = () Source 
type TensorProduct (LinearMap s u v) w = TensorProduct (DualVector u) (Tensor s v w) 

Misc