A.1  NIMP-Based Full Adder

TRUE :  a3 = 1
NIMP :  a3 → a1 ≡{a3′ = a 3.a1 = a1}
TRUE :  a4 = 1
NIMP :  a4 → a2 ≡{a4′ = a 4.a2 = a2}
NIMP :  a4 → a3 ≡{a4′ = a 4.a3 = a2.a1}
NIMP :  a2 → a1 ≡{a2′ = a 2.a1}
TRUE :  a5 = 1
NIMP :  a5 → a2 ≡{a5′ = a 5.a2 = a2 + a1}
NIMP :  a5 → a4 ≡{a5′ = a 5.a4 = (a2 + a1).(a2 + a1) ≡a1 XOR a2}
NIMP :  a3 → a2 ≡{a3′ = a 3.a2 = a1.a2}
NIMP :  a1 → a4 ≡{a1′ = a 1.a4 = a1.a2}
TRUE :  a4 = 1
NIMP :  a4 → cin ≡{a4′ = a 4.cin = cin}
NIMP :  cin → a3 ≡{cin′ = c in.a3 = cin.(a1 + a2)}
TRUE :  a3 = 1
NIMP :  a3 → a1 ≡{a3′ = a 3.a1 = a1.a2}
NIMP :  a3 → cin ≡{a3′ = a 3.cin = (a1.a2).(--------------)

 cin.(a1 +  a2)≡cout}
TRUE :  a1 = 1
NIMP :  a1 → a3 ≡{a1′ = a 1.a3 = cout}
TRUE :  a2 = 1
NIMP :  a2 → a4 ≡{a2′ = a 2.a4 = cin}
TRUE :  a3 = 1
NIMP :  a3 → a5 ≡{a3′ = a 3.a5 = a1 XOR a2}
NIMP :  a3 → a2 ≡{a3′ = a 3.a2 = (a1 XOR a2).cin}
NIMP :  a5 → a4 ≡{a5′ = a 5.a4 = cin.(a1 XOR a2)}
TRUE :  a2 = 1
NIMP :  a2 → a3 ≡{a2′ = a 2.a3 = (a1 XOR a2) + cin}
NIMP :  a2 → a5 ≡{a2′ = a 2.a5 = ( ---------------      )
  (a1 XOR    a2 ) + cin.(cin + (a1  XOR    a2))}
TRUE :  a4 = 1
NIMP :  a4 → a2 ≡{a4′ = a 4.a2 =                  ---
((a1  XOR    a2).cin) .(     ---------------)
  cin.(a1 XOR    a2)}
    ≡{a4′ = c in XOR a1 XOR a2 ≡ s} (A.3)