I suggest to restructure this package in the following way:
LowIndexNormal should work with a graph structure of normal subgroups instead of a list of records, that we call LINS_Graph.
The LINS_Graph is a directed graph with a root node:
nodes are records, that store data about the normal subgroups it contains. (discuss entries of record later)
G is the group contained in the root node
an edge (a,b) means that b is a maximal normal subgroup of a, i.e. no normal subgroup of G can fit between b and a
Node record entries:
Group: a normal subgroup of G
Index: the index in the root G
IsCut (optional): boolean if this node is cut (explained later)
The root node may have special entries:
Output (optional): some output written by terminateFunction (explained later)
Advantages:
It would make the code more readible
It would make the output more readible and easier to use
It would allow users to search in a graph of normal subgroups that is generated by LINS incrementally (explained later)
I suggest we change the input of LowIndexNormal to the following
G finitely presented group or a LINS_Graph
n max index bound
cutFunction
terminateFunction
The first input could be a LINS_Graph, if the user wants to continue his search in the graph with higher max index bound. It is nonsense to regenerate the whole graph, since new normal subgroups might simply be inserted into it.
The third input is a function that determines if a node of the LINS_Graph with a normal subgroup N should be cut, i.e. no normal subgroups of interest for the user can be found as a subgroup of N. The input of the function is the current LINS_Graph, n and the current node in the search named Current.
The forth input is a function that determines if the search should be terminated.
The input of the function is the current LINS_Graph, n and the current node in the search named Current. It should be able to write a custom output, for example a specific normal subgroup the user was searching for, that could be stored in the root node.
Use Cases:
The most obvious use case is the search for a normal subgroup of specific index.
This should be implemented in this package and would serve as a great example of how to write a custom cutFunction and terminateFunction.
I suggest to restructure this package in the following way:
LowIndexNormal
should work with a graph structure of normal subgroups instead of a list of records, that we callLINS_Graph
.The
LINS_Graph
is a directed graph with a root node:G
is the group contained in the root node(a,b)
means thatb
is a maximal normal subgroup ofa
, i.e. no normal subgroup ofG
can fit betweenb
anda
Node record entries:
G
G
The root node may have special entries:
terminateFunction
(explained later)Advantages:
I suggest we change the input of
LowIndexNormal
to the followingG
finitely presented group or aLINS_Graph
n
max index boundcutFunction
terminateFunction
The first input could be a
LINS_Graph
, if the user wants to continue his search in the graph with higher max index bound. It is nonsense to regenerate the whole graph, since new normal subgroups might simply be inserted into it.The third input is a function that determines if a node of the
LINS_Graph
with a normal subgroupN
should be cut, i.e. no normal subgroups of interest for the user can be found as a subgroup ofN
. The input of the function is the currentLINS_Graph
,n
and the current node in the search namedCurrent
.The forth input is a function that determines if the search should be terminated. The input of the function is the current
LINS_Graph
,n
and the current node in the search namedCurrent
. It should be able to write a custom output, for example a specific normal subgroup the user was searching for, that could be stored in the root node.Use Cases: The most obvious use case is the search for a normal subgroup of specific index. This should be implemented in this package and would serve as a great example of how to write a custom
cutFunction
andterminateFunction
.