|
|
---
|
|
|
license: mit
|
|
|
tags:
|
|
|
- pytorch
|
|
|
- safetensors
|
|
|
- threshold-logic
|
|
|
- neuromorphic
|
|
|
---
|
|
|
|
|
|
# threshold-or3
|
|
|
|
|
|
3-input OR gate. Fires when at least one input is active. The 1-of-3 threshold gate.
|
|
|
|
|
|
## Circuit
|
|
|
|
|
|
```
|
|
|
a b c
|
|
|
β β β
|
|
|
βββββΌββββ
|
|
|
β
|
|
|
βΌ
|
|
|
βββββββββββ
|
|
|
β w: 1,1,1β
|
|
|
β b: -1 β
|
|
|
βββββββββββ
|
|
|
β
|
|
|
βΌ
|
|
|
OR(a,b,c)
|
|
|
```
|
|
|
|
|
|
## The Existence Test
|
|
|
|
|
|
3-input OR detects "at least one active":
|
|
|
|
|
|
| Inputs | Sum | Output |
|
|
|
|--------|-----|--------|
|
|
|
| **000** | **-1** | **0** |
|
|
|
| 001 | 0 | 1 |
|
|
|
| 010 | 0 | 1 |
|
|
|
| 011 | +1 | 1 |
|
|
|
| 100 | 0 | 1 |
|
|
|
| 101 | +1 | 1 |
|
|
|
| 110 | +1 | 1 |
|
|
|
| 111 | +2 | 1 |
|
|
|
|
|
|
Only complete silence fails.
|
|
|
|
|
|
## Same Weights, Different Threshold
|
|
|
|
|
|
AND and OR use identical weights but different biases:
|
|
|
|
|
|
| Gate | Weights | Bias | Meaning |
|
|
|
|------|---------|------|---------|
|
|
|
| OR(a,b,c) | [1, 1, 1] | -1 | Need 1+ vote |
|
|
|
| MAJ(a,b,c) | [1, 1, 1] | -2 | Need 2+ votes |
|
|
|
| AND(a,b,c) | [1, 1, 1] | -3 | Need 3 votes |
|
|
|
|
|
|
The bias is the threshold. OR is the most permissive.
|
|
|
|
|
|
## De Morgan Dual
|
|
|
|
|
|
OR(a,b,c) = NOT(AND(NOT(a), NOT(b), NOT(c)))
|
|
|
|
|
|
But threshold logic computes OR directly - no inversion needed.
|
|
|
|
|
|
## Parameters
|
|
|
|
|
|
| Component | Value |
|
|
|
|-----------|-------|
|
|
|
| Weights | [1, 1, 1] |
|
|
|
| Bias | -1 |
|
|
|
| **Total** | **4 parameters** |
|
|
|
|
|
|
## Optimality
|
|
|
|
|
|
Exhaustive enumeration of all 321 weight configurations at magnitudes 0-4 confirms this circuit is **already at minimum magnitude (4)**. There is exactly one valid configuration at magnitude 4, and no valid configurations exist below it.
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
```python
|
|
|
from safetensors.torch import load_file
|
|
|
import torch
|
|
|
|
|
|
w = load_file('model.safetensors')
|
|
|
|
|
|
def or3(a, b, c):
|
|
|
inp = torch.tensor([float(a), float(b), float(c)])
|
|
|
return int((inp * w['weight']).sum() + w['bias'] >= 0)
|
|
|
|
|
|
print(or3(0, 0, 1)) # 1
|
|
|
print(or3(0, 0, 0)) # 0
|
|
|
```
|
|
|
|
|
|
## Files
|
|
|
|
|
|
```
|
|
|
threshold-or3/
|
|
|
βββ model.safetensors
|
|
|
βββ model.py
|
|
|
βββ config.json
|
|
|
βββ README.md
|
|
|
```
|
|
|
|
|
|
## License
|
|
|
|
|
|
MIT
|
|
|
|