File size: 749 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
-- mux.nf — 2-to-1 multiplexer from NAND
-- mux(sel, a, b) = if sel then b else a

module mux;

def not(x) = (x | x);
def and(x y) = not((x | y));
def or(x y) = (not(x) | not(y));

-- MUX: output = (NOT sel AND a) OR (sel AND b)
def mux(sel a b) = or(and(not(sel) a) and(sel b));

-- sel=0 selects input a
prove mux_0_a0_b0: mux(false false false) = false;
prove mux_0_a0_b1: mux(false false true) = false;
prove mux_0_a1_b0: mux(false true false) = true;
prove mux_0_a1_b1: mux(false true true) = true;

-- sel=1 selects input b
prove mux_1_a0_b0: mux(true false false) = false;
prove mux_1_a0_b1: mux(true false true) = true;
prove mux_1_a1_b0: mux(true true false) = false;
prove mux_1_a1_b1: mux(true true true) = true;