def AP.inc

bend-osdev-array@0.1.0.1 · PROOF.bend:959

import bend-osdev-array@0.1.0.1/PROOF.bend as PROOF
import Base
import bend-osdev-array@0.1.0.1/array.bend as A

959def AP.inc(n: Nat, w: Word(n), d: Nat, h: {Nat.is_lt(1n+Word.to_nat(n, w), A.Arrays.slots(d)) == True{} : Bool}, hd: {Nat.is_le(d, n) == True{} : Bool}) -> {Word.to_nat(n, Word.inc(n, w)) == 1n+Word.to_nat(n, w) : Nat}:
960  match n:
961    case 0n:
962      match w d:
963        case WNil{} 0n:
964          Empty.absurd({0n == 1n : Nat}, AP.ft(h))
965        case WNil{} 1n+e:
966          Empty.absurd({0n == 1n : Nat}, AP.ft(hd))
967    case 1n+ +q:
968      match w d:
969        case WCon{False{}, t} _:
970          {==}
971        case WCon{True{}, +t} 0n:
972          Empty.absurd({Word.to_nat(1n+q, Word.inc(1n+q, WCon{True{}, t})) == 1n+Word.to_nat(1n+q, WCon{True{}, t}) : Nat}, AP.ft(h))
973        case WCon{True{}, +t} 1n+ +e:
974          +x = Word.to_nat(q, t)
975          %Equal.sym(Nat, Word.to_nat(q, Word.inc(q, t)), 1n+x, AP.inc(q, t, e, AP.lt_bv_inv(False{}, 1n+x, A.Arrays.slots(e), h), hd)) : {Nat.double(_) == 2n+Nat.double(x) : Nat}
976          {==}

Uses (15)

Used by (1)