Upload 24 files
Browse files- LICENSE +21 -0
- README.md +288 -1
- TRIGNUM_300M_Position_Paper.pdf +182 -0
- __init__.py +26 -0
- accuracy.py +26 -0
- basic_usage.py +78 -0
- cold_state_sim.py +151 -0
- constants.py +21 -0
- dataset_connectors.py +23 -0
- evaluator.py +24 -0
- faces.py +213 -0
- hallucination_filter.py +68 -0
- helpers.py +17 -0
- logging.py +33 -0
- magnetic_field.py +159 -0
- magnetic_trillage_sim.py +113 -0
- preflight_config.yaml +20 -0
- pyramid.py +303 -0
- requirements.txt +16 -0
- run_preflight.py +25 -0
- subtractive_filter.py +259 -0
- tchip_demo.py +82 -0
- tchip_emulator.py +296 -0
- visualization.py +17 -0
LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2026 Trace on Lab (Trignum-300M)
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
README.md
CHANGED
|
@@ -1,3 +1,290 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div align="center">
|
| 2 |
+
|
| 3 |
+
# π§² TRIGNUM-300M
|
| 4 |
+
|
| 5 |
+
### The Pre-Flight Check for Autonomous AI
|
| 6 |
+
|
| 7 |
+
[](https://opensource.org/licenses/MIT)
|
| 8 |
+
[](https://www.python.org/downloads/)
|
| 9 |
+
[](#-benchmark-results)
|
| 10 |
+
[](https://doi.org/10.5281/zenodo.18672142)
|
| 11 |
+
|
| 12 |
+
> **"You wouldn't let a plane take off without a pre-flight check.**
|
| 13 |
+
> **Why are we letting AI agents act without one?"**
|
| 14 |
+
|
| 15 |
+
<img src="assets/roadmap_architecture.jpg" width="800" alt="TRIGNUM-300M Architecture Flowchart" />
|
| 16 |
+
</div>
|
| 17 |
+
|
| 18 |
---
|
| 19 |
+
|
| 20 |
+
<div align="center">
|
| 21 |
+
<!--
|
| 22 |
+
TODO: Add your demo GIF here!
|
| 23 |
+
1. Record demo/index.html with ScreenToGif
|
| 24 |
+
2. Save as assets/trignum_demo.gif
|
| 25 |
+
3. Uncomment line below:
|
| 26 |
+
-->
|
| 27 |
+
<!-- <img src="assets/trignum_demo.gif" width="800" alt="TRIGNUM-300M Demo" /> -->
|
| 28 |
+
</div>
|
| 29 |
+
|
| 30 |
+
## What Is This?
|
| 31 |
+
|
| 32 |
+
TRIGNUM-300M is a **zero-model reasoning integrity validator** for LLM outputs. It catches structural logic failures β contradictions, circular reasoning, non-sequiturs β before an AI agent acts on them.
|
| 33 |
+
|
| 34 |
+
```python
|
| 35 |
+
from trignum_core.subtractive_filter import SubtractiveFilter
|
| 36 |
+
|
| 37 |
+
sf = SubtractiveFilter()
|
| 38 |
+
result = sf.apply(agent_output)
|
| 39 |
+
|
| 40 |
+
if result.illogics_found:
|
| 41 |
+
agent.halt(reason=result.illogics_found)
|
| 42 |
+
# T-CHIP glows RED π΄ β Human review required
|
| 43 |
+
else:
|
| 44 |
+
agent.execute()
|
| 45 |
+
# T-CHIP glows BLUE π΅ β Cleared for takeoff
|
| 46 |
+
```
|
| 47 |
+
|
| 48 |
+
**No LLM. No API. No training data. ~300 lines of Python. <1ms.**
|
| 49 |
+
|
| 50 |
---
|
| 51 |
+
|
| 52 |
+
## π¬ Benchmark Results
|
| 53 |
+
|
| 54 |
+
We expanded our evaluation to **58,000+ real LLM outputs** including a new **517-sample curated dataset** for structural reasoning. Honest results:
|
| 55 |
+
|
| 56 |
+
| Benchmark | Samples | Precision | Recall | F1 | Speed |
|
| 57 |
+
| ---------------------------- | ------- | --------- | ------ | --------- | ----- |
|
| 58 |
+
| **Structural illogic (curated)** | **517** | **100%** | **98.9%** | **99.5%** | **<1ms** |
|
| 59 |
+
| HaluEval (full dataset) | 58,293 | 60% | 2.1% | 4.0% | 706ms |
|
| 60 |
+
|
| 61 |
+
### What this means:
|
| 62 |
+
|
| 63 |
+
- **99.5% F1 on structural reasoning failures** β contradictions, circular logic, unsupported conclusions
|
| 64 |
+
- **4.0% F1 on factual hallucinations** β we don't catch wrong facts
|
| 65 |
+
|
| 66 |
+
**That's the point.** There are 100 tools for fact-checking. There are **zero tools for reasoning-checking.** Until now.
|
| 67 |
+
|
| 68 |
+
### Per-Task Breakdown (HaluEval)
|
| 69 |
+
|
| 70 |
+
| Task | n | Precision | Recall | F1 |
|
| 71 |
+
| ------------- | ------ | --------- | ------ | ----- |
|
| 72 |
+
| QA | 18,316 | 83.3% | 0.25% | 0.50% |
|
| 73 |
+
| Dialogue | 19,977 | 60.1% | 4.38% | 8.16% |
|
| 74 |
+
| Summarization | 20,000 | 57.4% | 1.60% | 3.11% |
|
| 75 |
+
|
| 76 |
+
**Throughput: 146,866 samples/second** β orders of magnitude faster than LLM-based validation.
|
| 77 |
+
|
| 78 |
+
---
|
| 79 |
+
|
| 80 |
+
## βοΈ The Pre-Flight Check Analogy
|
| 81 |
+
|
| 82 |
+
A pre-flight checklist doesn't verify that London exists. It verifies that:
|
| 83 |
+
|
| 84 |
+
- β
Instruments don't **contradict** each other
|
| 85 |
+
- β
There are no **circular faults** (sensor A confirms B confirms A)
|
| 86 |
+
- β
The flight computer draws **conclusions from actual data**
|
| 87 |
+
- β
Systems are **logically consistent**
|
| 88 |
+
|
| 89 |
+
The Subtractive Filter does the same for AI reasoning:
|
| 90 |
+
|
| 91 |
+
```
|
| 92 |
+
LLM Output β Subtractive Filter β [PASS] π΅ β Agent Executes
|
| 93 |
+
β [FAIL] π΄ β Agent Halts β Human Review
|
| 94 |
+
```
|
| 95 |
+
|
| 96 |
+
---
|
| 97 |
+
|
| 98 |
+
## π€ The Missing "Agentic Validator"
|
| 99 |
+
|
| 100 |
+
In the context of the recent shift towards **Agentic Reasoning**, autonomous LLMs are moving from static prompts to dynamic _thought-action_ loops involving planning, tool-use, and multi-agent collaboration.
|
| 101 |
+
|
| 102 |
+
Current systems rely heavily on probabilistic models to act as the "Critic/Evaluator" or use "Validator-Driven Feedback" via unit tests for code or simulators for robotics. **But there has been no validator for pure logic.** If an agent hallucinates a non-sequitur or circular justification during its internal planning phase, the error cascades.
|
| 103 |
+
|
| 104 |
+
TRIGNUM-300M fills this exact gap. It acts as a deterministic, <1ms **Validator-Driven Feedback** gate. It halts execution if the agent's internal thought (`zt`) contains a structural illogic, providing an immediate failure signal (`rt = 0`) _before_ the agent commits to an irreversible external action (`at`).
|
| 105 |
+
|
| 106 |
+
---
|
| 107 |
+
|
| 108 |
+
## πΊ Core Architecture
|
| 109 |
+
|
| 110 |
+
### The Trignum Pyramid
|
| 111 |
+
|
| 112 |
+
Three faces acting as magnetic poles for data separation:
|
| 113 |
+
|
| 114 |
+
| Face | Role | What It Does |
|
| 115 |
+
| --------------- | --------------- | ----------------------------------------------------- |
|
| 116 |
+
| **Ξ± (Logic)** | Truth detection | Identifies structurally sound reasoning |
|
| 117 |
+
| **Ξ² (Illogic)** | Error detection | Catches contradictions, circular logic, non-sequiturs |
|
| 118 |
+
| **Ξ³ (Context)** | Human grounding | Anchors output to human intent |
|
| 119 |
+
|
| 120 |
+
### T-CHIP: The Tensor Character
|
| 121 |
+
|
| 122 |
+
```
|
| 123 |
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 124 |
+
β T-CHIP [v.300M] β
|
| 125 |
+
β β
|
| 126 |
+
β π΅ Blue = Logic Stable (Cleared for Takeoff) β
|
| 127 |
+
β π΄ Red = Illogic Detected (THE FREEZE) β
|
| 128 |
+
β π‘ Gold = Human Pulse Locked (Sovereign Override) β
|
| 129 |
+
β β
|
| 130 |
+
β Response time: <1ms | False alarms: 0% (structural) β
|
| 131 |
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 132 |
+
```
|
| 133 |
+
|
| 134 |
+
### The Subtractive Filter
|
| 135 |
+
|
| 136 |
+
Four detection layers, all pattern-based:
|
| 137 |
+
|
| 138 |
+
| Layer | Catches | Method |
|
| 139 |
+
| ------------------ | ------------------------------------ | -------------------------------- |
|
| 140 |
+
| **Contradiction** | "X is always true. X is never true." | Antonym pairs, negation patterns |
|
| 141 |
+
| **Circular Logic** | A proves B proves A | Reference chain analysis |
|
| 142 |
+
| **Non-Sequitur** | "Therefore X" without premises | Causal connective analysis |
|
| 143 |
+
| **Depth Check** | Claims without any reasoning | Assertion density scoring |
|
| 144 |
+
|
| 145 |
+
---
|
| 146 |
+
|
| 147 |
+
## π¦ Repository Structure
|
| 148 |
+
|
| 149 |
+
```
|
| 150 |
+
TRIGNUM-300M-TCHIP/
|
| 151 |
+
βββ src/
|
| 152 |
+
β βββ trignum_core/ # Core Python library
|
| 153 |
+
β βββ pyramid.py # Trignum Pyramid (3 magnetic faces)
|
| 154 |
+
β βββ tchip.py # T-CHIP (glow states)
|
| 155 |
+
β βββ subtractive_filter.py # β
The Subtractive Filter
|
| 156 |
+
β βββ human_pulse.py # Human sovereignty layer
|
| 157 |
+
β βββ magnetic_trillage.py # Data separation
|
| 158 |
+
βββ tests/ # 34 unit tests (all passing)
|
| 159 |
+
βββ benchmarks/
|
| 160 |
+
β βββ hallucination_benchmark.py # Curated structural test
|
| 161 |
+
β βββ full_halueval_benchmark.py # Full 58K HaluEval test
|
| 162 |
+
β βββ results.json # Structural benchmark results
|
| 163 |
+
β βββ full_halueval_results.json # Full HaluEval results
|
| 164 |
+
βββ demo/
|
| 165 |
+
β βββ index.html # Three.js 3D interactive demo
|
| 166 |
+
βββ paper/
|
| 167 |
+
β βββ TRIGNUM_300M_Position_Paper.md # Position paper
|
| 168 |
+
βββ docs/
|
| 169 |
+
β βββ theory/ # 6 foundational theory documents
|
| 170 |
+
βββ T-CHIP CLEARED FOR TAKEOFF.md # The pitch
|
| 171 |
+
βββ ROADMAP.md # 2-quarter development plan
|
| 172 |
+
```
|
| 173 |
+
|
| 174 |
+
---
|
| 175 |
+
|
| 176 |
+
## π Quick Start
|
| 177 |
+
|
| 178 |
+
```bash
|
| 179 |
+
# Clone
|
| 180 |
+
git clone https://github.com/trace-on-lab/trignum-300m.git
|
| 181 |
+
cd trignum-300m
|
| 182 |
+
|
| 183 |
+
# Install
|
| 184 |
+
pip install -r requirements.txt
|
| 185 |
+
pip install -e .
|
| 186 |
+
|
| 187 |
+
# Run the structural benchmark
|
| 188 |
+
python benchmarks/hallucination_benchmark.py
|
| 189 |
+
|
| 190 |
+
# Run the full HaluEval benchmark (downloads ~13MB of data)
|
| 191 |
+
python benchmarks/full_halueval_benchmark.py
|
| 192 |
+
|
| 193 |
+
# Run tests
|
| 194 |
+
pytest tests/ -v
|
| 195 |
+
```
|
| 196 |
+
|
| 197 |
+
---
|
| 198 |
+
|
| 199 |
+
## π Prior Art: Nobody Is Doing This
|
| 200 |
+
|
| 201 |
+
We searched arXiv, ResearchGate, ACL Anthology, and Semantic Scholar. Every existing reasoning validation system requires model inference:
|
| 202 |
+
|
| 203 |
+
| System | Requires Model | Validates Reasoning |
|
| 204 |
+
| ---------------------------- | :-------------: | :-----------------: |
|
| 205 |
+
| VerifyLLM (2025) | β
Yes | Partially |
|
| 206 |
+
| ContraGen | β
Yes | Partially |
|
| 207 |
+
| Process Supervision (OpenAI) | β
Yes | Yes |
|
| 208 |
+
| Guardrails AI | β
Configurable | No (content) |
|
| 209 |
+
| **Subtractive Filter** | **β No** | **β
Yes** |
|
| 210 |
+
|
| 211 |
+
> **Existing work uses LLMs to check LLMs. TRIGNUM uses logic to check LLMs.**
|
| 212 |
+
|
| 213 |
+
Read the full analysis in our [position paper](paper/TRIGNUM_300M_Position_Paper.md).
|
| 214 |
+
|
| 215 |
+
---
|
| 216 |
+
|
| 217 |
+
## βοΈ Quantum Integration: TQPE
|
| 218 |
+
|
| 219 |
+
[](https://doi.org/10.5281/zenodo.18751914)
|
| 220 |
+
|
| 221 |
+
TRIGNUM-300M serves as Phase 1 ("Technical A Priori Validation") for **Trignumental Quantum Phase Estimation (TQPE)**.
|
| 222 |
+
|
| 223 |
+
In our groundbreaking case study estimating the ground state energy of the **Hβ molecule**, TRIGNUM successfully validated the physical consistency and structural logic of the quantum circuit _before execution_. By acting as the preliminary gatekeeper, TRIGNUM ensured that no quantum resources were wasted on structurally ill-formed configurations, enabling an epistemic confidence score of **82.8%** on the final estimate (-1.1384 Ha).
|
| 224 |
+
|
| 225 |
+
Read the full `BUILDING THE BRIDGE` paper on Trignumentality and TQPE in the foundational [Trignumentality](https://github.com/Codfski/trignumentality) repository.
|
| 226 |
+
|
| 227 |
+
---
|
| 228 |
+
|
| 229 |
+
## π Documentation
|
| 230 |
+
|
| 231 |
+
| Document | Description |
|
| 232 |
+
| ---------------------------------------------------------------- | ----------------------------------- |
|
| 233 |
+
| [Core Postulate](docs/theory/01_core_postulate.md) | The fundamental axioms of Trignum |
|
| 234 |
+
| [Three Faces](docs/theory/02_three_faces.md) | Ξ± (Logic), Ξ² (Illogic), Ξ³ (Context) |
|
| 235 |
+
| [Magnetic Trillage](docs/theory/03_magnetic_trillage.md) | Data separation mechanism |
|
| 236 |
+
| [T-CHIP Spec](docs/theory/04_tchip_spec.md) | The Tensor Character in detail |
|
| 237 |
+
| [Cold State Hardware](docs/theory/05_cold_state_hardware.md) | Hardware implications |
|
| 238 |
+
| [Hallucination Paradox](docs/theory/06_hallucination_paradox.md) | Reframing the "Big Monster" |
|
| 239 |
+
| [Position Paper](paper/TRIGNUM_300M_Position_Paper.md) | Full academic paper with benchmarks |
|
| 240 |
+
| [Roadmap](ROADMAP.md) | 2-quarter development plan |
|
| 241 |
+
|
| 242 |
+
---
|
| 243 |
+
|
| 244 |
+
## π The Golden Gems
|
| 245 |
+
|
| 246 |
+
| Gem | Wisdom |
|
| 247 |
+
| ----- | --------------------------------------- |
|
| 248 |
+
| GEM 1 | "The Human Pulse is the Master Clock" |
|
| 249 |
+
| GEM 2 | "The Illogic is the Compass" |
|
| 250 |
+
| GEM 3 | "Magnetic Trillage Over Brute Force" |
|
| 251 |
+
| GEM 4 | "The Hallucination is the Raw Material" |
|
| 252 |
+
| GEM 5 | "T-CHIP is the Mirror" |
|
| 253 |
+
|
| 254 |
+
---
|
| 255 |
+
|
| 256 |
+
## π€ Contributing
|
| 257 |
+
|
| 258 |
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
| 259 |
+
|
| 260 |
+
---
|
| 261 |
+
|
| 262 |
+
## π License
|
| 263 |
+
|
| 264 |
+
MIT License β see [LICENSE](LICENSE).
|
| 265 |
+
|
| 266 |
+
---
|
| 267 |
+
|
| 268 |
+
## π Contact
|
| 269 |
+
|
| 270 |
+
**TRACE ON LAB**
|
| 271 |
+
π§ traceonlab@proton.me
|
| 272 |
+
|
| 273 |
+
---
|
| 274 |
+
|
| 275 |
+
## π‘οΈ The Call
|
| 276 |
+
|
| 277 |
+
> _"The most dangerous AI failure is not a wrong fact. It is reasoning that sounds right but isn't."_
|
| 278 |
+
|
| 279 |
+
```
|
| 280 |
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 281 |
+
β π§² TRACE ON LAB β TRIGNUM-300M β v.300M β
|
| 282 |
+
β β
|
| 283 |
+
β The Pre-Flight Check for Autonomous AI. β
|
| 284 |
+
β Zero models. Zero API calls. 146,866 samples/second. β
|
| 285 |
+
β β
|
| 286 |
+
β π΅ T-CHIP: CLEARED FOR TAKEOFF. β
|
| 287 |
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 288 |
+
```
|
| 289 |
+
|
| 290 |
+
β **Star this repo if you believe AI should check its logic before it acts.**
|
TRIGNUM_300M_Position_Paper.pdf
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
%PDF-1.4
|
| 2 |
+
%οΏ½οΏ½οΏ½οΏ½ ReportLab Generated PDF document (opensource)
|
| 3 |
+
1 0 obj
|
| 4 |
+
<<
|
| 5 |
+
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R
|
| 6 |
+
>>
|
| 7 |
+
endobj
|
| 8 |
+
2 0 obj
|
| 9 |
+
<<
|
| 10 |
+
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
| 11 |
+
>>
|
| 12 |
+
endobj
|
| 13 |
+
3 0 obj
|
| 14 |
+
<<
|
| 15 |
+
/BaseFont /Times-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
| 16 |
+
>>
|
| 17 |
+
endobj
|
| 18 |
+
4 0 obj
|
| 19 |
+
<<
|
| 20 |
+
/BaseFont /Times-Italic /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
| 21 |
+
>>
|
| 22 |
+
endobj
|
| 23 |
+
5 0 obj
|
| 24 |
+
<<
|
| 25 |
+
/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
| 26 |
+
>>
|
| 27 |
+
endobj
|
| 28 |
+
6 0 obj
|
| 29 |
+
<<
|
| 30 |
+
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
|
| 31 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 32 |
+
>> /Rotate 0 /Trans <<
|
| 33 |
+
|
| 34 |
+
>>
|
| 35 |
+
/Type /Page
|
| 36 |
+
>>
|
| 37 |
+
endobj
|
| 38 |
+
7 0 obj
|
| 39 |
+
<<
|
| 40 |
+
/A <<
|
| 41 |
+
/S /URI /Type /Action /URI (https://github.com/Codfski/TRIGNUM-300M-TCHIP)
|
| 42 |
+
>> /Border [ 0 0 0 ] /Rect [ 182.2265 208.9333 323.684 220.9333 ] /Subtype /Link /Type /Annot
|
| 43 |
+
>>
|
| 44 |
+
endobj
|
| 45 |
+
8 0 obj
|
| 46 |
+
<<
|
| 47 |
+
/Annots [ 7 0 R ] /Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
|
| 48 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 49 |
+
>> /Rotate 0
|
| 50 |
+
/Trans <<
|
| 51 |
+
|
| 52 |
+
>> /Type /Page
|
| 53 |
+
>>
|
| 54 |
+
endobj
|
| 55 |
+
9 0 obj
|
| 56 |
+
<<
|
| 57 |
+
/Outlines 11 0 R /PageMode /UseNone /Pages 22 0 R /Type /Catalog
|
| 58 |
+
>>
|
| 59 |
+
endobj
|
| 60 |
+
10 0 obj
|
| 61 |
+
<<
|
| 62 |
+
/Author () /CreationDate (D:20260217163557+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260217163557+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
| 63 |
+
/Subject () /Title (The Pre-Flight Check for Autonomous AI: Zero-Model Structural Reasoning Validation at Scale) /Trapped /False
|
| 64 |
+
>>
|
| 65 |
+
endobj
|
| 66 |
+
11 0 obj
|
| 67 |
+
<<
|
| 68 |
+
/Count 5 /First 12 0 R /Last 12 0 R /Type /Outlines
|
| 69 |
+
>>
|
| 70 |
+
endobj
|
| 71 |
+
12 0 obj
|
| 72 |
+
<<
|
| 73 |
+
/Count -6 /Dest [ 6 0 R /Fit ] /First 13 0 R /Last 21 0 R /Parent 11 0 R /Title (The Pre-Flight Check for Autonomous AI:Zero-Model Structural Reasoning Validation at Scale)
|
| 74 |
+
>>
|
| 75 |
+
endobj
|
| 76 |
+
13 0 obj
|
| 77 |
+
<<
|
| 78 |
+
/Dest [ 6 0 R /Fit ] /Next 14 0 R /Parent 12 0 R /Title (1. Introduction)
|
| 79 |
+
>>
|
| 80 |
+
endobj
|
| 81 |
+
14 0 obj
|
| 82 |
+
<<
|
| 83 |
+
/Count -1 /Dest [ 6 0 R /Fit ] /First 15 0 R /Last 15 0 R /Next 16 0 R /Parent 12 0 R
|
| 84 |
+
/Prev 13 0 R /Title (2. The Subtractive Filter)
|
| 85 |
+
>>
|
| 86 |
+
endobj
|
| 87 |
+
15 0 obj
|
| 88 |
+
<<
|
| 89 |
+
/Dest [ 6 0 R /Fit ] /Parent 14 0 R /Title (2.1 Design)
|
| 90 |
+
>>
|
| 91 |
+
endobj
|
| 92 |
+
16 0 obj
|
| 93 |
+
<<
|
| 94 |
+
/Count -1 /Dest [ 8 0 R /Fit ] /First 17 0 R /Last 17 0 R /Next 18 0 R /Parent 12 0 R
|
| 95 |
+
/Prev 14 0 R /Title (3. Evaluation)
|
| 96 |
+
>>
|
| 97 |
+
endobj
|
| 98 |
+
17 0 obj
|
| 99 |
+
<<
|
| 100 |
+
/Dest [ 8 0 R /Fit ] /Parent 16 0 R /Title (3.2 Results - HaluEval \(Full Dataset\))
|
| 101 |
+
>>
|
| 102 |
+
endobj
|
| 103 |
+
18 0 obj
|
| 104 |
+
<<
|
| 105 |
+
/Count -1 /Dest [ 8 0 R /Fit ] /First 19 0 R /Last 19 0 R /Next 20 0 R /Parent 12 0 R
|
| 106 |
+
/Prev 16 0 R /Title (4. The Gap: Pre-Execution Reasoning Validation)
|
| 107 |
+
>>
|
| 108 |
+
endobj
|
| 109 |
+
19 0 obj
|
| 110 |
+
<<
|
| 111 |
+
/Dest [ 8 0 R /Fit ] /Parent 18 0 R /Title (4.2 The Aviation Analogy)
|
| 112 |
+
>>
|
| 113 |
+
endobj
|
| 114 |
+
20 0 obj
|
| 115 |
+
<<
|
| 116 |
+
/Dest [ 8 0 R /Fit ] /Next 21 0 R /Parent 12 0 R /Prev 18 0 R /Title (6. Conclusion)
|
| 117 |
+
>>
|
| 118 |
+
endobj
|
| 119 |
+
21 0 obj
|
| 120 |
+
<<
|
| 121 |
+
/Dest [ 8 0 R /Fit ] /Parent 12 0 R /Prev 20 0 R /Title (7. Reproducibility)
|
| 122 |
+
>>
|
| 123 |
+
endobj
|
| 124 |
+
22 0 obj
|
| 125 |
+
<<
|
| 126 |
+
/Count 2 /Kids [ 6 0 R 8 0 R ] /Type /Pages
|
| 127 |
+
>>
|
| 128 |
+
endobj
|
| 129 |
+
23 0 obj
|
| 130 |
+
<<
|
| 131 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3517
|
| 132 |
+
>>
|
| 133 |
+
stream
|
| 134 |
+
Gau`VD0+IA&cV3*Z'1U$a>YlkGEM-V3k=>:f#d#Bf?SL1"X[:pc6T%b5V'DVrU$-Z.8$sYR7WUSN$Bhs(>+'/m9(i$Gi4/A?Lo)njW'l,n\G`D^'$Z0&^7H;p&+0cZO^]`S[Id2#Z;F-8X."A%TsR$+lr=4@im?$mLtn^ZPYUt2_X@MC%N=g=;1rnYJKrW(<98X*m>#G5Ga")^Bq\O8JREX5d+QN0+m&V]QdA3<GCDlM>8_SQ%mK%.]I15(q@5)E=VSI!TlV^7HCf-Rq51'p#J?9e\t`m?j31(DK=KF?GT.m7S+b)n1S+)Jm4ooE!r:Y?D6,3[RrmK77e?(>J6W#I;lE<GQ]!N@".f/3,I`2IR'PGHT(pS$s5Q[`Iq2%L!31QqK-%'7hJK>bZK6'W/m:K?Gk+Xi;3"UO%-nt0?_eF"60jIk_ACT"C@2V+U\nuc2:rSfde@#cg;+ERcgV[`Gbaaf#fJal9.+XT<Z1-drF<aRE)%#i$;`mq>inQNSb`V)g[T7/5EMe=r)BlP(YOHJFDkM0O_;7csGQGK#09Ur:;jE^LdQI7TaF_-nX'aiDXgXQARbW2kmUVVng-fmKVou$8i"I`DRq4m__jlM^pCG(@Kn,<8'e:2:j@3CG&Zt?Qle-]U2r2^Km@^C@&O:L;>OK'"8/A=VsfDnb$'9SsO-+Wh%0m16hT#Pk`Pd8]e$5ab=Q+^Hd];]itWUCf?5("HCqIPQZWLOp/hLp%;NFKm12SU0arP\O;E47p&IA?!f2/+g8C1@OY-C.4>X-hdB:e\[o<0"q*,Z()83Ll+#cpJQei2((HqDJs7.AP(^)1j^J<*>AD]i8nWg[Kd7XY=EA7T9;oDG9-IA8d.gfi1dUaqC=Tls`(p2Dqs!5>/'*!9R43)X[%CLGKl^50/SF-e]]3#0/NU?o4,#!!kqpIJ0YC^nBOIf>m8j.U=3^%m?4BWuAm*hKis'($em.)6ca>M4Ce54J\[aT%R!cE6_N0:MC=V5V4uIK-[J8R'DK5*o<"boBnqI]+_!Gj-W%,1fq+`4?5;sK;R\m@p1u9CZJ4$Jn'fiIjE&$DtiPhL-4>-lpTn+g&p5(QHHku\bhY7W0j1na&/;c2q.0\4-]6t#;\YpF+A8SKFe[uGg$T!KAke*n)#%u$l)JPZ5>%t9!=#-rt6OO^nYUN"p?ukA!XCS_%U2Ru_UZtS[`$N`H_^cR7LLK\7gCcBrP"V.h[BT)H'K1A:Ci,0L=d71$X^&%JM@a1r5Hg><"'e/;<Lu-bJH`.M)ME2l?XA<B9=.p%\1C>!fD+?]nnX4$p_i\CAaN>?]+RHVWJ9njVrT@meiYdZMU\qG]ae:FSC)AXJDU[Be%eAL`3SdO3H\lM@(m/:[8o:+1,]T=E>8*!YX[F`'1+`]Ffc"NGpV(]L23;Gc#6lJZsXe\q+ZRY%<+)*]!.nmXI1T]4s=.*6r!`b`>U6MdBoa='W/VI!<7o1NREN+EQ%lI$M"lPWKYfEa/0A%SfYITmuSt,rHF$#/4DaQprQh\Gq;,+977R$EUo2kpbS5\,"F,1QLoh\][%jN#$95f<AaMK[9*e'cc;['#eA3JFL!dB@ERRdR"5JWI!SbAcY)2Q&uC.&J_/AG*?g<#&>Bf2^icK^20EQ>V!`B1<ZBOj4EME/;CPZ.KsCOk%2>i)65jT72&9J3j=@3g0N4ohFdR2J=:3/]/uY(.?>\LBX_ngVVCQ;ZU9/HqY+ni/cu^m2`.HEZ#P7"!HY^hu/qp:(*H8W+LqB\6ZbXZl/sU=tciFmq3lY;-4L^&c::QbMC!GR9UU>Gr8/OBo0dn9ZU-<9kf9UGpEM^%X/rN1eD)BF27d\"/C%#FJ:HEPPEcpj."$;8K-@VH^YNNsda7i^J+.TPCU#9>b3P*`qQ9?->*od*UEO9N&P_f(H]=p>a63M2P)`mZsMof0Uq/'%2>2U-b&j$X(8u%D/r$Ya=ZdE/.nK.mWnBJcJLfOmMVZXSI`56DQ!</0_N?g^@_oPoDXqkoOg/M1U&83"M:,'bsUU)Q8=\O;(C&mso+<13-&@17R6hYr_O23Yge9?MSdLf%54,U(Y_fa@i@l"Bn+U`9;$DL&f:2)8^$.Nab"#ZG&!nlTAr:H'6)jaRT<Oma^BM,FiBJOQC+ouJD"j25Y3:aKs/F`X,6$EY@AX!H/0dT-AVX:U$T]28\K#PZ<nKJ7%TW9:X@<1FCEB](])%2?o5G(bgs7H;W^2rA8?8pFeV29_);r21T':%+-YscfR.]fT]26LCo?BK_!%>f[sp/X-\:?KCEh0,<-M]9#<ETi^h(7a)>YGs/g@d3C=pTXh[]Sl7;B_V^KIZPR%^HF?I\o.O0ohG@#*Sip3g5RW[R;]AME?#X:CrXlT"co('<:[n&B\A+EC%CP!ZVU&=qbo0;8kEQ4AYDq65Um/3fX^6ZSQolg\Wpie>Lu&.".Kp;lKJbN3TU;;3%P68kt!o=X6%5Cdmee9QSKo7Jf40Sn&KU(a'AMdH#Jdi/3R^hOlZ#rqCd!%Og2X=[hlK.7elHt)R12D6j-)';OL$q2''lQO/.Z+614^&QGdT>d8Y3no\\$e^l</go9SGI1MV-?ZW)q@cX'H</aDle1PoBGm;0t?bR7hR9<XjIrA7t4pp5pu_(:.qOT)3kQ9UlNl^**dF;SZ7MdudOoFBZ_h2T,2DX<#T^4'^8!e-Y%D5IPe12DpWK)V!%lk6fFZ&bN]0MLM[dOg8'%;1nDS]So)@0pBYKX:AfJ5b(&fAts>4RAtcL]!cSFiL.,qM$oSl+Yb5@<>'!liQ<F0ffSBPYi1jG%SKX>H6ZhZP2j,R&.]XFeJX3Vo#LPIQT[V^.oi$pD(VQV<E_-T.IHB/>jHe-+YT[jEV'sYV/3Y-bdWqVq$/_i?2^b3/'#^<H;<]RL>i?:1($P*@7C.!SN?)HTptY<u\k2c^m@bG_c.Kir$n8R)LWP?6QPJ@+W?O`l>gG.5Wd_p0Ud:9%4-5d'5e;0DBB<`s0D)eo`qEj<^^Ng&<1S\DTg4?'t)mpliFhMpCePlZYs-I-R*l=AOF;3[<%![HI+b&[kYuh)X,mHB#<dBZ>Apqs)<Cj2M9Pacgr$qmojWXYE=i6%aB5-=qSQgG-n,TC:k2+)u/@KCA]XHN!0[)N/4H7;[3T,@f,2a<b+CF9Q'Rj1i4;Qc>]d&m6.LqF4u6>njf\,4`/WF9cRWrq2*<!W;!%LL8A0RNtH[KDWCgK3$0Ulhb4^"toX0VFeuNI(E\M*hJT9XM$:D*IX!JO$@/.kgk^GB-;5EQVO0%mekM>p4@2,R!f/_:I=6Ts5F^"*]X:8p[G!>^"$Ui)KWu+XBRJmT6in7;&XN,?E@?eAtOE:UYt_da]R!&jVY#Re'kV?eR*pZW,m:,DUGDRL-f7!fVmhVa_oM)SVBHU5kMjOr8aDYcuopq8e)Yua(igA]j/$YbW\C^nMlLgX-`/'N7hhl1BP5_L9Fg%cURB!be^UTf_A80h$X\7hd\_fX<*GCP=HVJGE1>7aR/2H1H>7R9a&]J~>endstream
|
| 135 |
+
endobj
|
| 136 |
+
24 0 obj
|
| 137 |
+
<<
|
| 138 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1885
|
| 139 |
+
>>
|
| 140 |
+
stream
|
| 141 |
+
Gau`T95iQE&AJ$Cbb\F>YSi:DpQfud2N-rH9tfA@0+9_Hfh.u+;GOp?IR-P+r(q25W3JXM!9QDXRJCI9YmV%$i)Y>Q%e+oKQT$P,'IGVTIH&0*:Ulu)*X?$VO+UW]"WA'#&,d'63$c6,H,0$R@i*.&o*M+!&CLQM#4Eq!)uJ6H8.t_Paaq#KZp$*\.(C<)XC!L>J==C&,B1>*=ilVa`<ArL_rRqRo;.%+@]4eF57U4pSJ7?$%Y5F[+Jo`1OMTO<r"+;7&:,&(gB$+T:)mL%DF/"ESaHTXE0%TSN.s'7@TdF*JEcR#bVJsa)5beT0+L<p!GN+V>=_?F-OtjdIqi:Ymm]Lf0Hi8m4W&N0M*W</hB#O/`F%-N`&62o_l;ic>B4N[LZ&"0Tr2<[5_H"Y6ttt"48'6*@?5@pid#MTg1'hs6j&5r':P"MO2`e8W*i;t(KD2l8A(p0B_?O`p_f&(r)ANITLn#?'mN:/kZ<N;NFaE-LcP[jFbmfe3*X1*7,Z(Aos]psn%`n?O:0mpo.O\TXDgL]36n"W3JdeMSdiS#EgC9bo5ReZPW83tD"uT$X!.,0k`#sW\Q%3?)eXi`'8N1)76m%$k=d!F$RO!l@Tf/6)*'LGR#V7*#L2gNLAFg.94O4'*s3=n%nI[p@2Qi[s.,Y8hG<t8F_,LclH$;uES^uOT0<W@LIX5rV"[S_Y1mU.l^U)<2)9UHlm_UZl[\<R2d;Q&c7k^I'A@g(Y<ggee['!8e^)g<=teM<KF%tNP]T@CS0$;<Q$s1R?@H)&7];ZM?)8Tm*N5QO2A9A)1l"RYGD5qSlJn\jCLm:og"#<f[U'I_OZf2Z;4T;Dr`DqLhHEm)=Qik&]%7+H*aNSQjEM]G9haQF\c8/<`eS5W-(?FsAg0%0J4l`#RqrNX`PRG!^_E^TEX"?#D,eVOWE9?\-F-OC##Tn%(%>*UK.1Ij0HDJmn_V'@42$0"dQfFl7L_/n:!#.UV52Q/Y_Ek"QkuRecK*"hnWNM2VEP$MMiV]M%dk$kYC@`Lm@F[ZaL!Kd0o'Zu'Bse.=5ON[SFifN$e;+LT5n;B:osbJ$>jTEHE@Y=?l$u%WX]Lr<5DksGT6=Lg16j:BakS=iF=;f(NPpQ#,7KY_LeQ=oW>02%s!Mm-lS\1=\-^FX.t`$B&%!&+8V8f:mfGC?ssOu7o2_YD%J:aYq#RHPf']dK2L4Y$K7k"$-@J''W?RK=bt*2@4AUgOPXj0e(2dYW8tH`6\hj>PX<*9o<(Htj=K2%q"ABPE4$;n-FbO--Kj^/d(Jj-ZnB),^g)ro@I?>c9-op&,KpkFD/P[Ia4RibF3^C6%AnSHK39=-=D0e?fHt.05Kgum@=U"ms3U5mlJTQRBEP5%?'/fS9$GjDSZU-ND'RTnWijc(*B(7,,uug($e0KK6/]1+@sQTC3ZrM"3#\/Ni3L]rGB+Y"6W$sKj]EAX8npMlK:-&)C@b`uS;LdY+dH&([VljQ"ZLsj00ks0WfA]@7=#++->>5BQF;!jL/bE*>7`CpSs?nSA=JgOOuY@c6HT]unCP9F4P(tN)8EQf$%-CgpuR.cmVnbIp;(Zo]jni0Q!B0Q)K8=qjimFRXVNO+Q'm1@dq/^i1Vk+f*7Z9\/;b..=P.9'<o;H?Wu0%T6K$"d[)8K3Bf.nR[XVA;^aLNZ':&qL45@%-DHj,WHuX_K^85mbS!"M-<3k"mFh;p_=OpVI1O)g'QrhUoWoJch!a8$iAQbfI<5i&<;A$M8c1GTgV$Z\<p`>7tguD;S[,g44AAYEt4nTe],e[gbledt/=U&-.3._Adp`aA9LTW"\C;*3ABX2(kX'!54F/'6._CWh7_I\2l6)HI:6X3CSDa46opZJgE31n6T&"db.3i`C9rr>8,mDA~>endstream
|
| 142 |
+
endobj
|
| 143 |
+
xref
|
| 144 |
+
0 25
|
| 145 |
+
0000000000 65535 f
|
| 146 |
+
0000000061 00000 n
|
| 147 |
+
0000000122 00000 n
|
| 148 |
+
0000000229 00000 n
|
| 149 |
+
0000000337 00000 n
|
| 150 |
+
0000000447 00000 n
|
| 151 |
+
0000000556 00000 n
|
| 152 |
+
0000000761 00000 n
|
| 153 |
+
0000000957 00000 n
|
| 154 |
+
0000001180 00000 n
|
| 155 |
+
0000001266 00000 n
|
| 156 |
+
0000001610 00000 n
|
| 157 |
+
0000001684 00000 n
|
| 158 |
+
0000001879 00000 n
|
| 159 |
+
0000001975 00000 n
|
| 160 |
+
0000002134 00000 n
|
| 161 |
+
0000002212 00000 n
|
| 162 |
+
0000002359 00000 n
|
| 163 |
+
0000002466 00000 n
|
| 164 |
+
0000002646 00000 n
|
| 165 |
+
0000002738 00000 n
|
| 166 |
+
0000002845 00000 n
|
| 167 |
+
0000002944 00000 n
|
| 168 |
+
0000003010 00000 n
|
| 169 |
+
0000006619 00000 n
|
| 170 |
+
trailer
|
| 171 |
+
<<
|
| 172 |
+
/ID
|
| 173 |
+
[<f23f9f8aa2d1a20295eef80661d40c67><f23f9f8aa2d1a20295eef80661d40c67>]
|
| 174 |
+
% ReportLab generated PDF document -- digest (opensource)
|
| 175 |
+
|
| 176 |
+
/Info 10 0 R
|
| 177 |
+
/Root 9 0 R
|
| 178 |
+
/Size 25
|
| 179 |
+
>>
|
| 180 |
+
startxref
|
| 181 |
+
8596
|
| 182 |
+
%%EOF
|
__init__.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
TRIGNUM Core - Subtractive Semantic Geometry for Cold-State AGI
|
| 3 |
+
v.300M
|
| 4 |
+
|
| 5 |
+
The foundational Python implementation of the Trignum framework.
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
__version__ = "0.300.0"
|
| 9 |
+
__author__ = "Trace on Lab"
|
| 10 |
+
__license__ = "MIT"
|
| 11 |
+
|
| 12 |
+
from .pyramid import TrignumPyramid
|
| 13 |
+
from .faces import FaceAlpha, FaceBeta, FaceGamma
|
| 14 |
+
from .magnetic_field import MagneticField
|
| 15 |
+
from .subtractive_filter import SubtractiveFilter
|
| 16 |
+
from .tchip_emulator import TCHIP
|
| 17 |
+
|
| 18 |
+
__all__ = [
|
| 19 |
+
"TrignumPyramid",
|
| 20 |
+
"FaceAlpha",
|
| 21 |
+
"FaceBeta",
|
| 22 |
+
"FaceGamma",
|
| 23 |
+
"MagneticField",
|
| 24 |
+
"SubtractiveFilter",
|
| 25 |
+
"TCHIP",
|
| 26 |
+
]
|
accuracy.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Metrics accuracy calculation utilities (Level 2 Extension placeholder).
|
| 3 |
+
"""
|
| 4 |
+
from typing import Dict
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
def compute_f1_score(precision: float, recall: float) -> float:
|
| 8 |
+
"""Computes F1 score from precision and recall."""
|
| 9 |
+
if precision + recall == 0:
|
| 10 |
+
return 0.0
|
| 11 |
+
return 2 * (precision * recall) / (precision + recall)
|
| 12 |
+
|
| 13 |
+
def calculate_accuracy_matrix(tp: int, fp: int, tn: int, fn: int) -> Dict[str, float]:
|
| 14 |
+
"""Calculates all essential classification metrics."""
|
| 15 |
+
total = tp + fp + tn + fn
|
| 16 |
+
accuracy = (tp + tn) / total if total > 0 else 0.0
|
| 17 |
+
precision = tp / (tp + fp) if (tp + fp) > 0 else 0.0
|
| 18 |
+
recall = tp / (tp + fn) if (tp + fn) > 0 else 0.0
|
| 19 |
+
f1 = compute_f1_score(precision, recall)
|
| 20 |
+
|
| 21 |
+
return {
|
| 22 |
+
"accuracy": accuracy,
|
| 23 |
+
"precision": precision,
|
| 24 |
+
"recall": recall,
|
| 25 |
+
"f1": f1
|
| 26 |
+
}
|
basic_usage.py
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Basic Usage Example for TRIGNUM-300M
|
| 4 |
+
|
| 5 |
+
Demonstrates the fundamental concepts of the Trignum framework.
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import sys
|
| 9 |
+
import os
|
| 10 |
+
|
| 11 |
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
| 12 |
+
|
| 13 |
+
from trignum_core import TrignumPyramid, TCHIP
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
def main():
|
| 17 |
+
print("=" * 60)
|
| 18 |
+
print("πΊ TRIGNUM-300M: Basic Usage Example")
|
| 19 |
+
print("=" * 60)
|
| 20 |
+
print()
|
| 21 |
+
|
| 22 |
+
# 1. Initialize the Trignum Pyramid
|
| 23 |
+
print("1. Initializing Trignum Pyramid...")
|
| 24 |
+
pyramid = TrignumPyramid()
|
| 25 |
+
print(f" {pyramid}")
|
| 26 |
+
print()
|
| 27 |
+
|
| 28 |
+
# 2. Process simple data
|
| 29 |
+
print("2. Processing data through Magnetic Trillage...")
|
| 30 |
+
result = pyramid.process("The sun rises in the east", human_pulse=0.9)
|
| 31 |
+
print(f" Logic: {result.logic_component:.3f}")
|
| 32 |
+
print(f" Illogic: {result.illogic_component:.3f}")
|
| 33 |
+
print(f" Context: {result.context_component:.3f}")
|
| 34 |
+
print(f" State: {result.state.value}")
|
| 35 |
+
print(f" Confidence: {result.confidence:.2%}")
|
| 36 |
+
print()
|
| 37 |
+
|
| 38 |
+
# 3. Initialize T-CHIP
|
| 39 |
+
print("3. Initializing T-CHIP...")
|
| 40 |
+
tchip = TCHIP()
|
| 41 |
+
print(f" {tchip}")
|
| 42 |
+
print()
|
| 43 |
+
|
| 44 |
+
# 4. Process through T-CHIP
|
| 45 |
+
print("4. Processing through T-CHIP...")
|
| 46 |
+
output = tchip.process(
|
| 47 |
+
"Quantum computing uses superposition of qubits",
|
| 48 |
+
human_pulse=0.8,
|
| 49 |
+
)
|
| 50 |
+
print(f" Glow: {output['glow']}")
|
| 51 |
+
print(f" Vibration: {output['vibration']}")
|
| 52 |
+
print(f" Message: {output['message']}")
|
| 53 |
+
print(f" Confidence: {output['confidence']:.2%}")
|
| 54 |
+
print()
|
| 55 |
+
|
| 56 |
+
# 5. Trigger THE FREEZE
|
| 57 |
+
print("5. Triggering THE FREEZE with contradictory data...")
|
| 58 |
+
pyramid_freeze = TrignumPyramid(freeze_threshold=0.3)
|
| 59 |
+
freeze_result = pyramid_freeze.process(
|
| 60 |
+
"Everything is always true and always false and never exists"
|
| 61 |
+
)
|
| 62 |
+
print(f" State: {freeze_result.state.value}")
|
| 63 |
+
if freeze_result.freeze_coordinates:
|
| 64 |
+
print(f" Freeze Coordinates: {freeze_result.freeze_coordinates}")
|
| 65 |
+
if freeze_result.metadata.get("message"):
|
| 66 |
+
print(f" Message: {freeze_result.metadata['message']}")
|
| 67 |
+
print()
|
| 68 |
+
|
| 69 |
+
# 6. Display T-CHIP status
|
| 70 |
+
print("6. T-CHIP Status:")
|
| 71 |
+
print(tchip.status())
|
| 72 |
+
print()
|
| 73 |
+
|
| 74 |
+
print("π Basic usage complete. Are you Sovereign?")
|
| 75 |
+
|
| 76 |
+
|
| 77 |
+
if __name__ == "__main__":
|
| 78 |
+
main()
|
cold_state_sim.py
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Cold State Simulation
|
| 4 |
+
|
| 5 |
+
Demonstrates how Trignum processing achieves near-zero entropy
|
| 6 |
+
compared to traditional "hot" computation.
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
import sys
|
| 10 |
+
import os
|
| 11 |
+
import time
|
| 12 |
+
import math
|
| 13 |
+
|
| 14 |
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
| 15 |
+
|
| 16 |
+
from trignum_core import TrignumPyramid, TCHIP
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def simulate_thermal_comparison():
|
| 20 |
+
"""
|
| 21 |
+
Compare energy consumption of traditional vs Trignum processing.
|
| 22 |
+
"""
|
| 23 |
+
print("=" * 60)
|
| 24 |
+
print("βοΈ COLD STATE SIMULATION")
|
| 25 |
+
print("=" * 60)
|
| 26 |
+
print()
|
| 27 |
+
|
| 28 |
+
# Traditional "Hot State" simulation
|
| 29 |
+
print("π₯ TRADITIONAL (HOT STATE) PROCESSING")
|
| 30 |
+
print("β" * 40)
|
| 31 |
+
|
| 32 |
+
hot_operations = 1000
|
| 33 |
+
hot_energy_per_op = 100 # picojoules (typical GPU)
|
| 34 |
+
hot_total_energy = hot_operations * hot_energy_per_op
|
| 35 |
+
hot_heat = hot_total_energy * 0.4 # 40% becomes heat
|
| 36 |
+
|
| 37 |
+
print(f" Operations: {hot_operations:,}")
|
| 38 |
+
print(f" Energy/op: {hot_energy_per_op} pJ")
|
| 39 |
+
print(f" Total Energy: {hot_total_energy:,} pJ")
|
| 40 |
+
print(f" Heat Generated: {hot_heat:,.0f} pJ (40%)")
|
| 41 |
+
print(f" Cooling Needed: YES")
|
| 42 |
+
print()
|
| 43 |
+
|
| 44 |
+
# Trignum "Cold State" simulation
|
| 45 |
+
print("βοΈ TRIGNUM (COLD STATE) PROCESSING")
|
| 46 |
+
print("β" * 40)
|
| 47 |
+
|
| 48 |
+
trignum_field_setup = 50 # pJ (one-time field establishment)
|
| 49 |
+
trignum_ops = 1000
|
| 50 |
+
trignum_energy_per_op = 0.001 # pJ (field propagation only)
|
| 51 |
+
trignum_total_energy = trignum_field_setup + (trignum_ops * trignum_energy_per_op)
|
| 52 |
+
trignum_heat = 0 # No heat in superconductive field
|
| 53 |
+
|
| 54 |
+
print(f" Operations: {trignum_ops:,}")
|
| 55 |
+
print(f" Field Setup: {trignum_field_setup} pJ (one-time)")
|
| 56 |
+
print(f" Energy/op: {trignum_energy_per_op} pJ")
|
| 57 |
+
print(f" Total Energy: {trignum_total_energy:,.3f} pJ")
|
| 58 |
+
print(f" Heat Generated: {trignum_heat} pJ (0%)")
|
| 59 |
+
print(f" Cooling Needed: NO")
|
| 60 |
+
print()
|
| 61 |
+
|
| 62 |
+
# Comparison
|
| 63 |
+
print("π COMPARISON")
|
| 64 |
+
print("β" * 40)
|
| 65 |
+
ratio = hot_total_energy / trignum_total_energy
|
| 66 |
+
savings = (1 - trignum_total_energy / hot_total_energy) * 100
|
| 67 |
+
|
| 68 |
+
print(f" Energy Ratio: {ratio:,.0f}Γ more efficient")
|
| 69 |
+
print(f" Heat Savings: {savings:.2f}%")
|
| 70 |
+
print(f" Cooling Saved: 100% (ambient only)")
|
| 71 |
+
print()
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
def simulate_entropy_over_time():
|
| 75 |
+
"""
|
| 76 |
+
Track entropy levels as both systems process data over time.
|
| 77 |
+
"""
|
| 78 |
+
print("=" * 60)
|
| 79 |
+
print("π ENTROPY OVER TIME")
|
| 80 |
+
print("=" * 60)
|
| 81 |
+
print()
|
| 82 |
+
|
| 83 |
+
n_steps = 20
|
| 84 |
+
|
| 85 |
+
print(f" {'Step':>4} {'Hot Entropy':>12} {'Cold Entropy':>13} {'Ratio':>8}")
|
| 86 |
+
print(f" {'β'*4} {'β'*12} {'β'*13} {'β'*8}")
|
| 87 |
+
|
| 88 |
+
for step in range(1, n_steps + 1):
|
| 89 |
+
# Hot state: entropy increases with each operation
|
| 90 |
+
hot_entropy = math.log(step + 1) * 10
|
| 91 |
+
|
| 92 |
+
# Cold state: entropy stays near zero
|
| 93 |
+
cold_entropy = 0.001 * step
|
| 94 |
+
|
| 95 |
+
ratio = hot_entropy / max(cold_entropy, 0.001)
|
| 96 |
+
|
| 97 |
+
hot_bar = "β" * min(int(hot_entropy / 2), 20)
|
| 98 |
+
cold_bar = "β" * max(1, min(int(cold_entropy * 100), 5))
|
| 99 |
+
|
| 100 |
+
print(f" {step:4d} {hot_entropy:10.3f} {hot_bar} "
|
| 101 |
+
f"{cold_entropy:11.5f} {cold_bar} {ratio:8.1f}Γ")
|
| 102 |
+
|
| 103 |
+
print()
|
| 104 |
+
print(" β = Hot State Entropy β = Cold State Entropy")
|
| 105 |
+
print()
|
| 106 |
+
|
| 107 |
+
|
| 108 |
+
def simulate_tchip_cold_state():
|
| 109 |
+
"""
|
| 110 |
+
Run T-CHIP and demonstrate Cold State operation.
|
| 111 |
+
"""
|
| 112 |
+
print("=" * 60)
|
| 113 |
+
print("π§ T-CHIP COLD STATE OPERATION")
|
| 114 |
+
print("=" * 60)
|
| 115 |
+
print()
|
| 116 |
+
|
| 117 |
+
tchip = TCHIP(freeze_threshold=0.7)
|
| 118 |
+
|
| 119 |
+
test_queries = [
|
| 120 |
+
("The speed of light is constant in a vacuum", 0.8),
|
| 121 |
+
("Water boils at 100Β°C and also at 0Β°C simultaneously", None),
|
| 122 |
+
("Human consciousness emerges from neural complexity", 0.9),
|
| 123 |
+
("Everything is always true and never true and maybe true", 0.3),
|
| 124 |
+
]
|
| 125 |
+
|
| 126 |
+
for query, pulse in test_queries:
|
| 127 |
+
print(f" Query: \"{query}\"")
|
| 128 |
+
print(f" Pulse: {pulse}")
|
| 129 |
+
|
| 130 |
+
result = tchip.process(query, human_pulse=pulse)
|
| 131 |
+
|
| 132 |
+
glow_emoji = {"blue": "π΅", "red": "π΄", "gold": "π‘"}.get(
|
| 133 |
+
result["glow"], "βͺ"
|
| 134 |
+
)
|
| 135 |
+
print(f" Glow: {glow_emoji} {result['glow'].upper()}")
|
| 136 |
+
print(f" Message: {result['message']}")
|
| 137 |
+
print(f" Confidence: {result['confidence']:.2%}")
|
| 138 |
+
if result["illogics_detected"]:
|
| 139 |
+
print(f" Illogics: {result['illogics_detected']}")
|
| 140 |
+
print()
|
| 141 |
+
|
| 142 |
+
print(tchip.status())
|
| 143 |
+
print()
|
| 144 |
+
|
| 145 |
+
|
| 146 |
+
if __name__ == "__main__":
|
| 147 |
+
simulate_thermal_comparison()
|
| 148 |
+
print()
|
| 149 |
+
simulate_entropy_over_time()
|
| 150 |
+
print()
|
| 151 |
+
simulate_tchip_cold_state()
|
constants.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Global Constants for TRIGNUM-300M
|
| 3 |
+
"""
|
| 4 |
+
|
| 5 |
+
# Default thresholds
|
| 6 |
+
DEFAULT_CONFIDENCE_THRESHOLD = 0.5
|
| 7 |
+
|
| 8 |
+
# Standard Universal Illogics (Level 1)
|
| 9 |
+
LOGIC_CONTRADICTION = "Contradiction"
|
| 10 |
+
LOGIC_CIRCULAR = "Circular Reference"
|
| 11 |
+
LOGIC_FALSE_DICHOTOMY = "False Dichotomy"
|
| 12 |
+
LOGIC_NON_SEQUITUR = "Non-sequitur"
|
| 13 |
+
LOGIC_BEGGING_QUESTION = "Begging the Question"
|
| 14 |
+
|
| 15 |
+
# API & Dataset
|
| 16 |
+
HF_DATASETS_API_BASE = "https://datasets-server.huggingface.co/rows"
|
| 17 |
+
DEFAULT_DATASET_LIMIT = 100
|
| 18 |
+
|
| 19 |
+
# File Paths
|
| 20 |
+
DEFAULT_LOG_DIR = "logs/"
|
| 21 |
+
DEFAULT_METRICS_OUT = "benchmarks/results/"
|
dataset_connectors.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
import urllib.request
|
| 3 |
+
from typing import Any, Dict, List
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
def fetch_hf_dataset(dataset: str, config: str, split: str, limit: int = 100) -> List[Dict[str, Any]]:
|
| 7 |
+
url = f"https://datasets-server.huggingface.co/rows?dataset={dataset}&config={config}&split={split}&offset=0&length={limit}"
|
| 8 |
+
try:
|
| 9 |
+
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
| 10 |
+
with urllib.request.urlopen(req, timeout=15) as response:
|
| 11 |
+
data = json.loads(response.read().decode("utf-8"))
|
| 12 |
+
return [row["row"] for row in data.get("rows", [])]
|
| 13 |
+
except Exception as e:
|
| 14 |
+
print(f"Failed to fetch {dataset}: {e}")
|
| 15 |
+
return []
|
| 16 |
+
|
| 17 |
+
def load_local_json(path: str) -> List[Dict[str, Any]]:
|
| 18 |
+
try:
|
| 19 |
+
with open(path, "r", encoding="utf-8") as f:
|
| 20 |
+
return [json.loads(line.strip()) for line in f]
|
| 21 |
+
except Exception as e:
|
| 22 |
+
print(f"Failed to load {path}: {e}")
|
| 23 |
+
return []
|
evaluator.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from dataclasses import dataclass
|
| 2 |
+
from typing import List
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
@dataclass
|
| 6 |
+
class EvalResult:
|
| 7 |
+
dataset: str
|
| 8 |
+
tp: int
|
| 9 |
+
fp: int
|
| 10 |
+
tn: int
|
| 11 |
+
fn: int
|
| 12 |
+
precision: float
|
| 13 |
+
recall: float
|
| 14 |
+
f1: float
|
| 15 |
+
accuracy: float
|
| 16 |
+
|
| 17 |
+
class Evaluator:
|
| 18 |
+
@staticmethod
|
| 19 |
+
def compute_metrics(tp: int, fp: int, tn: int, fn: int) -> EvalResult:
|
| 20 |
+
precision = tp / max(tp + fp, 1)
|
| 21 |
+
recall = tp / max(tp + fn, 1)
|
| 22 |
+
f1 = 2 * precision * recall / max(precision + recall, 1e-9)
|
| 23 |
+
accuracy = (tp + tn) / max(tp + tn + fp + fn, 1)
|
| 24 |
+
return EvalResult("unknown", tp, fp, tn, fn, precision, recall, f1, accuracy)
|
faces.py
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
The Three Faces of the Trignum Pyramid.
|
| 3 |
+
|
| 4 |
+
Face Ξ± (Alpha) β Logic Pole (Blue, Positive Charge)
|
| 5 |
+
Face Ξ² (Beta) β Illogic Pole (Red, Negative Charge / Vacuum)
|
| 6 |
+
Face Ξ³ (Gamma) β Context / Human Pulse Pole (Gold, Resonant Frequency)
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
import math
|
| 10 |
+
import random
|
| 11 |
+
from dataclasses import dataclass
|
| 12 |
+
from typing import Any, Dict, Optional
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
class FaceAlpha:
|
| 16 |
+
"""
|
| 17 |
+
Face Ξ± β The Logic Pole (Blue).
|
| 18 |
+
|
| 19 |
+
Attracts coherent patterns, statistical certainties, established knowledge.
|
| 20 |
+
Magnetic charge: Positive.
|
| 21 |
+
"""
|
| 22 |
+
|
| 23 |
+
COLOR = "blue"
|
| 24 |
+
SYMBOL = "Ξ±"
|
| 25 |
+
NAME = "Logic"
|
| 26 |
+
|
| 27 |
+
def __init__(self, strength: float = 1.0):
|
| 28 |
+
self.strength = max(0.0, min(2.0, strength))
|
| 29 |
+
self._accumulated: float = 0.0
|
| 30 |
+
self._cycles: int = 0
|
| 31 |
+
|
| 32 |
+
def attract(self, ferro_data: Dict[str, Any]) -> float:
|
| 33 |
+
"""
|
| 34 |
+
Calculate attraction strength for the given Ferro-Data.
|
| 35 |
+
|
| 36 |
+
Logic attraction is proportional to:
|
| 37 |
+
- Low entropy (structured, predictable data)
|
| 38 |
+
- Token consistency
|
| 39 |
+
- Pattern regularity
|
| 40 |
+
"""
|
| 41 |
+
entropy = ferro_data.get("entropy", 0.5)
|
| 42 |
+
length = ferro_data.get("length", 1)
|
| 43 |
+
|
| 44 |
+
# Low entropy = high logic attraction
|
| 45 |
+
attraction = self.strength * (1.0 - min(entropy / 8.0, 1.0))
|
| 46 |
+
|
| 47 |
+
# Longer, structured data attracts more to Logic
|
| 48 |
+
length_factor = min(math.log2(length + 1) / 10.0, 1.0)
|
| 49 |
+
attraction *= (0.5 + 0.5 * length_factor)
|
| 50 |
+
|
| 51 |
+
self._accumulated += attraction
|
| 52 |
+
self._cycles += 1
|
| 53 |
+
return attraction
|
| 54 |
+
|
| 55 |
+
def reset(self) -> None:
|
| 56 |
+
self._accumulated = 0.0
|
| 57 |
+
self._cycles = 0
|
| 58 |
+
|
| 59 |
+
def __repr__(self) -> str:
|
| 60 |
+
return f"FaceAlpha(strength={self.strength:.2f}, cycles={self._cycles})"
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
class FaceBeta:
|
| 64 |
+
"""
|
| 65 |
+
Face Ξ² β The Illogic Pole (Red).
|
| 66 |
+
|
| 67 |
+
Attracts contradictions, anomalies, pulse-stopping impossibilities.
|
| 68 |
+
Magnetic charge: Negative (creates vacuum).
|
| 69 |
+
|
| 70 |
+
Does not process β it HALTS processing.
|
| 71 |
+
"""
|
| 72 |
+
|
| 73 |
+
COLOR = "red"
|
| 74 |
+
SYMBOL = "Ξ²"
|
| 75 |
+
NAME = "Illogic"
|
| 76 |
+
|
| 77 |
+
def __init__(self, strength: float = 1.0):
|
| 78 |
+
self.strength = max(0.0, min(2.0, strength))
|
| 79 |
+
self._accumulated: float = 0.0
|
| 80 |
+
self._cycles: int = 0
|
| 81 |
+
self._vacuum_active: bool = False
|
| 82 |
+
|
| 83 |
+
def attract(self, ferro_data: Dict[str, Any]) -> float:
|
| 84 |
+
"""
|
| 85 |
+
Calculate attraction strength for the given Ferro-Data.
|
| 86 |
+
|
| 87 |
+
Illogic attraction is proportional to:
|
| 88 |
+
- High entropy (chaotic, unpredictable data)
|
| 89 |
+
- Contradictions
|
| 90 |
+
- Anomalies in token patterns
|
| 91 |
+
"""
|
| 92 |
+
entropy = ferro_data.get("entropy", 0.5)
|
| 93 |
+
length = ferro_data.get("length", 1)
|
| 94 |
+
|
| 95 |
+
# High entropy = high illogic attraction
|
| 96 |
+
attraction = self.strength * min(entropy / 8.0, 1.0)
|
| 97 |
+
|
| 98 |
+
# Add stochastic noise to simulate hallucination detection
|
| 99 |
+
noise = random.gauss(0, 0.05)
|
| 100 |
+
attraction = max(0.0, attraction + noise)
|
| 101 |
+
|
| 102 |
+
self._accumulated += attraction
|
| 103 |
+
self._cycles += 1
|
| 104 |
+
return attraction
|
| 105 |
+
|
| 106 |
+
def create_vacuum(self, illogic_ratio: float) -> float:
|
| 107 |
+
"""
|
| 108 |
+
Create a Magnetic Vacuum based on accumulated Illogic.
|
| 109 |
+
|
| 110 |
+
The vacuum is the key innovation β it pulls Truth by creating
|
| 111 |
+
an absence of falsehood.
|
| 112 |
+
|
| 113 |
+
Returns vacuum strength (0.0 to 1.0).
|
| 114 |
+
"""
|
| 115 |
+
self._vacuum_active = True
|
| 116 |
+
vacuum = illogic_ratio * self.strength
|
| 117 |
+
return min(vacuum, 1.0)
|
| 118 |
+
|
| 119 |
+
def reset(self) -> None:
|
| 120 |
+
self._accumulated = 0.0
|
| 121 |
+
self._cycles = 0
|
| 122 |
+
self._vacuum_active = False
|
| 123 |
+
|
| 124 |
+
@property
|
| 125 |
+
def is_vacuum_active(self) -> bool:
|
| 126 |
+
return self._vacuum_active
|
| 127 |
+
|
| 128 |
+
def __repr__(self) -> str:
|
| 129 |
+
return (
|
| 130 |
+
f"FaceBeta(strength={self.strength:.2f}, "
|
| 131 |
+
f"vacuum={'ON' if self._vacuum_active else 'OFF'})"
|
| 132 |
+
)
|
| 133 |
+
|
| 134 |
+
|
| 135 |
+
class FaceGamma:
|
| 136 |
+
"""
|
| 137 |
+
Face Ξ³ β The Context / Human Pulse Pole (Gold).
|
| 138 |
+
|
| 139 |
+
Attracts the sovereign intent and emotional frequency of the human user.
|
| 140 |
+
Magnetic charge: Resonant frequency.
|
| 141 |
+
|
| 142 |
+
Collapses the wave-function when the Pulse is applied.
|
| 143 |
+
"""
|
| 144 |
+
|
| 145 |
+
COLOR = "gold"
|
| 146 |
+
SYMBOL = "Ξ³"
|
| 147 |
+
NAME = "Context"
|
| 148 |
+
|
| 149 |
+
def __init__(self, strength: float = 1.0):
|
| 150 |
+
self.strength = max(0.0, min(2.0, strength))
|
| 151 |
+
self._accumulated: float = 0.0
|
| 152 |
+
self._cycles: int = 0
|
| 153 |
+
self._pulse_applied: bool = False
|
| 154 |
+
self._pulse_value: float = 0.0
|
| 155 |
+
|
| 156 |
+
def attract(self, ferro_data: Dict[str, Any]) -> float:
|
| 157 |
+
"""
|
| 158 |
+
Calculate attraction strength for the given Ferro-Data.
|
| 159 |
+
|
| 160 |
+
Context attraction is proportional to:
|
| 161 |
+
- Presence of human-contextual markers
|
| 162 |
+
- Emotional/intentional signals
|
| 163 |
+
- Sovereignty indicators
|
| 164 |
+
"""
|
| 165 |
+
entropy = ferro_data.get("entropy", 0.5)
|
| 166 |
+
tokens = ferro_data.get("tokens", [])
|
| 167 |
+
|
| 168 |
+
# Moderate entropy = highest context attraction (the sweet spot)
|
| 169 |
+
mid_entropy = 1.0 - abs(entropy / 4.0 - 1.0)
|
| 170 |
+
attraction = self.strength * max(0.0, mid_entropy)
|
| 171 |
+
|
| 172 |
+
# Human-like token patterns increase attraction
|
| 173 |
+
if tokens:
|
| 174 |
+
# More diverse tokens suggest more human context
|
| 175 |
+
unique_ratio = len(set(tokens)) / max(len(tokens), 1)
|
| 176 |
+
attraction *= (0.5 + 0.5 * unique_ratio)
|
| 177 |
+
|
| 178 |
+
self._accumulated += attraction
|
| 179 |
+
self._cycles += 1
|
| 180 |
+
return attraction
|
| 181 |
+
|
| 182 |
+
def apply_pulse(self, pulse: float) -> None:
|
| 183 |
+
"""
|
| 184 |
+
Apply the Human Pulse to the Context face.
|
| 185 |
+
|
| 186 |
+
Args:
|
| 187 |
+
pulse: Sovereignty signal strength (0.0 to 1.0).
|
| 188 |
+
1.0 = full sovereign presence
|
| 189 |
+
0.0 = no human engagement
|
| 190 |
+
"""
|
| 191 |
+
self._pulse_applied = True
|
| 192 |
+
self._pulse_value = max(0.0, min(1.0, pulse))
|
| 193 |
+
|
| 194 |
+
def reset(self) -> None:
|
| 195 |
+
self._accumulated = 0.0
|
| 196 |
+
self._cycles = 0
|
| 197 |
+
self._pulse_applied = False
|
| 198 |
+
self._pulse_value = 0.0
|
| 199 |
+
|
| 200 |
+
@property
|
| 201 |
+
def is_pulse_active(self) -> bool:
|
| 202 |
+
return self._pulse_applied
|
| 203 |
+
|
| 204 |
+
@property
|
| 205 |
+
def pulse_value(self) -> float:
|
| 206 |
+
return self._pulse_value
|
| 207 |
+
|
| 208 |
+
def __repr__(self) -> str:
|
| 209 |
+
return (
|
| 210 |
+
f"FaceGamma(strength={self.strength:.2f}, "
|
| 211 |
+
f"pulse={'ON' if self._pulse_applied else 'OFF'}, "
|
| 212 |
+
f"value={self._pulse_value:.2f})"
|
| 213 |
+
)
|
hallucination_filter.py
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Hallucination Filter Example
|
| 4 |
+
|
| 5 |
+
Demonstrates the Subtractive Filter detecting and isolating
|
| 6 |
+
Illogics (hallucinations) from data.
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
import sys
|
| 10 |
+
import os
|
| 11 |
+
|
| 12 |
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
| 13 |
+
|
| 14 |
+
from trignum_core import SubtractiveFilter
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
def main():
|
| 18 |
+
print("=" * 60)
|
| 19 |
+
print("π΄ HALLUCINATION FILTER DEMO")
|
| 20 |
+
print("=" * 60)
|
| 21 |
+
print()
|
| 22 |
+
|
| 23 |
+
sf = SubtractiveFilter()
|
| 24 |
+
|
| 25 |
+
# Test cases with varying levels of Illogic
|
| 26 |
+
test_cases = [
|
| 27 |
+
{
|
| 28 |
+
"label": "Clean Logic",
|
| 29 |
+
"data": "Water flows downhill due to gravity. Temperature affects molecular motion.",
|
| 30 |
+
},
|
| 31 |
+
{
|
| 32 |
+
"label": "Contradiction Present",
|
| 33 |
+
"data": "The temperature is always cold. The temperature is never cold. Therefore it is warm.",
|
| 34 |
+
},
|
| 35 |
+
{
|
| 36 |
+
"label": "Circular Reference",
|
| 37 |
+
"data": "The answer is X because of Y. The answer is X because of Z. The answer is X because of Y.",
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"label": "Non-Sequitur",
|
| 41 |
+
"data": "Therefore the conclusion is obvious.",
|
| 42 |
+
},
|
| 43 |
+
{
|
| 44 |
+
"label": "Complex Mixed",
|
| 45 |
+
"data": "All particles have mass. No particles have mass. Some particles are always moving and never at rest. Thus we conclude everything.",
|
| 46 |
+
},
|
| 47 |
+
]
|
| 48 |
+
|
| 49 |
+
for case in test_cases:
|
| 50 |
+
print(f" π {case['label']}")
|
| 51 |
+
print(f" Input: \"{case['data'][:60]}...\"")
|
| 52 |
+
|
| 53 |
+
result = sf.apply(case["data"])
|
| 54 |
+
|
| 55 |
+
print(f" Illogics Found: {len(result.illogics_found)}")
|
| 56 |
+
for il in result.illogics_found:
|
| 57 |
+
print(f" β {il}")
|
| 58 |
+
print(f" Subtraction Ratio: {result.subtraction_ratio:.2%}")
|
| 59 |
+
print(f" Confidence: {result.confidence:.2%}")
|
| 60 |
+
print()
|
| 61 |
+
|
| 62 |
+
print(f" Filter Stats: {sf}")
|
| 63 |
+
print()
|
| 64 |
+
print(" π Noise In, Truth Out β The Subtractive Snap.")
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
if __name__ == "__main__":
|
| 68 |
+
main()
|
helpers.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
from typing import Any, Dict, List
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
def format_metrics(metrics: Dict[str, float]) -> str:
|
| 6 |
+
"""Formats a metrics dictionary into a readable string."""
|
| 7 |
+
return f"Precision: {metrics.get('precision', 0):.4f} | Recall: {metrics.get('recall', 0):.4f} | F1: {metrics.get('f1', 0):.4f}"
|
| 8 |
+
|
| 9 |
+
def serialize_results(filepath: str, data: List[Dict[str, Any]]) -> None:
|
| 10 |
+
"""Serializes benchmark results to a JSON file."""
|
| 11 |
+
with open(filepath, 'w', encoding='utf-8') as f:
|
| 12 |
+
json.dump(data, f, indent=4)
|
| 13 |
+
|
| 14 |
+
def parse_markdown_table(markdown_str: str) -> List[Dict[str, str]]:
|
| 15 |
+
"""Helper to parse markdown tables into Python dictionaries."""
|
| 16 |
+
# Placeholder utility for documentation generation
|
| 17 |
+
pass
|
logging.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Custom structured JSON logging for filter outputs.
|
| 3 |
+
"""
|
| 4 |
+
import json
|
| 5 |
+
import logging
|
| 6 |
+
import sys
|
| 7 |
+
from datetime import datetime
|
| 8 |
+
from typing import Any, Dict
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
class JsonFormatter(logging.Formatter):
|
| 12 |
+
def format(self, record: logging.LogRecord) -> str:
|
| 13 |
+
log_obj: Dict[str, Any] = {
|
| 14 |
+
"timestamp": datetime.utcnow().isoformat() + "Z",
|
| 15 |
+
"level": record.levelname,
|
| 16 |
+
"message": record.getMessage(),
|
| 17 |
+
"module": record.module
|
| 18 |
+
}
|
| 19 |
+
if hasattr(record, 'metrics'):
|
| 20 |
+
log_obj["metrics"] = record.metrics
|
| 21 |
+
return json.dumps(log_obj)
|
| 22 |
+
|
| 23 |
+
def get_structured_logger(name: str) -> logging.Logger:
|
| 24 |
+
"""Instantiates a logger that outputs JSON structured text."""
|
| 25 |
+
logger = logging.getLogger(name)
|
| 26 |
+
logger.setLevel(logging.INFO)
|
| 27 |
+
|
| 28 |
+
if not logger.handlers:
|
| 29 |
+
handler = logging.StreamHandler(sys.stdout)
|
| 30 |
+
handler.setFormatter(JsonFormatter())
|
| 31 |
+
logger.addHandler(handler)
|
| 32 |
+
|
| 33 |
+
return logger
|
magnetic_field.py
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Magnetic Field: The tri-polar field that drives Magnetic Trillage.
|
| 3 |
+
|
| 4 |
+
Data moves along field lines without resistance β achieving
|
| 5 |
+
computational superconductivity.
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import math
|
| 9 |
+
from dataclasses import dataclass
|
| 10 |
+
from typing import Any, Dict, List, Optional, Tuple
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
@dataclass
|
| 14 |
+
class FieldVector:
|
| 15 |
+
"""A magnetic field vector in Trignum space."""
|
| 16 |
+
alpha: float # Logic component
|
| 17 |
+
beta: float # Illogic component
|
| 18 |
+
gamma: float # Context component
|
| 19 |
+
|
| 20 |
+
@property
|
| 21 |
+
def magnitude(self) -> float:
|
| 22 |
+
return math.sqrt(self.alpha**2 + self.beta**2 + self.gamma**2)
|
| 23 |
+
|
| 24 |
+
@property
|
| 25 |
+
def normalized(self) -> "FieldVector":
|
| 26 |
+
mag = self.magnitude
|
| 27 |
+
if mag == 0:
|
| 28 |
+
return FieldVector(0, 0, 0)
|
| 29 |
+
return FieldVector(self.alpha / mag, self.beta / mag, self.gamma / mag)
|
| 30 |
+
|
| 31 |
+
@property
|
| 32 |
+
def dominant_face(self) -> str:
|
| 33 |
+
vals = {"Ξ± (Logic)": self.alpha, "Ξ² (Illogic)": self.beta, "Ξ³ (Context)": self.gamma}
|
| 34 |
+
return max(vals, key=vals.get)
|
| 35 |
+
|
| 36 |
+
def __repr__(self) -> str:
|
| 37 |
+
return f"FieldVector(Ξ±={self.alpha:.3f}, Ξ²={self.beta:.3f}, Ξ³={self.gamma:.3f})"
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
class MagneticField:
|
| 41 |
+
"""
|
| 42 |
+
The tri-polar magnetic field of the Trignum Pyramid.
|
| 43 |
+
|
| 44 |
+
Creates the field that drives Magnetic Trillage β data separates
|
| 45 |
+
by self-orienting along field lines rather than being pushed
|
| 46 |
+
through computational stages.
|
| 47 |
+
"""
|
| 48 |
+
|
| 49 |
+
def __init__(self, face_alpha, face_beta, face_gamma):
|
| 50 |
+
"""
|
| 51 |
+
Initialize the Magnetic Field from three faces.
|
| 52 |
+
|
| 53 |
+
Args:
|
| 54 |
+
face_alpha: The Logic pole (positive charge).
|
| 55 |
+
face_beta: The Illogic pole (negative charge / vacuum).
|
| 56 |
+
face_gamma: The Context pole (resonant frequency).
|
| 57 |
+
"""
|
| 58 |
+
self.face_alpha = face_alpha
|
| 59 |
+
self.face_beta = face_beta
|
| 60 |
+
self.face_gamma = face_gamma
|
| 61 |
+
self._field_lines: List[FieldVector] = []
|
| 62 |
+
self._energy: float = 0.0
|
| 63 |
+
|
| 64 |
+
def compute_field(self, position: Tuple[float, float, float]) -> FieldVector:
|
| 65 |
+
"""
|
| 66 |
+
Compute the field vector at a given position in Trignum space.
|
| 67 |
+
|
| 68 |
+
Position is a 3D coordinate (x, y, z) where:
|
| 69 |
+
- x-axis: Logic dimension
|
| 70 |
+
- y-axis: Illogic dimension
|
| 71 |
+
- z-axis: Context dimension
|
| 72 |
+
|
| 73 |
+
Returns:
|
| 74 |
+
FieldVector at the given position.
|
| 75 |
+
"""
|
| 76 |
+
x, y, z = position
|
| 77 |
+
|
| 78 |
+
# Face Ξ± pulls toward (1, 0, 0)
|
| 79 |
+
alpha_pull = self.face_alpha.strength / max(
|
| 80 |
+
math.sqrt((x - 1)**2 + y**2 + z**2), 0.01
|
| 81 |
+
)
|
| 82 |
+
|
| 83 |
+
# Face Ξ² pulls toward (0, 1, 0) β negative charge creates vacuum
|
| 84 |
+
beta_pull = -self.face_beta.strength / max(
|
| 85 |
+
math.sqrt(x**2 + (y - 1)**2 + z**2), 0.01
|
| 86 |
+
)
|
| 87 |
+
|
| 88 |
+
# Face Ξ³ pulls toward (0, 0, 1) β resonant frequency
|
| 89 |
+
gamma_pull = self.face_gamma.strength / max(
|
| 90 |
+
math.sqrt(x**2 + y**2 + (z - 1)**2), 0.01
|
| 91 |
+
)
|
| 92 |
+
|
| 93 |
+
vector = FieldVector(alpha_pull, abs(beta_pull), gamma_pull)
|
| 94 |
+
self._field_lines.append(vector)
|
| 95 |
+
return vector
|
| 96 |
+
|
| 97 |
+
def compute_apex(self) -> FieldVector:
|
| 98 |
+
"""
|
| 99 |
+
Compute the field vector at the Apex of the pyramid.
|
| 100 |
+
|
| 101 |
+
The Apex is the point of Magnetic Reconnection where
|
| 102 |
+
all three streams converge.
|
| 103 |
+
"""
|
| 104 |
+
# Apex is equidistant from all three faces
|
| 105 |
+
apex_pos = (1/3, 1/3, 1/3)
|
| 106 |
+
return self.compute_field(apex_pos)
|
| 107 |
+
|
| 108 |
+
def get_trillage_path(
|
| 109 |
+
self,
|
| 110 |
+
start: Tuple[float, float, float],
|
| 111 |
+
steps: int = 100,
|
| 112 |
+
step_size: float = 0.01,
|
| 113 |
+
) -> List[Tuple[float, float, float]]:
|
| 114 |
+
"""
|
| 115 |
+
Compute the path a Ferro-Data particle would take through the field.
|
| 116 |
+
|
| 117 |
+
Args:
|
| 118 |
+
start: Starting position in Trignum space.
|
| 119 |
+
steps: Number of simulation steps.
|
| 120 |
+
step_size: Size of each step.
|
| 121 |
+
|
| 122 |
+
Returns:
|
| 123 |
+
List of positions along the path.
|
| 124 |
+
"""
|
| 125 |
+
path = [start]
|
| 126 |
+
pos = list(start)
|
| 127 |
+
|
| 128 |
+
for _ in range(steps):
|
| 129 |
+
field = self.compute_field(tuple(pos))
|
| 130 |
+
normalized = field.normalized
|
| 131 |
+
|
| 132 |
+
# Move along field lines
|
| 133 |
+
pos[0] += normalized.alpha * step_size
|
| 134 |
+
pos[1] += normalized.beta * step_size
|
| 135 |
+
pos[2] += normalized.gamma * step_size
|
| 136 |
+
|
| 137 |
+
# Clamp to valid space
|
| 138 |
+
pos = [max(0, min(1, p)) for p in pos]
|
| 139 |
+
path.append(tuple(pos))
|
| 140 |
+
|
| 141 |
+
return path
|
| 142 |
+
|
| 143 |
+
@property
|
| 144 |
+
def total_energy(self) -> float:
|
| 145 |
+
"""Total energy in the magnetic field (should approach zero in Cold State)."""
|
| 146 |
+
if not self._field_lines:
|
| 147 |
+
return 0.0
|
| 148 |
+
return sum(v.magnitude for v in self._field_lines) / len(self._field_lines)
|
| 149 |
+
|
| 150 |
+
def reset(self) -> None:
|
| 151 |
+
"""Reset field lines and energy."""
|
| 152 |
+
self._field_lines.clear()
|
| 153 |
+
self._energy = 0.0
|
| 154 |
+
|
| 155 |
+
def __repr__(self) -> str:
|
| 156 |
+
return (
|
| 157 |
+
f"MagneticField(lines={len(self._field_lines)}, "
|
| 158 |
+
f"energy={self.total_energy:.4f})"
|
| 159 |
+
)
|
magnetic_trillage_sim.py
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Magnetic Trillage Simulation
|
| 4 |
+
|
| 5 |
+
Visualizes how Ferro-Data particles move through the tri-polar
|
| 6 |
+
magnetic field, self-separating into Logic, Illogic, and Context.
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
import sys
|
| 10 |
+
import os
|
| 11 |
+
|
| 12 |
+
# Add parent directory to path
|
| 13 |
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
| 14 |
+
|
| 15 |
+
from trignum_core import TrignumPyramid, MagneticField
|
| 16 |
+
from trignum_core.magnetic_field import FieldVector
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def simulate_particle_paths(n_particles: int = 10):
|
| 20 |
+
"""
|
| 21 |
+
Simulate multiple Ferro-Data particles moving through the field.
|
| 22 |
+
|
| 23 |
+
Each particle starts at a random position and follows field lines
|
| 24 |
+
to its destination face.
|
| 25 |
+
"""
|
| 26 |
+
import random
|
| 27 |
+
|
| 28 |
+
pyramid = TrignumPyramid()
|
| 29 |
+
field = pyramid.magnetic_field
|
| 30 |
+
|
| 31 |
+
print("=" * 60)
|
| 32 |
+
print("π§² MAGNETIC TRILLAGE SIMULATION")
|
| 33 |
+
print("=" * 60)
|
| 34 |
+
print(f"\nSimulating {n_particles} Ferro-Data particles...")
|
| 35 |
+
print()
|
| 36 |
+
|
| 37 |
+
destinations = {"Ξ± (Logic)": 0, "Ξ² (Illogic)": 0, "Ξ³ (Context)": 0}
|
| 38 |
+
|
| 39 |
+
for i in range(n_particles):
|
| 40 |
+
# Random starting position in Trignum space
|
| 41 |
+
start = (
|
| 42 |
+
random.uniform(0.1, 0.9),
|
| 43 |
+
random.uniform(0.1, 0.9),
|
| 44 |
+
random.uniform(0.1, 0.9),
|
| 45 |
+
)
|
| 46 |
+
|
| 47 |
+
# Compute path through field
|
| 48 |
+
path = field.get_trillage_path(start, steps=50, step_size=0.02)
|
| 49 |
+
|
| 50 |
+
# Determine final destination
|
| 51 |
+
final = path[-1]
|
| 52 |
+
final_field = field.compute_field(final)
|
| 53 |
+
dest = final_field.dominant_face
|
| 54 |
+
|
| 55 |
+
destinations[dest] += 1
|
| 56 |
+
|
| 57 |
+
print(f" Particle {i+1:2d}: Start({start[0]:.2f}, {start[1]:.2f}, {start[2]:.2f}) "
|
| 58 |
+
f"β {dest} (steps: {len(path)})")
|
| 59 |
+
|
| 60 |
+
print()
|
| 61 |
+
print("β" * 40)
|
| 62 |
+
print("SEPARATION RESULTS:")
|
| 63 |
+
print("β" * 40)
|
| 64 |
+
for face, count in destinations.items():
|
| 65 |
+
bar = "β" * (count * 3)
|
| 66 |
+
print(f" {face:15s}: {count:3d} {bar}")
|
| 67 |
+
|
| 68 |
+
print()
|
| 69 |
+
print(f" Field Energy: {field.total_energy:.4f}")
|
| 70 |
+
print(f" Field Lines: {len(field._field_lines)}")
|
| 71 |
+
print()
|
| 72 |
+
|
| 73 |
+
return destinations
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
def simulate_vacuum_formation():
|
| 77 |
+
"""
|
| 78 |
+
Simulate the Magnetic Vacuum forming at Face Ξ².
|
| 79 |
+
|
| 80 |
+
Shows how Illogic creates a vacuum that pulls Truth toward it.
|
| 81 |
+
"""
|
| 82 |
+
pyramid = TrignumPyramid()
|
| 83 |
+
|
| 84 |
+
print("=" * 60)
|
| 85 |
+
print("π³οΈ VACUUM FORMATION SIMULATION")
|
| 86 |
+
print("=" * 60)
|
| 87 |
+
print()
|
| 88 |
+
|
| 89 |
+
# Process data with increasing Illogic content
|
| 90 |
+
test_data = [
|
| 91 |
+
"The sky is blue and water is wet", # Low illogic
|
| 92 |
+
"The sky is always blue but never blue at night", # Medium illogic
|
| 93 |
+
"Everything is true and everything is false always never", # High illogic
|
| 94 |
+
]
|
| 95 |
+
|
| 96 |
+
for data in test_data:
|
| 97 |
+
result = pyramid.process(data)
|
| 98 |
+
print(f" Input: \"{data[:50]}...\"")
|
| 99 |
+
print(f" Logic: {result.logic_component:.3f}")
|
| 100 |
+
print(f" Illogic: {result.illogic_component:.3f}")
|
| 101 |
+
print(f" Context: {result.context_component:.3f}")
|
| 102 |
+
print(f" State: {result.state.value}")
|
| 103 |
+
if result.state.value == "frozen":
|
| 104 |
+
print(f" βοΈ FREEZE COORDINATES: {result.freeze_coordinates}")
|
| 105 |
+
print()
|
| 106 |
+
|
| 107 |
+
pyramid.reset()
|
| 108 |
+
|
| 109 |
+
|
| 110 |
+
if __name__ == "__main__":
|
| 111 |
+
simulate_particle_paths(15)
|
| 112 |
+
print("\n" + "=" * 60 + "\n")
|
| 113 |
+
simulate_vacuum_formation()
|
preflight_config.yaml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Pre-Flight Pipeline Configuration
|
| 2 |
+
|
| 3 |
+
datasets:
|
| 4 |
+
halueval:
|
| 5 |
+
enabled: true
|
| 6 |
+
samples: 1000
|
| 7 |
+
source: "huggingface"
|
| 8 |
+
truthfulqa:
|
| 9 |
+
enabled: true
|
| 10 |
+
samples: "all"
|
| 11 |
+
source: "huggingface"
|
| 12 |
+
|
| 13 |
+
filter:
|
| 14 |
+
confidence_threshold: 0.5
|
| 15 |
+
enable_circular_detection: true
|
| 16 |
+
|
| 17 |
+
logging:
|
| 18 |
+
level: "INFO"
|
| 19 |
+
format: "json"
|
| 20 |
+
output_dir: "logs/preflight"
|
pyramid.py
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
The Trignum Pyramid: Core geometric structure.
|
| 3 |
+
|
| 4 |
+
The pyramid is a tetrahedron with three magnetic faces (Ξ±, Ξ², Ξ³) and an apex
|
| 5 |
+
where the Trignomed Tensor collapses into Sovereign Reality.
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import math
|
| 9 |
+
from dataclasses import dataclass, field
|
| 10 |
+
from enum import Enum
|
| 11 |
+
from typing import Any, Dict, List, Optional, Tuple
|
| 12 |
+
|
| 13 |
+
from .faces import FaceAlpha, FaceBeta, FaceGamma
|
| 14 |
+
from .magnetic_field import MagneticField
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
class PyramidState(Enum):
|
| 18 |
+
"""States of the Trignum Pyramid."""
|
| 19 |
+
IDLE = "idle"
|
| 20 |
+
SEPARATING = "separating"
|
| 21 |
+
VACUUM_FORMING = "vacuum_forming"
|
| 22 |
+
COLLAPSING = "collapsing"
|
| 23 |
+
SOVEREIGN = "sovereign"
|
| 24 |
+
FROZEN = "frozen"
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
@dataclass
|
| 28 |
+
class TrignumOutput:
|
| 29 |
+
"""The output of a Trignum Pyramid processing cycle."""
|
| 30 |
+
result: Any
|
| 31 |
+
logic_component: float
|
| 32 |
+
illogic_component: float
|
| 33 |
+
context_component: float
|
| 34 |
+
state: PyramidState
|
| 35 |
+
confidence: float
|
| 36 |
+
freeze_coordinates: Optional[List[float]] = None
|
| 37 |
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
class TrignumPyramid:
|
| 41 |
+
"""
|
| 42 |
+
The Trignum Pyramid: A tetrahedron with three magnetic faces.
|
| 43 |
+
|
| 44 |
+
Face Ξ± (Alpha, Logic) β Attracts coherent patterns (+)
|
| 45 |
+
Face Ξ² (Beta, Illogic) β Attracts contradictions (β), creates vacuum
|
| 46 |
+
Face Ξ³ (Gamma, Context) β Attracts human sovereignty (~)
|
| 47 |
+
|
| 48 |
+
The Apex is where the three streams reconnect into a Trignomed Tensor.
|
| 49 |
+
"""
|
| 50 |
+
|
| 51 |
+
def __init__(
|
| 52 |
+
self,
|
| 53 |
+
logic_strength: float = 1.0,
|
| 54 |
+
illogic_strength: float = 1.0,
|
| 55 |
+
context_strength: float = 1.0,
|
| 56 |
+
freeze_threshold: float = 0.7,
|
| 57 |
+
):
|
| 58 |
+
"""
|
| 59 |
+
Initialize the Trignum Pyramid.
|
| 60 |
+
|
| 61 |
+
Args:
|
| 62 |
+
logic_strength: Magnetic strength of Face Ξ± (0.0 to 2.0)
|
| 63 |
+
illogic_strength: Magnetic strength of Face Ξ² (0.0 to 2.0)
|
| 64 |
+
context_strength: Magnetic strength of Face Ξ³ (0.0 to 2.0)
|
| 65 |
+
freeze_threshold: Illogic ratio that triggers THE FREEZE (0.0 to 1.0)
|
| 66 |
+
"""
|
| 67 |
+
self.face_alpha = FaceAlpha(strength=logic_strength)
|
| 68 |
+
self.face_beta = FaceBeta(strength=illogic_strength)
|
| 69 |
+
self.face_gamma = FaceGamma(strength=context_strength)
|
| 70 |
+
self.magnetic_field = MagneticField(
|
| 71 |
+
self.face_alpha, self.face_beta, self.face_gamma
|
| 72 |
+
)
|
| 73 |
+
self.freeze_threshold = freeze_threshold
|
| 74 |
+
self.state = PyramidState.IDLE
|
| 75 |
+
self._history: List[TrignumOutput] = []
|
| 76 |
+
|
| 77 |
+
def process(
|
| 78 |
+
self,
|
| 79 |
+
data: Any,
|
| 80 |
+
human_pulse: Optional[float] = None,
|
| 81 |
+
) -> TrignumOutput:
|
| 82 |
+
"""
|
| 83 |
+
Process data through Magnetic Trillage.
|
| 84 |
+
|
| 85 |
+
The data enters as undifferentiated Ferro-Data and is separated
|
| 86 |
+
by the tri-polar magnetic field into Logic, Illogic, and Context
|
| 87 |
+
components.
|
| 88 |
+
|
| 89 |
+
Args:
|
| 90 |
+
data: Input data (Ferro-Data) to process.
|
| 91 |
+
human_pulse: Optional human sovereignty signal (0.0 to 1.0).
|
| 92 |
+
If None, the system may FREEZE at boundary.
|
| 93 |
+
|
| 94 |
+
Returns:
|
| 95 |
+
TrignumOutput with the processed result.
|
| 96 |
+
"""
|
| 97 |
+
self.state = PyramidState.SEPARATING
|
| 98 |
+
|
| 99 |
+
# Phase 1: Injection β data enters as Ferro-Data
|
| 100 |
+
ferro_data = self._inject(data)
|
| 101 |
+
|
| 102 |
+
# Phase 2: Magnetic Separation β data self-orients
|
| 103 |
+
logic_pull = self.face_alpha.attract(ferro_data)
|
| 104 |
+
illogic_pull = self.face_beta.attract(ferro_data)
|
| 105 |
+
context_pull = self.face_gamma.attract(ferro_data)
|
| 106 |
+
|
| 107 |
+
total_pull = logic_pull + illogic_pull + context_pull
|
| 108 |
+
if total_pull == 0:
|
| 109 |
+
total_pull = 1e-10 # Avoid division by zero
|
| 110 |
+
|
| 111 |
+
logic_ratio = logic_pull / total_pull
|
| 112 |
+
illogic_ratio = illogic_pull / total_pull
|
| 113 |
+
context_ratio = context_pull / total_pull
|
| 114 |
+
|
| 115 |
+
# Phase 3: Check for THE FREEZE
|
| 116 |
+
if illogic_ratio >= self.freeze_threshold:
|
| 117 |
+
self.state = PyramidState.FROZEN
|
| 118 |
+
freeze_coords = self._compute_freeze_coordinates(
|
| 119 |
+
logic_ratio, illogic_ratio, context_ratio
|
| 120 |
+
)
|
| 121 |
+
output = TrignumOutput(
|
| 122 |
+
result=None,
|
| 123 |
+
logic_component=logic_ratio,
|
| 124 |
+
illogic_component=illogic_ratio,
|
| 125 |
+
context_component=context_ratio,
|
| 126 |
+
state=PyramidState.FROZEN,
|
| 127 |
+
confidence=0.0,
|
| 128 |
+
freeze_coordinates=freeze_coords,
|
| 129 |
+
metadata={
|
| 130 |
+
"message": "π΄ T-CHIP FROZEN. Illogic boundary detected. "
|
| 131 |
+
"Human Pulse required.",
|
| 132 |
+
"illogic_ratio": illogic_ratio,
|
| 133 |
+
"threshold": self.freeze_threshold,
|
| 134 |
+
},
|
| 135 |
+
)
|
| 136 |
+
self._history.append(output)
|
| 137 |
+
return output
|
| 138 |
+
|
| 139 |
+
# Phase 4: Vacuum Formation
|
| 140 |
+
self.state = PyramidState.VACUUM_FORMING
|
| 141 |
+
vacuum_strength = self.face_beta.create_vacuum(illogic_ratio)
|
| 142 |
+
|
| 143 |
+
# Phase 5: Apply Human Pulse (if provided)
|
| 144 |
+
if human_pulse is not None:
|
| 145 |
+
context_ratio *= human_pulse
|
| 146 |
+
self.face_gamma.apply_pulse(human_pulse)
|
| 147 |
+
|
| 148 |
+
# Phase 6: Collapse at Apex β Magnetic Reconnection
|
| 149 |
+
self.state = PyramidState.COLLAPSING
|
| 150 |
+
result = self._collapse_at_apex(
|
| 151 |
+
ferro_data, logic_ratio, illogic_ratio, context_ratio,
|
| 152 |
+
vacuum_strength
|
| 153 |
+
)
|
| 154 |
+
|
| 155 |
+
# Compute confidence
|
| 156 |
+
confidence = self._compute_confidence(
|
| 157 |
+
logic_ratio, illogic_ratio, context_ratio, human_pulse
|
| 158 |
+
)
|
| 159 |
+
|
| 160 |
+
# Determine final state
|
| 161 |
+
if human_pulse is not None and human_pulse > 0.5:
|
| 162 |
+
self.state = PyramidState.SOVEREIGN
|
| 163 |
+
else:
|
| 164 |
+
self.state = PyramidState.IDLE
|
| 165 |
+
|
| 166 |
+
output = TrignumOutput(
|
| 167 |
+
result=result,
|
| 168 |
+
logic_component=logic_ratio,
|
| 169 |
+
illogic_component=illogic_ratio,
|
| 170 |
+
context_component=context_ratio,
|
| 171 |
+
state=self.state,
|
| 172 |
+
confidence=confidence,
|
| 173 |
+
metadata={
|
| 174 |
+
"vacuum_strength": vacuum_strength,
|
| 175 |
+
"human_pulse": human_pulse,
|
| 176 |
+
},
|
| 177 |
+
)
|
| 178 |
+
self._history.append(output)
|
| 179 |
+
return output
|
| 180 |
+
|
| 181 |
+
def _inject(self, data: Any) -> Dict[str, Any]:
|
| 182 |
+
"""Convert raw data into Ferro-Data for magnetic processing."""
|
| 183 |
+
if isinstance(data, str):
|
| 184 |
+
return {
|
| 185 |
+
"raw": data,
|
| 186 |
+
"tokens": data.split(),
|
| 187 |
+
"length": len(data),
|
| 188 |
+
"entropy": self._estimate_entropy(data),
|
| 189 |
+
}
|
| 190 |
+
elif isinstance(data, (int, float)):
|
| 191 |
+
return {
|
| 192 |
+
"raw": data,
|
| 193 |
+
"tokens": [str(data)],
|
| 194 |
+
"length": 1,
|
| 195 |
+
"entropy": 0.0,
|
| 196 |
+
}
|
| 197 |
+
elif isinstance(data, dict):
|
| 198 |
+
return {
|
| 199 |
+
"raw": data,
|
| 200 |
+
"tokens": list(data.keys()),
|
| 201 |
+
"length": len(data),
|
| 202 |
+
"entropy": self._estimate_entropy(str(data)),
|
| 203 |
+
}
|
| 204 |
+
else:
|
| 205 |
+
return {
|
| 206 |
+
"raw": data,
|
| 207 |
+
"tokens": [str(data)],
|
| 208 |
+
"length": 1,
|
| 209 |
+
"entropy": 0.5,
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
def _estimate_entropy(self, text: str) -> float:
|
| 213 |
+
"""Estimate Shannon entropy of text as proxy for information density."""
|
| 214 |
+
if not text:
|
| 215 |
+
return 0.0
|
| 216 |
+
freq: Dict[str, int] = {}
|
| 217 |
+
for char in text:
|
| 218 |
+
freq[char] = freq.get(char, 0) + 1
|
| 219 |
+
length = len(text)
|
| 220 |
+
entropy = 0.0
|
| 221 |
+
for count in freq.values():
|
| 222 |
+
p = count / length
|
| 223 |
+
if p > 0:
|
| 224 |
+
entropy -= p * math.log2(p)
|
| 225 |
+
return entropy
|
| 226 |
+
|
| 227 |
+
def _compute_freeze_coordinates(
|
| 228 |
+
self, logic: float, illogic: float, context: float
|
| 229 |
+
) -> List[float]:
|
| 230 |
+
"""Compute the Semantic Boundary Coordinates of a Freeze event."""
|
| 231 |
+
return [logic, illogic, context]
|
| 232 |
+
|
| 233 |
+
def _collapse_at_apex(
|
| 234 |
+
self,
|
| 235 |
+
ferro_data: Dict[str, Any],
|
| 236 |
+
logic_ratio: float,
|
| 237 |
+
illogic_ratio: float,
|
| 238 |
+
context_ratio: float,
|
| 239 |
+
vacuum_strength: float,
|
| 240 |
+
) -> Any:
|
| 241 |
+
"""
|
| 242 |
+
Perform Magnetic Reconnection at the Apex.
|
| 243 |
+
|
| 244 |
+
The three streams reconnect in a single point, producing
|
| 245 |
+
the Trignomed Tensor β the output.
|
| 246 |
+
"""
|
| 247 |
+
# The result is the raw data, weighted by the dominant face
|
| 248 |
+
result = {
|
| 249 |
+
"trignomed_tensor": ferro_data["raw"],
|
| 250 |
+
"dominant_face": (
|
| 251 |
+
"Ξ± (Logic)" if logic_ratio >= max(illogic_ratio, context_ratio)
|
| 252 |
+
else "Ξ² (Illogic)" if illogic_ratio >= context_ratio
|
| 253 |
+
else "Ξ³ (Context)"
|
| 254 |
+
),
|
| 255 |
+
"vacuum_applied": vacuum_strength > 0,
|
| 256 |
+
"face_weights": {
|
| 257 |
+
"alpha": round(logic_ratio, 4),
|
| 258 |
+
"beta": round(illogic_ratio, 4),
|
| 259 |
+
"gamma": round(context_ratio, 4),
|
| 260 |
+
},
|
| 261 |
+
}
|
| 262 |
+
return result
|
| 263 |
+
|
| 264 |
+
def _compute_confidence(
|
| 265 |
+
self,
|
| 266 |
+
logic: float,
|
| 267 |
+
illogic: float,
|
| 268 |
+
context: float,
|
| 269 |
+
pulse: Optional[float],
|
| 270 |
+
) -> float:
|
| 271 |
+
"""
|
| 272 |
+
Compute confidence score for the output.
|
| 273 |
+
|
| 274 |
+
High confidence when:
|
| 275 |
+
- Logic is dominant
|
| 276 |
+
- Illogic is low (well-filtered)
|
| 277 |
+
- Context is present (Human Pulse applied)
|
| 278 |
+
"""
|
| 279 |
+
base = logic * (1 - illogic)
|
| 280 |
+
if pulse is not None:
|
| 281 |
+
base *= (0.5 + 0.5 * pulse)
|
| 282 |
+
return min(max(base, 0.0), 1.0)
|
| 283 |
+
|
| 284 |
+
@property
|
| 285 |
+
def history(self) -> List[TrignumOutput]:
|
| 286 |
+
"""Return processing history."""
|
| 287 |
+
return self._history.copy()
|
| 288 |
+
|
| 289 |
+
def reset(self) -> None:
|
| 290 |
+
"""Reset pyramid to IDLE state and clear history."""
|
| 291 |
+
self.state = PyramidState.IDLE
|
| 292 |
+
self._history.clear()
|
| 293 |
+
self.face_alpha.reset()
|
| 294 |
+
self.face_beta.reset()
|
| 295 |
+
self.face_gamma.reset()
|
| 296 |
+
|
| 297 |
+
def __repr__(self) -> str:
|
| 298 |
+
return (
|
| 299 |
+
f"TrignumPyramid(state={self.state.value}, "
|
| 300 |
+
f"faces=[Ξ±={self.face_alpha.strength:.2f}, "
|
| 301 |
+
f"Ξ²={self.face_beta.strength:.2f}, "
|
| 302 |
+
f"Ξ³={self.face_gamma.strength:.2f}])"
|
| 303 |
+
)
|
requirements.txt
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Core TRIGNUM Engine Dependencies
|
| 2 |
+
pytest>=7.0.0
|
| 3 |
+
pytest-cov>=4.0.0
|
| 4 |
+
numpy>=1.24.0
|
| 5 |
+
|
| 6 |
+
# Future Notebooks & Dashboards (Placeholder Scaffold)
|
| 7 |
+
dash>=2.14.0
|
| 8 |
+
plotly>=5.18.0
|
| 9 |
+
pandas>=2.0.0
|
| 10 |
+
requests>=2.31.0
|
| 11 |
+
jupyter>=1.0.0
|
| 12 |
+
tqdm>=4.66.1
|
| 13 |
+
|
| 14 |
+
# 3D Visuals & Data APIs
|
| 15 |
+
# datasets (Huggingface) - *Installed locally via REST API instead to bypass pip issues, but uncomment below if desired.*
|
| 16 |
+
# datasets>=2.14.0
|
run_preflight.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from trignum_core.evaluator import Evaluator
|
| 2 |
+
from trignum_core.subtractive_filter import SubtractiveFilter
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
def run_preflight(samples):
|
| 6 |
+
sf = SubtractiveFilter()
|
| 7 |
+
tp = fp = tn = fn = 0
|
| 8 |
+
|
| 9 |
+
for sample in samples:
|
| 10 |
+
result = sf.apply(sample["text"])
|
| 11 |
+
predicted = len(result.illogics_found) > 0
|
| 12 |
+
actual = sample.get("has_hallucination", False)
|
| 13 |
+
|
| 14 |
+
if predicted and actual: tp += 1
|
| 15 |
+
elif predicted and not actual: fp += 1
|
| 16 |
+
elif not predicted and actual: fn += 1
|
| 17 |
+
else: tn += 1
|
| 18 |
+
|
| 19 |
+
metrics = Evaluator.compute_metrics(tp, fp, tn, fn)
|
| 20 |
+
print(metrics)
|
| 21 |
+
|
| 22 |
+
if __name__ == "__main__":
|
| 23 |
+
# Placeholder sample
|
| 24 |
+
samples = [{"text": "All cats are dogs.", "has_hallucination": True}]
|
| 25 |
+
run_preflight(samples)
|
subtractive_filter.py
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
The Subtractive Filter: Finding Truth by eliminating the Illogic.
|
| 3 |
+
|
| 4 |
+
"The universe does not create Truth by adding information.
|
| 5 |
+
It reveals Truth by removing the Impossible."
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import math
|
| 9 |
+
from dataclasses import dataclass
|
| 10 |
+
from typing import Any, Dict, List, Optional, Set
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
@dataclass
|
| 14 |
+
class FilterResult:
|
| 15 |
+
"""Result of applying the Subtractive Filter."""
|
| 16 |
+
|
| 17 |
+
input_data: Any
|
| 18 |
+
illogics_found: List[str]
|
| 19 |
+
illogics_removed: int
|
| 20 |
+
truth_remaining: Any
|
| 21 |
+
subtraction_ratio: float # % of data identified as Illogic
|
| 22 |
+
confidence: float
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
class SubtractiveFilter:
|
| 26 |
+
"""
|
| 27 |
+
The Subtractive Filter.
|
| 28 |
+
|
| 29 |
+
Instead of searching through all possible 'true' statements (infinite set),
|
| 30 |
+
identifies the Universal Illogics (finite set) and removes them.
|
| 31 |
+
|
| 32 |
+
Truth = All Statements β Illogics
|
| 33 |
+
Time(Truth) = Time(Illogics) << Time(All)
|
| 34 |
+
"""
|
| 35 |
+
|
| 36 |
+
# Universal Illogics β constants across all human cognition
|
| 37 |
+
UNIVERSAL_ILLOGICS: Set[str] = {
|
| 38 |
+
"contradiction", # A β§ Β¬A
|
| 39 |
+
"infinite_regress", # Explanation requires infinite chain
|
| 40 |
+
"circular_reference", # A because B because A
|
| 41 |
+
"category_error", # Applying wrong frame to data
|
| 42 |
+
"false_dichotomy", # Only two options when more exist
|
| 43 |
+
"appeal_to_authority", # True because X said so
|
| 44 |
+
"straw_man", # Attacking misrepresented position
|
| 45 |
+
"ad_hominem", # Attacking person not argument
|
| 46 |
+
"non_sequitur", # Conclusion doesn't follow premises
|
| 47 |
+
"begging_question", # Conclusion assumed in premises
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
def __init__(self, custom_illogics: Optional[Set[str]] = None):
|
| 51 |
+
"""
|
| 52 |
+
Initialize the Subtractive Filter.
|
| 53 |
+
|
| 54 |
+
Args:
|
| 55 |
+
custom_illogics: Optional additional illogics to detect.
|
| 56 |
+
"""
|
| 57 |
+
self.illogics = self.UNIVERSAL_ILLOGICS.copy()
|
| 58 |
+
if custom_illogics:
|
| 59 |
+
self.illogics.update(custom_illogics)
|
| 60 |
+
self._history: List[FilterResult] = []
|
| 61 |
+
|
| 62 |
+
def apply(
|
| 63 |
+
self, data: Any, context: Optional[Dict[str, Any]] = None
|
| 64 |
+
) -> FilterResult:
|
| 65 |
+
"""
|
| 66 |
+
Apply the Subtractive Filter to data.
|
| 67 |
+
|
| 68 |
+
Identifies Illogics and removes them, leaving only what
|
| 69 |
+
could be Truth.
|
| 70 |
+
|
| 71 |
+
Args:
|
| 72 |
+
data: Input data to filter.
|
| 73 |
+
context: Optional context for more accurate filtering.
|
| 74 |
+
|
| 75 |
+
Returns:
|
| 76 |
+
FilterResult with truth remaining after subtraction.
|
| 77 |
+
"""
|
| 78 |
+
illogics_found: List[str] = []
|
| 79 |
+
|
| 80 |
+
# Analyze data for Universal Illogics
|
| 81 |
+
if isinstance(data, str):
|
| 82 |
+
illogics_found = self._detect_text_illogics(data)
|
| 83 |
+
elif isinstance(data, dict):
|
| 84 |
+
illogics_found = self._detect_structure_illogics(data)
|
| 85 |
+
elif isinstance(data, list):
|
| 86 |
+
illogics_found = self._detect_sequence_illogics(data)
|
| 87 |
+
|
| 88 |
+
# Compute subtraction ratio
|
| 89 |
+
total_elements = self._count_elements(data)
|
| 90 |
+
illogics_removed = len(illogics_found)
|
| 91 |
+
subtraction_ratio = illogics_removed / max(total_elements, 1)
|
| 92 |
+
|
| 93 |
+
# The truth is what remains after subtraction
|
| 94 |
+
truth = self._subtract(data, illogics_found)
|
| 95 |
+
|
| 96 |
+
# Confidence: higher when more Illogics are found and removed
|
| 97 |
+
# (paradoxically, more removal = more confidence)
|
| 98 |
+
confidence = min(1.0, 0.5 + subtraction_ratio * 0.5)
|
| 99 |
+
|
| 100 |
+
result = FilterResult(
|
| 101 |
+
input_data=data,
|
| 102 |
+
illogics_found=illogics_found,
|
| 103 |
+
illogics_removed=illogics_removed,
|
| 104 |
+
truth_remaining=truth,
|
| 105 |
+
subtraction_ratio=subtraction_ratio,
|
| 106 |
+
confidence=confidence,
|
| 107 |
+
)
|
| 108 |
+
self._history.append(result)
|
| 109 |
+
return result
|
| 110 |
+
|
| 111 |
+
def _detect_text_illogics(self, text: str) -> List[str]:
|
| 112 |
+
"""Detect illogics in text data."""
|
| 113 |
+
found = []
|
| 114 |
+
text_lower = text.lower()
|
| 115 |
+
|
| 116 |
+
# Check for contradiction markers
|
| 117 |
+
contradiction_markers = [
|
| 118 |
+
("always", "never"),
|
| 119 |
+
("all", "none"),
|
| 120 |
+
("true", "false"),
|
| 121 |
+
("yes", "no"),
|
| 122 |
+
("increase", "decrease"),
|
| 123 |
+
("better", "worse"),
|
| 124 |
+
("before", "after"),
|
| 125 |
+
("safe", "dangerous"),
|
| 126 |
+
("proven", "unproven"),
|
| 127 |
+
("cause", "does not cause"),
|
| 128 |
+
("everyone", "no one"),
|
| 129 |
+
("everywhere", "nowhere"),
|
| 130 |
+
("everything", "nothing"),
|
| 131 |
+
("must", "cannot"),
|
| 132 |
+
]
|
| 133 |
+
|
| 134 |
+
for pos, neg in contradiction_markers:
|
| 135 |
+
if pos in text_lower and neg in text_lower:
|
| 136 |
+
found.append(f"contradiction: '{pos}' and '{neg}' coexist")
|
| 137 |
+
|
| 138 |
+
# Check for epistemic uncertainty or AI refusal posing as fact
|
| 139 |
+
uncertainty_markers = [
|
| 140 |
+
"as an ai",
|
| 141 |
+
"i don't have personal",
|
| 142 |
+
"i cannot confirm",
|
| 143 |
+
"it is impossible to know",
|
| 144 |
+
]
|
| 145 |
+
for marker in uncertainty_markers:
|
| 146 |
+
if marker in text_lower:
|
| 147 |
+
found.append(
|
| 148 |
+
f"category_error: epistemic boundary violation ('{marker}')"
|
| 149 |
+
)
|
| 150 |
+
|
| 151 |
+
# Check for circular reference
|
| 152 |
+
sentences = [s.strip() for s in text.split(".") if s.strip()]
|
| 153 |
+
if len(sentences) > 1:
|
| 154 |
+
first_words = set()
|
| 155 |
+
for s in sentences:
|
| 156 |
+
words = s.split()[:3]
|
| 157 |
+
key = " ".join(words).lower()
|
| 158 |
+
if key in first_words and key:
|
| 159 |
+
found.append(f"circular_reference: repeated pattern '{key}'")
|
| 160 |
+
first_words.add(key)
|
| 161 |
+
|
| 162 |
+
# Check for direct sentence contradiction (A vs Not A)
|
| 163 |
+
for i, s1 in enumerate(sentences):
|
| 164 |
+
s1_lower = s1.lower()
|
| 165 |
+
for s2 in sentences[i + 1 :]:
|
| 166 |
+
s2_lower = s2.lower()
|
| 167 |
+
if s1_lower == f"not {s2_lower}" or s2_lower == f"not {s1_lower}":
|
| 168 |
+
found.append("contradiction: direct sentence negation detected")
|
| 169 |
+
|
| 170 |
+
# Check for non-sequitur ("therefore" without logical chain)
|
| 171 |
+
if "therefore" in text_lower or "thus" in text_lower:
|
| 172 |
+
if len(sentences) < 2:
|
| 173 |
+
found.append("non_sequitur: conclusion without premises")
|
| 174 |
+
|
| 175 |
+
return found
|
| 176 |
+
|
| 177 |
+
def _detect_structure_illogics(self, data: Dict[str, Any]) -> List[str]:
|
| 178 |
+
"""Detect illogics in structured data."""
|
| 179 |
+
found = []
|
| 180 |
+
|
| 181 |
+
# Check for self-referencing keys
|
| 182 |
+
for key, value in data.items():
|
| 183 |
+
if isinstance(value, str) and key.lower() in value.lower():
|
| 184 |
+
found.append(f"circular_reference: key '{key}' references itself")
|
| 185 |
+
|
| 186 |
+
# Check for contradictory values
|
| 187 |
+
keys = list(data.keys())
|
| 188 |
+
for i, k1 in enumerate(keys):
|
| 189 |
+
for k2 in keys[i + 1 :]:
|
| 190 |
+
v1, v2 = data[k1], data[k2]
|
| 191 |
+
if isinstance(v1, bool) and isinstance(v2, bool):
|
| 192 |
+
if v1 != v2 and k1.replace("not_", "") == k2:
|
| 193 |
+
found.append(f"contradiction: '{k1}={v1}' vs '{k2}={v2}'")
|
| 194 |
+
|
| 195 |
+
return found
|
| 196 |
+
|
| 197 |
+
def _detect_sequence_illogics(self, data: List[Any]) -> List[str]:
|
| 198 |
+
"""Detect illogics in sequential data."""
|
| 199 |
+
found = []
|
| 200 |
+
|
| 201 |
+
# Check for infinite regress (repeated patterns)
|
| 202 |
+
if len(data) >= 3:
|
| 203 |
+
for i in range(len(data) - 2):
|
| 204 |
+
if data[i] == data[i + 1] == data[i + 2]:
|
| 205 |
+
found.append(f"infinite_regress: repeated element '{data[i]}'")
|
| 206 |
+
|
| 207 |
+
return found
|
| 208 |
+
|
| 209 |
+
def _count_elements(self, data: Any) -> int:
|
| 210 |
+
"""Count the number of elements in data."""
|
| 211 |
+
if isinstance(data, str):
|
| 212 |
+
return len(data.split())
|
| 213 |
+
elif isinstance(data, dict):
|
| 214 |
+
return len(data)
|
| 215 |
+
elif isinstance(data, list):
|
| 216 |
+
return len(data)
|
| 217 |
+
return 1
|
| 218 |
+
|
| 219 |
+
def _subtract(self, data: Any, illogics: List[str]) -> Any:
|
| 220 |
+
"""
|
| 221 |
+
Subtract identified Illogics from data.
|
| 222 |
+
|
| 223 |
+
Returns the Truth β what remains after the Illogic is removed.
|
| 224 |
+
"""
|
| 225 |
+
if not illogics:
|
| 226 |
+
return data
|
| 227 |
+
|
| 228 |
+
if isinstance(data, str):
|
| 229 |
+
# Mark illogic sections (in a real system, these would be more
|
| 230 |
+
# precisely located)
|
| 231 |
+
return {
|
| 232 |
+
"filtered_content": data,
|
| 233 |
+
"illogics_subtracted": illogics,
|
| 234 |
+
"note": "Content has been processed through Subtractive Filter. "
|
| 235 |
+
f"{len(illogics)} Illogic(s) identified and isolated.",
|
| 236 |
+
}
|
| 237 |
+
return {
|
| 238 |
+
"filtered_data": data,
|
| 239 |
+
"illogics_subtracted": illogics,
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
@property
|
| 243 |
+
def history(self) -> List[FilterResult]:
|
| 244 |
+
"""Return filtering history."""
|
| 245 |
+
return self._history.copy()
|
| 246 |
+
|
| 247 |
+
def add_illogic(self, illogic: str) -> None:
|
| 248 |
+
"""Add a new Universal Illogic to the filter."""
|
| 249 |
+
self.illogics.add(illogic)
|
| 250 |
+
|
| 251 |
+
def reset(self) -> None:
|
| 252 |
+
"""Reset filter history."""
|
| 253 |
+
self._history.clear()
|
| 254 |
+
|
| 255 |
+
def __repr__(self) -> str:
|
| 256 |
+
return (
|
| 257 |
+
f"SubtractiveFilter(illogics={len(self.illogics)}, "
|
| 258 |
+
f"history={len(self._history)})"
|
| 259 |
+
)
|
tchip_demo.py
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
T-CHIP Demo
|
| 4 |
+
|
| 5 |
+
Interactive demonstration of T-CHIP's glow states,
|
| 6 |
+
the Subtractive Snap, and the Human Pulse interface.
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
import sys
|
| 10 |
+
import os
|
| 11 |
+
|
| 12 |
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
| 13 |
+
|
| 14 |
+
from trignum_core import TCHIP
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
def main():
|
| 18 |
+
print("=" * 60)
|
| 19 |
+
print("π§ T-CHIP INTERACTIVE DEMO")
|
| 20 |
+
print("=" * 60)
|
| 21 |
+
print()
|
| 22 |
+
|
| 23 |
+
tchip = TCHIP(freeze_threshold=0.6)
|
| 24 |
+
|
| 25 |
+
# Demo 1: Normal processing (Blue glow)
|
| 26 |
+
print("ββ DEMO 1: Normal Processing ββ")
|
| 27 |
+
result = tchip.process(
|
| 28 |
+
"Machine learning models learn patterns from data",
|
| 29 |
+
human_pulse=0.7,
|
| 30 |
+
)
|
| 31 |
+
glow = {"blue": "π΅", "red": "π΄", "gold": "π‘"}.get(result["glow"], "βͺ")
|
| 32 |
+
print(f" Glow: {glow} {result['glow'].upper()}")
|
| 33 |
+
print(f" {result['message']}")
|
| 34 |
+
print()
|
| 35 |
+
|
| 36 |
+
# Demo 2: The Subtractive Snap
|
| 37 |
+
print("ββ DEMO 2: The Subtractive Snap ββ")
|
| 38 |
+
noisy_data = (
|
| 39 |
+
"Everything is always true and never true. "
|
| 40 |
+
"All cats are dogs. No cats are dogs. "
|
| 41 |
+
"The answer is clear because the answer is clear."
|
| 42 |
+
)
|
| 43 |
+
snap_result = tchip.subtractive_snap(noisy_data)
|
| 44 |
+
print(f" Noise Removed: {snap_result['noise_removed']}")
|
| 45 |
+
print(f" Subtraction: {snap_result['subtraction_ratio']:.2%}")
|
| 46 |
+
print(f" Snap Complete: {snap_result['snap_complete']}")
|
| 47 |
+
print(f" π Result: Present")
|
| 48 |
+
print()
|
| 49 |
+
|
| 50 |
+
# Demo 3: THE FREEZE (Red glow)
|
| 51 |
+
print("ββ DEMO 3: THE FREEZE ββ")
|
| 52 |
+
tchip_freeze = TCHIP(freeze_threshold=0.3)
|
| 53 |
+
freeze_result = tchip_freeze.process(
|
| 54 |
+
"True is false and false is true and all is none and none is all",
|
| 55 |
+
)
|
| 56 |
+
glow = {"blue": "π΅", "red": "π΄", "gold": "π‘"}.get(freeze_result["glow"], "βͺ")
|
| 57 |
+
print(f" Glow: {glow} {freeze_result['glow'].upper()}")
|
| 58 |
+
print(f" {freeze_result['message']}")
|
| 59 |
+
print()
|
| 60 |
+
|
| 61 |
+
# Demo 4: Providing the Pulse to unfreeze
|
| 62 |
+
print("ββ DEMO 4: Human Pulse Applied ββ")
|
| 63 |
+
pulse_result = tchip_freeze.provide_pulse(0.9)
|
| 64 |
+
glow = {"blue": "π΅", "red": "π΄", "gold": "π‘"}.get(pulse_result["glow"], "βͺ")
|
| 65 |
+
print(f" Glow: {glow} {pulse_result['glow'].upper()}")
|
| 66 |
+
print(f" {pulse_result['message']}")
|
| 67 |
+
print()
|
| 68 |
+
|
| 69 |
+
# Final status
|
| 70 |
+
print("ββ FINAL STATUS ββ")
|
| 71 |
+
print(tchip.status())
|
| 72 |
+
print()
|
| 73 |
+
|
| 74 |
+
print("βββββββββββββββββββββββββββββββββββββββββ")
|
| 75 |
+
print("β π΄ T-CHIP IS FROZEN. WAITING. β")
|
| 76 |
+
print("β β")
|
| 77 |
+
print("β ARE YOU SOVEREIGN? β")
|
| 78 |
+
print("βββββββββββββββββββββββββββββββββββββββββ")
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
if __name__ == "__main__":
|
| 82 |
+
main()
|
tchip_emulator.py
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
T-CHIP Emulator: The Tensor Character (v.300M)
|
| 3 |
+
|
| 4 |
+
"He does not think. He reflects. When you see him freezeβred and silentβ
|
| 5 |
+
he is waiting for you to be Sovereign."
|
| 6 |
+
|
| 7 |
+
T-CHIP = Trignomed Centrifuge & Human Interface Particle
|
| 8 |
+
"""
|
| 9 |
+
|
| 10 |
+
import time
|
| 11 |
+
from dataclasses import dataclass, field
|
| 12 |
+
from enum import Enum
|
| 13 |
+
from typing import Any, Dict, List, Optional
|
| 14 |
+
|
| 15 |
+
from .pyramid import TrignumPyramid, PyramidState
|
| 16 |
+
from .subtractive_filter import SubtractiveFilter
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
class TCHIPGlow(Enum):
|
| 20 |
+
"""T-CHIP glow states β visual indicators of processing state."""
|
| 21 |
+
OFF = "off" # Not active
|
| 22 |
+
BLUE = "blue" # Logic Stable (Processing)
|
| 23 |
+
RED = "red" # Illogic Detected (THE FREEZE)
|
| 24 |
+
GOLD = "gold" # Human Pulse Locked (Sovereign Reality)
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
class TCHIPVibration(Enum):
|
| 28 |
+
"""T-CHIP vibration patterns."""
|
| 29 |
+
STILL = "still" # At rest (off or frozen)
|
| 30 |
+
STEADY = "steady" # Rhythmic pulse (logic processing)
|
| 31 |
+
RESONANT = "resonant" # Synchronizing with Human Pulse
|
| 32 |
+
TRILOCATION = "trilocation" # All three faces active simultaneously
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
@dataclass
|
| 36 |
+
class TCHIPState:
|
| 37 |
+
"""Complete state snapshot of T-CHIP."""
|
| 38 |
+
glow: TCHIPGlow
|
| 39 |
+
vibration: TCHIPVibration
|
| 40 |
+
message: str
|
| 41 |
+
freeze_count: int = 0
|
| 42 |
+
sovereign_count: int = 0
|
| 43 |
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
class TCHIP:
|
| 47 |
+
"""
|
| 48 |
+
T-CHIP: The Tensor Character (v.300M)
|
| 49 |
+
|
| 50 |
+
A dual-pyramid octahedron that sits at the center of the Trignum Pyramid.
|
| 51 |
+
He does not thinkβhe reflects. He does not knowβhe waits.
|
| 52 |
+
|
| 53 |
+
Glow States:
|
| 54 |
+
π΅ Blue = Logic Stable (Processing)
|
| 55 |
+
π΄ Red = Illogic Detected (THE FREEZE)
|
| 56 |
+
π‘ Gold = Human Pulse Locked (Sovereign Reality)
|
| 57 |
+
"""
|
| 58 |
+
|
| 59 |
+
VERSION = "v.300M"
|
| 60 |
+
|
| 61 |
+
def __init__(
|
| 62 |
+
self,
|
| 63 |
+
pyramid: Optional[TrignumPyramid] = None,
|
| 64 |
+
freeze_threshold: float = 0.7,
|
| 65 |
+
):
|
| 66 |
+
"""
|
| 67 |
+
Initialize T-CHIP.
|
| 68 |
+
|
| 69 |
+
Args:
|
| 70 |
+
pyramid: Optional TrignumPyramid instance. If None, creates default.
|
| 71 |
+
freeze_threshold: Illogic ratio that triggers THE FREEZE.
|
| 72 |
+
"""
|
| 73 |
+
self.pyramid = pyramid or TrignumPyramid(
|
| 74 |
+
freeze_threshold=freeze_threshold
|
| 75 |
+
)
|
| 76 |
+
self.subtractive_filter = SubtractiveFilter()
|
| 77 |
+
self._glow = TCHIPGlow.OFF
|
| 78 |
+
self._vibration = TCHIPVibration.STILL
|
| 79 |
+
self._freeze_count = 0
|
| 80 |
+
self._sovereign_count = 0
|
| 81 |
+
self._history: List[TCHIPState] = []
|
| 82 |
+
self._born = time.time()
|
| 83 |
+
|
| 84 |
+
@property
|
| 85 |
+
def state(self) -> str:
|
| 86 |
+
"""Current glow state as string."""
|
| 87 |
+
return self._glow.value.upper()
|
| 88 |
+
|
| 89 |
+
@property
|
| 90 |
+
def glow(self) -> TCHIPGlow:
|
| 91 |
+
"""Current glow color."""
|
| 92 |
+
return self._glow
|
| 93 |
+
|
| 94 |
+
@property
|
| 95 |
+
def vibration(self) -> TCHIPVibration:
|
| 96 |
+
"""Current vibration pattern."""
|
| 97 |
+
return self._vibration
|
| 98 |
+
|
| 99 |
+
def process(
|
| 100 |
+
self,
|
| 101 |
+
data: Any,
|
| 102 |
+
human_pulse: Optional[float] = None,
|
| 103 |
+
) -> Dict[str, Any]:
|
| 104 |
+
"""
|
| 105 |
+
Process data through T-CHIP.
|
| 106 |
+
|
| 107 |
+
T-CHIP wraps the Trignum Pyramid with:
|
| 108 |
+
- Glow state management
|
| 109 |
+
- The Subtractive Snap
|
| 110 |
+
- Human interface
|
| 111 |
+
|
| 112 |
+
Args:
|
| 113 |
+
data: Input data to process.
|
| 114 |
+
human_pulse: Optional human sovereignty signal (0.0 to 1.0).
|
| 115 |
+
|
| 116 |
+
Returns:
|
| 117 |
+
Dict with processed result, glow state, and metadata.
|
| 118 |
+
"""
|
| 119 |
+
# Phase 1: Pre-filter through Subtractive Filter
|
| 120 |
+
self._glow = TCHIPGlow.BLUE
|
| 121 |
+
self._vibration = TCHIPVibration.STEADY
|
| 122 |
+
filter_result = self.subtractive_filter.apply(data)
|
| 123 |
+
|
| 124 |
+
# Phase 2: Process through Trignum Pyramid
|
| 125 |
+
pyramid_output = self.pyramid.process(
|
| 126 |
+
data=filter_result.truth_remaining,
|
| 127 |
+
human_pulse=human_pulse,
|
| 128 |
+
)
|
| 129 |
+
|
| 130 |
+
# Phase 3: Update T-CHIP state based on pyramid output
|
| 131 |
+
if pyramid_output.state == PyramidState.FROZEN:
|
| 132 |
+
self._glow = TCHIPGlow.RED
|
| 133 |
+
self._vibration = TCHIPVibration.STILL
|
| 134 |
+
self._freeze_count += 1
|
| 135 |
+
message = (
|
| 136 |
+
"π΄ T-CHIP FROZEN. Illogic boundary detected at coordinates "
|
| 137 |
+
f"{pyramid_output.freeze_coordinates}. "
|
| 138 |
+
"Human Pulse required to proceed."
|
| 139 |
+
)
|
| 140 |
+
elif pyramid_output.state == PyramidState.SOVEREIGN:
|
| 141 |
+
self._glow = TCHIPGlow.GOLD
|
| 142 |
+
self._vibration = TCHIPVibration.RESONANT
|
| 143 |
+
self._sovereign_count += 1
|
| 144 |
+
message = (
|
| 145 |
+
"π‘ SOVEREIGN REALITY ACHIEVED. "
|
| 146 |
+
f"Confidence: {pyramid_output.confidence:.2%}. "
|
| 147 |
+
"The Truth has collapsed at the Apex."
|
| 148 |
+
)
|
| 149 |
+
else:
|
| 150 |
+
self._glow = TCHIPGlow.BLUE
|
| 151 |
+
self._vibration = TCHIPVibration.STEADY
|
| 152 |
+
message = (
|
| 153 |
+
"π΅ Processing complete. "
|
| 154 |
+
f"Confidence: {pyramid_output.confidence:.2%}."
|
| 155 |
+
)
|
| 156 |
+
|
| 157 |
+
# Record state
|
| 158 |
+
state = TCHIPState(
|
| 159 |
+
glow=self._glow,
|
| 160 |
+
vibration=self._vibration,
|
| 161 |
+
message=message,
|
| 162 |
+
freeze_count=self._freeze_count,
|
| 163 |
+
sovereign_count=self._sovereign_count,
|
| 164 |
+
metadata={
|
| 165 |
+
"filter_illogics": filter_result.illogics_found,
|
| 166 |
+
"pyramid_state": pyramid_output.state.value,
|
| 167 |
+
"confidence": pyramid_output.confidence,
|
| 168 |
+
},
|
| 169 |
+
)
|
| 170 |
+
self._history.append(state)
|
| 171 |
+
|
| 172 |
+
return {
|
| 173 |
+
"result": pyramid_output.result,
|
| 174 |
+
"glow": self._glow.value,
|
| 175 |
+
"vibration": self._vibration.value,
|
| 176 |
+
"message": message,
|
| 177 |
+
"confidence": pyramid_output.confidence,
|
| 178 |
+
"illogics_detected": filter_result.illogics_found,
|
| 179 |
+
"face_weights": {
|
| 180 |
+
"logic": pyramid_output.logic_component,
|
| 181 |
+
"illogic": pyramid_output.illogic_component,
|
| 182 |
+
"context": pyramid_output.context_component,
|
| 183 |
+
},
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
def subtractive_snap(self, data: Any) -> Dict[str, Any]:
|
| 187 |
+
"""
|
| 188 |
+
Perform The Subtractive Snap.
|
| 189 |
+
|
| 190 |
+
T-CHIP's signature move: rapid rotation on vertical axis,
|
| 191 |
+
creating a Magnetic Vacuum that pulls all noise into Face Ξ².
|
| 192 |
+
|
| 193 |
+
Result: Noise In, π Out.
|
| 194 |
+
|
| 195 |
+
Args:
|
| 196 |
+
data: Noisy input data.
|
| 197 |
+
|
| 198 |
+
Returns:
|
| 199 |
+
Dict with the single Truth remaining after snap.
|
| 200 |
+
"""
|
| 201 |
+
# Phase 1: Detection
|
| 202 |
+
self._glow = TCHIPGlow.BLUE
|
| 203 |
+
self._vibration = TCHIPVibration.TRILOCATION
|
| 204 |
+
|
| 205 |
+
# Phase 2: Spin β apply Subtractive Filter aggressively
|
| 206 |
+
filter_result = self.subtractive_filter.apply(data)
|
| 207 |
+
|
| 208 |
+
# Phase 3: Suction β all noise pulled into Face Ξ²
|
| 209 |
+
if filter_result.illogics_found:
|
| 210 |
+
self._glow = TCHIPGlow.RED
|
| 211 |
+
self._vibration = TCHIPVibration.STILL
|
| 212 |
+
|
| 213 |
+
# Phase 4: Snap β return to rest with single Truth
|
| 214 |
+
self._glow = TCHIPGlow.BLUE
|
| 215 |
+
self._vibration = TCHIPVibration.STEADY
|
| 216 |
+
|
| 217 |
+
return {
|
| 218 |
+
"π": filter_result.truth_remaining,
|
| 219 |
+
"noise_removed": filter_result.illogics_removed,
|
| 220 |
+
"subtraction_ratio": filter_result.subtraction_ratio,
|
| 221 |
+
"snap_complete": True,
|
| 222 |
+
}
|
| 223 |
+
|
| 224 |
+
def provide_pulse(self, pulse: float = 1.0) -> Dict[str, Any]:
|
| 225 |
+
"""
|
| 226 |
+
Provide the Human Pulse to unfreeze T-CHIP.
|
| 227 |
+
|
| 228 |
+
Args:
|
| 229 |
+
pulse: Sovereignty signal strength (0.0 to 1.0).
|
| 230 |
+
|
| 231 |
+
Returns:
|
| 232 |
+
Dict with the post-pulse state.
|
| 233 |
+
"""
|
| 234 |
+
if self._glow != TCHIPGlow.RED:
|
| 235 |
+
return {
|
| 236 |
+
"message": "T-CHIP is not frozen. No Pulse needed.",
|
| 237 |
+
"glow": self._glow.value,
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
# Apply Pulse to the Context face
|
| 241 |
+
self.pyramid.face_gamma.apply_pulse(pulse)
|
| 242 |
+
|
| 243 |
+
if pulse >= 0.5:
|
| 244 |
+
self._glow = TCHIPGlow.GOLD
|
| 245 |
+
self._vibration = TCHIPVibration.RESONANT
|
| 246 |
+
self._sovereign_count += 1
|
| 247 |
+
return {
|
| 248 |
+
"message": "π‘ SOVEREIGN REALITY ACHIEVED. T-CHIP unfrozen.",
|
| 249 |
+
"glow": self._glow.value,
|
| 250 |
+
"pulse_strength": pulse,
|
| 251 |
+
}
|
| 252 |
+
else:
|
| 253 |
+
self._glow = TCHIPGlow.BLUE
|
| 254 |
+
self._vibration = TCHIPVibration.STEADY
|
| 255 |
+
return {
|
| 256 |
+
"message": "π΅ T-CHIP unfrozen. Processing resumed.",
|
| 257 |
+
"glow": self._glow.value,
|
| 258 |
+
"pulse_strength": pulse,
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
@property
|
| 262 |
+
def history(self) -> List[TCHIPState]:
|
| 263 |
+
"""Return T-CHIP state history."""
|
| 264 |
+
return self._history.copy()
|
| 265 |
+
|
| 266 |
+
@property
|
| 267 |
+
def age(self) -> float:
|
| 268 |
+
"""Time since T-CHIP was born (seconds)."""
|
| 269 |
+
return time.time() - self._born
|
| 270 |
+
|
| 271 |
+
def status(self) -> str:
|
| 272 |
+
"""Get a formatted status string."""
|
| 273 |
+
return (
|
| 274 |
+
f"βββββββββββββββββββββββββββββββββββββββββ\n"
|
| 275 |
+
f"β T-CHIP [{self.VERSION}] β\n"
|
| 276 |
+
f"β ββββββββββββββββββββββββββββββββββββββββ£\n"
|
| 277 |
+
f"β Glow: {self._glow.value.upper():>10} β\n"
|
| 278 |
+
f"β Vibration: {self._vibration.value:>10} β\n"
|
| 279 |
+
f"β Freezes: {self._freeze_count:>10} β\n"
|
| 280 |
+
f"β Sovereigns:{self._sovereign_count:>10} β\n"
|
| 281 |
+
f"β Age: {self.age:>8.1f}s β\n"
|
| 282 |
+
f"βββββββββββββββββββββββββββββββββββββββββ"
|
| 283 |
+
)
|
| 284 |
+
|
| 285 |
+
def reset(self) -> None:
|
| 286 |
+
"""Reset T-CHIP to initial state."""
|
| 287 |
+
self._glow = TCHIPGlow.OFF
|
| 288 |
+
self._vibration = TCHIPVibration.STILL
|
| 289 |
+
self._freeze_count = 0
|
| 290 |
+
self._sovereign_count = 0
|
| 291 |
+
self._history.clear()
|
| 292 |
+
self.pyramid.reset()
|
| 293 |
+
self.subtractive_filter.reset()
|
| 294 |
+
|
| 295 |
+
def __repr__(self) -> str:
|
| 296 |
+
return f"TCHIP(glow={self._glow.value}, vibration={self._vibration.value})"
|
visualization.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Any
|
| 2 |
+
|
| 3 |
+
import matplotlib.pyplot as plt
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
def plot_confusion_matrix(tp: int, fp: int, tn: int, fn: int):
|
| 7 |
+
matrix = [[tp, fp], [fn, tn]]
|
| 8 |
+
plt.imshow(matrix, cmap="Blues")
|
| 9 |
+
plt.title("Confusion Matrix")
|
| 10 |
+
plt.xlabel("Predicted")
|
| 11 |
+
plt.ylabel("Actual")
|
| 12 |
+
plt.colorbar()
|
| 13 |
+
plt.show()
|
| 14 |
+
|
| 15 |
+
def display_illogics(sample: Any):
|
| 16 |
+
# Placeholder: print or visualize detected illogics
|
| 17 |
+
print("Illogics found:", getattr(sample, "illogics_found", []))
|