metadata
license: mit
tags:
- pytorch
- safetensors
- threshold-logic
- neuromorphic
- arithmetic
threshold-halfadder
Adds two 1-bit inputs, producing sum and carry. The building block for all multi-bit adders.
Circuit
a b
β β
βββββ¬ββββ€
β β β
βΌ β βΌ
βββββββββββββββββ
β OR βββ NAND β
βββββββββββββββββ
β β β
βββββΌββββ
βΌ a b
ββββββββ β β
β AND β βββ¬ββ
ββββββββ βΌ
β ββββββββ
βΌ β AND β
sum ββββββββ
β
βΌ
carry
The sum output uses XOR (2 layers), the carry uses AND (1 layer).
Truth Table
| a | b | sum | carry |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Binary: a + b = (carry Γ 2) + sum
Components
| Output | Function | Neurons | Layers |
|---|---|---|---|
| sum | XOR(a, b) | 3 | 2 |
| carry | AND(a, b) | 1 | 1 |
Total: 4 neurons, 12 parameters
Arithmetic
The half adder computes a + b where a, b β {0, 1}:
- 0 + 0 = 0 (sum=0, carry=0)
- 0 + 1 = 1 (sum=1, carry=0)
- 1 + 0 = 1 (sum=1, carry=0)
- 1 + 1 = 2 (sum=0, carry=1)
The carry represents the 2s place.
Usage
from safetensors.torch import load_file
import torch
w = load_file('model.safetensors')
def half_adder(a, b):
inp = torch.tensor([float(a), float(b)])
# XOR for sum
or_out = int((inp @ w['xor.layer1.or.weight'] + w['xor.layer1.or.bias']).sum() >= 0)
nand_out = int((inp @ w['xor.layer1.nand.weight'] + w['xor.layer1.nand.bias']).sum() >= 0)
xor_inp = torch.tensor([float(or_out), float(nand_out)])
sum_out = int((xor_inp @ w['xor.layer2.weight'] + w['xor.layer2.bias']).sum() >= 0)
# AND for carry
carry_out = int((inp @ w['carry.weight'] + w['carry.bias']).sum() >= 0)
return sum_out, carry_out
Files
threshold-halfadder/
βββ model.safetensors
βββ model.py
βββ config.json
βββ README.md
License
MIT