Add bridge-derived census (n=6..10) to the disjunction section
Cross-tabulate bridge-derived vs intertwining-tree coverage: the bridge-derived share falls from 100% (n=6) to 62.7% (n=10), the disjunction never relies on it alone, and the "neither" column is identically zero throughout. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
"""Survey: for each n, how many maximal planar graphs (plane-triangulation
|
||||
iso classes) are *bridge-derived* level graphs of some Even Level Graph.
|
||||
|
||||
Bridge-derivedness is decided exhaustively via the backward bridge-switch
|
||||
orbit (see small_n_probe.is_bridge_derived): a triangulation G is
|
||||
bridge-derived iff some valid parity partition L of G admits an Even Level
|
||||
Graph (parity L) in G's backward bridge-orbit. Feasible only at small n.
|
||||
|
||||
Also cross-tabulates against the intertwining-tree property so the two
|
||||
covering families in the disjunction conjecture can be compared.
|
||||
|
||||
Usage: python3 bridge_derived_survey.py [n_max] (default 11)
|
||||
"""
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
sys.path.insert(0, '/Users/didericis/Code/math-research/papers/'
|
||||
'level_resolutions_of_maximal_planar_graphs/experiments')
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
from triangulation_gen import enumerate_all_triangulations
|
||||
from small_n_probe import is_bridge_derived
|
||||
from test_disjunction import is_intertwining_tree
|
||||
|
||||
|
||||
def survey_n(n):
|
||||
t0 = time.time()
|
||||
tris = enumerate_all_triangulations(n)
|
||||
n_bridge = 0
|
||||
n_inter = 0
|
||||
n_bridge_and_inter = 0
|
||||
n_bridge_only = 0
|
||||
n_inter_only = 0
|
||||
n_neither = 0
|
||||
for G in tris:
|
||||
bd = is_bridge_derived(G)
|
||||
it = is_intertwining_tree(G)[0]
|
||||
if bd:
|
||||
n_bridge += 1
|
||||
if it:
|
||||
n_inter += 1
|
||||
if bd and it:
|
||||
n_bridge_and_inter += 1
|
||||
elif bd:
|
||||
n_bridge_only += 1
|
||||
elif it:
|
||||
n_inter_only += 1
|
||||
else:
|
||||
n_neither += 1
|
||||
return {
|
||||
'n': n,
|
||||
'total': len(tris),
|
||||
'bridge': n_bridge,
|
||||
'inter': n_inter,
|
||||
'bridge_and_inter': n_bridge_and_inter,
|
||||
'bridge_only': n_bridge_only,
|
||||
'inter_only': n_inter_only,
|
||||
'neither': n_neither,
|
||||
'elapsed': time.time() - t0,
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
n_max = int(sys.argv[1]) if len(sys.argv) > 1 else 11
|
||||
rows = []
|
||||
print(f'{"n":>3} {"total":>7} {"bridge-deriv":>13} {"%":>6} '
|
||||
f'{"inter":>7} {"b&i":>6} {"b-only":>7} {"i-only":>7} '
|
||||
f'{"neither":>8} {"sec":>7}', flush=True)
|
||||
for n in range(6, n_max + 1):
|
||||
r = survey_n(n)
|
||||
rows.append(r)
|
||||
pct = 100.0 * r['bridge'] / r['total'] if r['total'] else 0.0
|
||||
print(f'{r["n"]:>3} {r["total"]:>7} {r["bridge"]:>13} {pct:>5.1f}% '
|
||||
f'{r["inter"]:>7} {r["bridge_and_inter"]:>6} '
|
||||
f'{r["bridge_only"]:>7} {r["inter_only"]:>7} '
|
||||
f'{r["neither"]:>8} {r["elapsed"]:>6.1f}', flush=True)
|
||||
if r['neither']:
|
||||
print(f' *** {r["neither"]} triangulation(s) at n={n} are '
|
||||
f'NEITHER bridge-derived nor intertwining trees ***',
|
||||
flush=True)
|
||||
return rows
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user