def adc_add_sub
bend-osdev-legacy-ciphers@0.1.0.0 · PROOF.bend:1337
import bend-osdev-legacy-ciphers@0.1.0.0/PROOF.bend as PROOF
import Base
1337
1338def adc_add_sub(n: Nat, a: Word(n), b: Word(n), c: Bool) -> {a == Word.adc(n, Word.adc(n, a, b, False{}, c), b, True{}, Bool.not(c)) : Word(n)}:
1339 match n:
1340 case 0n:
1341 match a:
1342 case WNil{}:
1343 {==}
1344 case 1n+p:
1345 match a b c:
1346 case WCon{True{}, at} WCon{True{}, bt} True{}:
1347 %adc_add_sub(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1348 {==}
1349 case WCon{True{}, at} WCon{True{}, bt} False{}:
1350 %adc_add_sub(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1351 {==}
1352 case WCon{True{}, at} WCon{False{}, bt} True{}:
1353 %adc_add_sub(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1354 {==}
1355 case WCon{True{}, at} WCon{False{}, bt} False{}:
1356 %adc_add_sub(p, at, bt, False{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1357 {==}
1358 case WCon{False{}, at} WCon{True{}, bt} True{}:
1359 %adc_add_sub(p, at, bt, True{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1360 {==}
1361 case WCon{False{}, at} WCon{True{}, bt} False{}:
1362 %adc_add_sub(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1363 {==}
1364 case WCon{False{}, at} WCon{False{}, bt} True{}:
1365 %adc_add_sub(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1366 {==}
1367 case WCon{False{}, at} WCon{False{}, bt} False{}:
1368 %adc_add_sub(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1369 {==}