sage: sr = mq.SR(1,1,1,4,gf2=True,polybori=True)
sage: S = sr.sbox()
sage: print S.cnf()
[(1, 2, 3, 4, –5), (1, 2, 3, 4, 6), (1, 2, 3, 4, 7), (1, 2, 3, 4, –8), (1, 2, 3, –4, 5), (1, 2, 3, –4, –6), (1, 2, 3, –4, 7), (1, 2, 3, –4, 8), (1, 2, –3, 4, –5), (1, 2, –3, 4, 6), (1, 2, –3, 4, –7),(1, 2, –3, 4, 8), (1, 2, –3, –4, –5), (1, 2, –3, –4, 6), (1, 2, –3, –4, –7), (1, 2, –3, –4, –8), (1, –2, 3, 4, –5), (1, –2, 3, 4, –6), (1, –2, 3, 4, 7), (1, –2, 3, 4, –8), (1, –2, 3, –4, 5), (1, –2, 3, –4, 6), (1, –2, 3, –4, 7), (1, –2, 3, –4, –8), (1, –2, –3, 4, –5), (1, –2, –3, 4, 6), (1, –2, –3,4, 7), (1, –2, –3, 4, 8), (1, –2, –3, –4, 5), (1, –2, –3, –4, –6), (1, –2, –3, –4, 7), (1, –2, –3, –4, –8), (–1, 2, 3, 4, 5), (–1, 2, 3, 4, –6), (–1, 2, 3, 4, –7), (–1, 2, 3, 4, 8), (–1, 2, 3, –4, 5), (–1, 2, 3, –4, 6), (–1, 2, 3, –4, –7), (–1, 2, 3, –4, 8), (–1, 2, –3, 4, 5), (–1, 2, –3, 4, 6), (–1, 2, –3, 4, 7), (–1, 2, –3, 4, 8), (–1, 2, –3, –4, 5), (–1, 2, –3, –4, 6), (–1, 2, –3, –4, –7), (–1, 2, –3, –4, –8), (–1, –2, 3, 4, –5), (–1, –2, 3, 4, –6), (–1, –2, 3, 4, 7), (–1, –2, 3, 4, 8), (–1,–2, 3, –4, –5), (–1, –2, 3, –4, –6), (–1, –2, 3, –4, –7), (–1, –2, 3, –4, 8), (–1, –2, –3, 4, –5), (–1, –2, –3, 4, –6), (–1, –2, –3, 4, –7), (–1, –2, –3, 4, –8), (–1, –2, –3, –4, 5), (–1, –2, –3, –4,–6), (–1, –2, –3, –4, –7), (–1, –2, –3, –4, –8)]
I am not claiming that this naive approach produces an optimal representation, it seems more compact than what ANF to CNF converters produce, though.