Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/GAP/pkg/examplesforhomalg/examples/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 5.9.2023 mit Größe 136 B image not shown  

SSL tau.gi   Sprache: unbekannt

 
rahmenlose Ansicht.gi DruckansichtUnknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

### quasilinear cycle sets
BindGlobal("TauGroupFamily", NewFamily("TauGroupFamily"));
BindGlobal("TauGroupType", NewType(TauGroupFamily, IsTauGroup));

InstallMethod(TauGroup, "for the list of elements of a group and a permutation", [IsList, IsPerm], 
function(l, p)
  return Objectify(TauGroupType, rec(
    size := Size(l),
    list := l,
    tau := MappingByFunction(Group(l), Group(l), x->l[Position(l, x)^p])
  ));
end);

InstallOtherMethod(Size, "for a tau group", [ IsTauGroup ],
function(obj)
  return obj!.size;
end);

InstallMethod(ViewObj, "for a tau group", [ IsTauGroup ],
function(obj)
  Print("A tau group of size ", obj!.size);
end);

InstallMethod(PrintObj, "for a tau group", [ IsTauGroup ],
function(obj)
  Print( "Tau group of size ", obj!.size);
end);

InstallMethod(SmallTauGroup, "for a list of integers", [IsInt, IsInt],
function(size, number)
  local known, implemented, dir, filename;
  known := IsBound(TGS[size]);
  if not known then
    dir := DirectoriesPackageLibrary("YB", "data")[1];
    filename := Filename(dir, Concatenation("TGsize", String(size), ".g"));
    if IsReadableFile(filename) then
      Read(filename);
    else
      Error("Tau groups of size ", size, " are not implemented");
    fi;
  fi;
  if number <= TGS[size].implemented then
    return TauGroup(TGS[size].tg[number].list, TGS[size].tg[number].tau);
  else
    Error("there are just ", NrSmallTauGroups(size), " tau group(s) of size ", size);
  fi;
end);

### This function returns an isomorphism between two tau groups
### If <obj1> and <obj2> are not isomorphic the function returns fail
InstallMethod(IsomorphismTauGroups, "for tau groups", [ IsTauGroup, IsTauGroup ],
function(obj1, obj2)
  local f, gr1, gr2;

  gr1 := Group(obj1!.list);
  gr2 := Group(obj2!.list);

  for f in Filtered(AllHomomorphisms(gr1, gr2), x->IsInjective(x)) do
    if CompositionMapping2(f, obj1!.tau) = CompositionMapping2(obj2!.tau, f) then
      return f;
    fi;
  od;
  return fail;
end);

InstallMethod(IsTauGroupImplemented, "for an integer", [IsInt],
function(size)
  local known, implemented, dir, filename;
  known := IsBound(TGS[size]);
  if not known then
    dir := DirectoriesPackageLibrary("YB", "data")[1];
    filename := Filename(dir, Concatenation("Tsize", String(size), ".g"));
    if IsReadableFile(filename) then
      return true;
    else
      return false;
    fi;
  fi;
  return true;
end);

### This function returns the number of tau groups of size <n>
InstallGlobalFunction(NrSmallTauGroups, 
function(size)
  local dir, filename;
  if size <= 7 then
    return TGS[size].implemented;
  else
    dir := DirectoriesPackageLibrary("YB", "data")[1];
    filename := Filename(dir, Concatenation("Tsize", String(size), ".g"));
    if IsReadableFile(filename) then
      Read(filename);
      return TGS[size].implemented;
    else
      Error("Tau groups of size ", size, " are not implemented");
    fi;
  fi;
end);

InstallMethod(UnderlyingGroup, "for a tau group", [ IsTauGroup ],
function(obj)
  return Group(obj!.list);
end);

InstallMethod(UnderlyingCycleSet, "for a tau group", [IsTauGroup],
function(obj)
  local a, b, m, cs;
  
  m := NullMat(Size(obj), Size(obj));

  for a in obj!.list do
    for b in obj!.list do
      m[Position(obj!.list, a)][Position(obj!.list, b)] := Position(obj!.list, Image(obj!.tau, b*Inverse(a))*Inverse(Image(obj!.tau, Inverse(a))));
    od;
  od;

  return CycleSet(m);
end);

#

[ Verzeichnis aufwärts0.48unsichere Verbindung  ]