def adc_sub_add

bend-osdev-legacy-ciphers@0.1.0.0 · PROOF.bend:1371

import bend-osdev-legacy-ciphers@0.1.0.0/PROOF.bend as PROOF
import Base

1371def adc_sub_add(n: Nat, a: Word(n), b: Word(n), c: Bool) -> {a == Word.adc(n, Word.adc(n, a, b, True{}, c), b, False{}, Bool.not(c)) : Word(n)}:
1372  match n:
1373    case 0n:
1374      match a:
1375        case WNil{}:
1376          {==}
1377    case 1n+p:
1378      match a b c:
1379        case WCon{True{}, at} WCon{True{}, bt} True{}:
1380          %adc_sub_add(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1381          {==}
1382        case WCon{True{}, at} WCon{True{}, bt} False{}:
1383          %adc_sub_add(p, at, bt, False{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1384          {==}
1385        case WCon{True{}, at} WCon{False{}, bt} True{}:
1386          %adc_sub_add(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1387          {==}
1388        case WCon{True{}, at} WCon{False{}, bt} False{}:
1389          %adc_sub_add(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1390          {==}
1391        case WCon{False{}, at} WCon{True{}, bt} True{}:
1392          %adc_sub_add(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1393          {==}
1394        case WCon{False{}, at} WCon{True{}, bt} False{}:
1395          %adc_sub_add(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1396          {==}
1397        case WCon{False{}, at} WCon{False{}, bt} True{}:
1398          %adc_sub_add(p, at, bt, True{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1399          {==}
1400        case WCon{False{}, at} WCon{False{}, bt} False{}:
1401          %adc_sub_add(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1402          {==}

Uses (7)

Used by (1)