Copyright | (c) Justus Sagemüller 2020 |
---|---|
License | GPL v3 |
Maintainer | (@) jsag $ hvl.no |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Synopsis
- class SemimanifoldWithBoundary m where
- type Interior m :: Type
- type Boundary m :: Type
- type HalfNeedle m :: Type
- (.+^|) :: m -> Needle (Interior m) -> Either (Boundary m, Scalar (Needle (Interior m))) (Interior m)
- fromInterior :: Interior m -> m
- fromBoundary :: Boundary m -> m
- (|+^) :: Boundary m -> HalfNeedle m -> m
- separateInterior :: m -> Either (Boundary m) (Interior m)
- toInterior :: m -> Maybe (Interior m)
- extendToBoundary :: Interior m -> Needle (Interior m) -> Maybe (Boundary m)
- smfdWBoundWitness :: SmfdWBoundWitness m
- needleIsOpenMfd :: (OpenManifold (Needle (Interior m)) => r) -> r
- scalarIsOpenMfd :: (OpenManifold (Scalar (Needle (Interior m))) => r) -> r
- boundaryHasSameScalar :: ((LinearSpace (Needle (Boundary m)), Scalar (Needle (Boundary m)) ~ Scalar (Needle (Interior m))) => r) -> r
- class (SemimanifoldWithBoundary m, PseudoAffine (Interior m), PseudoAffine (Boundary m)) => PseudoAffineWithBoundary m where
- class PseudoAffineWithBoundary m => ProjectableBoundary m where
- projectToBoundary :: m -> Boundary m -> Maybe (Needle (Boundary m), Scalar (Needle (Interior m)))
- marginFromBoundary :: Boundary m -> Scalar (Needle (Interior m)) -> m
- needleBoundaryIsTriviallyProjectible :: forall r. (ProjectableBoundary (Needle (Interior m)) => r) -> r
- scalarBoundaryIsTriviallyProjectible :: forall r. (ProjectableBoundary (Scalar (Needle (Interior m))) => r) -> r
- data SmfdWBoundWitness m where
- OpenManifoldWitness :: forall m. OpenManifold m => SmfdWBoundWitness m
- SmfdWBoundWitness :: forall m. (OpenManifold (Interior m), OpenManifold (Boundary m), FullSubspace (HalfNeedle m) ~ Needle (Boundary m)) => SmfdWBoundWitness m
- class AdditiveMonoid h where
- class AdditiveMonoid h => HalfSpace h where
- type FullSubspace h
- type Ray h
- type MirrorJoin h
- scaleNonNeg :: Ray h -> h -> h
- fromFullSubspace :: FullSubspace h -> h
- projectToFullSubspace :: h -> FullSubspace h
- fullSubspaceIsVectorSpace :: ((VectorSpace (FullSubspace h), ScalarSpace (Scalar (FullSubspace h)), Scalar (FullSubspace h) ~ MirrorJoin (Ray h)) => r) -> r
- rayIsHalfSpace :: (HalfSpace (Ray h) => r) -> r
- mirrorJoinIsVectorSpace :: ((VectorSpace (MirrorJoin h), Scalar (MirrorJoin h) ~ MirrorJoin (Ray h)) => r) -> r
- fromPositiveHalf :: h -> MirrorJoin h
- fromNegativeHalf :: h -> MirrorJoin h
Documentation
class SemimanifoldWithBoundary m where Source #
The class of spaces with a displacement operation like Semimanifold
, but there
may be a limited range how far it is possible to move before leaving the space.
Such spaces decompose into two Semimanifold
spaces: the Interior
and the Boundary
.
type Interior m :: Type Source #
Subspace of m
representing the set of points where it is possible to move at
least a small distance in any direction (with .+^|
) without leaving m
.
type Boundary m :: Type Source #
The set of points where an infinitesimal movement is sufficient to leave m
.
type HalfNeedle m :: Type Source #
:: m | Starting point |
-> Needle (Interior m) | Displacement |
-> Either (Boundary m, Scalar (Needle (Interior m))) (Interior m) | If |
Boundary-aware pendant to .+~^
.
fromInterior :: Interior m -> m Source #
fromBoundary :: Boundary m -> m Source #
(|+^) :: Boundary m -> HalfNeedle m -> m Source #
separateInterior :: m -> Either (Boundary m) (Interior m) Source #
toInterior :: m -> Maybe (Interior m) Source #
extendToBoundary :: Interior m -> Needle (Interior m) -> Maybe (Boundary m) Source #
default extendToBoundary :: (VectorSpace (Needle (Interior m)), Num (Scalar (Needle (Interior m)))) => Interior m -> Needle (Interior m) -> Maybe (Boundary m) Source #
smfdWBoundWitness :: SmfdWBoundWitness m Source #
default smfdWBoundWitness :: (OpenManifold (Interior m), OpenManifold (Boundary m), FullSubspace (HalfNeedle m) ~ Needle (Boundary m)) => SmfdWBoundWitness m Source #
needleIsOpenMfd :: (OpenManifold (Needle (Interior m)) => r) -> r Source #
default needleIsOpenMfd :: OpenManifold (Needle (Interior m)) => (OpenManifold (Needle (Interior m)) => r) -> r Source #
scalarIsOpenMfd :: (OpenManifold (Scalar (Needle (Interior m))) => r) -> r Source #
default scalarIsOpenMfd :: OpenManifold (Scalar (Needle (Interior m))) => (OpenManifold (Scalar (Needle (Interior m))) => r) -> r Source #
boundaryHasSameScalar :: ((LinearSpace (Needle (Boundary m)), Scalar (Needle (Boundary m)) ~ Scalar (Needle (Interior m))) => r) -> r Source #
Instances
class (SemimanifoldWithBoundary m, PseudoAffine (Interior m), PseudoAffine (Boundary m)) => PseudoAffineWithBoundary m where Source #
(.--!) :: m -> m -> Needle (Interior m) Source #
Inverse of .+^|
, provided the space is connected. For p :: Interior m
, q :: m
and v = fromInterior p.--!q
,
q .+^|
v ≡ Right p
(up to floating-point). Similary, for b :: Boundary m
and w = fromBoundary m.--!q
,
q .+^|
w ≡ Left (b, 0)
(.-|) :: m -> Boundary m -> Maybe (HalfNeedle m) Source #
(!-|) :: m -> Boundary m -> HalfNeedle m Source #
Instances
class PseudoAffineWithBoundary m => ProjectableBoundary m where Source #
:: m | Point |
-> Boundary m | Intended “course region” representative |
-> Maybe (Needle (Boundary m), Scalar (Needle (Interior m))) | Needle |
marginFromBoundary :: Boundary m -> Scalar (Needle (Interior m)) -> m Source #
needleBoundaryIsTriviallyProjectible :: forall r. (ProjectableBoundary (Needle (Interior m)) => r) -> r Source #
default needleBoundaryIsTriviallyProjectible :: ProjectableBoundary (Needle (Interior m)) => (ProjectableBoundary (Needle (Interior m)) => r) -> r Source #
scalarBoundaryIsTriviallyProjectible :: forall r. (ProjectableBoundary (Scalar (Needle (Interior m))) => r) -> r Source #
default scalarBoundaryIsTriviallyProjectible :: ProjectableBoundary (Scalar (Needle (Interior m))) => (ProjectableBoundary (Scalar (Needle (Interior m))) => r) -> r Source #
Instances
data SmfdWBoundWitness m where Source #
OpenManifoldWitness :: forall m. OpenManifold m => SmfdWBoundWitness m | |
SmfdWBoundWitness :: forall m. (OpenManifold (Interior m), OpenManifold (Boundary m), FullSubspace (HalfNeedle m) ~ Needle (Boundary m)) => SmfdWBoundWitness m |
class AdditiveMonoid h where #
Nothing
Instances
AdditiveMonoid Int16 | |
AdditiveMonoid Int32 | |
AdditiveMonoid Int64 | |
AdditiveMonoid Int8 | |
AdditiveMonoid Word16 | |
AdditiveMonoid Word32 | |
AdditiveMonoid Word64 | |
AdditiveMonoid Word8 | |
AdditiveMonoid Integer | |
AdditiveMonoid Double | |
AdditiveMonoid Float | |
AdditiveMonoid Int | |
AdditiveMonoid Word | |
Num k => AdditiveMonoid (Cℝay (ZeroDim k)) | |
AdditiveGroup (Needle (Rep a Void)) => AdditiveMonoid (GenericNeedle a) | |
Defined in Data.Monoid.Additive zeroHV :: GenericNeedle a # addHVs :: GenericNeedle a -> GenericNeedle a -> GenericNeedle a # | |
AdditiveMonoid (ZeroDim k) | |
(AdditiveMonoid h, AdditiveMonoid i) => AdditiveMonoid (h, i) | |
Defined in Data.Monoid.Additive | |
AdditiveMonoid h => AdditiveMonoid (Rec0 h s) | |
(AdditiveMonoid h, AdditiveMonoid i, AdditiveMonoid j) => AdditiveMonoid (h, i, j) | |
Defined in Data.Monoid.Additive | |
(AdditiveMonoid (f p), AdditiveMonoid (g p)) => AdditiveMonoid ((f :*: g) p) | |
AdditiveMonoid (f p) => AdditiveMonoid (M1 i c f p) | |
class AdditiveMonoid h => HalfSpace h where #
Nothing
type FullSubspace h #
type FullSubspace h = GenericFullSubspace h
type MirrorJoin h #
type MirrorJoin h = GenericMirrorJoin h
scaleNonNeg :: Ray h -> h -> h #
fromFullSubspace :: FullSubspace h -> h #
projectToFullSubspace :: h -> FullSubspace h #
fullSubspaceIsVectorSpace :: ((VectorSpace (FullSubspace h), ScalarSpace (Scalar (FullSubspace h)), Scalar (FullSubspace h) ~ MirrorJoin (Ray h)) => r) -> r #
rayIsHalfSpace :: (HalfSpace (Ray h) => r) -> r #
mirrorJoinIsVectorSpace :: ((VectorSpace (MirrorJoin h), Scalar (MirrorJoin h) ~ MirrorJoin (Ray h)) => r) -> r #
fromPositiveHalf :: h -> MirrorJoin h #
fromNegativeHalf :: h -> MirrorJoin h #