Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  ideals.gi   Sprache: unbekannt

 
# <subset> is a subset of AsList(obj)

InstallMethod(IsIdeal, "for a skew brace and a collection", [ IsSkewbrace, IsCollection ], 
function(obj, subset)
  local a, x;

  if IsSkewbrace(subset) then
    if HasParent(subset) and Parent(subset) = obj then
      if HasIsIdealInParent(subset) then
        return IsIdealInParent(subset);
      fi;
    fi;
  fi;

  subset := AsList(subset);

  if Order(Group(List(subset, x->x![1]))) <> Size(subset) then
    # Print("## The subset is not a group!\n");
    return false;
  fi;

  for a in obj do
    for x in subset do
      if not Lambda(a, x) in subset then
        # Print("## The subset is not lambda stable\n");
        return false;
      elif not a*x*a^-1 in subset then
        # Print("## The subset is not normal with respect to *\n");
        return false;
      elif not a+x-a in subset then
        # Print("## The subset is not normal with respect to +\n");
        return false;
      fi;
    od;
  od;
  return true;
end);

InstallMethod(IsLeftIdeal, "for a skew brace and a collection", [ IsSkewbrace, IsCollection ], 
function(obj, subset)
  local a, x;

  if IsSkewbrace(subset) then
    if HasParent(subset) and Parent(subset) = obj then
      if HasIsLeftIdealInParent(subset) then
        return IsLeftIdealInParent(subset);
      fi;
    fi;
  fi;

  subset := AsList(subset);

  if Order(Group(List(subset, x->x![1]))) <> Size(subset) then
    return false;
  fi;

  for a in obj do
    for x in subset do
      if not Lambda(a, x) in subset then
        return false;
      fi;
    od;
  od;
  return true;
end);

InstallMethod(Ideals, "for a skew brace", [ IsSkewbrace ], function(obj)
  local add, sg, l, subset, x, res, tmp;
  l := [];
  add := SkewbraceAList(obj);
  for sg in NormalSubgroups(Group(add)) do 
    subset := List(sg, x->SkewbraceElmConstructor(obj, x));
    if IsIdeal(obj, subset) then
      Add(l, subset);
    fi;
  od;
  res := [];
  for x in l do
    tmp := SubSkewbrace(obj, x);
    SetIsIdealInParent(tmp, true);
    Add(res, tmp);
  od;
  return res;
end);

InstallMethod(LeftIdeals, "for a skew brace", [ IsSkewbrace], function(obj)
  local add, sg, l, subset, x, res, tmp;
  l := [];
  add := SkewbraceAList(obj);
  for sg in AllSubgroups(Group(add)) do 
    subset := List(sg, x->SkewbraceElmConstructor(obj, x));
    if IsLeftIdeal(obj, subset) then
      Add(l, subset);
    fi;
  od;
  res := [];
  for x in l do
    tmp := SubSkewbrace(obj, x);
    SetIsLeftIdealInParent(tmp, true);
    Add(res, tmp);
  od;
  return res;
end);

InstallMethod(StrongLeftIdeals, "for a skew brace", [ IsSkewbrace], function(obj)
  local add, sg, l, subset, x, res, tmp;
  l := [];
  add := SkewbraceAList(obj);
  for sg in NormalSubgroups(Group(add)) do 
    subset := List(sg, x->SkewbraceElmConstructor(obj, x));
    if IsLeftIdeal(obj, subset) then
      Add(l, subset);
    fi;
  od;
  res := [];
  for x in l do
    tmp := SubSkewbrace(obj, x);
    SetIsLeftIdealInParent(tmp, true);
    Add(res, tmp);
  od;
  return res;
end);

