Wiki
Wiki

Research notes on every problem, and a library of the papers behind them. Built from the open erdos repository.

erdos_699_nine_relaxed_forest.py

py
"""Exact index-nine forest with weaker initial endpoints and numerical polynomial rows.

All initial positive pair endpoints are lowered by 1/10000. Polynomial rows
use their retained Newton coefficient constants E/K, and each joint source
uses its specified half-budget weakening while leaving sign rows unchanged.
The analytic source inequalities remain explicit hypotheses: their numerical
starting heights are checked by separate source calculations. No ranks are
recomputed here.
"""
from fractions import Fraction
from pathlib import Path
import gzip
import json

import erdos_699_index_9_effective as original
import erdos_699_index_9_relaxed_baseline as relaxed_baseline
import erdos_699_index_9_nonvanishing as arithmetic_nonvanishing
from erdos_699_rational_farkas import verify_infeasibility_certificate

ROOT = Path(__file__).parent
DATA = Path(__file__).with_suffix('.json.gz')


def base_rows(case, ids, polynomials, constants, K):
    rows = original.base_rows(case, [polynomials[name] for name in ids])
    return [(a, b-original.SLACK+Fraction(constants[ids[k]], K))
            if k < len(ids) else (a, b)
            for k, (a, b) in enumerate(rows)]


def branch_rows(identifier, mask, sources, ordinary, budgets):
    rows = original.branch_rows(identifier, mask, sources, ordinary)
    if identifier not in ordinary:
        a, b = rows[-1]
        rows[-1] = (a, b+Fraction(budgets[identifier]))
    return rows


def verify_root(root, case, polynomials, sources, ordinary, constants, budgets, K,
                actual_height=None):
    # Stored certificates may use a larger E/K row allowance. Their exact
    # multipliers also give the sharper weighted height threshold below.
    actual_height = K if actual_height is None else actual_height
    ids = root['polynomial_ids']
    assert len(ids) == len(set(ids)) and set(ids) <= set(constants)
    base = base_rows(case, ids, polynomials, constants, K)
    nodes = root['tree']
    assert root['node_count'] == len(nodes) and nodes
    stack = [(0, [])]
    visited = set()
    leaves = 0
    maximum = Fraction(0)
    while stack:
        index, region = stack.pop()
        assert type(index) is int and 0 <= index < len(nodes) and index not in visited
        visited.add(index)
        node = nodes[index]
        if 'farkas' in node:
            assert set(node) == {'farkas'}
            certificate = node['farkas']
            assert verify_infeasibility_certificate(base+region, certificate)
            weighted_height = sum((Fraction(weight)*constants[ids[i]]
                                   for i, weight in zip(certificate['support'],
                                                        certificate['multipliers'])
                                   if i < len(ids)), Fraction(0))
            alpha = -Fraction(certificate['weighted_rhs'])+weighted_height/K
            assert alpha > 0
            assert -alpha+weighted_height/actual_height < 0
            maximum = max(maximum, weighted_height/alpha)
            leaves += 1
            continue
        assert set(node) == {'source', 'masks', 'children'}
        identifier = node['source']
        record = ordinary.get(identifier, sources.get(identifier))
        assert record is not None and original.source_checker.applicable(record, case['positions'])
        if identifier in ordinary:
            masks = list(range(len(record['targets'])))
        else:
            assert identifier in budgets
            threshold = Fraction(record['certificate']['positive_part_threshold'])
            assert 0 < Fraction(budgets[identifier]) < threshold
            masks = list(range(1, 1 << len(record['certificate']['components'])))
        assert node['masks'] == masks and len(node['children']) == len(masks)
        for mask, child in zip(masks, node['children']):
            stack.append((child, region+branch_rows(identifier, mask, sources, ordinary, budgets)))
    assert visited == set(range(len(nodes)))
    return leaves, maximum


