Help:=proc(): print(`AntiChains(n), CanJoin(B1,B2)`): print(`Sperner(n), IEantichains(n) `): end: #AntiChains(n): The set of antichains of {1, ...n} #For example, Antichains(2): #{ {{}}, {{1}},{{2}},{{1},{2}},{{1,2}}} AntiChains:=proc(n) local A,A1,Brian1,Brian2,s,i,j: option remember: if n=0 then RETURN({{{}},{}}): fi: A1:=AntiChains(n-1): A:={}: for i from 1 to nops(A1) do for j from 1 to nops(A1) do Brian1:=A1[i]: Brian2:=A1[j]: Brian2:={seq(s union {n} , s in Brian2)}: A:=A union {Brian1, Brian2}: if CanJoin(Brian1, Brian2) then A:=A union {Brian1 union Brian2}: fi: od: od: A: end: CanJoin:=proc(B1,B2) local b1,b2: for b1 in B1 do for b2 in B2 do if b1 intersect b2=b1 then RETURN(false): fi: od: od: true: end: #Sperner(n): the maximal size of an antichain #of n elements (by complete brute force) Sperner:=proc(n) local Emily,e: Emily:=AntiChains(n): max(seq(nops(e), e in Emily)): end: #S is a subset of {1, ...n}, and pi is permutation image:=proc(S,pi) local s: {seq(pi[s],s in S) }: end: ##SS is a set of sets Image:=proc(SS,pi) local S: { seq(image(S,pi),S in SS)}: end: with(combinat): #Images(SS,n) the set if images of SS Images:=proc(SS,n) local pi, Susan: Susan:=permute(n): {seq(Image(SS,pi), pi in Susan)}: end: #IEantichanis(n): inequivalent antichains on {1, ..., n} IEantichains:=proc(n) local S,T: S:=AntiChains(n): T:={}: while S<>{} do T:=T union {S[1]}: S:=S minus Images(S[1],n): od: T: end: