Difference polynomial rings
A difference polynomial ring over the commutative ring $R$ is an action polynomial ring $A$ whose action maps are (injective) endomorphisms of $A$, i.e. $R$-linear maps that are also multiplicative.
Construction
difference_polynomial_ring — Function
difference_polynomial_ring(R::Ring, elementary_symbols::Union{Vector{Symbol}, Int}, n_action_maps::Int) -> Tuple{DifferencePolyRing, Vector{DifferencePolyRingElem}}Construct the difference polynomial ring over the base ring R with the given elementary symbols and n_action_maps commuting endomorphisms.
- If
elementary_symbolsis a vector of symbols, those names are used. - If it is an integer
m, the symbolsu1, …, umare generated automatically.
In both cases, the jet variables that are initially available are those with jet [0,…,0], one for each elementary symbol.
This method returns a tuple (dpr, gens) where dpr is the resulting difference polynomial ring and gens is the vector of initial jet variables.
This constructor also accepts all keyword arguments of set_ranking! to control the ranking.
Examples
julia> R, variablesR = difference_polynomial_ring(QQ, 3, 4)
(Difference polynomial ring in 3 elementary symbols over QQ, DifferencePolyRingElem{QQFieldElem}[u1[0,0,0,0], u2[0,0,0,0], u3[0,0,0,0]])
julia> R
Difference polynomial ring in 3 elementary symbols u1, u2, u3
with 4 commuting endomorphisms
over rational field
julia> variablesR
3-element Vector{DifferencePolyRingElem{QQFieldElem}}:
u1[0,0,0,0]
u2[0,0,0,0]
u3[0,0,0,0]
julia> S, variablesS = difference_polynomial_ring(QQ, [:a, :b, :c], 4)
(Difference polynomial ring in 3 elementary symbols over QQ, DifferencePolyRingElem{QQFieldElem}[a[0,0,0,0], b[0,0,0,0], c[0,0,0,0]])
julia> S
Difference polynomial ring in 3 elementary symbols a, b, c
with 4 commuting endomorphisms
over rational field
julia> variablesS
3-element Vector{DifferencePolyRingElem{QQFieldElem}}:
a[0,0,0,0]
b[0,0,0,0]
c[0,0,0,0]This function is part of the experimental code in Oscar. Please read here for more details.
Action maps
The action maps of a difference polynomial ring over the commutative ring R are injective R-algebra homomorphism.
After calling one of the two following methods, all jet variables that arise within their computation will be tracked afterwards.
diff_action — Method
diff_action(p::DifferencePolyRingElem, i::Int)Apply the i-th endomorphism to the polynomial p.
Examples
julia> dpr, (a,b,c) = difference_polynomial_ring(ZZ, [:a, :b, :c], 2); f = -2*a*b + 3*a*b^2;
julia> diff_action(3*a, 1)
3*a[1,0]
julia> diff_action(3*a, 2)
3*a[0,1]
julia> diff_action(f, 1)
(3*b[1,0]^2 - 2*b[1,0])*a[1,0]
julia> diff_action(f, 2)
(3*b[0,1]^2 - 2*b[0,1])*a[0,1]This function is part of the experimental code in Oscar. Please read here for more details.