Pari/GP Reference Documentation | Contents - Global index - GP keyboard shortcuts |
algabsdim algadd algalgtobasis algaut algb algbasis algbasistoalg algcenter algcentralproj algchar algcharpoly algdecomposition algdegree algdim algdisc algdivl algdivr alggroup alghasse alghassef alghassei algindex alginit alginv alginvbasis algisassociative algiscommutative algisdivision algisdivl algisinv algisramified algissemisimple algissimple algissplit alglathnf algleftmultable algmul algmultable algneg algnorm algpoleval algpow algprimesubalg algquotient algradical algramifiedplaces algrandom algrelmultable algsimpledec algsplittingdata algsplittingfield algsplittingmatrix algsqr algsub algsubalg algtableinit algtensor algtrace algtype | |
This section collects functions related to associative algebras and central simple algebras over number fields. Let A be a finite-dimensional unitary associative algebra over a field K. We say that A is central if the center of A is K, and that A is simple if it has no nontrivial two-sided ideals.
We provide functions to manipulate associative algebras of finite
dimension over ℚ or 𝔽_p. We represent them by the left multiplication
table on a basis over the prime subfield. The function The set of elements of an algebra A that annihilate every simple left A-module is a two-sided ideal, called the Jacobson radical of A. An algebra is semisimple if its Jacobson radical is trivial. A semisimple algebra is isomorphic to a direct sum of simple algebras. The dimension of a central simple algebra A over K is always a square d^2, and the integer d is called the degree of the algebra A over K. A central simple algebra A over a field K is always isomorphic to M_d(D) for some integer d and some central division algebra D of degree e : the integer e is called the index of A. Let L/K be a cyclic extension of degree d, let σ be a generator of Gal(L/K) and let b ∈ K^*. Then the cyclic algebra (L/K,σ,b) is the algebra ⨁ _{i = 0}^{d-1}x^iL with x^d = b and ℓ x = xσ(ℓ) for all ℓ ∈ L. The algebra (L/K,σ,b) is a central simple K-algebra of degree d, and it is an L-vector space. Left multiplication is L-linear and induces a K-algebra homomorphism (L/K,σ,b) → M_d(L). Let K be a nonarchimedean local field with uniformizer π, and let L/K be the unique unramified extension of degree d. Then every central simple algebra A of degree d over K is isomorphic to (L/K, Frob, π^h) for some integer h. The element h/d ∈ (1/d)ℤ/ℤ ⊂ ℚ/ℤ is called the Hasse invariant of A. Let A be an algebra of finite dimension over ℚ. An order in A is a finitely generated ℤ-submodule 𝒪 such that ℚ𝒪 = A, that is also a subring with unit. We define natural orders in central simple algebras defined by a cyclic algebra or by a multiplication table over the center. Let A = (L/K,σ,b) = ⨁ _{i = 0}^{d-1}x^iL be a cyclic algebra over a number field K of degree n with ring of integers ℤ_K. Let ℤ_L be the ring of integers of L, and assume that b is integral. Then the submodule 𝒪 = ⨁ _{i = 0}^{d-1}x^iℤ_L is an order in A, called the natural order. Let ω_0,...,ω_{nd-1} be a ℤ-basis of ℤ_L. The natural basis of 𝒪 is b_0,...,b_{nd^2-1} where b_i = x^{i/(nd)}ω_{(i mod nd)}. Now let A be a central simple algebra of degree d over a number field K of degree n with ring of integers ℤ_K. Let e_0,...,e_{d^2-1} be a basis of A over K and assume that the left multiplication table of A on (e_i) is integral. Then the submodule 𝒪 = ⨁ _{i = 0}^{d^2-1}ℤ_K e_i is an order in A, called the natural order. Let ω_0,...,ω_{n-1} be a ℤ-basis of ℤ_K. The natural basis of 𝒪 is b_0,...,b_{nd^2-1} where b_i = ω_{(i mod n)}e_{i/n}.
As with number fields, we represent elements of central simple algebras
in two ways, called the algebraic representation and the basis
representation, and you can convert betweeen the two with the functions
Warning. The coefficients in the decomposition A = ⨁ _{i = 0}^{d-1}x^iL are not the same as those in the decomposition A = ⨁ _{i = 0}^{d-1}Lx^i! The i-th coefficients are related by conjugating by x^i, which on L amounts to acting by σ^i.
Warning. For a central simple algebra over ℚ defined by a
multiplication table, we cannot distinguish between the basis and the algebraic
representations from the size of the vectors. The behaviour is then to always
interpret the column vector as a basis representation if the coefficients are
| |
algabsdim | |
Given an algebra al output by
? nf = nfinit(y^3-y+1); ? A = alginit(nf, [-1,-1]); ? algabsdim(A) %3 = 12
The library syntax is
| |
algadd | |
Given two elements x and y in al, computes their sum x+y in the algebra al.
? A = alginit(nfinit(y),[-1,1]); ? algadd(A,[1,0]~,[1,2]~) %2 = [2, 2]~ Also accepts matrices with coefficients in al.
The library syntax is
| |
algalgtobasis | |
Given an element x in the central simple algebra al output
by
? A = alginit(nfinit(y^2-5),[2,y]); ? algalgtobasis(A,[y,1]~) %2 = [0, 2, 0, -1, 2, 0, 0, 0]~ ? algbasistoalg(A,algalgtobasis(A,[y,1]~)) %3 = [Mod(Mod(y, y^2 - 5), x^2 - 2), 1]~
The library syntax is
| |
algaut | |
Given a cyclic algebra al = (L/K,σ,b) output by
? nf = nfinit(y); ? p = idealprimedec(nf,7)[1]; ? p2 = idealprimedec(nf,11)[1]; ? A = alginit(nf,[3,[[p,p2],[1/3,2/3]],[0]]); ? algaut(A) %5 = -1/3*x^2 + 1/3*x + 26/3
The library syntax is
| |
algb | |
Given a cyclic algebra al = (L/K,σ,b) output by
nf = nfinit(y); ? p = idealprimedec(nf,7)[1]; ? p2 = idealprimedec(nf,11)[1]; ? A = alginit(nf,[3,[[p,p2],[1/3,2/3]],[0]]); ? algb(A) %5 = Mod(-77, y)
The library syntax is
| |
algbasis | |
Given an central simple algebra al output by
A = alginit(nfinit(y), [-1,-1]); ? algbasis(A) %2 = [1 0 0 1/2] [0 1 0 1/2] [0 0 1 1/2] [0 0 0 1/2]
The library syntax is
| |
algbasistoalg | |
Given an element x in the central simple algebra al output
by
? A = alginit(nfinit(y^2-5),[2,y]); ? z = algbasistoalg(A,[0,1,0,0,2,-3,0,0]~); ? liftall(z) %3 = [(-1/2*y - 2)*x + (-1/4*y + 5/4), -3/4*y + 7/4]~ ? algalgtobasis(A,z) %4 = [0, 1, 0, 0, 2, -3, 0, 0]~
The library syntax is
| |
algcenter | |
If al is a table algebra output by
A simple example: the 2 x 2 upper triangular matrices over ℚ,
generated by I_2, a =
? mt = [matid(3),[0,0,0;1,0,1;0,0,0],[0,0,0;0,0,0;1,0,1]]; ? A = algtableinit(mt); ? algcenter(A) \\ = (I_2) %3 = [1] [0] [0] An example in the central simple case:
? nf = nfinit(y^3-y+1); ? A = alginit(nf, [-1,-1]); ? algcenter(A).pol %3 = y^3 - y + 1
The library syntax is
| |
algcentralproj | |
Given a table algebra al output by A simple example: 𝔽_2⨁ 𝔽_4, generated by 1 = (1,1), e = (1,0) and x such that x^2+x+1 = 0. We have e^2 = e, x^2 = x+1 and ex = 0.
? mt = [matid(3), [0,0,0; 1,1,0; 0,0,0], [0,0,1; 0,0,0; 1,0,1]]; ? A = algtableinit(mt,2); ? e = [0,1,0]~; ? e2 = algsub(A,[1,0,0]~,e); ? [a,a2] = algcentralproj(A,[e,e2]); ? algdim(a) %6 = 1 ? algdim(a2) %7 = 2
The library syntax is
| |
algchar | |
Given an algebra al output by
? mt = [matid(3), [0,0,0; 1,1,0; 0,0,0], [0,0,1; 0,0,0; 1,0,1]]; ? A = algtableinit(mt,13); ? algchar(A) %3 = 13
The library syntax is
| |
algcharpoly | |
Given an element b in al, returns its characteristic polynomial
as a polynomial in the variable v. If al is a table algebra output
by
? al = alginit(nfinit(y), [-1,-1]); \\ (-1,-1)_Q ? algcharpoly(al, [0,1]~) %2 = x^2 + 1 Also accepts a square matrix with coefficients in al.
The library syntax is
| |
algdecomposition | |
al being a table algebra output by
The library syntax is
| |
algdegree | |
Given a central simple algebra al output by
? nf = nfinit(y^3-y+1); ? A = alginit(nf, [-1,-1]); ? algdegree(A) %3 = 2
The library syntax is
| |
algdim | |
Given a central simple algebra al output by
? nf = nfinit(y^3-y+1); ? A = alginit(nf, [-1,-1]); ? algdim(A) %3 = 4
The library syntax is
| |
algdisc | |
Given a central simple algebra al output by
? nf = nfinit(y^2-5); ? A = alginit(nf, [-3,1-y]); ? [PR,h] = alghassef(A); %3 = [[[2, [2, 0]~, 1, 2, 1], [3, [3, 0]~, 1, 2, 1]], Vecsmall([0, 1])] ? n = algdegree(A); ? D = algabsdim(A); ? h = vector(#h, i, n - gcd(n,h[i])); ? n^D * nf.disc^(n^2) * idealnorm(nf, idealfactorback(nf,PR,h))^n %4 = 12960000 ? algdisc(A) %5 = 12960000
The library syntax is
| |
algdivl | |
Given two elements x and y in al, computes their left quotient x\y in the algebra al: an element z such that xz = y (such an element is not unique when x is a zerodivisor). If x is invertible, this is the same as x^{-1}y. Assumes that y is left divisible by x (i.e. that z exists). Also accepts matrices with coefficients in al.
The library syntax is
| |
algdivr | |
Given two elements x and y in al, return xy^{-1}. Also accepts matrices with coefficients in al.
The library syntax is
| |
alggroup | |
Initialize the group algebra K[G] over K = ℚ (p omitted) or 𝔽_p
where G is the underlying group of the Example:
? K = nfsplitting(x^3-x+1); ? gal = galoisinit(K); ? al = alggroup(gal); ? algissemisimple(al) %4 = 1 ? G = [Vecsmall([1,2,3]), Vecsmall([1,3,2])]; ? al2 = alggroup(G, 2); ? algissemisimple(al2) %8 = 0
The library syntax is
| |
alghasse | |
Given a central simple algebra al output by
? nf = nfinit(y^2-5); ? A = alginit(nf, [-1,y]); ? alghasse(A, 1) %3 = 1/2 ? alghasse(A, 2) %4 = 0 ? alghasse(A, idealprimedec(nf,2)[1]) %5 = 1/2 ? alghasse(A, idealprimedec(nf,5)[1]) %6 = 0
The library syntax is
| |
alghassef | |
Given a central simple algebra al output by
? nf = nfinit(y^2-5); ? A = alginit(nf, [-1,2*y-1]); ? [PR,hf] = alghassef(A); ? PR %4 = [[19, [10, 2]~, 1, 1, [-8, 2; 2, -10]], [2, [2, 0]~, 1, 2, 1]] ? hf %5 = Vecsmall([1, 0])
The library syntax is
| |
alghassei | |
Given a central simple algebra al output by
? nf = nfinit(y^2-5); ? A = alginit(nf, [-1,y]); ? alghassei(A) %3 = Vecsmall([1, 0])
The library syntax is
| |
algindex | |
Return the index of the central simple algebra A over K (as output by alginit), that is the degree e of the unique central division algebra D over K such that A is isomorphic to some matrix algebra M_d(D). If pl is set, it should be a prime ideal of K or an integer between 1 and r_1+r_2, and in that case return the local index at the place pl instead.
? nf = nfinit(y^2-5); ? A = alginit(nf, [-1,y]); ? algindex(A, 1) %3 = 2 ? algindex(A, 2) %4 = 1 ? algindex(A, idealprimedec(nf,2)[1]) %5 = 2 ? algindex(A, idealprimedec(nf,5)[1]) %6 = 1 ? algindex(A) %7 = 2
The library syntax is
| |
alginit | |
Initialize the central simple algebra defined by data B, C and variable v, as follows.
* (multiplication table) B is the base number field K in
{ m_i = [0,-1,0, 0; 1, 0,0, 0; 0, 0,0,-1; 0, 0,1, 0]; m_j = [0, 0,-1,0; 0, 0, 0,1; 1, 0, 0,0; 0,-1, 0,0]; m_k = [0, 0, 0, 0; 0, 0,-1, 0; 0, 1, 0, 0; 1, 0, 0,-1]; A = alginit(nfinit(y), [matid(4), m_i,m_j,m_k], 0); } represents (in a complicated way) the quaternion algebra (-1,-1)_ℚ. See below for a simpler solution.
* (cyclic algebra) B is an
? Q = nfinit(y); T = polcyclo(5, 'x); F = rnfinit(Q, T); ? A = alginit(F, [Mod(x^2,T), 3]);
defines the cyclic algebra (L/ℚ, σ, 3), where
L = ℚ(ζ_5) and σ:ζ
* (quaternion algebra, special case of the above) B is an
? Q = nfinit(y); A = alginit(Q, [-1,-1]); \\ (-1,-1)_ℚ
* (algebra/K defined by local Hasse invariants)
B is an By class field theory, provided the local invariants h_v sum to 0, up to Brauer equivalence, there is a unique central simple algebra over K with given local invariants and trivial invariant elsewhere. In particular, up to isomorphism, there is a unique such algebra A of degree d.
We realize A as a cyclic algebra through class field theory. The variable v
(
? nf = nfinit(y^2+1); ? PR = idealprimedec(nf,5); #PR %2 = 2 ? hi = []; ? hf = [PR, [1/3,-1/3]]; ? A = alginit(nf, [3,hf,hi]); ? algsplittingfield(A).pol %6 = x^3 - 21*x + 7
* (matrix algebra, toy example) B is an In all cases, this function computes a maximal order for the algebra by default, which may require a lot of time. Setting flag = 0 prevents this computation.
The pari object representing such an algebra A is a
* A splitting field L of A of the same degree over K as A, in
* The same splitting field L in
* The Hasse invariants at the real places of K, accessed with
* The Hasse invariants of A at the finite primes of K that ramify in
the natural order of A, accessed with
* A basis of an order 𝒪_0 expressed on the basis of the natural
order, accessed with
* A basis of the natural order expressed on the basis of 𝒪_0,
accessed with
* The left multiplication table of 𝒪_0 on the previous basis,
accessed with
* The characteristic of A (always 0), accessed with * The absolute traces of the elements of the basis of 𝒪_0.
* If A was constructed as a cyclic algebra (L/K,σ,b) of degree
d, a
* If A was constructed as a cyclic algebra (L/K,σ,b), the
element b, accessed with
* If A was constructed with its multiplication table mt over K,
the
* If A was constructed with its multiplication table mt over K,
a
The library syntax is
| |
alginv | |
Given an element x in al, computes its inverse x^{-1} in the algebra al. Assumes that x is invertible.
? A = alginit(nfinit(y), [-1,-1]); ? alginv(A,[1,1,0,0]~) %2 = [1/2, 1/2, 0, 0]~ Also accepts matrices with coefficients in al.
The library syntax is
| |
alginvbasis | |
Given an central simple algebra al output by
A = alginit(nfinit(y), [-1,-1]); ? alginvbasis(A) %2 = [1 0 0 -1] [0 1 0 -1] [0 0 1 -1] [0 0 0 2]
The library syntax is
| |
algisassociative | |
Returns 1 if the multiplication table
? mt = [matid(3),[0,0,0;1,0,1;0,0,0],[0,0,0;0,0,0;1,0,1]]; ? algisassociative(mt) %2 = 1
May be used to check a posteriori an algebra: we also allow
The library syntax is
| |
algiscommutative | |
al being a table algebra output by
? mt = [matid(3),[0,0,0;1,0,1;0,0,0],[0,0,0;0,0,0;1,0,1]]; ? A = algtableinit(mt); ? algiscommutative(A) %3 = 0 ? mt = [matid(3), [0,0,0; 1,1,0; 0,0,0], [0,0,1; 0,0,0; 1,0,1]]; ? A = algtableinit(mt,2); ? algiscommutative(A) %6 = 1
The library syntax is
| |
algisdivision | |
Given a central simple algebra al output by
? nf = nfinit(y^2-5); ? A = alginit(nf, [-1,y]); ? algisdivision(A, 1) %3 = 1 ? algisdivision(A, 2) %4 = 0 ? algisdivision(A, idealprimedec(nf,2)[1]) %5 = 1 ? algisdivision(A, idealprimedec(nf,5)[1]) %6 = 0 ? algisdivision(A) %7 = 1
The library syntax is
| |
algisdivl | |
Given two elements x and y in al, tests whether y is left divisible by x, that is whether there exists z in al such that xz = y, and sets z to this element if it exists.
? A = alginit(nfinit(y), [-1,1]); ? algisdivl(A,[x+2,-x-2]~,[x,1]~) %2 = 0 ? algisdivl(A,[x+2,-x-2]~,[-x,x]~,&z) %3 = 1 ? z %4 = [Mod(-2/5*x - 1/5, x^2 + 1), 0]~ Also accepts matrices with coefficients in al.
The library syntax is
| |
algisinv | |
Given an element x in al, tests whether x is invertible, and sets ix to the inverse of x.
? A = alginit(nfinit(y), [-1,1]); ? algisinv(A,[-1,1]~) %2 = 0 ? algisinv(A,[1,2]~,&ix) %3 = 1 ? ix %4 = [Mod(Mod(-1/3, y), x^2 + 1), Mod(Mod(2/3, y), x^2 + 1)]~ Also accepts matrices with coefficients in al.
The library syntax is
| |
algisramified | |
Given a central simple algebra al output by
? nf = nfinit(y^2-5); ? A = alginit(nf, [-1,y]); ? algisramified(A, 1) %3 = 1 ? algisramified(A, 2) %4 = 0 ? algisramified(A, idealprimedec(nf,2)[1]) %5 = 1 ? algisramified(A, idealprimedec(nf,5)[1]) %6 = 0 ? algisramified(A) %7 = 1
The library syntax is
| |
algissemisimple | |
al being a table algebra output by
? mt = [matid(3),[0,0,0;1,0,1;0,0,0],[0,0,0;0,0,0;1,0,1]]; ? A = algtableinit(mt); ? algissemisimple(A) %3 = 0 ? m_i=[0,-1,0,0;1,0,0,0;0,0,0,-1;0,0,1,0]; \\ quaternion algebra (-1,-1) ? m_j=[0,0,-1,0;0,0,0,1;1,0,0,0;0,-1,0,0]; ? m_k=[0,0,0,-1;0,0,-1,0;0,1,0,0;1,0,0,0]; ? mt = [matid(4), m_i, m_j, m_k]; ? A = algtableinit(mt); ? algissemisimple(A) %9 = 1
The library syntax is
| |
algissimple | |
al being a table algebra output by
? mt = [matid(3),[0,0,0;1,0,1;0,0,0],[0,0,0;0,0,0;1,0,1]]; ? A = algtableinit(mt); \\ matrices [*,*; 0,*] ? algissimple(A) %3 = 0 ? algissimple(A,1) \\ incorrectly assume that A is semisimple %4 = 1 ? m_i=[0,-1,0,0;1,0,0,0;0,0,0,-1;0,0,1,0]; ? m_j=[0,0,-1,0;0,0,0,1;1,0,0,0;0,-1,0,0]; ? m_k=[0,0,0,-1;0,0,b,0;0,1,0,0;1,0,0,0]; ? mt = [matid(4), m_i, m_j, m_k]; ? A = algtableinit(mt); \\ quaternion algebra (-1,-1) ? algissimple(A) %10 = 1 ? mt = [matid(3), [0,0,0; 1,1,0; 0,0,0], [0,0,1; 0,0,0; 1,0,1]]; ? A = algtableinit(mt,2); \\ direct sum F_4+F_2 ? algissimple(A) %13 = 0
The library syntax is
| |
algissplit | |
Given a central simple algebra al output by
? nf = nfinit(y^2-5); ? A = alginit(nf, [-1,y]); ? algissplit(A, 1) %3 = 0 ? algissplit(A, 2) %4 = 1 ? algissplit(A, idealprimedec(nf,2)[1]) %5 = 0 ? algissplit(A, idealprimedec(nf,5)[1]) %6 = 1 ? algissplit(A) %7 = 0
The library syntax is
| |
alglathnf | |
Given an algebra al and a square invertible matrix m with size the dimension of al, returns the lattice generated by the columns of m.
? al = alginit(nfinit(y^2+7), [-1,-1]); ? a = [1,1,-1/2,1,1/3,-1,1,1]~; ? mt = algleftmultable(al,a); ? lat = alglathnf(al,mt); ? lat[2] %5 = 1/6
The library syntax is
| |
algleftmultable | |
Given an element x in al, computes its left multiplication
table. If x is given in basis form, returns its multiplication table on
the integral basis; if x is given in algebraic form, returns its
multiplication table on the basis corresponding to the algebraic form of
elements of al. In every case, if x is a
? A = alginit(nfinit(y), [-1,-1]); ? algleftmultable(A,[0,1,0,0]~) %2 = [0 -1 1 0] [1 0 1 1] [0 0 1 1] [0 0 -2 -1]
The library syntax is
| |
algmul | |
Given two elements x and y in al, computes their product x*y in the algebra al.
? A = alginit(nfinit(y), [-1,-1]); ? algmul(A,[1,1,0,0]~,[0,0,2,1]~) %2 = [2, 3, 5, -4]~ Also accepts matrices with coefficients in al.
The library syntax is
| |
algmultable | |
Returns a multiplication table of al over its
prime subfield (ℚ or 𝔽_p), as a
? A = alginit(nfinit(y), [-1,-1]); ? M = algmultable(A); ? #M %3 = 4 ? M[1] \\ multiplication by e_1 = 1 %4 = [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] ? M[2] %5 = [0 -1 1 0] [1 0 1 1] [0 0 1 1] [0 0 -2 -1]
The library syntax is
| |
algneg | |
Given an element x in al, computes its opposite -x in the algebra al.
? A = alginit(nfinit(y), [-1,-1]); ? algneg(A,[1,1,0,0]~) %2 = [-1, -1, 0, 0]~ Also accepts matrices with coefficients in al.
The library syntax is
| |
algnorm | |
Given an element x in al, computes its norm. If al is
a table algebra output by
? mt = [matid(3), [0,0,0; 1,1,0; 0,0,0], [0,0,1; 0,0,0; 1,0,1]]; ? A = algtableinit(mt,19); ? algnorm(A,[0,-2,3]~) %3 = 18 Also accepts a square matrix with coefficients in al.
The library syntax is
| |
algpoleval | |
Given an element b in al and a polynomial T in K[X], computes T(b) in al.
The library syntax is
| |
algpow | |
Given an element x in al and an integer n, computes the power x^n in the algebra al.
? A = alginit(nfinit(y), [-1,-1]); ? algpow(A,[1,1,0,0]~,7) %2 = [8, -8, 0, 0]~ Also accepts a square matrix with coefficients in al.
The library syntax is
| |
algprimesubalg | |
al being the output of
? mt = [matid(3), [0,0,0; 1,1,0; 0,0,0], [0,0,1; 0,0,0; 1,0,1]]; ? A = algtableinit(mt,2); ? algprimesubalg(A) %3 = [1 0] [0 1] [0 0]
The library syntax is
| |
algquotient | |
al being a table algebra output by
? mt = [matid(3), [0,0,0; 1,1,0; 0,0,0], [0,0,1; 0,0,0; 1,0,1]]; ? A = algtableinit(mt,2); ? AQ = algquotient(A,[0;1;0]); ? algdim(AQ) %4 = 2
The library syntax is
| |
algradical | |
al being a table algebra output by Here is an example with A = ℚ[x]/(x^2), generated by (1,x):
? mt = [matid(2),[0,0;1,0]]; ? A = algtableinit(mt); ? algradical(A) \\ = (x) %3 = [0] [1]
Another one with 2 x 2 upper triangular matrices over ℚ, generated
by I_2, a =
? mt = [matid(3),[0,0,0;1,0,1;0,0,0],[0,0,0;0,0,0;1,0,1]]; ? A = algtableinit(mt); ? algradical(A) \\ = (a) %6 = [0] [1] [0]
The library syntax is
| |
algramifiedplaces | |
Given a central simple algebra al output by
? nf = nfinit(y^2-5); ? A = alginit(nf, [-1,y]); ? algramifiedplaces(A) %3 = [1, [2, [2, 0]~, 1, 2, 1]]
The library syntax is
| |
algrandom | |
Given an algebra al and an integer b, returns a random element in al with coefficients in [-b,b].
The library syntax is
| |
algrelmultable | |
Given a central simple algebra al output by
? nf = nfinit(y^3-5); a = y; b = y^2; ? {m_i = [0,a,0,0; 1,0,0,0; 0,0,0,a; 0,0,1,0];} ? {m_j = [0, 0,b, 0; 0, 0,0,-b; 1, 0,0, 0; 0,-1,0, 0];} ? {m_k = [0, 0,0,-a*b; 0, 0,b, 0; 0,-a,0, 0; 1, 0,0, 0];} ? mt = [matid(4), m_i, m_j, m_k]; ? A = alginit(nf,mt,'x); ? M = algrelmultable(A); ? M[2] == m_i %8 = 1 ? M[3] == m_j %9 = 1 ? M[4] == m_k %10 = 1
The library syntax is
| |
algsimpledec | |
al being the output of Warning. The images of the lift_i are not guaranteed to form a direct sum.
The library syntax is
| |
algsplittingdata | |
Given a central simple algebra al output by * an element t of al such that L = K(t) is a maximal subfield of al;
* a matrix
* a matrix
? nf = nfinit(y^3-5); a = y; b = y^2; ? {m_i = [0,a,0,0; 1,0,0,0; 0,0,0,a; 0,0,1,0];} ? {m_j = [0, 0,b, 0; 0, 0,0,-b; 1, 0,0, 0; 0,-1,0, 0];} ? {m_k = [0, 0,0,-a*b; 0, 0,b, 0; 0,-a,0, 0; 1, 0,0, 0];} ? mt = [matid(4), m_i, m_j, m_k]; ? A = alginit(nf,mt,'x); ? [t,Lb,Lbi] = algsplittingdata(A); ? t %8 = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]~; ? matsize(Lb) %9 = [12, 2] ? matsize(Lbi) %10 = [2, 12]
The library syntax is
| |
algsplittingfield | |
Given a central simple algebra al output by
nf = nfinit(y^3-5); a = y; b = y^2; {m_i = [0,a,0,0; 1,0,0,0; 0,0,0,a; 0,0,1,0];} {m_j = [0, 0,b, 0; 0, 0,0,-b; 1, 0,0, 0; 0,-1,0, 0];} {m_k = [0, 0,0,-a*b; 0, 0,b, 0; 0,-a,0, 0; 1, 0,0, 0];} mt = [matid(4), m_i, m_j, m_k]; A = alginit(nf,mt,'x); algsplittingfield(A).pol %8 = x^2 - y
The library syntax is
| |
algsplittingmatrix | |
A central simple algebra al output by
? A = alginit(nfinit(y), [-1,-1]); ? algsplittingmatrix(A,[0,0,0,2]~) %2 = [Mod(x + 1, x^2 + 1) Mod(Mod(1, y)*x + Mod(-1, y), x^2 + 1)] [Mod(x + 1, x^2 + 1) Mod(-x + 1, x^2 + 1)] Also accepts matrices with coefficients in al.
The library syntax is
| |
algsqr | |
Given an element x in al, computes its square x^2 in the algebra al.
? A = alginit(nfinit(y), [-1,-1]); ? algsqr(A,[1,0,2,0]~) %2 = [-3, 0, 4, 0]~ Also accepts a square matrix with coefficients in al.
The library syntax is
| |
algsub | |
Given two elements x and y in al, computes their difference x-y in the algebra al.
? A = alginit(nfinit(y), [-1,-1]); ? algsub(A,[1,1,0,0]~,[1,0,1,0]~) %2 = [0, 1, -1, 0]~ Also accepts matrices with coefficients in al.
The library syntax is
| |
algsubalg | |
al being a table algebra output by
? mt = [matid(3), [0,0,0; 1,1,0; 0,0,0], [0,0,1; 0,0,0; 1,0,1]]; ? A = algtableinit(mt,2); ? B = algsubalg(A,[1,0; 0,0; 0,1]); ? algdim(A) %4 = 3 ? algdim(B) %5 = 2
The library syntax is
| |
algtableinit | |
Initialize the associative algebra over K = ℚ (p omitted) or 𝔽_p
defined by the multiplication table mt.
As a K-vector space, the algebra is generated by a basis
(e_1 = 1, e_2,..., e_n); the table is given as a The point of this function is to input a finite dimensional K-algebra, so as to later compute its radical, then to split the quotient algebra as a product of simple algebras over K.
The pari object representing such an algebra A is a
* The characteristic of A, accessed with
* The multiplication table of A, accessed with * The traces of the elements of the basis.
A simple example: the 2 x 2 upper triangular matrices over ℚ,
generated by I_2, a =
? mt = [matid(3),[0,0,0;1,0,1;0,0,0],[0,0,0;0,0,0;1,0,1]]; ? A = algtableinit(mt); ? algradical(A) \\ = (a) %6 = [0] [1] [0] ? algcenter(A) \\ = (I_2) %7 = [1] [0] [0]
The library syntax is
| |
algtensor | |
Given two algebras al1 and al2, computes their tensor
product. For table algebras output by Currently only implemented for cyclic algebras of coprime degree over the same center K, and the tensor product is over K.
The library syntax is
| |
algtrace | |
Given an element x in al, computes its trace. If al is
a table algebra output by
? A = alginit(nfinit(y), [-1,-1]); ? algtrace(A,[5,0,0,1]~) %2 = 11 Also accepts a square matrix with coefficients in al.
The library syntax is
| |
algtype | |
Given an algebra al output by * 0: not a valid algebra.
* 1: table algebra output by
* 2: central simple algebra output by
* 3: central simple algebra output by
? algtype([]) %1 = 0 ? mt = [matid(3), [0,0,0; 1,1,0; 0,0,0], [0,0,1; 0,0,0; 1,0,1]]; ? A = algtableinit(mt,2); ? algtype(A) %4 = 1 ? nf = nfinit(y^3-5); ? a = y; b = y^2; ? {m_i = [0,a,0,0; 1,0,0,0; 0,0,0,a; 0,0,1,0];} ? {m_j = [0, 0,b, 0; 0, 0,0,-b; 1, 0,0, 0; 0,-1,0, 0];} ? {m_k = [0, 0,0,-a*b; 0, 0,b, 0; 0,-a,0, 0; 1, 0,0, 0];} ? mt = [matid(4), m_i, m_j, m_k]; ? A = alginit(nf,mt,'x); ? algtype(A) %12 = 2 ? A = alginit(nfinit(y), [-1,-1]); ? algtype(A) %14 = 3
The library syntax is
| |