Quelle hasse.tst
Sprache: unbekannt
|
|
gap> START_TEST("omput.tst");
########################################################
## May also call `DrawHasse(diagram)` to produce html
########################################################
## Bruhat order on permutations
########################################################
# return {(i,j) | i < j and p(i) > p(j)}
gap> inv := function(p)
> local n, i, j, res;
>
> res := [];
> n := Length(ListPerm(p));
>
> for j in [1 .. n] do
> for i in [1 .. j-1] do
> if i^p > j^p then
> Append(res, [[i,j]]);
> fi;
> od;
> od;
> return res;
> end;
function( p ) ... end
gap>
gap> le := function(p,t)
> return IsSubset(inv(t), inv(p));
> end;
function( p, t ) ... end
gap>
gap> s := SymmetricGroup(4);
Sym( [ 1 .. 4 ] )
gap> l := AsSet(s);
[ (), (3,4), (2,3), (2,3,4), (2,4,3), (2,4), (1,2), (1,2)(3,4), (1,2,3),
(1,2,3,4), (1,2,4,3), (1,2,4), (1,3,2), (1,3,4,2), (1,3), (1,3,4),
(1,3)(2,4), (1,3,2,4), (1,4,3,2), (1,4,2), (1,4,3), (1,4), (1,4,2,3),
(1,4)(2,3) ]
gap> h := CreateHasseDiagram(l,le);;
gap> OMPrint(h);
<OMOBJ xmlns="http://www.openmath.org/OpenMath" version="2.0">
<OMBIND>
<OMS cd="fns2" name="constant"/>
<OMBVAR>
<OMV name="()"/>
<OMV name="(3,4)"/>
<OMV name="(2,3)"/>
<OMV name="(2,3,4)"/>
<OMV name="(2,4,3)"/>
<OMV name="(2,4)"/>
<OMV name="(1,2)"/>
<OMV name="(1,2)(3,4)"/>
<OMV name="(1,2,3)"/>
<OMV name="(1,2,3,4)"/>
<OMV name="(1,2,4,3)"/>
<OMV name="(1,2,4)"/>
<OMV name="(1,3,2)"/>
<OMV name="(1,3,4,2)"/>
<OMV name="(1,3)"/>
<OMV name="(1,3,4)"/>
<OMV name="(1,3)(2,4)"/>
<OMV name="(1,3,2,4)"/>
<OMV name="(1,4,3,2)"/>
<OMV name="(1,4,2)"/>
<OMV name="(1,4,3)"/>
<OMV name="(1,4)"/>
<OMV name="(1,4,2,3)"/>
<OMV name="(1,4)(2,3)"/>
</OMBVAR>
<OMA>
<OMS cd="relation2" name="hasse_diagram"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="()"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(3,4)"/>
<OMV name="(2,3)"/>
<OMV name="(1,2)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(3,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(2,3,4)"/>
<OMV name="(1,2)(3,4)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(2,3)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(2,4,3)"/>
<OMV name="(1,2,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(2,3,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(2,4)"/>
<OMV name="(1,2,3,4)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(2,4,3)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(2,4)"/>
<OMV name="(1,2,4,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(2,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2,4)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2)(3,4)"/>
<OMV name="(1,3,2)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2)(3,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3,4,2)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2,3)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2,4,3)"/>
<OMV name="(1,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2,3,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2,4)"/>
<OMV name="(1,3,4)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2,4,3)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3)(2,4)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,2,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3,2,4)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3,2)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3)"/>
<OMV name="(1,4,3,2)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3,4,2)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3,4)"/>
<OMV name="(1,4,2)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3)(2,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3,2,4)"/>
<OMV name="(1,4,2,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,3,2,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4)(2,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4,3,2)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4,2)"/>
<OMV name="(1,4,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4,2)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4,3)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4,2,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4)(2,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4,2,3)"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4)(2,3)"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="(1,4)(2,3)"/>
<OMA>
<OMS cd="list1" name="list"/>
</OMA>
</OMA>
</OMA>
</OMBIND>
</OMOBJ>
gap>
########################################################
## Divisor lattice of a natural number
########################################################
# try these numbers N := 102, 2618, 282387;
# the number lattice is basically boring, just a concatenation of cubes...
gap> leq := function(x,y) return y mod x = 0; end;
function( x, y ) ... end
gap> N := 102;
102
gap> h := CreateHasseDiagram(Filtered([1..N],i->N mod i = 0), leq);;
gap> OMPrint(h);
<OMOBJ xmlns="http://www.openmath.org/OpenMath" version="2.0">
<OMBIND>
<OMS cd="fns2" name="constant"/>
<OMBVAR>
<OMV name="1"/>
<OMV name="2"/>
<OMV name="3"/>
<OMV name="6"/>
<OMV name="17"/>
<OMV name="34"/>
<OMV name="51"/>
<OMV name="102"/>
</OMBVAR>
<OMA>
<OMS cd="relation2" name="hasse_diagram"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="1"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="2"/>
<OMV name="3"/>
<OMV name="17"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="2"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="6"/>
<OMV name="34"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="3"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="6"/>
<OMV name="51"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="6"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="102"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="17"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="34"/>
<OMV name="51"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="34"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="102"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="51"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="102"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="102"/>
<OMA>
<OMS cd="list1" name="list"/>
</OMA>
</OMA>
</OMA>
</OMBIND>
</OMOBJ>
gap>
#########################################################################
## Some semigroups examples #############################################
#########################################################################
gap> s1 := Transformation([1,1,3,4]);
Transformation( [ 1, 1 ] )
gap> s2 := Transformation([1,2,2,4]);
Transformation( [ 1, 2, 2 ] )
gap> s3 := Transformation([1,2,3,3]);
Transformation( [ 1, 2, 3, 3 ] )
gap> t1 := Transformation([2,2,3,4]);
Transformation( [ 2, 2 ] )
gap> t2 := Transformation([1,3,3,4]);
Transformation( [ 1, 3, 3 ] )
gap> t3 := Transformation([1,2,4,4]);
Transformation( [ 1, 2, 4, 4 ] )
gap> o4 := Semigroup([s1,s2,s3,t1,t2,t3]);
<transformation semigroup of degree 4 with 6 generators>
gap> rcl := GreensRClasses( o4 );
[ <Green's R-class: Transformation( [ 1, 1, 1, 1 ] )>,
<Green's R-class: Transformation( [ 1, 1, 1, 2 ] )>,
<Green's R-class: Transformation( [ 1, 1, 2, 2 ] )>,
<Green's R-class: Transformation( [ 1, 1, 2, 3 ] )>,
<Green's R-class: Transformation( [ 1, 2, 2, 2 ] )>,
<Green's R-class: Transformation( [ 1, 2, 2, 3 ] )>,
<Green's R-class: Transformation( [ 1, 2, 3, 3 ] )> ]
gap> h := CreateHasseDiagram(rcl, IsGreensLessThanOrEqual);;
gap> OMPrint(h);
<OMOBJ xmlns="http://www.openmath.org/OpenMath" version="2.0">
<OMBIND>
<OMS cd="fns2" name="constant"/>
<OMBVAR>
<OMV name="<object>"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
</OMBVAR>
<OMA>
<OMS cd="relation2" name="hasse_diagram"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMA>
<OMS cd="list1" name="list"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMV name="<object>"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMA>
<OMS cd="list1" name="list"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="<object>"/>
<OMA>
<OMS cd="list1" name="list"/>
</OMA>
</OMA>
</OMA>
</OMBIND>
</OMOBJ>
gap>
###################################################################
## Some basic Hasse Diagrams - for when everything else is broken
###################################################################
gap> d := Domain(["0","a","b","c","1"]);;
gap> Elements(d);
[ "0", "1", "a", "b", "c" ]
gap> Size(d);
5
gap> r := BinaryRelationByElements(d,
> [ DirectProductElement(["0","a"]),
> DirectProductElement(["0","b"]),
> DirectProductElement(["0","c"]),
> DirectProductElement(["a","1"]),
> DirectProductElement(["b","1"]),
> DirectProductElement(["c","1"])]);;
gap> SetIsHasseDiagram(r, true);
gap> OMPrint(r);
<OMOBJ xmlns="http://www.openmath.org/OpenMath" version="2.0">
<OMBIND>
<OMS cd="fns2" name="constant"/>
<OMBVAR>
<OMV name="0"/>
<OMV name="a"/>
<OMV name="b"/>
<OMV name="c"/>
<OMV name="1"/>
</OMBVAR>
<OMA>
<OMS cd="relation2" name="hasse_diagram"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="0"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="a"/>
<OMV name="b"/>
<OMV name="c"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="a"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="1"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="b"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="1"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="c"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="1"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="1"/>
<OMA>
<OMS cd="list1" name="list"/>
</OMA>
</OMA>
</OMA>
</OMBIND>
</OMOBJ>
gap>
########################################################
## Partitions of a Natural Number
##
## problematic? - writing matrices?
########################################################
# this identifies the holes where the spacers go
gap> sumrep := function(p)
> return List([1 .. Length(p)], i->Sum([1 .. i], j->p[j]));
> end;
function( p ) ... end
# a refines b iff sumrep(b) is a subset of sumrep(a)
gap> refines := function(a,b)
> return IsSubset(sumrep(a), sumrep(b));
> end;
function( a, b ) ... end
gap>
gap> p := Partitions(5);
[ [ 1, 1, 1, 1, 1 ], [ 2, 1, 1, 1 ], [ 2, 2, 1 ], [ 3, 1, 1 ], [ 3, 2 ],
[ 4, 1 ], [ 5 ] ]
gap> h := CreateHasseDiagram(p, refines);;
gap> OMPrint(h);
<OMOBJ xmlns="http://www.openmath.org/OpenMath" version="2.0">
<OMBIND>
<OMS cd="fns2" name="constant"/>
<OMBVAR>
<OMV name="[ 1, 1, 1, 1, 1 ]"/>
<OMV name="[ 2, 1, 1, 1 ]"/>
<OMV name="[ 2, 2, 1 ]"/>
<OMV name="[ 3, 1, 1 ]"/>
<OMV name="[ 3, 2 ]"/>
<OMV name="[ 4, 1 ]"/>
<OMV name="[ 5 ]"/>
</OMBVAR>
<OMA>
<OMS cd="relation2" name="hasse_diagram"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 1, 1, 1, 1, 1 ]"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 2, 1, 1, 1 ]"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 2, 1, 1, 1 ]"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 2, 2, 1 ]"/>
<OMV name="[ 3, 1, 1 ]"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 2, 2, 1 ]"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 4, 1 ]"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 3, 1, 1 ]"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 3, 2 ]"/>
<OMV name="[ 4, 1 ]"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 3, 2 ]"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 5 ]"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 4, 1 ]"/>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 5 ]"/>
</OMA>
</OMA>
<OMA>
<OMS cd="list1" name="list"/>
<OMV name="[ 5 ]"/>
<OMA>
<OMS cd="list1" name="list"/>
</OMA>
</OMA>
</OMA>
</OMBIND>
</OMOBJ>
#
gap> STOP_TEST("omput.tst");
[ Dauer der Verarbeitung: 0.41 Sekunden
(vorverarbeitet)
]
|
2026-03-28
|