Skip to content

Commit 0300229

Browse files
research(english-gonol): add 1-7 orthogonal carrier sweep experiment
- Add english_gonol/orthogonal_carrier_sweep.py: meaning-agnostic placement of closed word gonols onto K=1..7 orthogonal unit-circle carriers with epicycles. - Measure colliding relation edges, resolution per carrier count, recursive chain preservation under epicycles, and stable-rank independence. - Frozen run: experiments/orthogonal-carrier-sweep-v0.json. first_zero_collision_carriers=5, sustained_zero_collision_carriers=7, smallest_useful_carriers=7; no semantic grouping emerges from the meaning-agnostic policy. - Add tests and findings doc docs/orthogonal-carrier-sweep-v0.md; update README.
1 parent 503ae69 commit 0300229

5 files changed

Lines changed: 1169 additions & 3 deletions

File tree

research/english-gonol/README.md

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,16 @@ research/english-gonol/
7070
├── README.md
7171
├── english_gonol/
7272
│ ├── gonol.py # unified candidate constructor (identity edcm.gonol)
73-
│ └── language/ # English lexical evidence over UCNS carrier
73+
│ ├── language/ # English lexical evidence over UCNS carrier
74+
│ └── orthogonal_carrier_sweep.py # 1-7 carrier experimental sweep
7475
├── tools/build_oewn2025_embeddings.py
7576
├── tests/
7677
├── docs/
77-
│ └── GONOL_LANGUAGE_BOUNDARY.md
78-
└── experiments/lexical/ # frozen lexical-floor run artifacts
78+
│ ├── GONOL_LANGUAGE_BOUNDARY.md
79+
│ └── orthogonal-carrier-sweep-v0.md
80+
└── experiments/
81+
├── lexical/ # frozen lexical-floor run artifacts
82+
└── orthogonal-carrier-sweep-v0.json
7983
```
8084

8185
## Entry points
@@ -106,6 +110,15 @@ python tools/build_oewn2025_embeddings.py \
106110
--output /path/to/output --acquire --resume
107111
```
108112

113+
The orthogonal unit-circle carrier sweep (experimental, meaning-agnostic):
114+
115+
```bash
116+
python -m english_gonol.orthogonal_carrier_sweep \
117+
--out experiments/orthogonal-carrier-sweep-v0.json
118+
```
119+
120+
See [`docs/orthogonal-carrier-sweep-v0.md`](docs/orthogonal-carrier-sweep-v0.md).
121+
109122
## Research status
110123