InstallGlobalFunction(SubSkewbrace, function(obj, sub)
  local p, res, add, mul, per, fam, gens;

  p := List(sub, y->[y![1], y^InverseBijective1Cocycle(obj)]);

  add := List(p, x->x[1]); 
  per := Sortex(add);
  mul := Permuted(List(p, x->x[2]), per);
 
  fam := ElementsFamily(FamilyObj(obj)); 
  res := Objectify(NewType(CollectionsFamily(fam), IsSkewbrace and IsAttributeStoringRep), rec());

  SetSize(res, Size(add)); 
  SetSkewbraceAList(res, add);
  SetSkewbraceMList(res, mul);

  gens := SmallGeneratingSet(Group(add));
  if gens = [] then
    SetUnderlyingAdditiveGroup(res, Group(()));
  else
    SetUnderlyingAdditiveGroup(res, Group(gens));
  fi;

  gens := SmallGeneratingSet(Group(mul));
  if gens = [] then
    SetUnderlyingMultiplicativeGroup(res, Group(()));
  else
    SetUnderlyingMultiplicativeGroup(res, Group(gens));
  fi;

  SetParent(res, obj);
  return res;

end);

InstallMethod(IsSimpleSkewbrace, "for a skew brace", [ IsSkewbrace ], 
function(obj)
  return Size(Ideals(obj))=2;
end);

InstallOtherMethod(IsSimple, "for a skew brace", [ IsSkewbrace ],
function(obj)
  return IsSimpleSkewbrace(obj);
end);

InstallMethod(Socle, "for a skew brace", [ IsSkewbrace ], function(obj)
  local add, l;
  add := SkewbraceAList(obj);
  l := List(Center(Group(add)), x->SkewbraceElmConstructor(obj, x));
  return AsIdeal(obj, Filtered(l, a->ForAll(AsList(obj), b->Lambda(a,b)=b)));
end);

InstallMethod(Annihilator, "for a skew brace", [ IsSkewbrace], function(obj)
  local mul,soc,ann,tmp;
  mul := UnderlyingMultiplicativeGroup(obj);
  soc := Socle(obj);
  tmp := Intersection(AsList(soc), FromMul2Skewbrace(obj, AsList(Center(mul))));
  ann := SubSkewbrace(obj, tmp);
  SetIsIdealInParent(ann, true);
  return ann;
end);

InstallMethod(AsIdeal, "for a skew brace and a subset of a skew brace", [ IsSkewbrace, IsCollection ], 
function(obj, subset)
  local res;
  if not IsIdeal(obj, AsList(subset)) then
    Error("this is not an ideal,");
  else
    res := SubSkewbrace(obj, subset);
    SetIsIdealInParent(res, true);
    return res;
  fi;
end);

InstallMethod(Quotient, "for two skew braces", [IsSkewbrace, IsSkewbrace], function(obj, ideal)
  local add, mul, bij, idA, idG, fA, fG, r, s, x, a, l;

  if not IsIdeal(obj, AsList(ideal)) then
    Error("this is not an ideal,");
  fi;

  # groups of <obj>
  add := UnderlyingAdditiveGroup(obj);
  mul := UnderlyingMultiplicativeGroup(obj);

  # bijection between <add> and <mul>
  bij := InverseBijective1Cocycle(obj);

  # the additive group of <ideal>
  idA := UnderlyingAdditiveGroup(ideal);
  idG := Group(List(ideal, x->Image(bij, x)));

  # canonical epimorphism from <add> to <idA>
  fA := NaturalHomomorphismByNormalSubgroup(add, idA);
  fG := NaturalHomomorphismByNormalSubgroup(mul, idG);

  # permutation representations of <add> and <mul>
  r := fA*IsomorphismPermGroup(Image(fA));
  s := fG*IsomorphismPermGroup(Image(fG));

  # list to construct the skew brace
  l := [];

  for x in Image(r) do
    a := SkewbraceElm(obj, Representative(PreImagesElm(r, x)));
    Add(l, [x, Image(s, Image(bij, a))]);
  od;

  return Skewbrace(l);
end);

