#!/usr/bin/env python3 """Independent exhaustive certificate for regular-abelian (16,5,3) covers. For each of the five abelian groups of order 16, enumerate all 5-set and 3-set translation orbits. Exhaust all four-orbit choices. As every 5-set orbit has size 16, failure of four orbits plus an exhibited five-orbit cover proves an exact invariant minimum of 80 blocks. """ from itertools import combinations,product from pathlib import Path import hashlib,json,math,time import numpy as np from numba import njit TYPES=[(16,),(8,2),(4,4),(4,2,2),(2,2,2,2)];V=16;K=5;T=3 @njit def max_four(masks): n=len(masks);best=-1;best_tuple=(-1,-1,-1,-1);ties=0;tested=0 for i in range(n-3): mi=masks[i] for j in range(i+1,n-2): mij=mi|masks[j] for k in range(j+1,n-1): mijk=mij|masks[k] for l in range(k+1,n): tested+=1;z=mijk|masks[l];pc=0;y=z while y: y&=y-np.uint64(1);pc+=1 if pc>best:best=pc;best_tuple=(i,j,k,l);ties=1 elif pc==best:ties+=1 return best,best_tuple,ties,tested def analyse(rad,witness): elems=list(product(*[range(r) for r in rad]));idx={g:i for i,g in enumerate(elems)} def add(a,b):return tuple((x+y)%r for x,y,r in zip(a,b,rad)) perms=[[idx[add(x,g)] for x in elems] for g in elems] def orbit(block):return sorted({tuple(sorted(p[x] for x in block)) for p in perms}) def canon(block):return min(orbit(block)) triples=list(combinations(range(V),T));tkeys=sorted({canon(q) for q in triples});ti={q:i for i,q in enumerate(tkeys)};bases=sorted({canon(b) for b in combinations(range(V),K)}) masks=np.array([sum(1<=1 return {'group_invariant_factors':list(rad),'block_orbits':len(bases),'triple_orbits':len(tkeys),'all_block_orbit_sizes':sorted(set(len(orbit(b)) for b in bases)),'four_orbit_combinations_tested':int(tested),'maximum_triple_orbits_covered_by_four':int(best),'number_of_maximizing_four_tuples':int(ties),'one_maximizing_four_tuple':[list(bases[i]) for i in arg],'no_four_orbit_cover':best