def gt.adc_inc

bend-osdev-gf@0.1.1.0 · proof_tab.bend:62

import bend-osdev-gf@0.1.1.0/proof_tab.bend as ProofTab
import Base

62# a + (b + 1) = a + b with a carry in
63def gt.adc_inc(n: Nat, a: Word(n), b: Word(n)) -> {Word.adc(n, a, Word.inc(n, b), False{}, False{}) == Word.adc(n, a, b, False{}, True{}) : Word(n)}:
64  match n:
65    case 0n:
66      match a b:
67        case WNil{} WNil{}:
68          {==}
69    case 1n+p:
70      match a b:
71        case WCon{False{}, at} WCon{False{}, bt}:
72          {==}
73        case WCon{True{}, at} WCon{False{}, bt}:
74          {==}
75        case WCon{False{}, +at} WCon{True{}, +bt}:
76          gt.wcon2(p, False{}, False{}, Word.adc(p, at, Word.inc(p, bt), False{}, False{}), Word.adc(p, at, bt, False{}, True{}), {==}, gt.adc_inc(p, at, bt))
77        case WCon{True{}, +at} WCon{True{}, +bt}:
78          gt.wcon2(p, True{}, True{}, Word.adc(p, at, Word.inc(p, bt), False{}, False{}), Word.adc(p, at, bt, False{}, True{}), {==}, gt.adc_inc(p, at, bt))

Uses (8)

Used by (1)