> < ^ From:

< ^ Subject:

Dear GAP Forum,

Gordon Royle asked about memory problems with LatticeSubgroups.

In GAP4, LatticeSubgroups is an Attribute, and most complex objects (such as

groups) store the values of any of their attributes that are computed, for

later reuse. Thus, if you ask twice for the lattice of subgroups of the same

group, it will take almost no time, and will simply return the stored value.

What I suspect is happening in your case is that you have a list of groups and

are computing their lattices. Since the list is still reachable, each of the

groups is, and so each of their lattices is still stored.

There are a three possible ways round this:

1. After each iteration of the loop, explicitly unbind the group that you have

processed from the list. Something like:

for i in [1..Length(l)] do g := l[i]; # do stuff to g Unbind(l[i]); od; 2. In each iteration make a different (but equal group) to work with (which will then be garbage collected) by

for g in groups do g1 := Group(GeneratorsOfGroup(g), One(g)); # do stuff to g1 od;

3. Before your loop do

DisableAttributeValueStoring( LatticeSubgroups )

this will prevent the value being stored (although many related or intermediate

values may still be stored). You will need to be careful to ensure that the

lattice is not then computed more than once per group. Doing

TraceMethods( LatticeSubgroup )

will help you to see if this is happening.

Yours,

Steve Linton

> < [top]