File size: 670 Bytes
56de343 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | -- half_adder.nf — Binary addition from NAND
-- sum = XOR(a, b), carry = AND(a, b)
module half_adder;
def not(x) = (x | x);
def and(x y) = not((x | y));
def xor(x y) = ((x | (x | y)) | (y | (x | y)));
def sum(a b) = xor(a b);
def carry(a b) = and(a b);
-- 0 + 0 = 00
prove sum_00: sum(false false) = false;
prove carry_00: carry(false false) = false;
-- 0 + 1 = 01
prove sum_01: sum(false true) = true;
prove carry_01: carry(false true) = false;
-- 1 + 0 = 01
prove sum_10: sum(true false) = true;
prove carry_10: carry(true false) = false;
-- 1 + 1 = 10
prove sum_11: sum(true true) = false;
prove carry_11: carry(true true) = true;
|