(1) Let me add some notation to the question. (To see if i get it right.)
Let $A,B$ be two square matrices of shape $n\times n$, $n>0$ natural number, $A,B\in M_{n}(\mathbb Z)$.
We know there is an invertible matrix $S\in M_{n}(\mathbb Q)$ with:
$$ A = SBS^{-1}\ . $$
The question is - if i am interpreting it right - if we can do the above with $S$ even in $M_{n}(\mathbb Z)$.
Yes, if $S$ has entries with denominators, build the common denominator (lcm of all denominators of the entries) $d$ and use $dS$ instead of $S$.
(2) Let us fix ideas and use a specific number field $K$:
sage: K.<a> = QuadraticField( -46 )
sage: ClK = K.class_group()
sage: ClK
Class group of order 4 with structure C4 of Number Field in a with defining polynomial x^2 + 46
sage: for c in ClK:
....: print c
....:
Trivial principal fractional ideal class
Fractional ideal class (5, a + 3)
Fractional ideal class (2, a)
Fractional ideal class (5, a + 2)
sage: c = ClK[3]
sage: c
Fractional ideal class (5, a + 2)
sage: c.ideal()
Fractional ideal (5, a + 2)
sage: c.ideal().integral_basis()
[5, a + 2]
(From the class $c$, we have to go first to its ideal, c.ideal()
, first, then we can apply the method integral_basis.)
Conversely, let us suppose we have the above two elements $5$, and $a+2$, and want to associate (in the given setting):
- the ideal $J$ in $\mathcal O_K$ generated by these two elements, and
- the ideal class in the class group, which is $J$ modulo principal ideals.
Now i am finally in position to answer (by sample code) the question:
sage: J = K.ideal( [5, a+2] )
sage: J == c.ideal()
True
sage: ClK(J)
Fractional ideal class (5, a + 2)
sage: ClK(J) == c
True
In words, the constructor to be applied on the list is K.ideal
.
We have got a (fractional) ideal in (the ring of integers of) $K$, called J
. (Ideals and fractional ideals are sometimes hard to separate in sage.) In order to pass with it modulo principal ideals, we simply convert it via ClK( J )
to an object inClK
.
So far, things are coherent in a natural way. To break slightly the perfect picture, note that...
sage: J
Fractional ideal (5, a + 2)
sage: J.parent()
Monoid of ideals of Number Field in a with defining polynomial x^2 + 46
sage: c.parent()
Class group of order 4 with structure C4 of Number Field in a with defining polynomial x^2 + 46
sage: J == c
True
(The true boolean eval of J == c
is maybe unexpected.)
Note: The above also works in more complicated number fields. For instance:
sage: R.<x> = PolynomialRing(QQ)
sage: K.<a> = NumberField( x^3 - x - 2017 )
sage: a.minpoly()
x^3 - x - 2017
sage: ClK = K.class_group()
sage: ClK
Class group of order 6 with structure C6 of Number Field in a with defining polynomial x^3 - x - 2017
sage: c = ClK.list()[-1]
sage: c.order()
6
sage: c
Fractional ideal class (119, a + 9)
sage: J = K.ideal( [ 119, a+9 ] )
sage: J == c.ideal()
True
sage: ClK(J) == c
True
sage: J*J
Fractional ideal (14161, a + 2865)
sage: c*c
Fractional ideal class (103, a - 33)
sage: J == c
True
sage: c.parent()
Class group of order 6 with structure C6 of Number Field in a with defining polynomial x^3 - x - 2017
sage: J.parent()
Monoid of ideals of Number Field in a with defining polynomial x^3 - x - 2017
sage: J^6
Fractional ideal (2839760855281, a - 688711041646)
sage: c^6
Trivial principal fractional ideal class
sage: ClK( J^6 )
Trivial principal fractional ideal class
sage: J^6 == c^6
False
So care should be taken, e.g. $J^6$ is not $c^6$, although...