# promote -- promote to another ring

## Synopsis

• Usage:
promote(f,R)
• Inputs:
• f, , an ideal, or over some base ring of R
• R, a ring
• Outputs:
• , or , over R

## Description

Promote the given ring element or matrix f to an element or matrix of R, via the natural map to R. This is semantically equivalent to creating the natural ring map from ring f --> R and mapping f via this map.

 `i1 : R = QQ[a..d]; f = a^2;` `i3 : S = R/(a^2-b-1);` ```i4 : promote(2/3,S) 2 o4 = - 3 o4 : S``` ```i5 : F = map(R,QQ); F(2/3) o5 : RingMap R <--- QQ 2 o6 = - 3 o6 : R``` ```i7 : promote(f,S) o7 = b + 1 o7 : S``` ```i8 : G = map(S,R); G(f) o8 : RingMap S <--- R o9 = b + 1 o9 : S```

Promotion of real numbers to rational numbers is accomplished by using all of the bits of the internal representation.

 ```i10 : promote(101.,QQ) o10 = 101 o10 : QQ``` ```i11 : promote(.101,QQ) 3638908498915361 o11 = ----------------- 36028797018963968 o11 : QQ``` ```i12 : factor denominator oo 55 o12 = 2 o12 : Expression of class Product``` ```i13 : ooo + 0. o13 = .101 o13 : RR (of precision 53)``` ```i14 : oo === .101 o14 = true```

For promotion of ring elements, there is the following shorter notation.

 ```i15 : 13_R o15 = 13 o15 : R```

If you wish to promote a module to another ring, either promote the corresponding matrices, use the natural ring map, or use tensor product of matrices or modules.

 `i16 : use R;` ```i17 : I = ideal(a^2,a^3,a^4) 2 3 4 o17 = ideal (a , a , a ) o17 : Ideal of R``` ```i18 : promote(I,S) 2 o18 = ideal (b + 1, a*b + a, b + 2b + 1) o18 : Ideal of S``` ```i19 : m = image matrix{{a^2,a^3,a^4}} o19 = image | a2 a3 a4 | 1 o19 : R-module, submodule of R``` ```i20 : promote(gens m,S) o20 = | b+1 ab+a b2+2b+1 | 1 3 o20 : Matrix S <--- S``` ```i21 : G m o21 = image | b+1 ab+a b2+2b+1 | 1 o21 : S-module, submodule of S``` ```i22 : m ** S o22 = cokernel {2} | a 0 | {3} | -1 a | {4} | 0 -1 | 3 o22 : S-module, quotient of S```
A special feature is that if f is rational, and R is not an algebra over QQ, then an element of R is provided by attempting the evident division.

## Ways to use promote :

• promote(RR,type of QQ)
• promote(Module,type of InexactNumber') (missing documentation)
• promote(Module,type of InexactNumber) (missing documentation)
• promote(Module,type of Number) (missing documentation)
• promote(Module,type of RingElement) (missing documentation)
• promote(MutableMatrix,type of InexactNumber') (missing documentation)
• promote(MutableMatrix,type of InexactNumber) (missing documentation)
• promote(MutableMatrix,type of Number) (missing documentation)
• promote(MutableMatrix,type of RingElement) (missing documentation)
• promote(Vector,type of InexactNumber') (missing documentation)
• promote(Vector,type of InexactNumber) (missing documentation)
• promote(Vector,type of Number) (missing documentation)
• promote(Vector,type of RingElement) (missing documentation)