| license: mit | |
| tags: | |
| - pytorch | |
| - safetensors | |
| - threshold-logic | |
| - neuromorphic | |
| - functionally-complete | |
| # threshold-nand | |
| The universal gate. Any Boolean function can be constructed from NAND alone. | |
| ## Circuit | |
| ``` | |
| x y | |
| β β | |
| βββ¬ββ | |
| βΌ | |
| ββββββββββ | |
| βw: -1,-1β | |
| β b: +1 β | |
| ββββββββββ | |
| β | |
| βΌ | |
| NAND(x,y) | |
| ``` | |
| ## Mechanism | |
| Negative weights mean inputs *subtract* from the sum. The positive bias starts us above threshold, and inputs pull us down: | |
| | x | y | sum | output | | |
| |---|---|-----|--------| | |
| | 0 | 0 | +1 | 1 | | |
| | 0 | 1 | 0 | 1 | | |
| | 1 | 0 | 0 | 1 | | |
| | 1 | 1 | -1 | 0 | | |
| Only when both inputs are active do we fall below threshold. This is AND with inverted output. | |
| ## Parameters | |
| | | | | |
| |---|---| | |
| | Weights | [-1, -1] | | |
| | Bias | +1 | | |
| | Total | 3 parameters | | |
| ## Optimality | |
| Exhaustive enumeration of all 25 weight configurations at magnitudes 0-3 confirms this circuit is **already at minimum magnitude (3)**. There is exactly one valid configuration at magnitude 3, and no valid configurations exist below it. | |
| ## Functional Completeness | |
| NAND can build any Boolean function: | |
| - NOT(x) = NAND(x, x) | |
| - AND(x,y) = NOT(NAND(x,y)) = NAND(NAND(x,y), NAND(x,y)) | |
| - OR(x,y) = NAND(NOT(x), NOT(y)) | |
| This is why NAND gates dominate digital logic fabrication. | |
| ## Usage | |
| ```python | |
| from safetensors.torch import load_file | |
| import torch | |
| w = load_file('model.safetensors') | |
| def nand_gate(x, y): | |
| inputs = torch.tensor([float(x), float(y)]) | |
| return int((inputs * w['weight']).sum() + w['bias'] >= 0) | |
| ``` | |
| ## Files | |
| ``` | |
| threshold-nand/ | |
| βββ model.safetensors | |
| βββ model.py | |
| βββ config.json | |
| βββ README.md | |
| ``` | |
| ## License | |
| MIT | |