On 9/3/07, William Stein <[EMAIL PROTECTED]> wrote:
>
> On 9/3/07, Ahmad <[EMAIL PROTECTED]> wrote:
> > I'm new to sage and I don't know even if I'm supposed to post such
> > questions to this group or not. If it is a correct place:
> >
> > Could you please tell me how can I change the basis in finite field
> > representation. As much as know sage represent the finite field
> > extension in:
> >
> > [1, t, t^2, .., t^{n-1}]
> >
> > for t being the root of irreducible polynomial used to extend the
> > field. I need to represent my field in normal basis (I have chosen my
> > irreducible polynomial such that [t, t^2, t^4 .., t^{2^{n-1}}] forms a
> > basis for the extension).
> >
> > If it is not a correct place to ask such questions, please guide me to
> > the correct place.
> >
> > Thank you very much for your attention and devotion of time!
>
> Here is an example session in which I create a finite field,
> find a normal basis, then explicitly represent elements in
> terms of it (by pushing everything over to vector spaces).
>
> I have to define two functions below in order to
> do this. If people think something like this would be generally
> useful, then it could be made "built in" to SAGE:
I think it would be nice to have in_terms_of_normal_basis
(of course you need to change "2" to "p" in general).
However, I don't understand what to_V does that built-in
coersion doesn't already do:
sage: k.<a> = GF(2^5)
sage: V = k.vector_space()
sage: z = (1+a)^17; z
a^3 + a + 1
sage: V(z)
(1, 1, 0, 1, 0)
This seems to be the same output you gave for to_V(z),
or am I missing something?
>
> sage: k.<a> = GF(2^5)
> sage: k
> Finite Field in a of size 2^5
> sage: V = k.vector_space()
> sage: z = (1+a)^17; z
> a^3 + a + 1
> sage: def to_V(w):
> ... return V(w.polynomial().padded_list(V.dimension()))
> sage: to_V(z)
> (1, 1, 0, 1, 0)
> sage: B2 = [(a+1)^(2^i) for i in range(k.degree())]
> sage: W = [to_V(b) for b in B2]
> sage: V.span(W).dimension()
> 5
> sage: W0 = V.span_of_basis(W)
> sage: def in_terms_of_normal_basis(z):
> ... return W0.coordinates(to_V(z))
> sage: in_terms_of_normal_basis(a+1)
> [1, 0, 0, 0, 0]
> sage: in_terms_of_normal_basis(1 + a + a^2 + a^3)
> [1, 0, 0, 1, 0]
>
> ----
>
> Or, in SAGE notebook text format:
>
> ahmad -- sage-support
> system:sage
>
> {{{id=0|
> k.<a> = GF(2^5)
> }}}
>
> {{{id=1|
> k
> ///
> Finite Field in a of size 2^5
> }}}
>
> {{{id=2|
> V = k.vector_space()
> }}}
>
> {{{id=3|
> z = (1+a)^17; z
> ///
> a^3 + a + 1
> }}}
>
> {{{id=4|
> def to_V(w):
> return V(w.polynomial().padded_list(V.dimension()))
> }}}
>
> {{{id=5|
> to_V(z)
> ///
> (1, 1, 0, 1, 0)
> }}}
>
> {{{id=6|
> B2 = [(a+1)^(2^i) for i in range(k.degree())]
> }}}
>
> {{{id=7|
> W = [to_V(b) for b in B2]
> }}}
>
> {{{id=8|
> V.span(W).dimension()
> ///
> 5
> }}}
>
> {{{id=9|
> W0 = V.span_of_basis(W)
> }}}
>
> {{{id=10|
> def in_terms_of_normal_basis(z):
> return W0.coordinates(to_V(z))
> }}}
>
> {{{id=11|
> in_terms_of_normal_basis(a+1)
> ///
> [1, 0, 0, 0, 0]
> }}}
>
> {{{id=12|
> in_terms_of_normal_basis(1 + a + a^2 + a^3)
> ///
> [1, 0, 0, 1, 0]
> }}}
> \
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sage-support
URLs: http://sage.math.washington.edu/sage/ and http://sage.scipy.org/sage/
-~----------~----~----~----~------~----~------~--~---