Threshold Logic Circuits
Collection
Boolean gates, voting functions, modular arithmetic, and adders as threshold networks. • 269 items • Updated • 1
The equality detector. Fires when both inputs match - both 0 or both 1. Like XOR, this function is not linearly separable and requires two layers.
x y
│ │
├───┬───┤
│ │ │
▼ │ ▼
┌──────┐│┌──────┐
│ NOR │││ AND │ Layer 1
│w:-1,-1││w:1,1 │
│b: 0 │││b: -2 │
└──────┘│└──────┘
│ │ │
└───┼───┘
▼
┌──────┐
│ OR │ Layer 2
│w: 1,1│
│b: -1 │
└──────┘
│
▼
XNOR(x,y)
XNOR catches equality via two cases:
| x | y | NOR | AND | OR(NOR,AND) |
|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 |
XNOR = NOT(XOR). Same non-linear structure, opposite meaning.
| Layer | Weights | Bias |
|---|---|---|
| NOR | [-1, -1] | 0 |
| AND | [1, 1] | -2 |
| OR | [1, 1] | -1 |
| Total | 9 |
from safetensors.torch import load_file
import torch
w = load_file('model.safetensors')
def xnor_gate(x, y):
inp = torch.tensor([float(x), float(y)])
nor_out = int((inp * w['layer1.neuron1.weight']).sum() + w['layer1.neuron1.bias'] >= 0)
and_out = int((inp * w['layer1.neuron2.weight']).sum() + w['layer1.neuron2.bias'] >= 0)
l1 = torch.tensor([float(nor_out), float(and_out)])
return int((l1 * w['layer2.weight']).sum() + w['layer2.bias'] >= 0)
threshold-xnor/
├── model.safetensors
├── model.py
├── config.json
└── README.md
MIT