Here are some tests to make sure that the code is Associative:
Check for associativity:
(1) -> Pf := PrimeField(17)
(1) PrimeField(17)
Type: Domain
(2) -> bL := matrix([[1,1],[0,1]])$SquareMatrix(2,PrimeField(17))
+1 1+
(2) | |
+0 1+
Type: SquareMatrix(2,PrimeField(17))
(3) -> Ca := CliffordAlgebra(2,Pf,bL)
(3) CliffordAlgebra(2,PrimeField(17),[[1,1],[0,1]])
Type: Domain
(4) -> randc() == reduce('+, [random()$Pf*eFromBinaryMap(i)$Ca for i in 0..3])
Type: Void
(5) -> a := randc()
Compiling function randc with type () -> CliffordAlgebra(2,
PrimeField(17),[[1,1],[0,1]])
(5) 10 + 3e + e + 4e e
1 2 1 2
Type: CliffordAlgebra(2,PrimeField(17),[[1,1],[0,1]])
(6) -> b := randc()
(6) 15 + 2e + 16e + 2e e
1 2 1 2
Type: CliffordAlgebra(2,PrimeField(17),[[1,1],[0,1]])
(7) -> c := randc()
(7) 12 + 6e + 9e e
1 1 2
Type: CliffordAlgebra(2,PrimeField(17),[[1,1],[0,1]])
(8) -> (a*b)*c - a*(b*c)
(8) 0
Type: CliffordAlgebra(2,PrimeField(17),[[1,1],[0,1]])
compare different methods for orthogonal case:
(3) -> Pf := PrimeField(17)
(3) PrimeField(17)
Type: Domain
(4) -> bL := matrix([[1, 1, 0], [1, 1, 1], [0, 1, 1]])$SquareMatrix(3, PrimeField(17))
+1 1 0+
| |
(4) |1 1 1|
| |
+0 1 1+
Type: SquareMatrix(3,PrimeField(17))
(5) -> Ca := CliffordAlgebra(3, Pf, bL)
(5) CliffordAlgebra(3,PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
Type: Domain
(6) -> randc() == reduce('+, [random()$Pf*eFromBinaryMap(i)$Ca for i in 0..7])
Type: Void
(7) -> a := randc()
Compiling function randc with type () -> CliffordAlgebra(3,
PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
(7) 10 + 3e + e + 4e e + 15e + 2e e + 16e e + 2e e e
1 2 1 2 3 1 3 2 3 1 2 3
Type: CliffordAlgebra(3,PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
(8) -> b := randc()
(8) 12 + 6e + 9e e + 9e + 10e e + 4e e
1 1 2 3 1 3 2 3
Type: CliffordAlgebra(3,PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
(9) -> c := randc()
(9) 4 + 3e + 10e + 2e e + 2e + 11e e + 7e e + 16e e e
1 2 1 2 3 1 3 2 3 1 2 3
Type: CliffordAlgebra(3,PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
(10) -> (a*b)*c - a*(b*c)
(10) 0
Type: CliffordAlgebra(3,PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
(11) -> a := randc()
(11) 14 + 11e + 13e + 12e e + 16e + 8e e + 5e e + 8e e e
1 2 1 2 3 1 3 2 3 1 2 3
Type: CliffordAlgebra(3,PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
(12) -> b := randc()
(12) 10 + 4e + 10e + 11e e + 8e + 15e e + 14e e + 6e e e
1 2 1 2 3 1 3 2 3 1 2 3
Type: CliffordAlgebra(3,PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
(13) -> c := randc()
(13) 15 + 2e + 5e + 4e e + 15e + 13e e + 5e e + 16e e e
1 2 1 2 3 1 3 2 3 1 2 3
Type: CliffordAlgebra(3,PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
(14) -> (a*b)*c - a*(b*c)
(14) 0
Type: CliffordAlgebra(3,PrimeField(17),[[1,1,0],[1,1,1],[0,1,1]])
(15) -> B1 := CliffordAlgebra(3,Fraction(Integer),[[1,0,0],[0,1,0],[0,0,1]])
(15) CliffordAlgebra(3,Fraction(Integer),[[1,0,0],[0,1,0],[0,0,1]])
Type: Domain
(16) -> m1 := toTable(*)$B1
+ 1 e e e e e e e e e e e e +
| 1 2 1 2 3 1 3 2 3 1 2 3|
| |
| e 1 e e e e e e e e e e e |
| 1 1 2 2 1 3 3 1 2 3 2 3 |
| |
| e - e e 1 - e e e - e e e e - e e |
| 2 1 2 1 2 3 1 2 3 3 1 3|
| |
| e e - e e - 1 e e e - e e e e - e |
| 1 2 2 1 1 2 3 2 3 1 3 3 |
(16) | |
| e - e e - e e e e e 1 - e - e e e |
| 3 1 3 2 3 1 2 3 1 2 1 2 |
| |
| e e - e - e e e e e e - 1 - e e e |
| 1 3 3 1 2 3 2 3 1 1 2 2 |
| |
| e e e e e - e - e e e e e - 1 - e |
| 2 3 1 2 3 3 1 3 2 1 2 1 |
| |
|e e e e e - e e - e e e e - e - 1 |
+ 1 2 3 2 3 1 3 3 1 2 2 1 +
Type: Matrix(CliffordAlgebra(3,Fraction(Integer),[[1,0,0],[0,1,0],[0,0,1]]))
(17) -> setMode("orthogonal",false)$B1
(17) true
Type: Boolean
(18) -> m1 - toTable(*)$B1
+0 0 0 0 0 0 0 0+
| |
|0 0 0 0 0 0 0 0|
| |
|0 0 0 0 0 0 0 0|
| |
|0 0 0 0 0 0 0 0|
(18) | |
|0 0 0 0 0 0 0 0|
| |
|0 0 0 0 0 0 0 0|
| |
|0 0 0 0 0 0 0 0|
| |
+0 0 0 0 0 0 0 0+
Type: Matrix(CliffordAlgebra(3,Fraction(Integer),[[1,0,0],[0,1,0],[0,0,1]]))
(19) -> setMode("debug",true)$B1
(19) true
Type: Boolean
(20) -> toTable(*)$B1
cliffordProdTerm: e12*e12=e1*-e1-0*e12=-11
cliffordProdTerm: e12*e13=e1*-e123-0*e13=-e23
cliffordProdTerm: e12*e23=e1*e3-0*e23=e13
cliffordProdTerm: e12*e123=e1*-e13-0*e123=-e3
cliffordProdTerm: e13*e12=e1*e123-0*e12=e23
cliffordProdTerm: e13*e13=e1*-e1-0*e13=-11
cliffordProdTerm: e13*e23=e1*-e2-0*e23=-e12
cliffordProdTerm: e13*e123=e1*e12-0*e123=e2
cliffordProdTerm: e23*e12=e2*e123-0*e12=-e13
cliffordProdTerm: e23*e13=e2*-e1-0*e13=e12
cliffordProdTerm: e23*e23=e2*-e2-0*e23=-11
cliffordProdTerm: e23*e123=e2*e12-0*e123=-e1
rcProdTerm: e12Le1= e1L-e1/\e2+0=-e2
rcProdTerm: e12Le2= e1L-e2/\e2+e1=e1
rcProdTerm: e12Le3= e1L-e3/\e2+0=0
cliffordProdTerm: e12*e123=e1*-e13-0*e123=-e3
cliffordProdTerm: e123*e12=e12*e123-0*e12=-e3
rcProdTerm: e12Le3= e1L-e3/\e2+0=0
rcProdTerm: e12Le3= e1L-e3/\e2+0=0
cliffordProdTerm: e123*e13=e12*-e1-0*e13=e2
rcProdTerm: e12Le3= e1L-e3/\e2+0=0
cliffordProdTerm: e123*e23=e12*-e2-0*e23=-e1
rcProdTerm: e12Le3= e1L-e3/\e2+0=0
cliffordProdTerm: e12*e12=e1*-e1-0*e12=-11
cliffordProdTerm: e123*e123=e12*e12-0*e123=-11
+ 1 e e e e e e e e e e e e +
| 1 2 1 2 3 1 3 2 3 1 2 3|
| |
| e 1 e e e e e e e e e e e |
| 1 1 2 2 1 3 3 1 2 3 2 3 |
| |
| e - e e 1 - e e e - e e e e - e e |
| 2 1 2 1 2 3 1 2 3 3 1 3|
| |
| e e - e e - 1 e e e - e e e e - e |
| 1 2 2 1 1 2 3 2 3 1 3 3 |
(20) | |
| e - e e - e e e e e 1 - e - e e e |
| 3 1 3 2 3 1 2 3 1 2 1 2 |
| |
| e e - e - e e e e e e - 1 - e e e |
| 1 3 3 1 2 3 2 3 1 1 2 2 |
| |
| e e e e e - e - e e e e e - 1 - e |
| 2 3 1 2 3 3 1 3 2 1 2 1 |
| |
|e e e e e - e e - e e e e - e - 1 |
+ 1 2 3 2 3 1 3 3 1 2 2 1 +
Type: Matrix(CliffordAlgebra(3,Fraction(Integer),[[1,0,0],[0,1,0],[0,0,1]]))
(21) ->
|
metadata block |
|||
| see also: | |||
| Correspondence about this page | |||
|
Book Shop - Further reading. Where I can, I have put links to Amazon for books that are relevant to the subject, click on the appropriate country flag to get more details of the book or to buy it from them. |
|
||
This site may have errors. Don't use for critical systems.
Copyright (c) 1998-2023 Martin John Baker - All rights reserved - privacy policy.