︠775aca62-22e1-4954-ae02-b4f51d8f8cdcs︠
F=GF(2)
def construct_M(la):
    la = Partition(la)
    N=sum(la)
    cells = [(i,j) for i,j in la.cells()]
    cells.sort()
    cells = [(i,j) for i,j in cells]
    def U(i):
        x,y = cells[i]
        if x==0:
            return None
        return cells.index((x-1,y))
    M = matrix(F, N, N)
    for i in range(N):
        j = U(i)
        if j is not None:
            M[i,j] = 1
    return M
construct_M((3,3))
construct_M((3,1))
︡7f0b90d0-46ab-4edc-b64c-cec5cddbea77︡{"stdout":"[0 0 0 0 0 0]\n[0 0 0 0 0 0]\n[0 0 0 0 0 0]\n[1 0 0 0 0 0]\n[0 1 0 0 0 0]\n[0 0 1 0 0 0]\n"}︡{"stdout":"[0 0 0 0]\n[0 0 0 0]\n[0 0 0 0]\n[1 0 0 0]\n"}︡{"done":true}
︠893b5d2c-0209-4d36-873b-af070538c2dbs︠

def flags(pi):
    N = len(pi)
    res = []
    inversions=[(j,k) for j,k in mrange((N,N)) if j>k and pi[j]<pi[k]]
    ffelements = list(F)
    for c in cartesian_product_iterator([ffelements]*len(inversions)):
        flag = matrix(F,N,N)
        for (j,k), cf in zip(inversions, c):
            flag[k,pi[j]] = cf
        for k in range(N):
            flag[k,pi[k]] = 1
        res.append(flag)
    return res
︡94b96da4-fbf2-48b1-b104-9f0eeb728506︡{"done":true}
︠7a4c1002-9824-4ebf-8db1-85470faf345es︠
flags((0,1,2,3))
︡a57aaea8-e23e-4dfc-a5af-e81505b4e3a2︡{"stdout":"[[1 0 0 0]\n[0 1 0 0]\n[0 0 1 0]\n[0 0 0 1]]\n"}︡{"done":true}
︠fa887d9e-47b3-4b39-b565-fb5f3e92508ds︠
for fl in flags((0,2,1,3)):
    print(fl)
    print()
︡ddd80b5c-5378-4012-8ddf-27573dce1dc4︡{"stdout":"[1 0 0 0]\n[0 0 1 0]\n[0 1 0 0]\n[0 0 0 1]\n\n[1 0 0 0]\n[0 1 1 0]\n[0 1 0 0]\n[0 0 0 1]\n\n"}︡{"done":true}
︠80685a5c-b5a5-4df1-949f-17bffe257113s︠
def in_spr(fl, M):
    test=fl*M*fl.inverse()
    N = M.nrows()
    for i in range(N):
        for j in range(i):
            if test[j,i]!=0:
                return False
    return True
def count_spr(pi, la):
    M = construct_M(la)
    return sum(in_spr(fl, M) for fl in flags(pi))
︡03c8d2ec-a43b-4482-badf-bc09d26094bb︡{"done":true}
︠970b735a-b2e6-4392-a0fd-c4c14baec58es︠
count_spr((0,1,2,3), (3,1))
︡306223dc-7fd3-445e-8dbd-824767c7d0e3︡{"stdout":"1\n"}︡{"done":true}
︠2d062bec-0ddf-4cbe-b0a1-600aa4ed2505s︠
for pi in Permutations(4):
    pi=[i-1 for i in pi]
    print(pi, count_spr(pi, (3,1)))
︡e35cf7a4-cba5-4366-b508-defdaf037e40︡{"stdout":"[0, 1, 2, 3] 1\n[0, 1, 3, 2] 0\n[0, 2, 1, 3] 2\n[0, 2, 3, 1] 2\n[0, 3, 1, 2] 0\n[0, 3, 2, 1] 0\n[1, 0, 2, 3] 2\n[1, 0, 3, 2] 0\n[1, 2, 0, 3] 4\n[1, 2, 3, 0] 4\n[1, 3, 0, 2] 0\n[1, 3, 2, 0] 0\n[2, 0, 1, 3] 4\n[2, 0, 3, 1] 4\n[2, 1, 0, 3] 8\n[2, 1, 3, 0] 8\n[2, 3, 0, 1] 4\n[2, 3, 1, 0] 8\n[3, 0, 1, 2] 0\n[3, 0, 2, 1] 0\n[3, 1, 0, 2] 0\n[3, 1, 2, 0] 0\n[3, 2, 0, 1] 0\n[3, 2, 1, 0] 0\n"}︡{"done":true}
︠e39ff909-70ae-4b3b-95d0-5d983678b9cas︠
sizes=[]
for pi in Permutations(6):
    pi=[i-1 for i in pi]
    sizes.append(count_spr(pi, (3,3)))
