In[]:=
Subsets[Range[5]]
Out[]=
{{},{1},{2},{3},{4},{5},{1,2},{1,3},{1,4},{1,5},{2,3},{2,4},{2,5},{3,4},{3,5},{4,5},{1,2,3},{1,2,4},{1,2,5},{1,3,4},{1,3,5},{1,4,5},{2,3,4},{2,3,5},{2,4,5},{3,4,5},{1,2,3,4},{1,2,3,5},{1,2,4,5},{1,3,4,5},{2,3,4,5},{1,2,3,4,5}}
In[]:=
GraphData[{"Hypercube",5}]
Out[]=
In[]:=
GridGraph[{2,2,2,2}]
Out[]=
In[]:=
ResourceFunction["HasseDiagram"][SubsetQ,Subsets[Range[4]],VertexShapeFunction->"Name"]
Out[]=
In[]:=
TilingPatternPlot[{{{0,0},{1,1}},{{1,1},{0,0}}}]
Out[]=
,
In[]:=
SatisfiabilityInstances[((!Tile[1,1]&&!Tile[1,2]&&Tile[2,1]&&Tile[2,2])||(Tile[1,1]&&Tile[1,2]&&!Tile[2,1]&&!Tile[2,2]))&&((!Tile[1,2]&&!Tile[1,3]&&Tile[2,2]&&Tile[2,3])||(Tile[1,2]&&Tile[1,3]&&!Tile[2,2]&&!Tile[2,3]))&&((!Tile[1,3]&&!Tile[1,4]&&Tile[2,3]&&Tile[2,4])||(Tile[1,3]&&Tile[1,4]&&!Tile[2,3]&&!Tile[2,4]))&&((!Tile[1,4]&&!Tile[1,5]&&Tile[2,4]&&Tile[2,5])||(Tile[1,4]&&Tile[1,5]&&!Tile[2,4]&&!Tile[2,5]))&&((!Tile[2,1]&&!Tile[2,2]&&Tile[3,1]&&Tile[3,2])||(Tile[2,1]&&Tile[2,2]&&!Tile[3,1]&&!Tile[3,2]))&&((!Tile[2,2]&&!Tile[2,3]&&Tile[3,2]&&Tile[3,3])||(Tile[2,2]&&Tile[2,3]&&!Tile[3,2]&&!Tile[3,3]))&&((!Tile[2,3]&&!Tile[2,4]&&Tile[3,3]&&Tile[3,4])||(Tile[2,3]&&Tile[2,4]&&!Tile[3,3]&&!Tile[3,4]))&&((!Tile[2,4]&&!Tile[2,5]&&Tile[3,4]&&Tile[3,5])||(Tile[2,4]&&Tile[2,5]&&!Tile[3,4]&&!Tile[3,5]))&&((!Tile[3,1]&&!Tile[3,2]&&Tile[4,1]&&Tile[4,2])||(Tile[3,1]&&Tile[3,2]&&!Tile[4,1]&&!Tile[4,2]))&&((!Tile[3,2]&&!Tile[3,3]&&Tile[4,2]&&Tile[4,3])||(Tile[3,2]&&Tile[3,3]&&!Tile[4,2]&&!Tile[4,3]))&&((!Tile[3,3]&&!Tile[3,4]&&Tile[4,3]&&Tile[4,4])||(Tile[3,3]&&Tile[3,4]&&!Tile[4,3]&&!Tile[4,4]))&&((!Tile[3,4]&&!Tile[3,5]&&Tile[4,4]&&Tile[4,5])||(Tile[3,4]&&Tile[3,5]&&!Tile[4,4]&&!Tile[4,5]))&&((!Tile[4,1]&&!Tile[4,2]&&Tile[5,1]&&Tile[5,2])||(Tile[4,1]&&Tile[4,2]&&!Tile[5,1]&&!Tile[5,2]))&&((!Tile[4,2]&&!Tile[4,3]&&Tile[5,2]&&Tile[5,3])||(Tile[4,2]&&Tile[4,3]&&!Tile[5,2]&&!Tile[5,3]))&&((!Tile[4,3]&&!Tile[4,4]&&Tile[5,3]&&Tile[5,4])||(Tile[4,3]&&Tile[4,4]&&!Tile[5,3]&&!Tile[5,4]))&&((!Tile[4,4]&&!Tile[4,5]&&Tile[5,4]&&Tile[5,5])||(Tile[4,4]&&Tile[4,5]&&!Tile[5,4]&&!Tile[5,5])),{Tile[1,1],Tile[1,2],Tile[1,3],Tile[1,4],Tile[1,5],Tile[1,6],Tile[2,1],Tile[2,2],Tile[2,3],Tile[2,4],Tile[2,5],Tile[2,6],Tile[3,1],Tile[3,2],Tile[3,3],Tile[3,4],Tile[3,5],Tile[3,6],Tile[4,1],Tile[4,2],Tile[4,3],Tile[4,4],Tile[4,5],Tile[4,6],Tile[5,1],Tile[5,2],Tile[5,3],Tile[5,4],Tile[5,5],Tile[5,6],Tile[6,1],Tile[6,2],Tile[6,3],Tile[6,4],Tile[6,5],Tile[6,6]},4]
Out[]=
{{True,True,True,True,True,True,False,False,False,False,False,True,True,True,True,True,True,True,False,False,False,False,False,True,True,True,True,True,True,True,True,True,True,True,True,True},{True,True,True,True,True,True,False,False,False,False,False,True,True,True,True,True,True,True,False,False,False,False,False,True,True,True,True,True,True,True,True,True,True,True,True,False},{True,True,True,True,True,True,False,False,False,False,False,True,True,True,True,True,True,True,False,False,False,False,False,True,True,True,True,True,True,True,True,True,True,True,False,True},{True,True,True,True,True,True,False,False,False,False,False,True,True,True,True,True,True,True,False,False,False,False,False,True,True,True,True,True,True,True,True,True,True,True,False,False}}
In[]:=
ResourceData[ResourceObject["Minimal Inequivalent Square Tilings"]][[10]]
Out[]=
Representation of tilings
Representation of tilings
In a minimal subset, every tile must be used [by definition]
In a minimal subset, every tile must be used [by definition]
Poset for tromino tiles:
Minimal tromino tilings:
At each level, want to generate only the new subsets which don’t contain any of the already forbidden smaller subsets
Symmetries apply to complete tilesets
Note: different tilesets can give the same minimal tiling (e.g. at end of Ed’s notebook) [in NKS, only show distinct patterns, not distinct tilesets]
Iterative addition of tiles
Iterative addition of tiles