A.2  IMP-Based Full Adder

FALSE :  a3 = 0
IMP :  a1 a3 ≡{a3 = a 1 + a3 = a1}
FALSE :  a4 = 0
IMP :  a2 a4 ≡{a4 = a 2 + a4 = a2}
IMP :  a3 a4 ≡{a4 = a 3 + a4 = a1 + a2}
FALSE :  a5 = 0
IMP :  a4 a5 ≡{a5 = a 4 + a5 = a1.a2}
FALSE :  a4 = 0
IMP :  a2 a4 ≡{a4 = a 2 + a4 = a2}
IMP :  a4 a3 ≡{a3 = a 4 + a3 = a2 + a1}
IMP :  a3 a5 ≡{a5 = a 3 + a5 = a2.a1 + a1.a2 a1 XOR a2}
IMP :  a1 a4 ≡{a4 = a 1 + a4 = a1 + a2}
FALSE :  a1 = 0
IMP :  a5 a1 ≡{a1 = a 5 + a1 = a1 XOR a2}
IMP :  cin a1 ≡{a1 = c in + a1 = cin + a1 XOR a2}
FALSE :  a2 = 0
IMP :  a1 a2 ≡{a1 = a 1 + a2 = cin.(a1 XOR a2)}
IMP :  a4 a2 ≡{a4 = a 4 + a2 = (a1.a2) + cin.(a1 XOR a2) cout}
FALSE :  a3 = 0
IMP :  cin a3 ≡{a3 = c in + a3 = cin}
FALSE :  a1 = 0
IMP :  a5 a1 ≡{a1 = a 5 + a1 = a1 XOR a2}
IMP :  a3 a1 ≡{a1 = a 3 + a1 = cin + a1 XOR a2}
FALSE :  a3 = 0
IMP :  a1 a3 ≡{a3 = a 1 + a3 = cin.(a1 XOR a2)}
IMP :  cin a5 ≡{a5 = c in + a5 = cin + a1 XOR a2
IMP :  a5 a3 ≡{a5 = a 5 + a3 = cin.(a1 XOR a2) + cin.(a1 XOR a2)}
    ≡{a5 = c in XOR a1 XOR a2 s} (A.4)