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# BEGIN GENERATED by gen/proof.py: adc
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          {==}

Uses (7)

Used by (1)