HaskellForMaths-0.2.1: Math/Test/TSubquotients.hs
-- Copyright (c) David Amos, 2009. All rights reserved.
module Math.Test.TSubquotients where
import Math.Algebra.Group.PermutationGroup hiding (ptStab, normalClosure)
-- import Math.Algebra.Group.SchreierSims (cosetRepsGx)
-- import Math.Algebra.Group.RandomSchreierSims
import Math.Algebra.Group.Subquotients
import qualified Math.Algebra.Group.PermutationGroup as P -- for testing
test = and [testPtStab, testTransitiveConstituentHomomorphism, testBlockSystems, testBlockHomomorphism,
testNormalClosure, testCentralizerSymTrans]
-- TESTS
testPtStab =
let gs = [p [[1..5],[6,7]], p [[1,2],[6..10]] ] -- S 5 * S 5
gs16 = ptStab gs [1,6]
in orderSGS gs16 == 24*24 && orbitP gs16 1 == [1] && orbitP gs16 6 == [6]
testTransitiveConstituentHomomorphism =
let gs1 = [p [[1..5],[6,7]], p [[1,2],[6..10]] ] -- S 5 * S 5
(ker1,im1) = transitiveConstituentHomomorphism gs1 [1..5]
gs2 = [p [[1,2,3],[4,5,6]], p [[1,2],[4,5]]] -- note that the two halves don't move independently
(ker2,im2) = transitiveConstituentHomomorphism gs2 [1,2,3]
in orderSGS ker1 == 120 && orderSGS im1 == 120 &&
null ker2 && orderSGS im2 == 6
testBlockSystems =
blockSystems [p [[1..3]], p [[4..6]], p [[1,4],[2,5],[3,6]]] == [ [[1,2,3],[4,5,6]] ] &&
blockSystems (_D 10) == [] &&
blockSystems (_D 12) == [ [[1,3,5],[2,4,6]], [[1,4],[2,5],[3,6]] ]
testBlockHomomorphism =
let (ker14,im14) = blockHomomorphism (_D 12) [[1,4],[2,5],[3,6]]
(ker135,im135) = blockHomomorphism (_D 12) [[1,3,5],[2,4,6]]
in (orderSGS ker14, orderSGS im14) == (2,6) &&
(orderSGS ker135, orderSGS im135) == (6,2)
-- !! Need to improve this test
testNormalClosure =
let gs = [p [[1,4]]]
hs = [p [[1,2,3]]]
in elts (P.normalClosure gs hs) == elts (normalClosure gs hs)
-- == _A 4
testCentralizerSymTrans =
let gs = [ p [[1..5]] ]
hs = [ p [[1,2],[3,4]], p [[1,3],[2,4]] ]
in centralizerSymTrans gs == gs
&& centralizerSymTrans hs == hs