Quelle francy-numericalsgps.ipynb
Sprache: unbekannt
|
|
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Numerical semigroups with `francy`\n",
"\n",
"## Load `francy` Package"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"true"
]
},
"execution_count": 1,
"metadata": {
"text/plain": ""
},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"true"
]
},
"execution_count": 2,
"metadata": {
"text/plain": ""
},
"output_type": "execute_result"
}
],
"source": [
"LoadPackage(\"francy\");\n",
"LoadPackage(\"num\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Drawing Apéry sets"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This example draws the Apéry set of a numerical semigrup with respect to its multiplicity. By passing over a node with the mouse, the set of factorizations with respect to the minimal generating system of the numerical semigroup is displayed. Clicking a node produces a message with the same information."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"function( arg... ) ... end"
]
},
"execution_count": 3,
"metadata": {
"text/plain": ""
},
"output_type": "execute_result"
}
],
"source": [
"apery:=function(arg)\n",
" local ap,c,hasse, s, n, r, graphHasse, aps, es, canvas, i, order, showfacts, message;\n",
" # rel is a list of lists with two elements representin a binary relation\n",
" # hasse(rel) removes from rel the pairs [x,y] such that there exists\n",
" # z with [x,z],[z,y] in rel\n",
" hasse:=function(rel)\n",
" local dom, out;\n",
" dom:=Flat(rel);\n",
" out:=Filtered(rel, p-> ForAny(dom, x->([p[1],x] in rel) and ([x,p[2]] in rel)));\n",
" return Difference(rel,out);\n",
" end;\n",
" \n",
"\n",
" order:=function(x)\n",
" return Maximum(LengthsOfFactorizationsElementWRTNumericalSemigroup(x,s));\n",
" end;\n",
"\n",
" showfacts:=function(x)\n",
" message := FrancyMessage(Concatenation(String(x), \" factors as \"), \n",
" String(FactorizationsElementWRTNumericalSemigroup(x,s)));\n",
" SetFrancyId(message, Concatenation(\"message-for-\", String(x)));\n",
" Add(canvas, message);\n",
" return Draw(canvas);\n",
" end;\n",
" if Length(arg)=1 then\n",
" s:=arg[1];\n",
" n:=MultiplicityOfNumericalSemigroup(s);\n",
" fi;\n",
" if Length(arg)=2 then\n",
" s:=arg[1];\n",
" n:=arg[2];\n",
" fi;\n",
" if Length(arg)>2 then\n",
" Error(\"The number of arguments must be one or two\");\n",
" fi;\n",
" \n",
" \n",
" graphHasse := Graph(GraphType.UNDIRECTED);\n",
" #SetSimulation(graphHasse,true);\n",
" #SetDrag(graphHasse,true);\n",
" ap:=AperyList(s,n);\n",
" c:=Cartesian([1..n],[1..n]);\n",
" c:=Filtered(c, p-> ap[p[2]]<>ap[p[1]]);\n",
" c:=Filtered(c, p-> ap[p[1]]-ap[p[2]] in s);\n",
" c:=hasse(c);\n",
" aps:=[];\n",
" for i in [1..n] do\n",
" aps[i]:=Shape(ShapeType!.CIRCLE, String(ap[i]));\n",
" SetLayer(aps[i],-order(ap[i]));\n",
" Add(aps[i],Callback(showfacts,[ap[i]]));\n",
" Add(aps[i],FrancyMessage(Concatenation(\"{\",\n",
" JoinStringsWithSeparator(List(FactorizationsElementWRTNumericalSemigroup(ap[i],s), \n",
" f->Concatenation(\"(\",JoinStringsWithSeparator(f,\",\"),\")\")),\",\"),\")\")));\n",
" Add(graphHasse,aps[i]);\n",
" od;\n",
" for r in c do\n",
" Add(graphHasse,Link(aps[r[1]],aps[r[2]]));\n",
" od;\n",
" canvas:=Canvas(\"Apery\");\n",
" Add(canvas,graphHasse);\n",
" return Draw(canvas); \n",
"end;"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.francy+json": "{\"canvas\" : {\"graph\" : {\"collapsed\" : true,\"id\" : \"F0935E1111DD14DF13C7643305440A90F\",\"links\" : {\"F06668D287B154619349F2436DCD72C18\" : {\"color\" : \"\",\"id\" : \"F06668D287B154619349F2436DCD72C18\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FBADFB1FBB15143125C5771BF1E49AAAC\",\"target\" : \"FAC5309F8108F4A06F49F78E45EF88986\",\"weight\" : 0},\"F0EFC447BC2A94F6A046EAA5CF1827861\" : {\"color\" : \"\",\"id\" : \"F0EFC447BC2A94F6A046EAA5CF1827861\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FAC5309F8108F4A06F49F78E45EF88986\",\"target\" : \"FE3F02797F57E4022DCE98F0FCF04CBA8\",\"weight\" : 0},\"F2140F5B9EB414493EC719FFE8D4BF2ED\" : {\"color\" : \"\",\"id\" : \"F2140F5B9EB414493EC719FFE8D4BF2ED\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F948734D11FBF42E464F04F2EE6D6C0DE\",\"target\" : \"FC5452D576AF74C9EF4FB46A59E28D428\",\"weight\" : 0},\"F2B929BF53E274CED6C033077FD182A78\" : {\"color\" : \"\",\"id\" : \"F2B929BF53E274CED6C033077FD182A78\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F6E20A7A3B1004032E4CE51E46A17101F\",\"target\" : \"F2A6C37797BF9484A0470FE1CE5464A41\",\"weight\" : 0},\"F2D93B026F585424AF4DCE24E0C2A49F8\" : {\"color\" : \"\",\"id\" : \"F2D93B026F585424AF4DCE24E0C2A49F8\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FEF76FDF6550246224C26BEBD124862CC\",\"target\" : \"F2A6C37797BF9484A0470FE1CE5464A41\",\"weight\" : 0},\"F49BDA1295C9445F6F4EC266BF0A82D84\" : {\"color\" : \"\",\"id\" : \"F49BDA1295C9445F6F4EC266BF0A82D84\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F366688A254054F9AFC43A6EA5008CAD2\",\"target\" : \"FBADFB1FBB15143125C5771BF1E49AAAC\",\"weight\" : 0},\"F55F63E4544B84A3F14A229612277EA64\" : {\"color\" : \"\",\"id\" : \"F55F63E4544B84A3F14A229612277EA64\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F40528265F01D48195C823DDF5A14D7CF\",\"target\" : \"FE3F02797F57E4022DCE98F0FCF04CBA8\",\"weight\" : 0},\"F7220CDA1859D4FB5D44E4B78F5ED59EB\" : {\"color\" : \"\",\"id\" : \"F7220CDA1859D4FB5D44E4B78F5ED59EB\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FBADFB1FBB15143125C5771BF1E49AAAC\",\"target\" : \"F40528265F01D48195C823DDF5A14D7CF\",\"weight\" : 0},\"F8DD0CA00423F4D774CF0766011BCA30F\" : {\"color\" : \"\",\"id\" : \"F8DD0CA00423F4D774CF0766011BCA30F\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FAC5309F8108F4A06F49F78E45EF88986\",\"target\" : \"F948734D11FBF42E464F04F2EE6D6C0DE\",\"weight\" : 0},\"F94F08AE9E9724579DC4004270C597E1A\" : {\"color\" : \"\",\"id\" : \"F94F08AE9E9724579DC4004270C597E1A\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F366688A254054F9AFC43A6EA5008CAD2\",\"target\" : \"F6E20A7A3B1004032E4CE51E46A17101F\",\"weight\" : 0},\"FA6051B31B0334002FC557EA064E34781\" : {\"color\" : \"\",\"id\" : \"FA6051B31B0334002FC557EA064E34781\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FE3F02797F57E4022DCE98F0FCF04CBA8\",\"target\" : \"FC5452D576AF74C9EF4FB46A59E28D428\",\"weight\" : 0},\"FA9ED231CB4E94792E44909958FE38065\" : {\"color\" : \"\",\"id\" : \"FA9ED231CB4E94792E44909958FE38065\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F2A6C37797BF9484A0470FE1CE5464A41\",\"target\" : \"F948734D11FBF42E464F04F2EE6D6C0DE\",\"weight\" : 0},\"FBD9E398833344A7ADC806BAD17402604\" : {\"color\" : \"\",\"id\" : \"FBD9E398833344A7ADC806BAD17402604\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F6E20A7A3B1004032E4CE51E46A17101F\",\"target\" : \"FAC5309F8108F4A06F49F78E45EF88986\",\"weight\" : 0}},\"nodes\" : {\"F2A6C37797BF9484A0470FE1CE5464A41\" : {\"callbacks\" : {\"F1AB14F00715746C17C7A051F4C4D50D1\" : {\"func\" : \"unknown\",\"id\" : \"F1AB14F00715746C17C7A051F4C4D50D1\",\"knownArgs\" : [\"62\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"F2A6C37797BF9484A0470FE1CE5464A41\",\"layer\" : -2,\"menus\" : {},\"messages\" : {\"FCC126CDF1E5242146C0BCE666332E9C4\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F0868DA228962428204E306E7BA02C0BF\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"FCC126CDF1E5242146C0BCE666332E9C4\",\"text\" : \"{(0,0,2))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"62\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F366688A254054F9AFC43A6EA5008CAD2\" : {\"callbacks\" : {\"F12AC5E185BB641038431E4B4C3456293\" : {\"func\" : \"unknown\",\"id\" : \"F12AC5E185BB641038431E4B4C3456293\",\"knownArgs\" : [\"116\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"F366688A254054F9AFC43A6EA5008CAD2\",\"layer\" : -4,\"menus\" : {},\"messages\" : {\"F4509A7188928455C64B962BCBF295BF1\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F682E684B60AC4F4CCCEED7EAB57AE7DA\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F4509A7188928455C64B962BCBF295BF1\",\"text\" : \"{(0,2,2))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"116\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F40528265F01D48195C823DDF5A14D7CF\" : {\"callbacks\" : {\"F3A62027A90C14B2E64ADFBE598DCAB1F\" : {\"func\" : \"unknown\",\"id\" : \"F3A62027A90C14B2E64ADFBE598DCAB1F\",\"knownArgs\" : [\"54\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"F40528265F01D48195C823DDF5A14D7CF\",\"layer\" : -2,\"menus\" : {},\"messages\" : {\"F36D7D8C8024E4D9B34DBDCE35F39E797\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F4F18DC8FBC08428664203B7254BEDCFC\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F36D7D8C8024E4D9B34DBDCE35F39E797\",\"text\" : \"{(0,2,0))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"54\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F6E20A7A3B1004032E4CE51E46A17101F\" : {\"callbacks\" : {\"F9980C3AB1FE8467A0C39E0816714D39D\" : {\"func\" : \"unknown\",\"id\" : \"F9980C3AB1FE8467A0C39E0816714D39D\",\"knownArgs\" : [\"89\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"F6E20A7A3B1004032E4CE51E46A17101F\",\"layer\" : -3,\"menus\" : {},\"messages\" : {\"FADAB64089636489B9C138F2DEEA6DF25\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F383B937CCF3547927CB4CC7779D548B7\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"FADAB64089636489B9C138F2DEEA6DF25\",\"text\" : \"{(0,1,2))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"89\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F948734D11FBF42E464F04F2EE6D6C0DE\" : {\"callbacks\" : {\"F54CD4B05DD4246E92C0525D0F611334A\" : {\"func\" : \"unknown\",\"id\" : \"F54CD4B05DD4246E92C0525D0F611334A\",\"knownArgs\" : [\"31\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"F948734D11FBF42E464F04F2EE6D6C0DE\",\"layer\" : -1,\"menus\" : {},\"messages\" : {\"FC957E285E0B14173EC9381C00B082970\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F78F966D29C48478A349E56140B0752E8\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"FC957E285E0B14173EC9381C00B082970\",\"text\" : \"{(0,0,1))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"31\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FAC5309F8108F4A06F49F78E45EF88986\" : {\"callbacks\" : {\"F18FE4D8176C446357C71A0CC5EE3A37F\" : {\"func\" : \"unknown\",\"id\" : \"F18FE4D8176C446357C71A0CC5EE3A37F\",\"knownArgs\" : [\"58\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"FAC5309F8108F4A06F49F78E45EF88986\",\"layer\" : -2,\"menus\" : {},\"messages\" : {\"F893471BC9EC94849B42DB8268A9D1AB6\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"FEE444EE1F5F64CD1BC9BD25BD64986EE\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F893471BC9EC94849B42DB8268A9D1AB6\",\"text\" : \"{(0,1,1))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"58\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FBADFB1FBB15143125C5771BF1E49AAAC\" : {\"callbacks\" : {\"FBC3E1C907D124ABCB4D37AFC978D49C0\" : {\"func\" : \"unknown\",\"id\" : \"FBC3E1C907D124ABCB4D37AFC978D49C0\",\"knownArgs\" : [\"85\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"FBADFB1FBB15143125C5771BF1E49AAAC\",\"layer\" : -3,\"menus\" : {},\"messages\" : {\"F9A4E435F8A234BBD34DD34C838182A5C\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F8F794C1FA828467404CA41218DCFC68D\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F9A4E435F8A234BBD34DD34C838182A5C\",\"text\" : \"{(0,2,1))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"85\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FC5452D576AF74C9EF4FB46A59E28D428\" : {\"callbacks\" : {\"F550DCE4E3D6F49DF3CAB08FAB4D5D25B\" : {\"func\" : \"unknown\",\"id\" : \"F550DCE4E3D6F49DF3CAB08FAB4D5D25B\",\"knownArgs\" : [\"0\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"FC5452D576AF74C9EF4FB46A59E28D428\",\"layer\" : 0,\"menus\" : {},\"messages\" : {\"FCBE476E116664FC274E1019A4AFC3590\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F807B9742C5CC4FC40CAF33D4A0501971\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"FCBE476E116664FC274E1019A4AFC3590\",\"text\" : \"{(0,0,0))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"0\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FE3F02797F57E4022DCE98F0FCF04CBA8\" : {\"callbacks\" : {\"F8C1F96C773474A8154A4C46BB113E35E\" : {\"func\" : \"unknown\",\"id\" : \"F8C1F96C773474A8154A4C46BB113E35E\",\"knownArgs\" : [\"27\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"FE3F02797F57E4022DCE98F0FCF04CBA8\",\"layer\" : -1,\"menus\" : {},\"messages\" : {\"F98C36F7AB1D945CC9C7DE79A8C6E8CC7\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F70650600519E474F5465932AD7970059\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F98C36F7AB1D945CC9C7DE79A8C6E8CC7\",\"text\" : \"{(0,1,0))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"27\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FEF76FDF6550246224C26BEBD124862CC\" : {\"callbacks\" : {\"FB9F3D102AF6942D1348022740EF8E8ED\" : {\"func\" : \"unknown\",\"id\" : \"FB9F3D102AF6942D1348022740EF8E8ED\",\"knownArgs\" : [\"93\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"FEF76FDF6550246224C26BEBD124862CC\",\"layer\" : -3,\"menus\" : {},\"messages\" : {\"F2ED844CBF82047CA8C0E59ECD1D25F6A\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F793F564DFC7C41AD0C70B2CB648370C1\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F2ED844CBF82047CA8C0E59ECD1D25F6A\",\"text\" : \"{(0,0,3))\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 10,\"title\" : \"93\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0}},\"simulation\" : true,\"type\" : \"undirected\"},\"height\" : 600,\"id\" : \"FC3F97C37978E48F7ACDF22F2D8EEEAC7\",\"menus\" : {},\"messages\" : {},\"texTypesetting\" : true,\"title\" : \"Apery\",\"width\" : 800,\"zoomToFit\" : true},\"mime\" : \"application\\/vnd.francy+json\",\"version\" : \"1.2.4\"}"
},
"execution_count": 4,
"metadata": {
"application/vnd.francy+json": {}
},
"output_type": "execute_result"
}
],
"source": [
"apery(NumericalSemigroup(10,51,27,31));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Drawing sons of numerical semigroups"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This example shows how to draw the sons of a numerical semigroup in the tree of numerical semigroups. If we click on a node, then the sets of sons of that node are added to the canvas, and if the node is a leaf, a warning message is displayed.\n",
"\n",
"Passing the mouse over a node shows the set of minimal generators of the node."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"function( s ) ... end"
]
},
"execution_count": 5,
"metadata": {
"text/plain": ""
},
"output_type": "execute_result"
}
],
"source": [
"sons:=function(s)\n",
" local gens, frb, desc, graphHasse, d, shpr, shp, canvas, sonsf, i, gn, lbl;\n",
" \n",
" \n",
" sonsf:=function(s,n)\n",
" local gens, frb, desc, d, shp, i, lbl, gn;\n",
"\n",
" frb:=FrobeniusNumber(s);\n",
" gens:=Filtered(MinimalGenerators(s), x-> x>frb);\n",
" desc:=List(gens, g->RemoveMinimalGeneratorFromNumericalSemigroup(g,s));\n",
" gn:=Genus(s);\n",
" i:=0;\n",
" for d in desc do\n",
" i:=i+1;\n",
" lbl:=Concatenation(\"$\\\\langle\",JoinStringsWithSeparator(MinimalGenerators(d),\",\"),\"\\\\rangle$\");\n",
" shp:=Shape(ShapeType!.CIRCLE, lbl);\n",
" SetFrancyId(shp,lbl);\n",
" SetLayer(shp,Genus(d));\n",
" SetSize(shp,1);\n",
" Add(shp,Callback(sonsf,[d,shp]));\n",
" Add(shp,FrancyMessage(String(MinimalGenerators(d))));\n",
" Add(graphHasse,shp);\n",
" Add(graphHasse,Link(n,shp));\n",
" od;\n",
" if desc<>[] then \n",
" return Draw(canvas);\n",
" fi;\n",
" Add(canvas, FrancyMessage(FrancyMessageType.WARNING, \"This semigroup is a leaf\"));\n",
" return Draw(canvas);\n",
" end;\n",
" \n",
" frb:=FrobeniusNumber(s);\n",
" gens:=Filtered(MinimalGenerators(s), x-> x>frb);\n",
" desc:=List(gens, g->RemoveMinimalGeneratorFromNumericalSemigroup(g,s));\n",
" gn:=Genus(s);\n",
"\n",
" graphHasse := Graph(GraphType.UNDIRECTED);\n",
" lbl:=Concatenation(\"$\\\\langle\",JoinStringsWithSeparator(MinimalGenerators(s),\",\"),\"\\\\rangle$\");\n",
" shpr:=Shape(ShapeType!.CIRCLE, lbl);\n",
" SetSize(shpr,1);\n",
" SetFrancyId(shpr,lbl);\n",
" Add(shpr,FrancyMessage(String(MinimalGenerators(s))));\n",
" SetLayer(shpr,Genus(s));\n",
" Add(graphHasse,shpr);\n",
" i:=0;\n",
" for d in desc do\n",
" i:=i+1;\n",
" lbl:=Concatenation(\"$\\\\langle\",JoinStringsWithSeparator(MinimalGenerators(d),\",\"),\"\\\\rangle$\");\n",
" shp:=Shape(ShapeType!.CIRCLE, lbl);\n",
" SetFrancyId(shp,lbl);\n",
" SetLayer(shp,Genus(d));\n",
" SetSize(shp,1);\n",
" Add(shp,Callback(sonsf,[d,shp]));\n",
" Add(shp,FrancyMessage(String(MinimalGenerators(d))));\n",
" Add(graphHasse,shp);\n",
" Add(graphHasse,Link(shpr,shp));\n",
" od;\n",
" canvas:=Canvas(\"Sons of a numerical semigroup\");\n",
" SetTexTypesetting(canvas, true);\n",
" Add(canvas,graphHasse);\n",
" return Draw(canvas); \n",
"end;"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.francy+json": "{\"canvas\" : {\"graph\" : {\"collapsed\" : true,\"id\" : \"F858A0120C4444F10ECA4C280DCA35730\",\"links\" : {\"F4358CADED853411B94A33DAB4A036C8D\" : {\"color\" : \"\",\"id\" : \"F4358CADED853411B94A33DAB4A036C8D\",\"invisible\" : false,\"length\" : 0,\"source\" : \"$\\\\langle3,5,7\\\\rangle$\",\"target\" : \"$\\\\langle3,7,8\\\\rangle$\",\"weight\" : 0},\"FC17233E967514F6CE4F0F353D6A14C85\" : {\"color\" : \"\",\"id\" : \"FC17233E967514F6CE4F0F353D6A14C85\",\"invisible\" : false,\"length\" : 0,\"source\" : \"$\\\\langle3,5,7\\\\rangle$\",\"target\" : \"$\\\\langle3,5\\\\rangle$\",\"weight\" : 0}},\"nodes\" : {\"$\\\\langle3,5,7\\\\rangle$\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"$\\\\langle3,5,7\\\\rangle$\",\"layer\" : 3,\"menus\" : {},\"messages\" : {\"F0B1E608E0B7844971C520DBC7A9E74A1\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F4D178A036EF742C2BC6C055D9B907FB9\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F0B1E608E0B7844971C520DBC7A9E74A1\",\"text\" : \"[ 3, 5, 7 ]\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 1,\"title\" : \"$\\\\langle3,5,7\\\\rangle$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"$\\\\langle3,5\\\\rangle$\" : {\"callbacks\" : {\"F330476CCC97F40C484795D0F126D75CE\" : {\"func\" : \"unknown\",\"id\" : \"F330476CCC97F40C484795D0F126D75CE\",\"knownArgs\" : [\"Numerical semigroup with 2 generators\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"$\\\\langle3,5\\\\rangle$\",\"layer\" : 4,\"menus\" : {},\"messages\" : {\"FCD8CD831DB1B4C93CC1771842D80FD45\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"FE29E81CAF5734142D4115FBBCB27CD5C\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"FCD8CD831DB1B4C93CC1771842D80FD45\",\"text\" : \"[ 3, 5 ]\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 1,\"title\" : \"$\\\\langle3,5\\\\rangle$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"$\\\\langle3,7,8\\\\rangle$\" : {\"callbacks\" : {\"FAE9D1BE0EA16438874B27FE539D34269\" : {\"func\" : \"unknown\",\"id\" : \"FAE9D1BE0EA16438874B27FE539D34269\",\"knownArgs\" : [\"Numerical semigroup with 3 generators\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"}},\"color\" : \"\",\"id\" : \"$\\\\langle3,7,8\\\\rangle$\",\"layer\" : 4,\"menus\" : {},\"messages\" : {\"F137DB56349C44C86349415D8DBC577B4\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"F972A7D3A2BD2428E84513487EA9965A8\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F137DB56349C44C86349415D8DBC577B4\",\"text\" : \"[ 3, 7, 8 ]\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 1,\"title\" : \"$\\\\langle3,7,8\\\\rangle$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0}},\"simulation\" : true,\"type\" : \"undirected\"},\"height\" : 600,\"id\" : \"FB64AF9C0DF8844D5549A677F3E73A8E0\",\"menus\" : {},\"messages\" : {},\"texTypesetting\" : true,\"title\" : \"Sons of a numerical semigroup\",\"width\" : 800,\"zoomToFit\" : true},\"mime\" : \"application\\/vnd.francy+json\",\"version\" : \"1.2.4\"}"
},
"execution_count": 6,
"metadata": {
"application/vnd.francy+json": {}
},
"output_type": "execute_result"
}
],
"source": [
"sons(NumericalSemigroup(3,5,7));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tree of numerical semigroups\n",
"\n",
"Now we draw the sons of a numerical semigroup `s` in the tree of numerical semigroups up to level `l`."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"function( s, l, generators ) ... end"
]
},
"execution_count": 7,
"metadata": {
"text/plain": ""
},
"output_type": "execute_result"
}
],
"source": [
"sonstree:=function(s,l,generators)\n",
" local gens, frb, desc, graphTreee, d, shpr, shp, canvas, sonsf, lbl;\n",
"\n",
"\n",
" sonsf:=function(s,n,lv)\n",
" local gens, frb, desc, d, shp;\n",
" if lv=0 then\n",
" return ;\n",
" fi;\n",
" frb:=FrobeniusNumber(s);\n",
" gens:=Filtered(generators(s), x-> x>frb);\n",
" desc:=List(gens, g->RemoveMinimalGeneratorFromNumericalSemigroup(g,s));\n",
" for d in desc do\n",
" lbl:=Concatenation(\"$\\\\{\",JoinStringsWithSeparator(generators(d),\",\"),\"\\\\}$\");\n",
" shp:=Shape(ShapeType!.CIRCLE, lbl);\n",
" SetSize(shp,5);\n",
" Add(graphTreee,shp);\n",
" SetParentShape(shp,n);\n",
" sonsf(d,shp,lv-1);\n",
" od;\n",
" if desc<>[] then\n",
" return ;\n",
" fi;\n",
" #Add(canvas, FrancyMessage(FrancyMessageType.WARNING, \"This semigroup is a leaf\"));\n",
" return ;\n",
" end;\n",
"\n",
" frb:=FrobeniusNumber(s);\n",
" gens:=Filtered(generators(s), x-> x>frb);\n",
" desc:=List(gens, g->RemoveMinimalGeneratorFromNumericalSemigroup(g,s));\n",
"\n",
" graphTreee := Graph(GraphType.TREE);\n",
" SetCollapsed(graphTreee,false);\n",
" shpr:=Shape(ShapeType!.CIRCLE, \"S\");\n",
" SetSize(shpr,5);\n",
" Add(shpr,FrancyMessage(String(generators(s))));\n",
" Add(graphTreee,shpr);\n",
" canvas:=Canvas(\"Sons of a numerical semigroup\");\n",
" SetTexTypesetting(canvas, true);\n",
" Add(canvas,graphTreee);\n",
" sonsf(s,shpr,l);\n",
" return Draw(canvas);\n",
"end;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Darker dots correspond either to leaves or to elements with highest genus. Blue nodes can be collapsed by clicking. "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.francy+json": "{\"canvas\" : {\"graph\" : {\"collapsed\" : false,\"id\" : \"FA04511C0F9864CD49421236EAD4681D7\",\"links\" : {},\"nodes\" : {\"F04B841BB95E84A5014DCF7B2A0251FC3\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"F04B841BB95E84A5014DCF7B2A0251FC3\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"FB2EF5C7DE1814CEC9CE0BD93A05AE5A9\",\"size\" : 5,\"title\" : \"$\\\\{2,9\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F0534FB53BDD644774C20549B32BA5956\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"F0534FB53BDD644774C20549B32BA5956\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F6BF6D40B218C4097549934EF617AE244\",\"size\" : 5,\"title\" : \"$\\\\{4,5,6,7\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F16B6D4BBBDE549606C32412BD5FCAAC8\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"F16B6D4BBBDE549606C32412BD5FCAAC8\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"FE06BCD46747840705407AA26AB9BA35A\",\"size\" : 5,\"title\" : \"$\\\\{2,3\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F24860B81D2DE491BE4F5F9B4D4A07C7F\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"F24860B81D2DE491BE4F5F9B4D4A07C7F\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F6BF6D40B218C4097549934EF617AE244\",\"size\" : 5,\"title\" : \"$\\\\{3,5,7\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F6BF6D40B218C4097549934EF617AE244\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"F6BF6D40B218C4097549934EF617AE244\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F16B6D4BBBDE549606C32412BD5FCAAC8\",\"size\" : 5,\"title\" : \"$\\\\{3,4,5\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FA79F838DC78B4AEBF4D14426FF5AF0F4\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FA79F838DC78B4AEBF4D14426FF5AF0F4\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F0534FB53BDD644774C20549B32BA5956\",\"size\" : 5,\"title\" : \"$\\\\{5,6,7,8,9\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FB2EF5C7DE1814CEC9CE0BD93A05AE5A9\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FB2EF5C7DE1814CEC9CE0BD93A05AE5A9\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"FC3BF146966EC4D04DCF185F67B457960\",\"size\" : 5,\"title\" : \"$\\\\{2,7\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FB4A5CE0FD8C84773440706490F3EEAA6\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FB4A5CE0FD8C84773440706490F3EEAA6\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F24860B81D2DE491BE4F5F9B4D4A07C7F\",\"size\" : 5,\"title\" : \"$\\\\{3,7,8\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FB6420EDE3EBF43D84C022594ED685445\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FB6420EDE3EBF43D84C022594ED685445\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F6BF6D40B218C4097549934EF617AE244\",\"size\" : 5,\"title\" : \"$\\\\{3,4\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FC3BF146966EC4D04DCF185F67B457960\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FC3BF146966EC4D04DCF185F67B457960\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F16B6D4BBBDE549606C32412BD5FCAAC8\",\"size\" : 5,\"title\" : \"$\\\\{2,5\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FC7D8DD2542844CD584F39D6A21CEE2C7\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FC7D8DD2542844CD584F39D6A21CEE2C7\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F0534FB53BDD644774C20549B32BA5956\",\"size\" : 5,\"title\" : \"$\\\\{4,5,7\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FCF8B9FDB01264AD5446BBEFB8133E0D1\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FCF8B9FDB01264AD5446BBEFB8133E0D1\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F0534FB53BDD644774C20549B32BA5956\",\"size\" : 5,\"title\" : \"$\\\\{4,5,6\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FE06BCD46747840705407AA26AB9BA35A\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FE06BCD46747840705407AA26AB9BA35A\",\"layer\" : 0,\"menus\" : {},\"messages\" : {\"FE051511DCE3D4A3A34FDD9BF5CDAD1E4\" : {\"callback\" : {\"func\" : \"Remove\",\"id\" : \"FF220FEE8575C43BDFC303D047B8FC287\",\"knownArgs\" : [\"<object>\",\"<object>\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"FE051511DCE3D4A3A34FDD9BF5CDAD1E4\",\"text\" : \"[ 1 ]\",\"title\" : \"\",\"type\" : \"default\"}},\"parent\" : \"\",\"size\" : 5,\"title\" : \"S\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FFE870E8FBCFD498C64744438F77AB719\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FFE870E8FBCFD498C64744438F77AB719\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F0534FB53BDD644774C20549B32BA5956\",\"size\" : 5,\"title\" : \"$\\\\{4,6,7,9\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FFF716FCA2C214DC1DC6C7127F700805A\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FFF716FCA2C214DC1DC6C7127F700805A\",\"layer\" : 0,\"menus\" : {},\"messages\" : {},\"parent\" : \"F24860B81D2DE491BE4F5F9B4D4A07C7F\",\"size\" : 5,\"title\" : \"$\\\\{3,5\\\\}$\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0}},\"simulation\" : true,\"type\" : \"tree\"},\"height\" : 600,\"id\" : \"F4B6224E6E985455E6C182BA6BE9E14F8\",\"menus\" : {},\"messages\" : {},\"texTypesetting\" : true,\"title\" : \"Sons of a numerical semigroup\",\"width\" : 800,\"zoomToFit\" : true},\"mime\" : \"application\\/vnd.francy+json\",\"version\" : \"1.2.4\"}"
},
"execution_count": 8,
"metadata": {
"application/vnd.francy+json": {}
},
"output_type": "execute_result"
}
],
"source": [
"sonstree(NumericalSemigroup(1),4,MinimalGenerators);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And we can get also the tree of Arf numerical semigroups"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.francy+json": "{\"canvas\" : {\"graph\" : {\"collapsed\" : false,\"id\" : \"FC9F8E4D6C2AC4E1BCC02AF98B1B13AF8\",\"links\" : {},\"nodes\" : {\"F08E51F92BCD04C | |