def main():
    with gzip.open(DATA, 'rt') as stream:
        proof = json.load(stream)
    baseline = relaxed_baseline.certify()
    old = json.loads((ROOT/'erdos_699_index_9_baseline.json').read_text())
    extra = json.loads((ROOT/'erdos_699_nine_polynomial_cuts.json').read_text())
    bounds = json.loads((ROOT/'erdos_699_nine_newton_farkas_bound.json').read_text())
    weakening = json.loads((ROOT/'erdos_699_nine_newton_source_weakening.json').read_text())
    with gzip.open(ROOT/'erdos_699_nine_cofactor_clauses.json.gz', 'rt') as stream:
        sources = {r['id']: r for r in json.load(stream)['records']}
    ordinary = original.ordinary_sources()
    polynomials = {r['name']: r for r in old['certificates']+extra['certificates']}
    newton = {r['name']: r for r in bounds['polynomial_bounds']}
    constants = proof['polynomial_constants']
    budgets = proof['source_threshold_weakenings']
    K = proof['height_power_of_ten']
    certificate_K = proof.get('certificate_rows_height_power_of_ten', K)
    assert type(K) is int and K > 0 and proof['index'] == 9
    assert type(certificate_K) is int and certificate_K > 0
    nonvanishing_records = arithmetic_nonvanishing.verify()
    arithmetic_names = {row['name'] for row in nonvanishing_records
                        if row['common_integer_zeros_outside_support'] is False}
    assert arithmetic_names == {'round3_000', 'round3_001'}
    assert proof['arithmetic_nonvanishing_polynomials'] == sorted(arithmetic_names)
    assert Fraction(proof['initial_pair_endpoint_weakening']) == Fraction(1, 10000)
    assert set(constants) == set(baseline['polynomial_names'])
    common_zero_power = 0
    for name, E in constants.items():
        assert type(E) is int and E >= newton[name]['constant_power']
        bound = 0 if name in arithmetic_names else newton[name]['basepoint_power']
        assert K > bound
        common_zero_power = max(common_zero_power, bound)
    assert proof['retained_common_zero_power'] == common_zero_power
    assert K > Fraction(baseline['maximum_coefficient_ratio'])
    assert {sid: Fraction(value) for sid, value in budgets.items()} == {
        sid: Fraction(value) for sid, value in weakening['per_source_half_budget'].items()}
    assert sorted(row['root_index'] for row in proof['roots']) == list(range(baseline['residual_count']))
    leaves = 0
    maximum = Fraction(0)
    used_sources = set()
    for row in proof['roots']:
        assert row['status'] == 'covered'
        count, cap = verify_root(row, baseline['residual_cases'][row['root_index']],
                                 polynomials, sources, ordinary, constants, budgets,
                                 certificate_K, actual_height=K)
        leaves += count
        maximum = max(maximum, cap)
        used_sources.update(node['source'] for node in row['tree'] if 'source' in node)
    assert maximum == Fraction(proof['maximum_weighted_leaf_cap']) and K > maximum
    assert proof['root_case_count'] == baseline['case_count'] == 104976
    assert proof['baseline_covered_count'] == baseline['covered_count'] == 104148
    assert proof['residual_count'] == baseline['residual_count'] == 828
    assert proof['farkas_leaf_count'] == leaves
    assert proof['node_count'] == sum(r['node_count'] for r in proof['roots'])
    assert proof['joint_source_count'] == len(used_sources-set(ordinary))
    assert proof['ordinary_source_count'] == len(used_sources & set(ordinary))
    print(json.dumps({'index': 9, 'initial_pair_endpoint_weakening': '1/10000',
                      'root_cases': 104976, 'residual_roots': 828,
                      'exact_farkas_leaves': leaves, 'height_power_of_ten': K,
                      'certificate_rows_height_power_of_ten': certificate_K,
                      'remaining_common_zero_power': common_zero_power,
                      'maximum_weighted_leaf_cap': str(maximum),
                      'ranks_recomputed': False,
                      'scope': 'Conditional on the stated weakened analytic inequalities.'}, indent=2))


if __name__ == '__main__':
    main()