InstallMethod(LeftSeries, "for a skew brace", [IsSkewbrace], function(obj)
  local tmp, old, new, l, done;

  done := false;
  old := ShallowCopy(obj);
  l := [old];

  repeat
    tmp := List(Cartesian(obj, old), x->Star(x[1],x[2]));
    new := SubSkewbrace(obj, List(Group(List(tmp, x->x![1])), y->SkewbraceElmConstructor(obj, y)));

    if Size(new) <> Size(old) then
      Add(l, new);
      SetIsLeftIdealInParent(new, true);
    fi;

    if Size(new)=Size(old) or Size(new)=1 then
      done := true;
    fi;

    old := ShallowCopy(new);

  until done; 
  return l;

end);

InstallMethod(RightSeries, "for a skew brace", [IsSkewbrace], function(obj)
  local tmp, old, new, l, done;

  done := false;
  old := ShallowCopy(obj);
  l := [AsIdeal(obj, AsList(obj))];

  repeat
    tmp := List(Cartesian(old, obj), x->Star(x[1],x[2]));
    new := SubSkewbrace(obj, List(Group(List(tmp, x->x![1])), y->SkewbraceElmConstructor(obj, y)));

    if Size(new) <> Size(old) then
      Add(l, new);
      SetIsIdealInParent(new, true);
    fi;

    if Size(new)=Size(old) or Size(new)=1 then
      done := true;
    fi;

    old := ShallowCopy(new);

  until done; 
  return l;
end);

InstallMethod(IsLeftNilpotent, "for a skew brace", [IsSkewbrace], function(obj)
  return 1 in List(LeftSeries(obj), Size);
end);

InstallMethod(IsRightNilpotent, "for a skew brace", [IsSkewbrace], function(obj)
  return 1 in List(RightSeries(obj), Size);
end);

InstallMethod(SocleSeries, "for a skew brace", [IsSkewbrace], function(obj)
  local l, tmp, old, new, done;

  old := ShallowCopy(obj);
  l := [old];
  done := false;

  repeat
    new := ShallowCopy(Quotient(old, Socle(old)));

    if Size(new) <> Size(old) then
      Add(l, new);
    fi;

    if Size(new)=Size(old) or Size(new)=1 then
      done := true;
    fi;
  
    old := ShallowCopy(new);
  until done; 

  return l;
  
end);

InstallMethod(MultipermutationLevel, "for a skew brace", [IsSkewbrace], function(obj)
  local s;
  s := SocleSeries(obj);
  if 1 in List(s, Size) then
    return Size(s);
  else
    return fail;
  fi;
end);

InstallMethod(IsMultipermutation, "for a skew brace", [IsSkewbrace], function(obj)
  return 1 in List(SocleSeries(obj), Size);
end);

InstallMethod(Fix, "for a skew brace", [IsSkewbrace], function(obj)
  return Filtered(AsList(obj), b->ForAll(AsList(obj), a->Lambda(a,b)=b));
end);

InstallMethod(KernelOfLambda, "for a skew brace", [IsSkewbrace], function(obj)
  return Filtered(AsList(obj), a->ForAll(AsList(obj), b->Lambda(a,b)=b));
end);

InstallMethod(SmoktunowiczSeries, "for a skew brace", [IsSkewbrace, IsInt], function(obj, bound)
  local n,i,s,tmp,new,old,k,done;

  done := false;
  s := [];
  n := 1;

  Add(s, obj);
  
  for k in [1..bound] do

    tmp := [];

    for i in [1..n] do
      Add(tmp, List(Cartesian(s[i], s[n+1-i]), x->Star(x[1],x[2])));
    od;

    old := ShallowCopy(s[n]);
    new := ShallowCopy(SubSkewbrace(obj, List(Group(List(Flat(tmp), x->x![1])), y->SkewbraceElmConstructor(obj, y))));

    if Size(new) = 1 then
      Add(s, new);
      break;
    else
      n := n+1; 
      old := ShallowCopy(new);
      Add(s, new);
    fi;
    
  od;
  return s;
end);


