/usr/share/axiom-20170501/src/algebra/JORDAN.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 57 58 59 60 61 62 | )abbrev domain JORDAN AssociatedJordanAlgebra
++ Author: J. Grabmeier
++ Date Created: 14 June 1991
++ Date Last Updated: 14 June 1991
++ Description:
++ AssociatedJordanAlgebra takes an algebra \spad{A} and uses \spadfun{*$A}
++ to define the new multiplications \spad{a*b := (a *$A b + b *$A a)/2}
++ (anticommutator).
++ The usual notation \spad{{a,b}_+} cannot be used due to
++ restrictions in the current language.
++ This domain only gives a Jordan algebra if the
++ Jordan-identity \spad{(a*b)*c + (b*c)*a + (c*a)*b = 0} holds
++ for all \spad{a},\spad{b},\spad{c} in \spad{A}.
++ This relation can be checked by
++ \spadfun{jordanAdmissible?()$A}.
++
++ If the underlying algebra is of type
++ \spadtype{FramedNonAssociativeAlgebra(R)} (a non
++ associative algebra over R which is a free R-module of finite
++ rank, together with a fixed R-module basis), then the same
++ is true for the associated Jordan algebra.
++ Moreover, if the underlying algebra is of type
++ \spadtype{FiniteRankNonAssociativeAlgebra(R)} (a non
++ associative algebra over R which is a free R-module of finite
++ rank), then the same true for the associated Jordan algebra.
AssociatedJordanAlgebra(R,A) : SIG == CODE where
R : CommutativeRing
A : NonAssociativeAlgebra R
SIG ==> Join (NonAssociativeAlgebra R, CoercibleTo A) with
coerce : A -> %
++ coerce(a) coerces the element \spad{a} of the algebra \spad{A}
++ to an element of the Jordan algebra
++ \spadtype{AssociatedJordanAlgebra}(R,A).
if A has FramedNonAssociativeAlgebra(R) then _
FramedNonAssociativeAlgebra(R)
if A has FiniteRankNonAssociativeAlgebra(R) then _
FiniteRankNonAssociativeAlgebra(R)
CODE ==> A add
Rep := A
two : R := (1$R + 1$R)
oneHalf : R := (recip two) :: R
(a:%) * (b:%) ==
zero? two => error
"constructor must no be called with Ring of characteristic 2"
((a::Rep) * $Rep (b::Rep) +$Rep (b::Rep) * $Rep (a::Rep)) * oneHalf
-- (a::Rep) * $Rep (b::Rep) +$Rep (b::Rep) * $Rep (a::Rep)
coerce(a:%):A == a :: Rep
coerce(a:A):% == a :: %
(a:%) ** (n:PositiveInteger) == a
|