111124
Standing: **stack-local research, not canon**. The construction is an
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
# Orthogonal unit-circle carrier sweep — v0
2+
3+
Status: `UNRESOLVED` experimental sweep. Standing: implemented experimental
4+
candidate inside English Gonol Construction only. Nothing here is UCNS geometry
5+
canon, an English lexical truth claim, a word embedding, or a measurement of
6+
semantic quality.
7+
8+
## Question
9+
10+
Are semantic relationships between English primitives better represented by
11+
`K = 1..7` orthogonal unit-circle carriers, each able to hold its own
12+
epicycles?
13+
14+
Boundary rule followed: **no meaning is assigned to a carrier beforehand**.
15+
Carrier indices are unnamed structural slots. A closed word gonol is placed by
16+
a deterministic, meaning-agnostic policy derived from its `atomic_id`; the
17+
gonol's `source_id`, `atomic_id`, and `receipt_digest` remain bound to the
18+
placement, so the placement never substitutes for gonol identity.
19+
20+
## Method
21+
22+
1. Close each English primitive as a word gonol with
23+
`english_gonol.gonol.construct_gonol`.
24+
2. For carrier count `K`, map each gonol to `(carrier, angle_cell)` via a
25+
seeded SHA-256 of `atomic_id`: `carrier = value % K`,
26+
`angle_cell = (value // K) % 16`. This policy is reproducible and uses no
27+
semantic information.
28+
3. Count **colliding relation edges**: an edge `(source -> target, label)`
29+
collides when its two endpoint gonols share the same `(carrier, angle_cell)`.
30+
4. Test **epicycles**: every colliding edge may attach the child as an epicycle
31+
of the parent; recursive hypernym chains are embedded and the maximum nested
32+
epicycle depth needed per chain is measured against the allowed level budget
33+
(default `1`).
34+
5. Measure **independent structure**: each placement is a unit vector in
35+
`R^{2K}` using two orthogonal coordinates per carrier; the stable rank of
36+
the placement matrix measures how many independent directions the data
37+
actually uses, and per-carrier occupancy entropy measures how evenly the
38+
carriers are used.
39+
6. Report `first_zero_collision_carriers`, `sustained_zero_collision_carriers`,
40+
and `smallest_useful_carriers` (the smallest `K` after which collisions stay
41+
zero through `K = 7`).
42+
43+
The source relation set is the module's development fixture (59 word gonols,
44+
47 relation edges, 14 recursive hypernym chains). It is **not** OEWN evidence.
45+
46+
## Frozen run
47+
48+
- Module: `english_gonol.orthogonal_carrier_sweep`
49+
- Receipt: [`../experiments/orthogonal-carrier-sweep-v0.json`](../experiments/orthogonal-carrier-sweep-v0.json)
50+
- Replay:
51+
`python -m english_gonol.orthogonal_carrier_sweep --out /tmp/orthogonal-carrier-sweep-v0.json`
52+
53+
## Results
54+
55+
| K | colliding edges | resolved from K=1 | stable rank | rank gain ratio | chains preserved (L=1) | max chain epicycle depth |
56+
|---|---|---|---|---|---|---|
57+
| 1 | 3 | 0 | 1.97 || 14/14 | 1 |
58+
| 2 | 3 | 0 | 3.70 | 0.866 | 14/14 | 1 |
59+
| 3 | 2 | 1 | 5.75 | 1.026 | 14/14 | 1 |
60+
| 4 | 3 | 0 | 6.77 | 0.510 | 14/14 | 1 |
61+
| 5 | 0 | 3 | 9.14 | 1.186 | 14/14 | 0 |
62+
| 6 | 2 | 1 | 10.14 | 0.500 | 14/14 | 1 |
63+
| 7 | 0 | 3 | 11.78 | 0.819 | 14/14 | 0 |
64+
65+
Which semantic collisions occur and resolve:
66+
67+
- `K = 1..4`: `(cat, siamese, hypernym)`, `(siamese, cat, hyponym)`, and
68+
`(food, fruit, hypernym)` collide. These are the recursive hypernym-chain
69+
edges whose endpoints share a base cell.
70+
- `K = 4`: `(food, fruit, hypernym)` resolves.
71+
- `K = 5`: all three edges resolve (`first_zero_collision_carriers = 5`).
72+
- `K = 6`: the `cat/siamese` pair re-collides under the meaning-agnostic
73+
policy (adding a carrier re-partitions all carriers, so resolution is not
74+
monotonic).
75+
- `K = 7`: all three edges resolve again and stay resolved
76+
(`sustained_zero_collision_carriers = 7`).
77+
78+
## Findings
79+
80+
### 1. Which semantic collisions are resolved
81+
82+
On this fixture the only base collisions are the recursive hypernym/hyponym
83+
pairs `cat/siamese` and `food/fruit`. Increasing from one carrier to seven
84+
resolves all of them, but the meaning-agnostic placement is not monotonic:
85+
`K = 6` reintroduces the `cat/siamese` collision even though `K = 5` was
86+
collision-free. The smallest carrier count after which no collision reappears
87+
through `K = 7` is **7**.
88+
89+
### 2. Whether epicycles preserve recursive relationships
90+
91+
Yes, on this fixture. Every colliding edge can be attached as an epicycle of
92+
its parent, all 14 recursive hypernym chains are preserved at every carrier
93+
count with the default one-level epicycle budget, and no chain needed more
94+
than depth 1. Deeper recursion remains untested: the fixture only contains
95+
depth-2 hypernym chains. The unit test
96+
`test_chain_depth_counts_consecutive_collisions` pins the depth metric for
97+
longer chains.
98+
99+
### 3. Whether added circles provide genuinely independent structure
100+
101+
Yes, structurally. Each added carrier contributes two orthogonal coordinates,
102+
placement vectors on different carriers are orthogonal by construction, and
103+
the measured stable rank grows with every added carrier
104+
(`1.97 -> 3.70 -> 5.75 -> 6.77 -> 9.14 -> 10.14 -> 11.78`). No carrier count
105+
in `1..7` shows diminishing returns by the chosen threshold (`rank_gain_ratio
106+
< 0.25`): on this 59-primitive fixture all seven carriers remain structurally
107+
used. This is capacity independence, not semantic independence — the placement
108+
policy is meaning-agnostic, so the added circles decorrelate by spreading
109+
primitives, not by discovering semantic axes.
110+
111+
### 4. Smallest useful number of carriers
112+
113+
- `first_zero_collision_carriers = 5`
114+
- `sustained_zero_collision_carriers = 7`
115+
- Reported `smallest_useful_carriers = 7` under the sustained-zero definition.
116+
117+
Interpretation: **5 carriers** are enough to make every relation edge
118+
collision-free for this fixture, but **7 carriers** are the smallest count that
119+
stays collision-free across the sweep under the meaning-agnostic policy.
120+
Because the policy is not monotonic, "useful" must be defined as sustained
121+
zero, not first zero.
122+
123+
## What the carriers look like (evidence only, no imposed meaning)
124+
125+
At `K = 7`, the meaning-agnostic placement produces these occupants:
126+
127+
- carrier 0: big, branch, dark, glad, love, oak, person, sedan, siamese
128+
- carrier 1: car, child, finish, hate, hot, house, leaf, poodle, wheel
129+
- carrier 2: body, cold, fruit, large, little, plant, small, start
130+
- carrier 3: arm, armchair, begin, cat, chair, light, open, slow, vehicle
131+
- carrier 4: animal, apple, fast, food, furniture, leg, quick, room, sad, saw, toddler, unhappy
132+
- carrier 5: book, close, dog, tool, tree
133+
- carrier 6: dry, end, engine, hammer, happy, page, wet
134+
135+
No semantic grouping emerges from the meaning-agnostic policy. That is the
136+
expected null result for this policy and is recorded as evidence, not failure:
137+
the carriers do structural separation work, and any semantic interpretation
138+
would have to come from a later, meaning-aware placement policy — which this
139+
experiment deliberately does not impose.
140+
141+
## hmmm
142+
143+
- What a carrier represents must emerge from evidence; the meaning-agnostic
144+
policy shows no emergent grouping, so the question is still open.
145+
- Whether a larger OEWN-derived relation set changes the smallest useful
146+
carrier count.
147+
- Whether deeper recursive chains (depth ≥ 3) exceed one epicycle level.
148+
- Whether a meaning-aware placement policy would produce interpretable
149+
carriers, and whether that would be a legitimate construction or an imposed
150+
semantic prior.
151+
- The angle-cell discretization (16 cells) is an experimental convenience,
152+
not a geometric law.

0 commit comments

Comments
 (0)