mirror of
https://github.com/allaunthefox/SilverSight.git
synced 2026-08-20 13:07:29 +00:00
104 lines
2.8 KiB
Markdown
104 lines
2.8 KiB
Markdown
# Hachimoji DNA Encoding Specification
|
||
|
||
**Version:** 0.1
|
||
**Status:** Draft
|
||
**Purpose:** Computational substrate, not compression format.
|
||
|
||
## 1. Alphabet
|
||
|
||
Eight bases, ASCII-ordered for monotone lexicographic sorting:
|
||
|
||
| Index | Base | Phase | Bits |
|
||
|-------|------|-------|------|
|
||
| 0 | A | 0° | 000 |
|
||
| 1 | B | 45° | 001 |
|
||
| 2 | C | 90° | 010 |
|
||
| 3 | G | 135° | 011 |
|
||
| 4 | P | 180° | 100 |
|
||
| 5 | S | 225° | 101 |
|
||
| 6 | T | 270° | 110 |
|
||
| 7 | Z | 315° | 111 |
|
||
|
||
**Key property:** ASCII sort order = index order = lexicographic rank.
|
||
This means `sorted(sequences)` produces the same order as `sorted(sequences, key=dna_to_int)`.
|
||
|
||
## 2. Symbol Encoding
|
||
|
||
Each symbol (byte, word, or chunk) maps to a fixed-length DNA sequence.
|
||
|
||
- **1-byte chunks:** 256 symbols → 3 bases/symbol (8³ = 512 ≥ 256)
|
||
- **2-byte chunks:** 65,536 symbols → 6 bases/symbol (8⁶ = 262,144 ≥ 65,536)
|
||
- **n unique symbols:** `ceil(log₈(n))` bases/symbol
|
||
|
||
The LUT assigns sequences by rank:
|
||
- Rank 0 → "AAA...A" (lowest)
|
||
- Rank 1 → "AAA...B"
|
||
- Rank n → highest sequence
|
||
|
||
## 3. Monotone Property
|
||
|
||
If symbols are ranked by frequency (most frequent = rank 0), then:
|
||
- Most frequent symbol → shortest/lowest DNA sequence
|
||
- Lexicographic sort of DNA = frequency sort of symbols
|
||
- This is NOT compression — it's structured representation
|
||
|
||
## 4. LUT Format
|
||
|
||
```json
|
||
{
|
||
"format": "hachimoji_lut_v1",
|
||
"bases": "ABCGPSTZ",
|
||
"chunk_size": 1,
|
||
"bases_per_symbol": 3,
|
||
"entries": {
|
||
"AAA": "20",
|
||
"AAB": "65",
|
||
"AAC": "74"
|
||
}
|
||
}
|
||
```
|
||
|
||
- Keys: DNA sequences (base-8 encoded ranks)
|
||
- Values: hex-encoded byte chunks
|
||
- Portable: JSON, human-readable, self-describing
|
||
|
||
## 5. File Format
|
||
|
||
```
|
||
.dna file: raw DNA sequence (text, A-Z only)
|
||
.lut file: JSON LUT (see above)
|
||
.meta file: encoding metadata (optional JSON)
|
||
```
|
||
|
||
## 6. Roundtrip Guarantee
|
||
|
||
```
|
||
decode(encode(data)) == data
|
||
```
|
||
|
||
Verified at encode time. No lossy steps. No approximation.
|
||
|
||
## 7. Computational Properties
|
||
|
||
The DNA sequence is not just encoded data — it's a computational address:
|
||
|
||
- **Sequence index** (base-8 integer) = symbolic rank
|
||
- **Lexicographic order** = rank order (monotone)
|
||
- **LUT lookup** = O(1) per symbol
|
||
- **Sortable** by standard string sort (= rank sort)
|
||
- **Portable** across systems (plain text + JSON)
|
||
|
||
## 8. Integration with SilverSight
|
||
|
||
- `HachimojiCodec.lean` — formal encode/decode specification
|
||
- `HachimojiLUT.lean` — LUT hierarchy (k=2, k=6, k=50)
|
||
- `PhaseCircle` — ℤ/360ℤ address space
|
||
- `dna_lut.py` — Python LUT implementation
|
||
- `dna_encode_file.py` — file encoder/decoder
|
||
|
||
## 9. Not This
|
||
|
||
- ❌ Not a compression format (bits/byte not the goal)
|
||
- ❌ Not a DNA storage format (no synthesis/sequencing constraints)
|
||
- ❌ Not a cryptographic scheme (no security claims)
|
||
- ✅ A computational substrate for manifold/QUBO/eigenvalue work
|