as you say, a couple of important things are missing (or implicit in the
timeline): What algorithms do you intend do implement? What data
structures/classes will you implement to support this? Somewhat less
importantly in this case of rather well-defined problems, what is the
interface going to look like?
Best,
Tom
In general, I find it hard to comment on this proposal without knowing
how much group theory you know and how well you know it. I have done some python
programming in group theory, but need to know how much group
theory you know and which algorithms are familiar with. At this stage, it seems
much more important to say something realistic with a definite useful
product in the end, than to lay out a great plan which might
or might not get completely implemented.
So:
* Which group theory books have you read and feel you know well?
* Which algorithms do you feel you can implement? A number of
issues arising in abelian groups boil down to a problem in (integer)
lattices.
* How much linear algebra do you know? How much lattice
theory (which you can regard as "linear algebra over the integers"
or "linear algebra over a finite ring such as ZZ/nZZ") do you know?
I hope this doesn't come out sounding critical. I'm trying to be very
encouraging, but I think a good workable plan would have a better
chance of being accepted by the powers that be. It will also be best for
you in the long run.
>
> --
> You received this message because you are subscribed to the Google Groups "sympy" group.
> To post to this group, send email to sy...@googlegroups.com.
> To unsubscribe from this group, send email to sympy+un...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
>
Okay, you have an unusual background for a freshman. Based on
your background, you could implement some algorithms for abelian groups,
matrix groups, and permutations groups. I'm not familiar with the basic
algorithms with free groups or finitely presented groups, so can't really
comment on that part.
>
>> * Which algorithms do you feel you can implement? A number of
>> issues arising in abelian groups boil down to a problem in (integer)
>> lattices.
>
> Well I'm now reading the "Handbook of computational group theory" and
> I find it pretty accessible. I admit
> I'm not familiar with all the algorithms in the book, but the ones
> I've seen so far (picking random group elements,
> computing orbits and stabilizers, testing for the symmetric/
> alternating group) seem pretty doable.
Good.
>
>> * How much linear algebra do you know? How much lattice
>> theory (which you can regard as "linear algebra over the integers"
>> or "linear algebra over a finite ring such as ZZ/nZZ") do you know?
>
> In the fall we did a bit of that, especially because we needed it for
> the structure theorem for finite abelian groups.
> We showed that for example a matrix with entries in ZZ can be
> simplified by row/column operations to a form in which
> the only nonzero entries a_1, a_2,..., a_n are on the diagonal with
> a_1 \mid a_2 \mid ... \mid a_n. We established basic results
> such as the Chinese Remainder Theorem. I can't say we formally did
> "lattice" theory but I feel it has a lot to do with number theory
> which I'm
> really familiar with from the math olympiads.
That is excellent. For your timeline, perhaps you would implement
abelian groups in 2-3 weeks?
>
> Also, what do you mean by "something realistic with a definite useful
> product in the end,"? Do you think that the algorithms in the
> preliminary version of my proposal would
> be too difficult to implement (or would not be very useful)?
I would be specific:
Abelian groups:
"the basic methods like handling different representations" means
implementing invariants (elementary divisors) both in the additive case
and in the multiplicative case?
Matrix groups:
"Implementing ... basic group properties like finite, finitely
presented, Abelian, cyclic, simple..."
Determining if a matrix group defined by a finite number of matrices
over a finite field
is simple or not is actually not easy. You have to be able to find
normal subgroups.
In fact, I am not even sure how well finite fields are implemented in SymPy.
For time reasons, I would drop "finitely presented" and assume
everything is defined using
finitely many generators, either as an abelian group, a matrix group, or a
permutation group.
Permutation groups:
"Implementing ... basic group properties like finite, finitely
presented, Abelian, cyclic, simple..."
Again, determining if a permutation group defined by a finite number
of permutations
is simple or not is actually not easy.
Do you really think all this can be done in one week?
Do you plan on implementing quotient groups? For that coset
enumeration, in week 7 and 8, might be
needed sooner.
>
>> I hope this doesn't come out sounding critical. I'm trying to be very
>> encouraging, but I think a good workable plan would have a better
>> chance of being accepted by the powers that be. It will also be best for
>> you in the long run.
>
>
> Yep I agree - thanks again!
>
Yes, that helps in some cases.
> what GAP does for all matrix groups (most of the time), I think.
I think GAP does this for the projective versions but not the
linear versions, eg, PSL(2, p) but not SL(2, q).
> Though the size of the presentation should be optimized - it won't be
> very reasonable to consider the regular representation of, say, the
> general linear group of 3x3 matrices with entries in the field of 8
> elements F_8 because that has dimension (approximately) 8^9, whereas
Is GF(8) implemented in SymPy?
This could be very useful. GAP does a great job with characters, so
most people would just use
GAP for that though. Still, some functionality would be nice.
Ondrej wrote some notes on group theory here:
http://theoretical-physics.net/dev/src/math/groups.html
Being able to do those in SymPy would be nice.
You can type GF(8), but I think this yields ZZ/8ZZ.
Yes, in 0.7.1, I get this:
>>> F = GF(8)
>>> F(7)
7 mod 8