Ore_algebra
dual_algebra
return the dual algebra of an Ore algebra, that is, its opposite ring
dual_polynomial
map a skew polynomial of an Ore algebra to the dual algebra
reverse_algebra
return an Ore algebra with opposite normal forms
reverse_polynomial
change normal form of a skew polynomial in an Ore algebra
Calling Sequence
Parameters
Description
Examples
dual_algebra(A, x_set)
dual_polynomial(p, A, x_set)
reverse_algebra(A, x_set)
reverse_polynomial(p, A, x_set)
A
-
Ore algebra
x_set
subset of the (polynomial) indeterminates of the algebra, or the string fully to denote all indeterminates
p
skew polynomial
The dual_algebra(A, x_set) function returns an Ore algebra A`*` that is isomorphic to the opposite algebra Aop of A, that is, where the product p⁢q is defined as the value of the product p⁢q in A.
The dual_polynomial(p, A, x_set) function maps the polynomial p from A to a polynomial p`*` in A`*` so as to make the operator `*` an anti-isomorphism. In other words, this operator follows the rule p⁢q`*`=q`*`⁢p`*`.
Both commands are useful to compute left gcds and to perform other calculations based on left skew Euclidean division (see examples below and skew_gcdex).
Skew polynomials of an Ore algebra A in the indeterminates x1,`...`,xr,d1,`...`,dr (see skew_algebra) are represented under the normal form where all the x[i]s stand on the left of the monomials and all the d[i]s on the right.
The reverse_polynomial(p, A, x_set) function changes the representation of a skew polynomial p in A by moving all the d[i]s in x_set to the left of monomials, and the corresponding x[i]s to the right.
Correspondingly, the reverse_algebra(A, x_set) function returns an Ore algebra in which calculations with the new normal forms (returned by reverse_polynomial take place.
These functions are part of the Ore_algebra package, and so can be used in the form dual_algebra(..), dual_polynomial(..), reverse_algebra(..) or reverse_polynomial(..) only after performing the command with(Ore_algebra) or with(Ore_algebra,<function>). The functions can always be accessed in the long form Ore_algebra[dual_algebra](..), Ore_algebra[dual_polynomial](..), Ore_algebra[reverse_algebra](..) and Ore_algebra[reverse_polynomial](..).
with⁡Ore_algebra:
Differential operators
A≔skew_algebra⁡diff=Dx,x:
Dual and reverse polynomials look similar, but the dual polynomial is a polynomial in Dx with coefficients in x while the reverse polynomial is a polynomial in x with coefficients in Dx.
dual_polynomial⁡x,A,Dx=reverse_polynomial⁡x,A,Dx
x=x
dual_polynomial⁡Dx,A,Dx=reverse_polynomial⁡Dx,A,Dx
Dx=Dx
p≔rand_skew_poly⁡x,Dx,A
p≔−10⁢Dx4+−83⁢x2−73⁢Dx2−4⁢x3⁢Dx+97⁢x2−62⁢x
dual_polynomial⁡p,A,Dx
109⁢x2−62⁢x−166+−83⁢x2−73⁢Dx2−10⁢Dx4+−4⁢x3+332⁢x⁢Dx
reverse_polynomial⁡p,A,Dx
−10⁢Dx4−73⁢Dx2−166+−83⁢Dx2+109⁢x2−4⁢x3⁢Dx+332⁢Dx−62⁢x
Shift operators
A≔skew_algebra⁡shift=Sn,n:
Dual and reverse polynomials look similar, but the dual polynomial is a polynomial in Sn with coefficients in n while the reverse polynomial is a polynomial in n with coefficients in Sn.
dual_polynomial⁡n,A,Sn=reverse_polynomial⁡n,A,Sn
n=n
dual_polynomial⁡Sn,A,Sn=reverse_polynomial⁡Sn,A,Sn
Sn=Sn
p≔rand_skew_poly⁡n,Sn,A
p≔74⁢n⁢Sn4+6⁢n2+75⁢n⁢Sn3−92⁢n3⁢Sn2+23⁢n4−50⁢n
dual_polynomial⁡p,A,Sn
23⁢n4−50⁢n+74⁢n−296⁢Sn4+6⁢n2+39⁢n−171⁢Sn3+−92⁢n3+552⁢n2−1104⁢n+736⁢Sn2
reverse_polynomial⁡p,A,Sn
−296⁢Sn4−171⁢Sn3+736⁢Sn2+23⁢n4−92⁢n3⁢Sn2+6⁢Sn3+552⁢Sn2⁢n2+74⁢Sn4+39⁢Sn3−1104⁢Sn2−50⁢n
Eulerian operators
A≔skew_algebra⁡euler=Tx,x:
Dual and reverse polynomials look similar, but the dual polynomial is a polynomial in Tx with coefficients in x while the reverse polynomial is a polynomial in x with coefficients in Tx.
dual_polynomial⁡x,A,Tx=reverse_polynomial⁡x,A,Tx
dual_polynomial⁡Tx,A,Tx=reverse_polynomial⁡Tx,A,Tx
Tx=Tx
p≔rand_skew_poly⁡x,Tx,A
p≔−29⁢x2−61⁢x+10⁢Tx2−8⁢x3⁢Tx+95⁢x5−23
dual_polynomial⁡p,A,Tx
95⁢x5+24⁢x3−116⁢x2−61⁢x−23+−29⁢x2−61⁢x+10⁢Tx2+−8⁢x3+116⁢x2+122⁢x⁢Tx
reverse_polynomial⁡p,A,Tx
95⁢x5+−8⁢Tx+24⁢x3+−29⁢Tx2+116⁢Tx−116⁢x2+−61⁢Tx2+122⁢Tx−61⁢x+10⁢Tx2−23
`q`-Shift operators
A≔skew_algebra⁡qshift=Sn,qn:
Only dual polynomials are available.
dual_polynomial⁡qn,A,Sn
qn
reverse_polynomial⁡qn,A,Sn
Error, (in `index/Ore_algebra/should_not_be_used`) reverse not available for q-calculus algebras
dual_polynomial⁡Sn,A,Sn
Sn
reverse_polynomial⁡Sn,A,Sn
p≔rand_skew_poly⁡qn,Sn,A
p≔Sn5+77⁢Sn4+qn⁢95⁢qn−51⁢Sn3+qn2⁢31⁢qn−10⁢Sn
Sn5+77⁢Sn4+qn⁢−51⁢q3+95⁢qn⁢Sn3q6+qn2⁢31⁢qn−10⁢q⁢Snq3
Computation of left gcds and left lcms
The function Ore_algebra[skew_gcdex] inputs two polynomials p and q and computes a list g,a,b,u,v such that u⁢p+v⁢q=0 and a⁢p+b⁢q=g. The polynomial g is a right gcd of p and q. Applying the dualization operator `*` yields a list g`*`,a`*`,b`*`,u`*`,v`*` such that p`*`⁢u`*`+q`*`⁢v`*`=0 and p`*`⁢a`*`+q`*`⁢b`*`=g`*`, where g`*` is a left gcd of p`*` and q`*`. The following method to compute left gcds is based on this idea.
A≔diff_algebra⁡Dx,x:
Define two polynomials P and Q that share a left common divisor.
p≔rand_skew_poly⁡x,Dx,degree=2,A
p≔−27⁢Dx2+30⁢x−28⁢Dx+16⁢x2+55⁢x+1
q≔rand_skew_poly⁡x,Dx,degree=2,A
q≔47⁢Dx2+−87⁢x−96⁢Dx+72⁢x2−59⁢x−15
r≔rand_skew_poly⁡x,Dx,degree=2,A
r≔−48⁢Dx2+−88⁢x+92⁢Dx−91⁢x2+43⁢x−90
P≔skew_product⁡r,p,A
P≔1296⁢Dx4+936⁢x−1140⁢Dx3+−951⁢x2+1423⁢x−3074⁢Dx2+−4138⁢x3+470⁢x2−4644⁢x+92⁢Dx−1456⁢x4−4317⁢x3−1982⁢x2−6803⁢x+3434
Q≔skew_product⁡r,q,A
Q≔−2256⁢Dx4+40⁢x+8932⁢Dx3+−77⁢x2+5297⁢x−3990⁢Dx2+1581⁢x3+16811⁢x2−6574⁢x+4920⁢Dx−6552⁢x4+8465⁢x3−20324⁢x2+23105⁢x−10990
Introduce their dual polynomials and compute their right gcd in the dual algebra, corresponding the to left gcd of the original polynomials in the original algebra.
dP≔dual_polynomial⁡P,A,fully
dP≔−1456⁢x4−4317⁢x3+10432⁢x2−7743⁢x+6176+936⁢x−1140⁢Dx3+−951⁢x2+1423⁢x−5882⁢Dx2+1296⁢Dx4+−4138⁢x3+470⁢x2−840⁢x−2754⁢Dx
dQ≔dual_polynomial⁡Q,A,fully
dQ≔−6552⁢x4+8465⁢x3−25067⁢x2−10517⁢x−4570+40⁢x+8932⁢Dx3+−77⁢x2+5297⁢x−4110⁢Dx2−2256⁢Dx4+1581⁢x3+16811⁢x2−6266⁢x−5674⁢Dx
dA≔dual_algebra⁡A,fully:
dGCD≔skew_gcdex⁡dP,dQ,Dx,dA
dGCD≔−8873046528⁢Dx2⁢x4−16267251968⁢Dx⁢x5−16821817376⁢x6+24619089552⁢Dx2⁢x3+62141670024⁢Dx⁢x4+54622461457⁢x5+32688986544⁢Dx2⁢x2+12743220356⁢x3⁢Dx+39548558994⁢x4+92684791104⁢Dx2⁢x+107268226148⁢Dx⁢x2+147456828087⁢x3−35565352704⁢Dx2−242848996240⁢Dx⁢x−149094065426⁢x2+68166926016⁢Dx+35722494760⁢x−1481889696,−14275216−−2074251⁢x−8632772⁢Dx+2115893⁢x2−18025252⁢x,2097234⁢x2−3015708⁢x+7071808−−1191591⁢x−4959252⁢Dx,−184855136⁢Dx2⁢x4+342178656⁢Dx⁢x5−283182336⁢x6+512897699⁢Dx2⁢x3−571829931⁢Dx⁢x4+1017767816⁢x5+681020553⁢Dx2⁢x2−3047653889⁢x3⁢Dx+800590201⁢x4+1930933148⁢Dx2⁢x−3426608115⁢Dx⁢x2+2633091576⁢x3−740944848⁢Dx2−1210456350⁢Dx⁢x−9729185864⁢x2+3444352412⁢Dx+3624982240⁢x−5687084608,−106193376⁢Dx2⁢x4+117992640⁢Dx⁢x5+62929408⁢x6+294643359⁢Dx2⁢x3−437507974⁢Dx⁢x4+41716368⁢x5+391224573⁢Dx2⁢x2−553911398⁢x3⁢Dx−710110491⁢x4+1109259468⁢Dx2⁢x+57133929⁢Dx⁢x2−2374836150⁢x3−425649168⁢Dx2+2405735818⁢Dx⁢x−3008916049⁢x2+667845516⁢Dx+3496133096⁢x+973816096
The dual of a dual polynomial is the polynomial.
dual_polynomial⁡dGCD1,dA,fully
−16821817376⁢x6+54622461457⁢x5−41787700846⁢x4+396023508183⁢x3−217340962694⁢x2+397973484368⁢x−178952912848+−8873046528⁢x4+24619089552⁢x3+32688986544⁢x2+92684791104⁢x−35565352704⁢Dx2+−16267251968⁢x5+62141670024⁢x4−58241151868⁢x3+254982763460⁢x2−112093050064⁢x+253536508224⁢Dx
This is the left gcd, up to renormalization (by multiplication by a rational function on the right).
lgcd≔skew_product⁡,1lcoeff⁡,Dx,A
lgcd≔91⁢x248−43⁢x48+158+Dx2+11⁢x6−2312⁢Dx
This is also the built-in left factor r, up to renormalization (by multiplication by a rational function on the right).
Anormalizer⁡rlcoeff⁡r,Dx
91⁢x248−43⁢x48+158+Dx2+11⁢x6−2312⁢Dx
This calculation is that performed by Ore_algebra[skew_gcdex] with the options left and left_monic.
skew_gcdex⁡P,Q,Dx,A,left_monic1
See Also
Ore_algebra/skew_algebra
Ore_algebra/skew_gcdex
Download Help Document