-
Notifications
You must be signed in to change notification settings - Fork 2
/
Subalgebra.hs
58 lines (40 loc) · 1.89 KB
/
Subalgebra.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
{-# LANGUAGE FlexibleInstances, FlexibleContexts, MultiParamTypeClasses, RebindableSyntax, NoImplicitPrelude, RankNTypes, ScopedTypeVariables #-}
module Subalgebra where
import NumericPrelude
import FreeModule
import qualified Data.Map as Map
import Utils
import Data.List hiding (insert)
import GradedObject
import Data.Array
import qualified MathObj.Matrix as Matrix
import qualified Algebra.Ring as Ring
import qualified Algebra.Field as Field
import qualified Algebra.Additive as Additive
import qualified MatrixAlgorithms
import qualified MatrixUtils
import Tensor
import Debug.Trace
import Algebra
import Data.Char
import Data.Maybe
import qualified Subspace as SS
import SteenrodAlgebra
data Subalgebra b r k = SA (SS.Subspace (Tensor r b) k)
zeroSpace = SA SS.zeroSpace
size (SA s) = SS.size s
toList (SA s) = map reduceStructure $ SS.toList s
fromList lst = foldr insert zeroSpace lst
fromTensorList lst = SA $ SS.fromList lst
fillOutSpace (SA ss) lst = SA $ SS.fillOutSpace ss lst
reduceWithCoefs v (SA s) = let (cos,u) = SS.reduceWithCoefs (induceStructure v) s
in (map (\(c,b) -> (c,reduceStructure b)) cos,reduceStructure u)
reduceWithAllCoefs v (SA s) = let (cos,u) = SS.reduceWithAllCoefs (induceStructure v) s
in (map (\(c,b) -> (c,reduceStructure b)) cos,reduceStructure u)
toMatrix (SA src_basis) (SA targ_basis) phi = SS.toMatrix src_basis targ_basis (induceStructure . phi . reduceStructure)
instance (Show k, Show r, Ord r, Ring.C k, Eq k, Show b, Ord b) => Show (Subalgebra b r k) where
show (SA s) = show s
reduce vect (SA sb) = reduceStructure $ SS.reduce (induceStructure vect) sb
insertContains vect subsp@(SA ss) = let (ss',b) = SS.insertContains (induceStructure vect) ss in (SA ss',b)
contains vect subsp = snd $ insertContains vect subsp
insert vect subsp = fst $ insertContains vect subsp