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

Downloads last month
2
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collection including phanerozoic/threshold-halfadder