#  local i, n, s, old, tmp, new, done;
#
#  old := ShallowCopy(obj);
#  s := [old];
#  n := 1;
#  done := false;
#
# repeat 
#  tmp := [];
#  for i in [1..n] do
#   tmp := Concatenation(tmp, List(Cartesian(AsList(s[i]), AsList(s[n+1-i])), x->Star(x[1],x[2])));  
#  od;
#  new := SubSkewbrace(obj, List(Group(List(tmp, x->x![1])), y->SkewbraceElmConstructor(obj, y)));
#
#  if Size(new) <> Size(old) then
#   Add(s, new);
#  fi;
#
#  if Size(new)=Size(old) or Size(new)=1 then
#   done := true;
#  fi;
#
#  old := ShallowCopy(new);
#  n := n+1;
# until done;
#
#  return s;
#end);

InstallMethod(IsPrimeBrace, "for a skew brace", [IsSkewbrace], function(obj)
  local l, x, y;
  l := List(Ideals(obj), AsList);
  for x in l do
    if Size(x)=1 then
      continue;
    fi;
    for y in l do
      if Size(y) = 1 then
        continue;
      fi;
      if Size(Star(x, y))=1 then
        return false;
      fi;
    od;
  od;
  return true;
end);

InstallMethod(IsPrimeIdeal, "for an ideal of a skew brace", [IsSkewbrace and IsIdealInParent], function(obj)
  return IsPrimeBrace(Quotient(obj!.ParentAttr, obj));
end);

InstallMethod(PrimeIdeals, "for a skew brace", [IsSkewbrace], function(obj)
  return Filtered(Ideals(obj), x->IsPrimeIdeal(x));
end);

InstallMethod(IsSemiprime, "for a skew brace", [IsSkewbrace], function(obj)
  local l, x, y;
  l := List(Ideals(obj), AsList);
  for x in l do
    if Size(x)=1 then
      continue;
    fi;
    if Size(Star(x, x))=1 then
      return false;
    fi;
  od;
  return true;
end);

InstallMethod(IsSemiprimeIdeal, "for an ideal of a skew brace", [IsSkewbrace and IsIdealInParent], function(obj)
  return IsSemiprime(Quotient(obj!.ParentAttr, obj));
end);

InstallMethod(SemiprimeIdeals, "for a skew brace", [IsSkewbrace], function(obj)
  return Filtered(Ideals(obj), x->IsPrimeIdeal(x));
end);

InstallMethod(IntersectionOfTwoIdeals, "for ideals of a skew brace", [IsSkewbrace and IsIdealInParent, IsSkewbrace and IsIdealInParent], function(ideal1, ideal2)
  local obj, tmp;
  if Parent(ideal1) <> Parent(ideal2) then
    Error("The ideals do not belong to the same skew brace,");
  else
    obj := Parent(ideal1);
  fi;
  tmp := SubSkewbrace(obj, Intersection(AsList(ideal1), AsList(ideal2)));
  SetIsIdealInParent(tmp, true);
  return tmp;
end);

InstallMethod(SumOfTwoIdeals, "for ideals of a skew brace", [IsSkewbrace and IsIdealInParent, IsSkewbrace and IsIdealInParent], function(ideal1, ideal2)
  local obj, tmp, new;
  if Parent(ideal1) <> Parent(ideal2) then
    Error("The ideals do not belong to the same skew brace,");
  else
    obj := Parent(ideal1);
  fi;
  tmp := AsList(Group(List(Union(AsList(ideal1), AsList(ideal2)), x->x![1])));
  new := SubSkewbrace(obj, List(tmp, x->SkewbraceElmConstructor(obj, x)));
  SetIsIdealInParent(new, true);
  return new;
end);

InstallMethod(BaerRadical, "for a skew brace", [IsSkewbrace], function(obj)
  return Iterated(PrimeIdeals(obj), IntersectionOfTwoIdeals);
end);

InstallMethod(IsBaer, "for a skew brace", [IsSkewbrace], function(obj)
  return Size(BaerRadical(obj)) = Size(obj);
end);

InstallMethod(WedderburnRadical, "for a skew brace", [IsSkewbrace], function(obj)
  return Iterated(Filtered(Ideals(obj), x->IsLeftNilpotent(x) and IsRightNilpotent(x)), SumOfTwoIdeals);
end);

