>r)&1)<>r)&1) for c in range(2*self.n)) + def anf(self,value): + for b,mask in enumerate(self.variables):value^=(value<<(1<witness[kind]['degree']: + monomial=(a°ree_masks[degree]) if degree>=0 else 0 + low=monomial&-monomial + witness[kind]={'degree':degree,'row':row,'column':col,'monomial_helper_mask':low.bit_length()-1 if low else None} + return {'histograms':profile,'witnesses':witness} + +def query_parameter_word(level, alpha, offset=0): + """Full-field shear parameter; the address subspace is a separate restriction.""" + degree = 1 << (level-1) + return [('CX', offset+j, offset+degree+i) + for j in range(degree) for i in range(degree) + if mul(level, alpha, 1 << j) >> i & 1] + +def query_word(level,addr): + return query_parameter_word(level, _address_field(level,addr)) + +def target_word(level,addr): + n=1<f(r+shift), without enumerating r.""" + for bit,ones in enumerate(table.variables): + if shift >> bit & 1: + zeros=table.ones ^ ones; step=1 << bit + value=((value & zeros) << step) | ((value & ones) >> step) + return value + +def active_derivative(table, value, level): + for bit in range(level-1): + value ^= xor_translate(table,value,helper_shift(level,1 << bit)) + return value + +def top_derivative_identity(level): + """Verify C_r N_top=(J directsum J)M_r in every helper coset, with signs separate. + + C_r is the (p-1)-fold active-helper derivative of the symplectic tableau. + This exact binary identity witnesses degree >=p-1; it makes no T-depth claim. + """ + t=sector_tableau(level); n=t.n; rows=t.x+t.z + derivative=[[active_derivative(t,v,level) for v in row] for row in rows] + q=BitslicedTableau(n,0).apply(query_word(level,1 << (level-1))) + qrows=q.x+q.z + nx=[[qrows[i][j] ^ (i==j) for j in range(2*n)] for i in range(2*n)] + sums=[] + for block in (t.x,t.z): + v=[] + for col in range(2*n): + value=0 + for row in block:value ^= row[col] + v.append(value) + sums.append(v) + for row in range(2*n): + expected=sums[row//n] + for col in range(2*n): + actual=0 + for k in range(2*n): + if nx[k][col]:actual ^= derivative[row][k] + assert actual == expected[col],(level,row,col) + # Each all-ones output block remains nonzero in every helper character. + assert all(reduce(int.__or__,row,0)==t.ones for row in sums) + return True diff --git a/tests/test_augmented_field_recoupler.py b/tests/test_augmented_field_recoupler.py new file mode 100644 index 0000000..2adaeac --- /dev/null +++ b/tests/test_augmented_field_recoupler.py @@ -0,0 +1,269 @@ +"""Exact augmented field recoupling, with arbitrary moving helpers. + +Full computational-basis columns check the algebraic primitive word at p=2,3. +A separately emitted p=2 native word and an overlapping shared-target phase +batch verify the native composition point. No all-size depth improvement is +inferred from the bounded matrices; the proof owns the uniform ledger. +""" +from functools import lru_cache +import unittest + +import numpy as np + +from tests.test_dirty_indicator_depth import _exact_phase_action +from tests.test_field_shear_intertwiner import _translation +from tests.test_joint_lookup_pauli_source import _bands, _inverse +from tests.test_projective_field_recoupler import ( + fourier_word, linear_word, ring_matrix, equal_ring, adjoint_ring) +from tests.test_recursive_field_shear_decoder import ( + _tower_product as mul, _tower_trace as trace, _address_field, _tower_shear) + + +@lru_cache(None) +def _addition_value(level, u, v, which): + ell = 1 << (level - 2) + low = (1 << ell) - 1 + u0, u1, v0, v1 = u & low, u >> ell, v & low, v >> ell + if which == 'before': + return (mul(level, u, v) >> ell) ^ mul(level - 1, u0, u1) + assert which == 'after' + return mul(level - 1, u0, v1) ^ mul(level - 1, u1, v0) + + +@lru_cache(None) +def _fourier_signs(level, multiplier, source): + return tuple(-1 if trace(level, mul(level, multiplier, mul(level, source, target))) + else 1 for target in range(1 << (1 << (level - 1)))) + + +def _algebraic_word(level, top, offset=0): + if level == 1: + return [('CX', offset + 1, offset)] + ell, degree = 1 << (level - 2), 1 << (level - 1) + helper = (1 << top) + ell - 1 + recoupler = [('F', level, offset + degree, 1), + ('ADD', level, offset, helper, 'before'), + ('F', level, offset + degree, 1 << ell), + ('ADD', level, offset, helper, 'after')] + recoupler += [gate for j in range(degree) + for gate in [('CX', offset + j, offset + degree + j), + ('CX', offset + degree + j, offset + j)]] + recoupler += [('F', level - 1, offset + ell, 1), + ('F', level - 1, offset + degree + ell, 1)] + return (recoupler + _algebraic_word(level - 1, top, offset) + + _algebraic_word(level - 1, top, offset + degree)) + + +def _apply_algebraic(operations, column): + state = {column: 1} + normalization = 0 + for kind, *args in operations: + if kind == 'CX': + control, target = args + state = {row ^ (((row >> control) & 1) << target): value + for row, value in state.items()} + elif kind == 'ADD': + level, offset, helper, which = args + ell, degree = 1 << (level - 2), 1 << (level - 1) + mask = (1 << degree) - 1 + changed = {} + for row, value in state.items(): + u, v = (row >> offset) & mask, (row >> (offset + degree)) & mask + delta = _addition_value(level, u, v, which) + target = row ^ (delta << helper) + assert target not in changed # The whole add is a permutation. + changed[target] = value + state = changed + else: + assert kind == 'F' + level, offset, multiplier = args + degree = 1 << (level - 1) + mask = ((1 << degree) - 1) << offset + normalization += degree + changed = {} + for row, value in state.items(): + source = (row & mask) >> offset + for target, sign in enumerate(_fourier_signs(level, multiplier, source)): + out = (row & ~mask) | (target << offset) + changed[out] = changed.get(out, 0) + sign * value + state = {row: value for row, value in changed.items() if value} + return state, normalization + + +def _helper_phase(top, address, basis): + exponent = 0 + for level in range(2, top + 1): + ell = 1 << (level - 2) + helper = (1 << top) + ell - 1 + value = (basis >> helper) & ((1 << ell) - 1) + coefficient = _address_field(level - 1, address & ((1 << (level - 1)) - 1)) + exponent ^= trace(level - 1, mul(level - 1, coefficient, value)) + return -1 if exponent else 1 + + +def _parity_phase_batch(forms, helpers): + """Returned eight-phase masks for arbitrary overlapping linear forms.""" + assert len(forms) == len(helpers) and len(set(helpers)) == len(helpers) + assert all(not (mask >> h) & 1 + for row in forms for mask in row for h in helpers) + emitted, previous = [], 0 + for step in range(8): + vertex = step ^ (step >> 1) + difference = previous ^ vertex + if difference: + index = difference.bit_length() - 1 + emitted += [('CX', bit, h) + for row, h in zip(forms, helpers) + for bit in range(row[index].bit_length()) + if (row[index] >> bit) & 1] + emitted += [('TDG' if vertex.bit_count() & 1 else 'T', h) + for h in helpers] + previous = vertex + emitted += [('CX', bit, h) + for row, h in zip(forms, helpers) + for bit in range(row[2].bit_length()) + if (row[2] >> bit) & 1] + return emitted + + +def _p2_forms(offset, helper, which): + u0, u1, v0, v1 = [1 << (offset + j) for j in range(4)] + h = 1 << helper + if which == 'before': + return [(u0, v1 ^ u1, h), (u1, v0 ^ v1, h)] + assert which == 'after' + return [(u0, v1, h), (u1, v0, h)] + + +def _native_p2_word(): + """32 T / 16 bands; four core, one moving, two returned private wires.""" + emitted = [] + for kind, *args in _algebraic_word(2, 2): + if kind == 'CX': + emitted.append((kind, *args)) + elif kind == 'ADD': + level, offset, helper, which = args + assert level == 2 + emitted += ([('H', helper)] + + _parity_phase_batch(_p2_forms(offset, helper, which), [5, 6]) + + [('H', helper)]) + else: + level, offset, multiplier = args + degree = 1 << (level - 1) + if multiplier != 1: + emitted += linear_word( + [mul(level, multiplier, 1 << j) for j in range(degree)], + range(offset, offset + degree)) + emitted += fourier_word(level, offset) + return emitted + + +@lru_cache(None) +def _complete_algebraic_columns(top): + width = (1 << top) + (1 << (top - 1)) - 1 + operations = _algebraic_word(top, top) + columns, normalization = [], None + for column in range(1 << width): + state, exponent = _apply_algebraic(operations, column) + assert sum(value * value for value in state.values()) == 1 << exponent + assert normalization is None or normalization == exponent + normalization = exponent + columns.append(state) + return columns, normalization + + +class AugmentedFieldRecouplerTests(unittest.TestCase): + def test_relative_trace_two_product_formula_and_zero_cell(self): + for level in (2, 3): + ell = 1 << (level - 2) + low = (1 << ell) - 1 + size = 1 << (2 * ell) + for u in range(size): + for v in range(size): + u0, u1, v0, v1 = u & low, u >> ell, v & low, v >> ell + self.assertEqual(_addition_value(level, u, v, 'before'), + mul(level - 1, u0, v1 ^ u1) + ^ mul(level - 1, u1, v0 ^ v1)) + self.assertEqual(_addition_value(level, u, v, 'after'), + _addition_value(level, u, v ^ u, 'after')) + for which in ('before', 'after'): + self.assertTrue(all(_addition_value(level, 0, v, which) == 0 + for v in range(size))) + + def test_native_shared_target_batch_and_arbitrary_private_return(self): + # Two disjoint four-wire cells share one target and four private masks. + forms = _p2_forms(0, 8, 'before') + _p2_forms(4, 8, 'before') + emitted = _parity_phase_batch(forms, [9, 10, 11, 12]) + self.assertEqual(sum(g[0] in ('T', 'TDG') for g in emitted), 32) + self.assertEqual(len(_bands(emitted)), 8) + for native in (emitted, _inverse(emitted)): + for basis in range(1 << 13): + phase = 4 * (sum(all((basis & mask).bit_count() & 1 for mask in row) + for row in forms) & 1) + self.assertEqual(_exact_phase_action(basis, native), (basis, phase)) + + def test_complete_p2_native_word_and_actual_inverse(self): + emitted = _native_p2_word() + self.assertEqual(sum(g[0] in ('T', 'TDG') for g in emitted), 32) + self.assertEqual(len(_bands(emitted)), 16) + columns, exponent = _complete_algebraic_columns(2) + self.assertEqual(exponent % 2, 0) + expected = np.zeros((4, 128, 128), dtype=np.int64) + for private in range(4): + for column, entries in enumerate(columns): + for row, value in entries.items(): + expected[0, row | (private << 5), column | (private << 5)] = value + actual = ring_matrix(emitted, 7) + self.assertTrue(equal_ring(actual, (expected, exponent // 2))) + self.assertTrue(equal_ring(ring_matrix(_inverse(emitted), 7), adjoint_ring(actual))) + + def test_all_computational_helper_columns_and_reversed_word(self): + for top in (2, 3): + columns, exponent = _complete_algebraic_columns(top) + expected_inverse = [{} for _ in columns] + for column, entries in enumerate(columns): + for row, value in entries.items(): + expected_inverse[row][column] = value + reversed_word = list(reversed(_algebraic_word(top, top))) + for column in range(len(columns)): + inverse, inverse_exponent = _apply_algebraic(reversed_word, column) + self.assertEqual(inverse_exponent, exponent) + self.assertEqual(inverse, expected_inverse[column], (top, column)) + + def test_augmented_intertwining_every_address_and_full_column(self): + for top in (2, 3): + columns, _ = _complete_algebraic_columns(top) + core_mask = (1 << (1 << top)) - 1 + for address in range(1 << top): + for column in range(len(columns)): + source = ((column & ~core_mask) + | _tower_shear(top, address, column & core_mask)) + sign = _helper_phase(top, address, column) + left = {row: sign * value for row, value in columns[source].items()} + right = {((row & ~core_mask) + | _translation(top, address, row & core_mask)): + _helper_phase(top, address, row) * value + for row, value in columns[column].items()} + self.assertEqual(left, right, (top, address, column)) + + def test_helper_query_is_essential_and_echo_cancels_it(self): + columns, _ = _complete_algebraic_columns(2) + without_query_fails = False + for address in range(4): + for column in range(32): + source = (column & 16) | _tower_shear(2, address, column & 15) + moved = {(row & 16) | _translation(2, address, row & 15): value + for row, value in columns[column].items()} + without_query_fails |= columns[source] != moved + # The target augmented query is a signed involution; its + # actual Z0 echo has exactly Z_address and no helper phase. + middle = (column & 16) | _translation(2, address, column & 15) + phase = (_helper_phase(2, address, column) + * (-1 if middle & 1 else 1) + * _helper_phase(2, address, middle)) + self.assertEqual(phase, -1 if (column >> address) & 1 else 1) + self.assertTrue(without_query_fails) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_coupled_projective_recoupler.py b/tests/test_coupled_projective_recoupler.py new file mode 100644 index 0000000..bbe1d10 --- /dev/null +++ b/tests/test_coupled_projective_recoupler.py @@ -0,0 +1,380 @@ +"""Coupled eight-address decoder with six returned arbitrary phase helpers. + +The native word, literal phases, both actual inverses and every field address +are checked exactly. The projective predicate is finite; no uniform decoder +depth claim follows from this fixture. +""" +from functools import lru_cache +from itertools import product +import unittest + +import numpy as np + +from tests.test_projective_field_recoupler import ( + paired_t, pauli_diagonalizer, linear_word, _baseline_word, _raw_linear_cell, + fourier_word, ring_matrix, equal_ring, adjoint_ring, ledger, mul, inv, trace, + _inverse, _native_x, _relative_toffoli, _tower_shear, _translation) +from tests.test_joint_lookup_pauli_source import _bands +from tests.test_flat_field_bank_native import full_intertwiner + + +def affine_r91_batch(pairs, helpers): + """Ftilde(a,b;h): four T targets h, only logical parity CNOT controls. + + A form is (linear_mask, constant). Ftilde differs from (-i)^(ab)Z_h^(ab) + by scalar i iff both constants are one; these cancel in the commutator. + """ + word=[] + # Parity vertices 0, a, a+b, b, then return to zero. + vertices=((0,0),(1,0),(1,1),(0,1)) + changes=(0,1,0,1) + for step,(ia,ib) in enumerate(vertices): + for (a,b),h in zip(pairs,helpers): + parity=(ia+ib+ia*a[1]+ib*b[1])&1 + word.append(('TDG' if parity else 'T',h)) + for pair,h in zip(pairs,helpers): + mask=pair[changes[step]][0] + word += [('CX',j,h) for j in range(mask.bit_length()) if mask>>j&1] + return word + + +def quartic_batch(forms, helpers): + assert len(forms)==len(helpers) and len(set(helpers))==len(helpers) + for row in forms: + assert all((mask>>h)&1==0 for mask,const in row for h in helpers) + u=affine_r91_batch([(r[0],r[1]) for r in forms],helpers) + h=[('H',j) for j in helpers] + v=h+affine_r91_batch([(r[2],r[3]) for r in forms],helpers)+h + return u+v+_inverse(u)+_inverse(v) + + +def displacement_forms(): + out=[] + for direction in (4,5,6,7): + columns=[mul(3,inv(3,direction),1< >i)&1)< =8 + if t==helper and logical>>c&1: + # Native X as HSSH. + local += [('H',0),('S',0),('S',0),('H',0)] + else: + assert len(wires)==1 and wires[0]>=8 + if wires[0]==helper:local.append((name,0)) + return ring_matrix(local,1) + + +def relative_pair(left, right, probe, controls=(2, 3)): + tau=paired_t(left,right) + k,pivot=pauli_diagonalizer(probe) + pword=(_inverse(k)+[('H',pivot)] + +_relative_toffoli(*controls,pivot)+[('H',pivot)]+k) + return _inverse(tau)+pword+tau + + +def selected_pair(direction, pair, negative_phase=False): + coords=linear_word([mul(3,inv(3,direction),1< =4 else 1)*(a[i]@b[j]) + den=da+db + while den and not np.any(out&1):out//=2;den-=1 + return out,den + + +def _field_cell(direction): + """Independent trace-Fourier formula; entries are integer halves.""" + d0, d1 = direction & 3, direction >> 2 + norm = mul(2, d0, d0) ^ mul(2, d0, d1) ^ mul(2, 2, mul(2, d1, d1)) + out = np.zeros((4, 16, 16), dtype=np.int64) + for v in range(16): + uv = mul(3, direction, v) + rhat = mul(3, 4, uv) >> 2 + s = mul(2, uv >> 2, inv(2, norm)) + for r in range(4): + a = mul(3, direction, r | (s << 2)) + out[0, a, v] = (-1) ** trace(2, mul(2, rhat, r)) + return out, 1 + + +def _field_shift(u): + if not u: + return 0 + d0, d1 = u & 3, u >> 2 + norm = mul(2, d0, d0) ^ mul(2, d0, d1) ^ mul(2, 2, mul(2, d1, d1)) + s = mul(2, mul(2, d0, d1), inv(2, norm)) + return mul(3, u, s << 2) + + +def _pauli_ring(label): + x, z = label & 15, label >> 4 + out = np.zeros((4, 16, 16), dtype=np.int64) + power = 2 * ((x & z).bit_count() % 4) + for col in range(16): + out[power % 4, col ^ x, col] = (-1) ** ( + power // 4 + (z & col).bit_count()) + return out, 0 + + +def _times_i(value): + a, d = value + return np.array([-a[2], -a[3], a[0], a[1]]), d + + +def _reflection(left, right, probe): + """Independent J=(P-iAP-iBP-ABP)/2 with integer coefficients.""" + a, b, p = _pauli_ring(left), _pauli_ring(right), _pauli_ring(probe) + ap, bp = multiply_ring(a, p), multiply_ring(b, p) + abp = multiply_ring(a, bp) + assert ap[1] == bp[1] == abp[1] == 0 + return p[0] - _times_i(ap)[0] - _times_i(bp)[0] - abp[0], 1 + + +def _identity(size): + out = np.zeros((4, size, size), dtype=np.int64) + out[0] = np.eye(size, dtype=np.int64) + return out, 0 + + +def _displacement_permutation(): + """Effective permutation derived from the emitted quartic forms.""" + rows = displacement_forms() + permutation = [] + for basis in range(256): + u, v = basis & 15, basis >> 4 + shift = 0 + for row in rows: + assert all(mask < 16 for mask, _ in row[:3]) + assert row[3][0] & 15 == 0 and row[3][1] == 0 + if all(evalform(form, u) for form in row[:3]): + shift ^= row[3][0] >> 4 + permutation.append(u | ((v ^ shift) << 4)) + return permutation + + +@lru_cache(None) +def logical_ring(decoder=False, inverse=False): + """Compose the verified tensor-identity batch with actual native walls. + + Inverse=True evaluates each actual reversed native wall separately; it + does not manufacture the answer by taking the forward matrix's adjoint. + The private batch is self-inverse as a complete XOR operator, proved below + for both actual native orientations on every private-helper sector. + """ + prefix = fourier_word(3, 4) + coupled_linear_word() + suffix = exterior_after() + if decoder: + suffix += [g for gate in full_intertwiner() + for g in [gate, (gate[0], *(j + 4 for j in gate[1:]))]] + first, last = (prefix, suffix) if not inverse else ( + _inverse(suffix), _inverse(prefix)) + matrix, den = ring_matrix(first) + moved = matrix[:, _displacement_permutation(), :] + return multiply_ring(ring_matrix(last), (moved, den)) + + +class CoupledProjectiveRecouplerTests(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.linear = ring_matrix(coupled_linear_word()) + cls.linear_inverse = ring_matrix(_inverse(coupled_linear_word())) + cls.recoupler = logical_ring() + cls.recoupler_inverse = logical_ring(inverse=True) + cls.decoder = logical_ring(decoder=True) + cls.decoder_inverse = logical_ring(decoder=True, inverse=True) + + def test_affine_private_phase_keeps_its_literal_constant(self): + forms = [(mask, constant) for mask in range(4) for constant in (0, 1)] + for a, b in product(forms, repeat=2): + word = affine_r91_batch([(a, b)], [2]) + wanted = np.zeros((4, 8, 8), dtype=np.int64) + for col in range(8): + ab = evalform(a, col) * evalform(b, col) + # i^(ka kb) (-i)^(ab) (-1)^(ab h), including scalar i. + power = (2*a[1]*b[1] - 2*ab + 4*ab*((col >> 2) & 1)) % 8 + wanted[power % 4, col, col] = (-1) ** (power // 4) + expected = wanted, 0 + self.assertTrue(equal_ring(ring_matrix(word, 3), expected)) + self.assertTrue(equal_ring(ring_matrix(_inverse(word), 3), + adjoint_ring(expected))) + + def test_quartic_affine_commutator_all_columns_and_actual_inverse(self): + rows = [tuple((1 << j, c) for j, c in enumerate(constants)) + for constants in product((0, 1), repeat=4)] + # Dependent, repeated, overlapping and constant affine forms are allowed. + rows += [((3, 1), (3, 1), (5, 0), (0, 1)), + ((0, 0), (7, 1), (3, 0), (15, 1))] + for row in rows: + word = quartic_batch([row], [4]) + wanted = np.zeros((4, 32, 32), dtype=np.int64) + for col in range(32): + wanted[0, col, col] = -1 if all(evalform(f, col) for f in row) else 1 + for emitted in (word, _inverse(word)): + self.assertTrue(equal_ring(ring_matrix(emitted, 5), (wanted, 0))) + + def test_private_batch_every_helper_sector_and_displacement(self): + forms, helpers = displacement_forms(), list(range(8, 14)) + batch = quartic_batch(forms, helpers) + actual_inverse = _inverse(batch) + for logical in range(256): + for row, helper in zip(forms, helpers): + wanted = _identity(2) + if all(evalform(f, logical) for f in row): + wanted = -wanted[0], wanted[1] + for emitted in (batch, actual_inverse): + self.assertTrue(equal_ring(helper_matrix(emitted, logical, helper), + wanted)) + u, v = logical & 15, logical >> 4 + actual = sum(all(evalform(f, logical) for f in row) for row in forms) % 2 + self.assertEqual(actual, (_field_shift(u) & v).bit_count() % 2) + self.assertEqual(ledger(batch)['T'], 96) + self.assertEqual(ledger(batch)['bands'], 16) + self.assertEqual(len(batch), 360) + for emitted in (batch, actual_inverse): + for band in _bands(emitted): + self.assertEqual(len({g[1] for g in band}), len(band)) + self.assertTrue(all(g[1] in helpers for g in band)) + + def test_independent_paired_reflections_and_common_or_phase(self): + ja = _reflection(19, 50, 32) + jb64, jb112 = _reflection(156, 228, 64), _reflection(156, 228, 112) + jc44, jc87 = _reflection(89, 247, 44), _reflection(89, 247, 87) + for j in (ja, jb64, jb112, jc44, jc87): + self.assertTrue(equal_ring(j, adjoint_ring(j))) + self.assertTrue(equal_ring(multiply_ring(j, j), _identity(16))) + for direction, first, last, sign in ( + (4, ja, jb112, 1), (5, jb64, ja, 1), + (6, jc44, ja, 1), (7, ja, jc87, -1)): + actual, den = multiply_ring(last, first) + expected = multiply_ring(_field_cell(direction), + adjoint_ring(_field_cell(1))) + self.assertTrue(equal_ring((sign * actual, den), expected)) + common = ring_matrix(common_a()) + for u in range(16): + selected = int(bool(u & 12)) + predicates = [int(mul(3, inv(3, d), u) >> 2 == 0) for d in (4,5,6,7)] + self.assertEqual(sum(predicates) % 2, selected) + if u: + self.assertEqual((1j**selected)*((-1j)**sum(predicates)), 1) + block = _times_i(ja) if selected else _identity(16) + indices = np.arange(16)*16 + u + actual = common[0][:, indices, :][:, :, indices], common[1] + self.assertTrue(equal_ring(actual, block)) + + def test_complete_linear_word_and_literal_zero_fiber(self): + # The independent nonzero field formula also fixes every literal sign. + for u in range(1, 16): + indices = np.arange(16)*16 + u + actual = self.linear[0][:, indices, :][:, :, indices], self.linear[1] + self.assertTrue(equal_ring(actual, _field_cell(u))) + zero = _field_cell(1) + for triple in ((156,228,64), (89,247,44), (156,228,112), (89,247,87)): + zero = multiply_ring(_reflection(*triple), zero) + zero = -zero[0], zero[1] + indices = np.arange(16)*16 + actual = self.linear[0][:, indices, :][:, :, indices], self.linear[1] + self.assertTrue(equal_ring(actual, zero)) + self.assertTrue(equal_ring(self.linear_inverse, adjoint_ring(self.linear))) + + def test_complete_intertwining_all_columns_and_actual_inverses(self): + for forward, inverse in ((self.recoupler, self.recoupler_inverse), + (self.decoder, self.decoder_inverse)): + self.assertTrue(equal_ring(inverse, adjoint_ring(forward))) + self.assertTrue(equal_ring(multiply_ring(inverse, forward), _identity(256))) + for address in range(8): + source = [_tower_shear(3, address, col) for col in range(256)] + target = [_translation(3, address, col) for col in range(256)] + self.assertTrue(np.array_equal(self.decoder[0][:, :, source], + self.decoder[0][:, target, :])) + + def test_native_ledgers_and_distinct_physical_t_targets(self): + rows = ((coupled_linear_word(), 40, 20, 577, None, 8), + (recoupler_word(), 136, 36, 980, 984, 14), + (decoder_word(), 148, 39, 1110, 1166, 14)) + for word, t, bands, forward_gates, inverse_gates, width in rows: + for emitted, gates in ((word, forward_gates), (_inverse(word), inverse_gates)): + counted = ledger(emitted) + self.assertEqual((counted['T'], counted['bands'], counted['width']), + (t, bands, width)) + if gates is not None: + self.assertEqual(counted['gates'], gates) + self.assertLessEqual({g[0] for g in emitted}, {'H','S','CX','T','TDG'}) + for band in _bands(emitted): + self.assertEqual(len({g[1] for g in band}), len(band)) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_field_sector_degree.py b/tests/test_field_sector_degree.py new file mode 100644 index 0000000..0183117 --- /dev/null +++ b/tests/test_field_sector_degree.py @@ -0,0 +1,216 @@ +"""Independent finite checks of the sector-degree barrier and its scope. + +The independent group-algebra and escape checks are supplemented by exact +active-coset and local-affinity identities in the retained sector tableaux. +""" +import unittest +from fractions import Fraction + +from tests.exact_matrices import CQ2, CO, CZ, adjoint, eye, multiply as exact_multiply, scale +from tests.field_sector_tableaux import (BitslicedTableau, recoupler_word, + sector_tableau, top_derivative_identity) + + +def identity(n): + return [1 << i for i in range(n)] + + +def add(a, b): + return [x ^ y for x, y in zip(a, b)] + + +def multiply(a, b): + out = [] + for row in a: + value = 0 + while row: + low = row & -row + value ^= b[low.bit_length() - 1] + row ^= low + out.append(value) + return out + + +def rank(rows): + pivots = {} + for row in rows: + while row: + bit = row.bit_length() - 1 + if bit not in pivots: + pivots[bit] = row + break + row ^= pivots[bit] + return len(pivots) + + +def translation(p, x): + return [1 << (row ^ x) for row in range(1 << p)] + + +def span(basis): + values = [0] + for vector in basis: + values += [value ^ vector for value in values] + return values + + +def complement(p, vector): + basis = [vector] + rest = [] + for bit in range(p): + value = 1 << bit + if rank(basis + [value]) > len(basis): + basis.append(value) + rest.append(value) + assert len(basis) == p + return rest + + +def anf_degree(values): + coefficients = list(values) + variables = (len(values) - 1).bit_length() + assert len(values) == 1 << variables + for bit in range(variables): + for mask in range(1 << variables): + if mask >> bit & 1: + coefficients[mask] ^= coefficients[mask ^ (1 << bit)] + return max((mask.bit_count() for mask, value in enumerate(coefficients) + if value), default=-1) + + +class FieldSectorDegreeTests(unittest.TestCase): + def test_regular_group_norm_and_independent_deviations(self): + for p in range(1, 7): + n = 1 << p + unit = identity(n) + total = [0] * n + for x in range(n): + total = add(total, translation(p, x)) + self.assertEqual(total, [(1 << n) - 1] * n) + self.assertEqual(rank(total), 1) + if p >= 2: + product = multiply(add(translation(p, 1), unit), + add(translation(p, 2), unit)) + self.assertEqual(rank(product), n // 4) + self.assertTrue(any(product)) + + def test_every_nonzero_kernel_direction_and_complement(self): + for p in range(1, 6): + n = 1 << p + unit = identity(n) + wanted = [(1 << n) - 1] * n + for b in range(1, n): + directions = complement(p, b) + coefficient = [0] * n + deviation = add(translation(p, b), unit) + for t in span(directions): + coefficient = add(coefficient, + multiply(translation(p, t), deviation)) + self.assertEqual(coefficient, wanted, (p, b)) + # Multiplication by a nontrivial invertible core change cannot + # annihilate the top-degree coefficient. Elementary row/column + # operations suffice for a direct independent finite check. + change = identity(n) + if n > 1: + change[0] ^= change[1] + self.assertTrue(any(multiply(coefficient, change))) + + def test_full_rank_helper_case_needs_degree_p(self): + for p in range(1, 7): + n = 1 << p + # Every entry of the regular translation family is one address + # indicator, of degree p in the p active helper-shift variables. + for output in (0, n - 1): + for source in (0, n - 1): + self.assertEqual(anf_degree([ + int((source ^ x) == output) for x in range(n)]), p) + + def test_square_zero_source_assumption_is_essential(self): + # If the source itself is the regular bank, E=I and Lambda=0 is a + # constant Clifford-sector solution. Its deviations violate N_b N_c=0. + p = 3 + n = 1 << p + unit = identity(n) + source = {x: translation(p, x) for x in range(n)} + for x in range(n): + self.assertEqual(multiply(unit, source[x]), + multiply(translation(p, x), unit)) + self.assertTrue(any(multiply(add(source[1], unit), + add(source[2], unit)))) + + def test_nonlinear_helper_motion_invalidates_affine_stage_count(self): + # Reversible helper Toffoli: r2 -> r2 + r0*r1. It is its own inverse. + # Between its two occurrences, a single core Clifford shear is + # controlled AFFINELY by the current r2. In the original helper frame + # the completed block has a quadratic coefficient, despite containing + # only one affine core stage. The helper motion must be charged and is + # outside the fixed-helper-frame stage hypothesis. + values = [] + permutation = [] + for r in range(8): + shifted = r ^ (((r & 1) * ((r >> 1) & 1)) << 2) + permutation.append(shifted) + values.append((shifted >> 2) & 1) + self.assertEqual(sorted(permutation), list(range(8))) + self.assertTrue(all(permutation[permutation[r]] == r for r in range(8))) + self.assertEqual(anf_degree([(r >> 2) & 1 for r in range(8)]), 1) + self.assertEqual(anf_degree(values), 2) + + def test_extra_target_spectators_cannot_cancel_the_bank_block(self): + p = 3 + n = 1 << p + dimension = n + 2 + unit = identity(dimension) + queries = {} + for x in range(n): + # A moving residual 2-wire swap, on an arbitrary address character. + residual_bit = (x & 3).bit_count() & 1 + queries[x] = (translation(p, x) + + [1 << (n + (j ^ residual_bit)) for j in range(2)]) + b = 4 + deviation = add(queries[b], unit) + total = [0] * dimension + for t in span([1, 2]): + total = add(total, multiply(queries[t], deviation)) + self.assertEqual(total[:n], [(1 << n) - 1] * n) + self.assertTrue(any(total)) + + + def test_active_coset_top_coefficient_and_local_affinity(self): + for p in (2, 3, 4): + self.assertTrue(top_derivative_identity(p)) + table = sector_tableau(p) + self.assertEqual(max(table.degree_profile()['histograms']['symplectic']), p - 1) + ell = 1 << (p - 2) + offset = ell - 1 + local_word = [((*gate[:-1], gate[-1] >> offset) + if gate[0] in ('ZC', 'CZC') else gate) + for gate in recoupler_word(p)] + local = BitslicedTableau(1 << p, ell).apply(local_word) + self.assertEqual(max(local.degree_profile()['histograms']['symplectic']), 1) + + def test_signed_pauli_gap_does_not_fix_scalar_sector_phase(self): + # Orthogonal Pauli directions attain the sqrt(2) gap exactly. + x = [[CZ, CO], [CO, CZ]] + z = [[CO, CZ], [CZ, -CO]] + difference = [[a - b for a, b in zip(row, other)] + for row, other in zip(x, z)] + self.assertEqual(exact_multiply(difference, difference), scale(eye(2), CQ2(2))) + self.assertEqual(exact_multiply(scale(x, CQ2(2)), scale(x, CQ2(2))), + scale(eye(2), CQ2(4))) + # A nontrivial rational unit scalar is closer than 1/sqrt(2), but its + # Pauli action is exactly identical. Robust rounding therefore gives + # the symplectic cocycle; it cannot set sector scalars to +1. + phase = CQ2(Fraction(15, 17), Fraction(8, 17)) + self.assertEqual(phase.abs2(), 1) + delta = phase - 1 + self.assertEqual(delta.abs2(), Fraction(4, 17)) + self.assertLess(delta.abs2(), Fraction(1, 2)) + unitary = scale(eye(2), phase) + self.assertNotEqual(unitary, eye(2)) + self.assertEqual(exact_multiply(exact_multiply(unitary, x), adjoint(unitary)), x) + self.assertEqual(exact_multiply(exact_multiply(unitary, z), adjoint(unitary)), z) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_field_sector_tableaux.py b/tests/test_field_sector_tableaux.py new file mode 100644 index 0000000..489b562 --- /dev/null +++ b/tests/test_field_sector_tableaux.py @@ -0,0 +1,89 @@ +"""Exact signed-Pauli sector fixtures; no dense high-dimensional unitary claim.""" +import unittest +from tests.exact_matrices import Q2 +from tests.test_one_band_copy_feasibility import _conjugate +from tests.field_sector_tableaux import ( + BitslicedTableau, decoder_word, recoupler_word, phase_coefficients, + sector_tableau, materialize_word, query_word, query_parameter_word, + target_word, helper_shift, mul, trace) + + +class FieldSectorTableauTests(unittest.TestCase): + def test_signed_conditional_gate_updates_against_exact_paulis(self): + # Every two-qubit Hermitian Pauli, in every helper sector. Noncanonical + # input batches exercise intermediate Y phases, not only X/Z supports. + word=(('H',0),('CZC',0,1,1),('CX',1,0),('ZC',1,2), + ('H',1),('CZC',0,1,3),('H',0),('CX',0,1)) + for start in range(0,16,4): + table=BitslicedTableau(2,2) + for q in range(2): + table.x[q]=[table.ones if (label>>q)&1 else 0 + for label in range(start,start+4)] + table.z[q]=[table.ones if (label>>(q+2))&1 else 0 + for label in range(start,start+4)] + table.apply(word) + for character in range(4): + concrete=materialize_word(word,character) + for column,label in enumerate(range(start,start+4)): + x,z,sign=table.at(character)[column] + self.assertEqual(_conjugate({label:Q2(1)},concrete,2), + {x|(z<<2):Q2(-1 if sign else 1)}) + + def test_quadratic_phase_expansion_on_every_bounded_column(self): + for level in (2,3): + ell=1<<(level-2);k=2*ell;mask=(1< >k + d0,d1=u&mask,u>>ell;a0,a1=v&mask,v>>ell + if kind=='before': + f=(mul(level,u,v)>>ell)^mul(level-1,d0,d1) + else: + f=mul(level-1,d0,a1)^mul(level-1,d1,a0) + expected=trace(level-1,mul(level-1,eta,f)) + actual=0 + for gate in terms: + selected=(eta&gate[-1]).bit_count()&1 + value=1 + for q in gate[1:-1]:value&=(basis>>q)&1 + actual^=selected&value + self.assertEqual(actual,expected) + + def test_complete_signed_cocycle_and_actual_inverse(self): + for p in (2,3,4): + n=1< >start) + if g[0] in ('CZC','ZC') else g + for g in recoupler_word(p)] + for lam in (1<
> j) & 1 for j in subset)) << x + for x in range(1 << p)) + for size in range(min(p, degree) + 1) + for subset in combinations(range(p), size)] + + +def _gram_rank(basis, width): + return _rank([sum(_pairing(v, w, width) << j for j, w in enumerate(basis)) + for v in basis]) + + +def _clifford_label(label, word, width): + mask = (1 << width) - 1 + a, b = label & mask, label >> width + for name, *wires in word: + if name == 'H': + j, = wires + difference = ((a ^ b) >> j) & 1 + a ^= difference << j + b ^= difference << j + elif name == 'S': + j, = wires + b ^= ((a >> j) & 1) << j + else: + assert name == 'CX' + control, target = wires + a ^= ((a >> control) & 1) << target + b ^= ((b >> target) & 1) << control + return a | (b << width) + + +def _pauli_helper_image(label, address): + degree, width = 2, 5 + image = _field_image(label, address, degree, 0b111, 1) + helper_query = ((address & 1) << 4) | (((address >> 1) & 1) << 9) + phase = (_hermitian_phase(label, width) + - _hermitian_phase(image, width) + + 2 * _pairing(helper_query, label, width)) % 4 + return image, phase + + +class WeakProbePauliDomainTests(unittest.TestCase): + def test_field_four_cubes_are_literal_scalars_with_helpers(self): + degree, polynomial, helpers = 4, 0b10011, 1 + width = 2 * degree + helpers + basis = [1 << j for j in range(2 * width)] + probes = set(basis) | {a ^ b for a, b in combinations(basis, 2)} + probes.add((1 << (2 * width)) - 1) + cubes = {} + for origin in range(8): + for a, b in combinations(range(1, 8), 2): + order = (origin, origin ^ a, origin ^ b, origin ^ a ^ b) + cubes.setdefault(frozenset(order), order) + self.assertEqual(len(cubes), 14) + for label in probes: + orbit = [_field_image(label, x, degree, polynomial, helpers) + for x in range(8)] + self.assertTrue(all(_pairing(a, b, width) == 0 + for a, b in combinations(orbit, 2))) + for label, cube in product(probes, cubes.values()): + word_label, word_phase = 0, 0 + for address in cube: + image = _field_image(label, address, degree, polynomial, helpers) + sign = (_hermitian_phase(label, width) + - _hermitian_phase(image, width)) % 4 + word_phase = (word_phase + sign + + _product_phase(word_label, image, width)) % 4 + word_label ^= image + self.assertEqual(word_label, 0) + self.assertIn(word_phase, (0, 2)) + + def test_noncommuting_cube_can_have_negative_scalar(self): + # Q_x=H^(x0), P=X, on p=2 addresses. Its symplectic entries have + # degree one and P_x=(X,Z,X,Z) in this fixed cube order. + # The scalar product is -I, not +I; the proof must retain phases. + label, phase = 0, 0 + for value in (1, 2, 1, 2): + phase = (phase + _product_phase(label, value, 1)) % 4 + label ^= value + self.assertEqual((label, phase), (0, 2)) + self.assertEqual(_pairing(1, 2, 1), 1) + nonlinear_character = (0, 0, 0, 1) + requested_phase = (phase + 2 * sum(nonlinear_character)) % 4 + self.assertEqual(requested_phase, 0) + # The exact products differ by sign despite the negative source word. + self.assertEqual((requested_phase - phase) % 4, 2) + + def test_derivative_characterization_and_symplectic_radical(self): + # Exhaust every p=3 Boolean mask, rather than sampling polynomials. + for degree in (0, 1, 2, 3): + code = _span(_rm_basis(3, degree)) + permitted = set() + directions = list(range(1, 8)) + for mask in range(256): + good = True + for ds in combinations(directions, degree + 1): + if _rank(ds) != degree + 1: + continue + cube = _span(ds) + for origin in range(8): + if sum((mask >> (origin ^ x)) & 1 for x in cube) % 2: + good = False + break + if not good: + break + if good: + permitted.add(mask) + self.assertEqual(permitted, code) + for p, degree, helpers in ((3, 1, 0), (4, 1, 3), (5, 1, 3), (5, 2, 1)): + size, width = 1 << p, (1 << p) + helpers + code_basis = _rm_basis(p, degree) + dimension = len(code_basis) + self.assertEqual(_rank(code_basis), dimension) + allowed = code_basis + [1 << (width + j) for j in range(size)] + allowed += [1 << j for j in range(size, width)] + allowed += [1 << (width + j) for j in range(size, width)] + self.assertEqual(_rank(allowed), size + dimension + 2 * helpers) + self.assertEqual(_gram_rank(allowed, width), 2 * dimension + 2 * helpers) + self.assertEqual(len(allowed) - _gram_rank(allowed, width), size - dimension) + + def test_independent_cell_rank_survives_joint_clifford_walls(self): + for p, helpers in product(range(2, 7), (0, 3)): + size, cells = 1 << p, 1 << (p - 2) + width = size + helpers + generators = [] + for cell in range(cells): + for label in (1, 4, 8, 18): + a, b = label & 15, label >> 4 + generators.append((a << (4 * cell)) + | (b << (width + 4 * cell))) + generators += [1 << j for j in range(size, width)] + generators += [1 << (width + j) for j in range(size, width)] + original_rank = _gram_rank(generators, width) + self.assertEqual(original_rank, 2 * cells + 2 * helpers) + wall = [('H', 0), ('S', 1), ('CX', 0, size - 1), ('CX', size - 1, 2)] + if helpers: + wall += [('H', width - 1), ('CX', 1, width - 1), + ('CX', width - 1, 3), ('S', width - 2)] + changed = [_clifford_label(v, wall, width) for v in generators] + self.assertEqual(_rank(changed), 4 * cells + 2 * helpers) + self.assertEqual(_gram_rank(changed, width), original_rank) + allowed_rank = 2 * (p + 1) + 2 * helpers + self.assertEqual(original_rank > allowed_rank, p >= 5) + if p >= 5: + # The weak-probe T-count bound alone would not reject these + # cells; their excessive domain symplectic rank does. + self.assertGreaterEqual(6 * cells, size - (p + 1)) + + def test_exact_field_z_kernel_can_only_contain_constant_affine_masks(self): + for p in range(2, 7): + size = 1 << p + constant = {0, (1 << size) - 1} + for mask in _span(_rm_basis(p, 1)): + orbit = {_translate(mask, x, size) for x in range(size)} + self.assertEqual(len(orbit), 1 if mask in constant else 2) + self.assertTrue(any(_translate(mask, x, size) == mask + for x in range(1, size))) + # Tensor-cell domain dimension exceeds the exact bound from p=3, + # while the four-address cell saturates its permitted dimension. + self.assertEqual(size > p + 2, p >= 3) + self.assertFalse(any(_translate(0b10, x, 2) == 0b10 + for x in range(1, 2))) + for p, degree, polynomial in ((2, 2, 0b111), (3, 4, 0b10011)): + width, addresses = 2 * degree, 1 << p + for label in [1 << j for j in range(2 * width)]: + orbit = {_field_image(label, x, degree, polynomial) + for x in range(addresses)} + self.assertIn(len(orbit), (1, addresses)) + # An affine mask's nonconstant two-point orbit therefore + # cannot inject into a field Pauli orbit at p>=2. + self.assertNotEqual(len(orbit), 2) + + def test_actual_p2_decoder_saturates_exact_dimension_and_z_kernel(self): + word = full_intertwiner() + image_domain = {} + for label in range(256): + row = _conjugate({label: Q2(1)}, word, 4) + if len(row) == 1: + target, coefficient = next(iter(row.items())) + self.assertIn(coefficient, (Q2(1), Q2(-1))) + image_domain[label] = target + self.assertEqual(len(image_domain), 16) + self.assertEqual(_rank(image_domain), 4) + images = set(image_domain.values()) + self.assertEqual({v & 15 for v in images}, _span(_rm_basis(2, 1))) + self.assertEqual({v for v in images if (v & 15) == 0}, {0, 240}) + # Pure target Z pullbacks have exactly the one-dimensional all-Z + # kernel. Three independent affine X masks plus that kernel give + # the saturated dimension p+2=4. + self.assertEqual(_rank(images), 2 + 2) + for helpers in (1, 3): + width = 4 + helpers + lifted = [(v & 15) | ((v >> 4) << width) for v in images] + lifted += [1 << j for j in range(4, width)] + lifted += [1 << (width + j) for j in range(4, width)] + self.assertEqual(_rank(lifted), 2 + 2 + 2 * helpers) + + def test_radius_two_code_bound_and_weight_four_boundary(self): + for p in range(2, 21): + size = 1 << p + sphere_size = 1 + size + size * (size - 1) // 2 + self.assertEqual(sphere_size - 2 * size, + (size - 1) * (size - 2) // 2) + self.assertGreater(sphere_size, 2 * size) + if p >= 3: + self.assertLess(4, size) + # The dual of RM(1,p) supplies the limiting code dimensions used + # in the argument. Exhaust the small p=3,4 masks and find an actual + # minimum of four; the packing step cannot generically promise less. + for p in (3, 4): + size = 1 << p + checks = _rm_basis(p, 1) + code = [mask for mask in range(1 << size) + if all((mask & row).bit_count() % 2 == 0 for row in checks)] + self.assertEqual(len(code), 1 << (size - p - 1)) + self.assertEqual(min(mask.bit_count() for mask in code if mask), 4) + + + def test_projective_pauli_helpers_preserve_labels_but_not_literal_fixing(self): + width = 5 + fixed_labels = [] + for label in range(1 << (2 * width)): + orbit = [_pauli_helper_image(label, address) for address in range(4)] + self.assertTrue(all(_pairing(a[0], b[0], width) == 0 + for a, b in combinations(orbit, 2))) + for x, y in product(range(4), repeat=2): + first, first_phase = _pauli_helper_image(label, y) + second, second_phase = _pauli_helper_image(first, x) + combined, combined_phase = _pauli_helper_image(label, x ^ y) + self.assertEqual((second, (first_phase + second_phase) % 4), + (combined, combined_phase)) + word_label, word_phase = 0, 0 + for image, phase in orbit: + word_phase = (word_phase + phase + + _product_phase(word_label, image, width)) % 4 + word_label ^= image + self.assertEqual(word_label, 0) + self.assertIn(word_phase, (0, 2)) + fixed_labels.append(tuple(image == label for image, _ in orbit[1:])) + self.assertTrue(all(flags in ((False, False, False), (True, True, True)) + for flags in fixed_labels)) + self.assertEqual(sum(all(flags) for flags in fixed_labels), 64) + # X on the helper is literally fixed by the nonzero x=1 query, + # yet negated by x=2. A common fixed LABEL kernel is all we may use. + helper_x = 1 << 4 + self.assertEqual(_pauli_helper_image(helper_x, 1), (helper_x, 0)) + self.assertEqual(_pauli_helper_image(helper_x, 2), (helper_x, 2)) + # A positive canonical Z word never equals the negative of another. + # This gap removes all residual signs after the common-label step. + for left, right, sign in product(range(16), range(16), (1, -1)): + distance = max(abs(sign * (-1) ** ((left & basis).bit_count() % 2) + - (-1) ** ((right & basis).bit_count() % 2)) + for basis in range(16)) + self.assertEqual(distance, 0 if sign == 1 and left == right else 2) + + +if __name__ == '__main__': + unittest.main()