︡4c863f6e-4df8-4d1e-ad1f-90f11d7177eb︡{"done":true}
︠f3126710-4e41-42c7-b0d7-21bad22e8078s︠
max(sizes)
︡0547e1a2-96a7-4294-8e6e-704e6f2243e2︡{"stdout":"64\n"}︡{"done":true}
︠3acf79df-8e9e-4a9b-b12f-31068502f0f6s︠
sum(k==64 for k in sizes)
︡6d1bc9b9-7e40-4769-b7da-d13bbe081455︡{"stdout":"5\n"}︡{"done":true}
︠61c8d8a6-bfa0-426e-91c6-181c800d8cd1s︠
Rq.<q>=QQ[]
Sym=SymmetricFunctions(Rq)
︡06cb883c-88e6-4a22-8386-deebb206e914︡{"done":true}
︠dfce044b-98b8-4e2b-b3e9-8891b85390bds︠
Sym.monomial()(Sym.schur()[3,3])
︡2fb774c2-2b13-4c67-8de9-ddc93f2f2e98︡{"stdout":"5*m[1, 1, 1, 1, 1, 1] + 3*m[2, 1, 1, 1, 1] + 2*m[2, 2, 1, 1] + m[2, 2, 2] + m[3, 1, 1, 1] + m[3, 2, 1] + m[3, 3]\n"}︡{"done":true}
︠dcd318df-7719-4d08-aed1-9126ff9498cbs︠
Sym.monomial()(Sym.hall_littlewood(q).Qp()[2,2,2])
︡a9e188fc-7de9-456f-abd4-cccde87e5133︡{"stdout":"(q^6+5*q^5+14*q^4+24*q^3+25*q^2+16*q+5)*m[1, 1, 1, 1, 1, 1] + (q^6+4*q^5+10*q^4+15*q^3+14*q^2+8*q+2)*m[2, 1, 1, 1, 1] + (q^6+3*q^5+7*q^4+9*q^3+8*q^2+4*q+1)*m[2, 2, 1, 1] + (q^6+2*q^5+5*q^4+5*q^3+5*q^2+2*q+1)*m[2, 2, 2] + (q^6+3*q^5+6*q^4+7*q^3+5*q^2+2*q)*m[3, 1, 1, 1] + (q^6+2*q^5+4*q^4+4*q^3+3*q^2+q)*m[3, 2, 1] + (q^6+q^5+2*q^4+2*q^3+q^2)*m[3, 3] + (q^6+2*q^5+3*q^4+2*q^3+q^2)*m[4, 1, 1] + (q^6+q^5+2*q^4+q^3+q^2)*m[4, 2] + (q^6+q^5+q^4)*m[5, 1] + q^6*m[6]\n"}︡{"done":true}
︠ba98cda2-b8c7-4ac0-853f-b9c2777f83ffs︠
sum(k==32 for k in sizes)
︡debd8e26-63c3-49a0-903e-c2f9fcbd8ca8︡{"stdout":"16\n"}︡{"done":true}
︠6d88a022-880f-4267-aa9f-edabf2de968as︠
sum(k==16 for k in sizes)
︡ecc9f208-6cdb-4314-9ea9-f33de0373ee6︡{"stdout":"25\n"}︡{"done":true}
︠eec6431d-4807-46c8-bddb-51e6c8ca963as︠
Sym.monomial()(Sym.hall_littlewood(q).Qp()[2,1])
︡503e1f27-8526-47b0-831f-ee12efef4c44︡{"stdout":"(q+2)*m[1, 1, 1] + (q+1)*m[2, 1] + q*m[3]\n"}︡{"done":true}
︠38737b08-b363-4b3c-b39a-8d2e34b3642cs︠
prime_divisors(8)
︡1734b277-ad4e-4672-ba12-c231383e81fb︡{"stdout":"[2]\n"}︡{"done":true}
︠13c600cf-a73a-4ed7-b6a7-5d8fe68661fas︠
def test_theorem(N):
    for p in Partitions(N):
        print(p)
        for pi in Permutations(N):
            pi = [i-1 for i in pi]
            count = count_spr(pi, p)
            if count>1:
                if prime_divisors(count)!=[2]:
                    return (p, pi, count)
︡e47109ee-8ad9-44d7-a644-0df03bca9b74︡{"done":true}
︠71623fae-b79c-488d-9399-743786daacbes︠
test_theorem(5)
︡0230e857-be29-45d4-b49c-8691cb6e17f9︡{"stdout":"[5]\n[4, 1]"}︡{"stdout":"\n[3, 2]"}︡{"stdout":"\n[3, 1, 1]"}︡{"stdout":"\n[2, 2, 1]"}︡{"stdout":"\n[2, 1, 1, 1]"}︡{"stdout":"\n[1, 1, 1, 1, 1]"}︡{"stdout":"\n"}︡{"done":true}
︠4b3fb35a-2a39-4906-9625-8324a5d9c23cs︠
test_theorem(6)
︡192dc8a9-a534-4978-b293-705be5843d25︡{"stdout":"[6]\n[5, 1]"}︡{"stdout":"\n[4, 2]"}︡{"stdout":"\n[4, 1, 1]"}︡{"stdout":"\n[3, 3]"}︡{"stdout":"\n[3, 2, 1]"}︡{"stdout":"\n[3, 1, 1, 1]"}︡{"stdout":"\n[2, 2, 2]"}︡{"stdout":"\n[2, 2, 1, 1]"}︡{"stdout":"\n[2, 1, 1, 1, 1]"}︡{"stdout":"\n[1, 1, 1, 1, 1, 1]"}︡{"stdout":"\n"}︡{"done":true}
︠5f44df11-33cd-414c-843d-c106268e8537︠