InstallMethod(IdealGeneratedBy, "for a skew brace and a collection", [ IsSkewbrace, IsCollection ], function(obj,subset)
  local f;
  f := Filtered(Ideals(obj), x->ForAll(subset, y->y in x));
  return Iterated(f, IntersectionOfTwoIdeals);
end);

InstallOtherMethod(IsSolvable, "for a skew brace", [IsSkewbrace], function(obj)
  return 1 in List(SolvableSeries(obj), Size);
end);

InstallMethod(SolvableSeries, "for a skew brace", [IsSkewbrace], function(obj)
  local tmp, old, new, l, done;

  done := false;
  old := ShallowCopy(obj);
  l := [old];

  repeat
    tmp := List(Cartesian(old, old), x->Star(x[1],x[2]));
    new := SubSkewbrace(obj, List(Group(List(tmp, x->x![1])), y->SkewbraceElmConstructor(obj, y)));

    if Size(new) <> Size(old) then
      Add(l, new);
    fi;

    if Size(new)=Size(old) or Size(new)=1 then
      done := true;
    fi;

    old := ShallowCopy(new);

  until done; 
  return l;

end);

InstallMethod(LeftNilpotentIdeals, "for a skew brace", [ IsSkewbrace], function(obj)
  return Filtered(Ideals(obj), IsLeftNilpotent);
end);

InstallMethod(RightNilpotentIdeals, "for a skew brace", [ IsSkewbrace], function(obj)
  return Filtered(Ideals(obj), IsRightNilpotent);
end);

InstallMethod(IsMinimalIdeal, "for an ideal of a skew brace", [ IsSkewbrace and IsIdealInParent ], function(obj)
  if Size(obj) > 1 then
    if Size(Filtered(Ideals(obj), x->IsIdeal(Parent(obj), AsList(x))))=2 then
      return true;
    fi;
  fi;
  return false;
end);

InstallMethod(MinimalIdeals, "for a skew brace", [ IsSkewbrace ], function(obj)
  return Filtered(Ideals(obj), IsMinimalIdeal);
end);

InstallMethod(DerivedSubSkewbrace, "for a skew brace", [ IsSkewbrace ], function(obj)
  local right;
  right := RightSeries(obj);
  if Size(right)=1 then
    return right[1];#AsIdeal(obj, AsList(right[1]));
  else
    return right[2];
  fi;
end);

InstallOtherMethod(IsPerfect, "for a skew brace", [ IsSkewbrace ], function(obj)
  return Size(obj)=Size(DerivedSubSkewbrace(obj));
end);

InstallMethod( IsIdealInParent,
    "for a left ideal",
    true,
    [ IsSkewbrace and IsLeftIdealInParent],
    
    function( I )
      return IsIdeal(ParentAttr(I),I);
end );

InstallMethod( ViewObj,
    "for a left ideal and ideal",
    true,
    [ IsSkewbrace and IsLeftIdealInParent],
    function( I )
      Print( "\>\><left ideal in \>\>" );
      #Distinguishes between parents with(out) parentobject -> solves nesting of "Left ideal in ..."
    if HasIdSkewbrace( ParentAttr(I) ) or HasIdBrace( ParentAttr(I) ) then 
      View( ParentAttr( I ) );
    else
      Print( ParentAttr( I ) );
    fi;
    Print( "\<,\< \>\>(size ", Size( I ), "\<\<\<\<)>" );
    end );

InstallMethod( ViewObj,
    "for a two-sided ideal",
    true,
    [ IsSkewbrace and IsIdealInParent],
    function( I )
      Print( "\>\><ideal in \>\>" );
      #Distinguishes between parents with(out) parentobject -> solves nesting of "Ideal in ;.."
      if HasIdSkewbrace( ParentAttr(I) ) or HasIdBrace( ParentAttr(I) ) then 
        View( ParentAttr( I ) );
      else
        Print( ParentAttr( I ) );
      fi;
      Print( "\<,\< \>\>(size ", Size( I ), "\<\<\<\<)>" );
    end );

[ Dauer der Verarbeitung: 0.32 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge