Skip to content

Instantly share code, notes, and snippets.

@ghasshee
Last active April 22, 2017 15:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ghasshee/53304d3ed3548fe54333ac19400c9e8e to your computer and use it in GitHub Desktop.
Save ghasshee/53304d3ed3548fe54333ac19400c9e8e to your computer and use it in GitHub Desktop.
-- Type Definition of Matrix
data Mat = Mat [[Int]]
-- Show Instance of Matrix
showRow [] = ""
showRow (x:xs) = show x ++ "\t\b" ++ showRow xs
showMat :: Mat -> String
showMat (Mat []) = ""
showMat (Mat (x:xs)) = showRow x ++ "\n" ++ showMat (Mat xs)
instance Show Mat where show m = showMat m
-- Length of matrix
len_row x = maximum $ map length x
len_col x = length x
-- Product of Matrix
prod (Mat a) (Mat b) =
let l = len_row a - 1 in
let m = len_col a - 1 in
let n = len_col b - 1 in
Mat [
[
sum [((a!!i!!k) * (b!!k!!j)) | k <- [0..m]]
| j <- [0..n]
]
| i <- [0..l]
]
a *** b = prod a b
---------- an example usage ----------
-- Now we think of
-- * Symmetry Group S_4
-- * Alternation Group A_4
-- A_4 is generated just by a & b
-- S_4 is generated just by a, b & z
-- the Matrix is like
--
-- [0 0 1]
-- [z x y] = [x y z][1 0 0]
-- [0 1 0]
--
-- here x,y or z axis implies each axis of 3 180˚rotations
--------------------------------------
e = aaa
a = Mat [
[ 0, 0, 1],
[ 1, 0, 0],
[ 0, 1, 0]]
b = Mat [
[ 0, 0, 1],
[-1, 0, 0],
[ 0,-1, 0]]
c = b *** b *** a *** a
d = a *** a *** b *** b
aa = a *** a
bb = b *** b
cc = c *** c
dd = d *** d
h = a *** a *** b
i = a *** b *** a
j = b *** a *** a
z = Mat [
[ 0, 0,-1],
[ 0,-1, 0],
[-1, 0, 0]]
za = z *** a
zb = z *** b
zc = z *** c
zd = z *** d
zaa = z *** aa
zbb = z *** bb
zcc = z *** cc
zdd = z *** dd
zh = z *** h
zi = z *** i
zj = z *** j
ab = a *** b
ac = a *** c
ad = a *** d
ba = b *** a
bc = b *** c
bd = b *** d
ca = c *** a
cb = c *** b
cd = c *** d
da = d *** a
db = d *** b
dc = d *** c
aaa = aa *** a
aab = aa *** b
aac = aa *** c
aad = aa *** d
aba = ab *** a
abb = ab *** b
abc = ab *** c
abd = ab *** d
aca = ac *** a
acb = ac *** b
acc = ac *** c
acd = ac *** d
ada = ad *** a
adb = ad *** b
adc = ad *** c
add = ad *** d
baa = ba *** a
bab = ba *** b
bac = ba *** c
bad = ba *** d
bba = bb *** a
bbb = bb *** b
bbc = bb *** c
bbd = bb *** d
bca = bc *** a
bcb = bc *** b
bcc = bc *** c
bcd = bc *** d
bda = bd *** a
bdb = bd *** b
bdc = bd *** c
bdd = bd *** d
caa = ca *** a
cab = ca *** b
cac = ca *** c
cad = ca *** d
cba = cb *** a
cbb = cb *** b
cbc = cb *** c
cbd = cb *** d
cca = cc *** a
ccb = cc *** b
ccc = cc *** c
ccd = cc *** d
cda = cd *** a
cdb = cd *** b
cdc = cd *** c
cdd = cd *** d
daa = da *** a
dab = da *** b
dac = da *** c
dad = da *** d
dba = db *** a
dbb = db *** b
dbc = db *** c
dbd = db *** d
dca = dc *** a
dcb = dc *** b
dcc = dc *** c
dcd = dc *** d
dda = dd *** a
ddb = dd *** b
ddc = dd *** c
ddd = dd *** d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment