def nat_trans

stelliferous@0.0.2.0 · proofs/nat_to_u32_bounds.bend:42

import stelliferous@0.0.2.0/proofs/nat_to_u32_bounds.bend as NatToU32Bounds
import Base
import stelliferous@0.0.2.0/proofs/word_encoding.bend as WordEncoding

42def nat_trans(+a: Nat,+b: Nat,+c: Nat,ab: {Nat.is_lt(a,b) == True{} : Bool},bc: {Nat.is_le(b,c) == True{} : Bool}) -> {Nat.is_lt(a,
43    c) == True{} : Bool}:
44  match a b c:
45    case 0n 0n c:
46      Empty.absurd({Nat.is_lt(0n,c) == True{} : Bool},WordEncoding.false_true(ab))
47    case 0n 1n+b 0n:
48      Empty.absurd({Nat.is_lt(0n,0n) == True{} : Bool},WordEncoding.false_true(bc))
49    case 0n 1n+b 1n+c:
50      {==}
51    case 1n+a 0n c:
52      Empty.absurd({Nat.is_lt(1n+a,c) == True{} : Bool},WordEncoding.false_true(ab))
53    case 1n+a 1n+b 0n:
54      Empty.absurd({Nat.is_lt(1n+a,0n) == True{} : Bool},WordEncoding.false_true(bc))
55    case 1n+a 1n+b 1n+c:
56      nat_trans(a,b,c,ab,bc)

Uses (6)

Used by (3)