PROOF_text.bend
bend-osdev-word64@0.1.1.0 · 549 lines · 78 definitions
1
2
3import Base
4import bend-osdev-u32@0.1.0.0/u32.bend as U
5import bend-osdev-u32@0.1.0.0/LAWS.bend as UL
6import bend-osdev-u32@0.1.0.0/PROOF.bend as UP
7import bend-osdev-word64@0.1.1.0/word64.bend as W
8import bend-osdev-word64@0.1.1.0/LAWS.bend as WB
9import bend-osdev-word64@0.1.1.0/PROOF.bend as WBP
10import bend-osdev-word64@0.1.1.0/proof_value.bend as P
11import bend-osdev-word64@0.1.1.0/proof_shift.bend as PS
12import bend-osdev-u32@0.1.0.0/LAWS_order.bend as UO
13import bend-osdev-u32@0.1.0.0/PROOF_order.bend as UOP
14import bend-osdev-word64@0.1.1.0/LAWS_text.bend as Laws
15
16
17
18
19def wu.ve(+w: Word(32n)) -> {Word.to_nat(32n, w) == U32.to_nat(U32{w}) : Nat}:
20 {==}
21
22def wu.lt(+x: U32) -> {Nat.is_lt(U32.to_nat(x), U.U32Nat.dbl(32n, 1n)) == True{} : Bool}:
23 match x:
24 case U32{+w}:
25 %wu.ve(w) : {Nat.is_lt(_, U.U32Nat.dbl(32n, 1n)) == True{} : Bool}
26 UL.word_value_lt(32n, w)
27
28def wv.g(+n: Nat, +m: Nat, +h: Word(n), +l: Word(n), e: {Nat.add(n, n) == m : Nat}) -> {Nat.is_lt(P.wv.V(n, h, l), U.U32Nat.dbl(m, 1n)) == True{} : Bool}:
29 %e : {Nat.is_lt(P.wv.V(n, h, l), U.U32Nat.dbl(_, 1n)) == True{} : Bool}
30 %UL.dbl_dbl(n, n, 1n) : {Nat.is_lt(P.wv.V(n, h, l), _) == True{} : Bool}
31 P.wv.val_lt2(n, Word.to_nat(n, l), Word.to_nat(n, h), UL.word_value_lt(n, l), UL.word_value_lt(n, h))
32
33def wv.ve(+h: Word(32n), +l: Word(32n)) -> {P.wv.V(32n, h, l) == W.W64.to_nat(W.W64{U32{h}, U32{l}}) : Nat}:
34 {==}
35
36def wv.lt64(+x: W.W64) -> {Nat.is_lt(W.W64.to_nat(x), U.U32Nat.dbl(64n, 1n)) == True{} : Bool}:
37 match x:
38 case W.W64{U32{+h}, U32{+l}}:
39 %wv.ve(h, l) : {Nat.is_lt(_, U.U32Nat.dbl(64n, 1n)) == True{} : Bool}
40 wv.g(32n, 64n, h, l, {==})
41
42def wn.sub0(x: Nat) -> {Nat.sub(x, 0n) == x : Nat}:
43 match x:
44 case 0n:
45 {==}
46 case 1n+ +p:
47 {==}
48
49def wn.le0(x: Nat) -> {Nat.is_le(0n, x) == True{} : Bool}:
50 match x:
51 case 0n:
52 {==}
53 case 1n+ +p:
54 {==}
55
56def wn.ft(e: {False{} == True{} : Bool}) -> Empty:
57 P.wn.ft(e)
58
59def wn.tf(e: {True{} == False{} : Bool}) -> Empty:
60 PS.ns.tf(e)
61
62def wn.ge_lt(c: Cmp) -> {Cmp.is_ge(c) == Bool.not(Cmp.is_lt(c)) : Bool}:
63 match c:
64 case LT{}:
65 {==}
66 case EQ{}:
67 {==}
68 case GT{}:
69 {==}
70
71def wm.fn(+h: Nat, +n: Nat, +x: Nat, +en: {Nat.add(h, h) == n : Nat}) -> {U.U32Nat.dbl(n, x) == U.U32Nat.dbl(h, U.U32Nat.dbl(h, x)) : Nat}:
72 Equal.trans(Nat, U.U32Nat.dbl(n, x), U.U32Nat.dbl(Nat.add(h, h), x), U.U32Nat.dbl(h, U.U32Nat.dbl(h, x)), Equal.cong(Nat, Nat, zz => U.U32Nat.dbl(zz, x), n, Nat.add(h, h), Equal.sym(Nat, Nat.add(h, h), n, en)), Equal.sym(Nat, U.U32Nat.dbl(h, U.U32Nat.dbl(h, x)), U.U32Nat.dbl(Nat.add(h, h), x), UL.dbl_dbl(h, h, x)))
73
74
75
76
77
78
79def wsd.pw(n: Nat, k: Nat) -> Word(n):
80 match n:
81 case 0n:
82 WNil{}
83 case 1n+ +p:
84 match k:
85 case 0n:
86 WCon{True{}, Word.zero(p)}
87 case 1n+ +j:
88 WCon{False{}, wsd.pw(p, j)}
89
90def wsd.pwv(n: Nat, k: Nat, h: {Nat.is_lt(k, n) == True{} : Bool}) -> {Word.to_nat(n, wsd.pw(n, k)) == U.U32Nat.dbl(k, 1n) : Nat}:
91 match n:
92 case 0n:
93 Empty.absurd({Word.to_nat(0n, wsd.pw(0n, k)) == U.U32Nat.dbl(k, 1n) : Nat}, wn.ft(Equal.trans(Bool, False{}, Nat.is_lt(k, 0n), True{}, P.wn.not_lt_zero(k), h)))
94 case 1n+ +p:
95 match k:
96 case 0n:
97 Equal.cong(Nat, Nat, zz => 1n+Nat.double(zz), Word.to_nat(p, Word.zero(p)), 0n, UL.word_zero_value(p))
98 case 1n+ +j:
99 Equal.cong(Nat, Nat, zz => Nat.double(zz), Word.to_nat(p, wsd.pw(p, j)), U.U32Nat.dbl(j, 1n), wsd.pwv(p, j, h))
100
101def wr.t0(+x0: Nat, +x1: Nat) -> {Nat.mul(x0, U.U32Nat.dbl(x1, 1n)) == U.U32Nat.dbl(x1, x0) : Nat}:
102 %Equal.sym(Nat, Nat.mul(x0, U.U32Nat.dbl(x1, 1n)), U.U32Nat.dbl(x1, Nat.mul(x0, 1n)), UL.dbl_mul_r(x1, x0, 1n)) : {_ == U.U32Nat.dbl(x1, x0) : Nat}
103 %Equal.sym(Nat, Nat.mul(x0, 1n), Nat.mul(1n, x0), UL.nat_mul_comm(x0, 1n)) : {U.U32Nat.dbl(x1, _) == U.U32Nat.dbl(x1, x0) : Nat}
104 %Equal.sym(Nat, Nat.mul(1n, x0), x0, UL.nat_one_mul(x0)) : {U.U32Nat.dbl(x1, _) == U.U32Nat.dbl(x1, x0) : Nat}
105 {==}
106
107def wr.t1(+x0: Nat, +x1: Nat, +x2: Nat) -> {Nat.add(Nat.mul(x0, x1), Nat.mul(x2, x1)) == Nat.mul(Nat.add(x0, x2), x1) : Nat}:
108 %Equal.sym(Nat, Nat.mul(x2, x1), Nat.mul(x1, x2), UL.nat_mul_comm(x2, x1)) : {Nat.add(Nat.mul(x0, x1), _) == Nat.mul(Nat.add(x0, x2), x1) : Nat}
109 %Equal.sym(Nat, Nat.mul(x1, x2), Nat.mul(x2, x1), Equal.sym(Nat, Nat.mul(x2, x1), Nat.mul(x1, x2), UL.nat_mul_comm(x2, x1))) : {Nat.add(Nat.mul(x0, x1), _) == Nat.mul(Nat.add(x0, x2), x1) : Nat}
110 %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.mul(x2, x1)), Nat.mul(Nat.add(x0, x2), x1), Equal.sym(Nat, Nat.mul(Nat.add(x0, x2), x1), Nat.add(Nat.mul(x0, x1), Nat.mul(x2, x1)), UL.nat_add_mul(x0, x2, x1))) : {_ == Nat.mul(Nat.add(x0, x2), x1) : Nat}
111 {==}
112
113def wsd.mulpw(+n: Nat, +k: Nat, +x: Word(n), +h: {Nat.is_lt(k, n) == True{} : Bool}) -> {Word.to_nat(n, Word.mul(n, x, wsd.pw(n, k))) == U.U32Nat.low(n, U.U32Nat.dbl(k, Word.to_nat(n, x))) : Nat}:
114 Equal.trans(Nat, Word.to_nat(n, Word.mul(n, x, wsd.pw(n, k))), U.U32Nat.low(n, Nat.mul(Word.to_nat(n, x), U.U32Nat.dbl(k, 1n))), U.U32Nat.low(n, U.U32Nat.dbl(k, Word.to_nat(n, x))), Equal.trans(Nat, Word.to_nat(n, Word.mul(n, x, wsd.pw(n, k))), U.U32Nat.low(n, Nat.mul(Word.to_nat(n, x), Word.to_nat(n, wsd.pw(n, k)))), U.U32Nat.low(n, Nat.mul(Word.to_nat(n, x), U.U32Nat.dbl(k, 1n))), UL.word_mul_low(n, x, wsd.pw(n, k)), Equal.cong(Nat, Nat, zz => U.U32Nat.low(n, Nat.mul(Word.to_nat(n, x), zz)), Word.to_nat(n, wsd.pw(n, k)), U.U32Nat.dbl(k, 1n), wsd.pwv(n, k, h))), Equal.cong(Nat, Nat, zz => U.U32Nat.low(n, zz), Nat.mul(Word.to_nat(n, x), U.U32Nat.dbl(k, 1n)), U.U32Nat.dbl(k, Word.to_nat(n, x)), wr.t0(Word.to_nat(n, x), k)))
115
116def wsd.mul16(+x: U32) -> {U32.to_nat(U32.mul(x, 65536)) == U.U32Nat.low(32n, U.U32Nat.dbl(16n, U32.to_nat(x))) : Nat}:
117 match x:
118 case U32{+w}:
119 wsd.mulpw(32n, 16n, w, {==})
120
121
122def wsd.mle(+x: Nat, +y: Nat, +c: Nat, +h: {Nat.is_le(x, y) == True{} : Bool}) -> {Nat.is_le(Nat.mul(x, c), Nat.mul(y, c)) == True{} : Bool}:
123 Equal.trans(Bool, Nat.is_le(Nat.mul(x, c), Nat.mul(y, c)), Nat.is_le(Nat.mul(x, c), Nat.add(Nat.mul(Nat.sub(y, x), c), Nat.mul(x, c))), True{}, Equal.sym(Bool, Nat.is_le(Nat.mul(x, c), Nat.add(Nat.mul(Nat.sub(y, x), c), Nat.mul(x, c))), Nat.is_le(Nat.mul(x, c), Nat.mul(y, c)), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.mul(x, c), zz), Nat.add(Nat.mul(Nat.sub(y, x), c), Nat.mul(x, c)), Nat.mul(y, c), Equal.trans(Nat, Nat.add(Nat.mul(Nat.sub(y, x), c), Nat.mul(x, c)), Nat.mul(Nat.add(Nat.sub(y, x), x), c), Nat.mul(y, c), wr.t1(Nat.sub(y, x), c, x), Equal.cong(Nat, Nat, zz => Nat.mul(zz, c), Nat.add(Nat.sub(y, x), x), y, UL.nat_le_witness(x, y, h))))), UL.nat_le_add(Nat.mul(x, c), Nat.mul(Nat.sub(y, x), c)))
124
125def wsd.mlc.go(b: Bool, +x: Nat, +y: Nat, +c: Nat, +eb: {Nat.is_lt(x, y) == b : Bool}, +h: {Nat.is_lt(Nat.mul(x, c), Nat.mul(y, c)) == True{} : Bool}) -> {Nat.is_lt(x, y) == True{} : Bool}:
126 match b:
127 case True{}:
128 eb
129 case False{}:
130 Empty.absurd({Nat.is_lt(x, y) == True{} : Bool}, P.wn.lt_irrefl(Nat.mul(y, c), UO.nat_le_lt_trans(Nat.mul(y, c), Nat.mul(x, c), Nat.mul(y, c), wsd.mle(y, x, c, PS.ns.le_of_not_lt(x, y, eb)), h)))
131
132def wsd.mlc(+x: Nat, +y: Nat, +c: Nat, +h: {Nat.is_lt(Nat.mul(x, c), Nat.mul(y, c)) == True{} : Bool}) -> {Nat.is_lt(x, y) == True{} : Bool}:
133 wsd.mlc.go(Nat.is_lt(x, y), x, y, c, {==}, h)
134
135
136def wsd.kn(+n: Nat, +h: Nat, +x: Nat, +en: {Nat.add(h, h) == n : Nat}, +h10: {Nat.is_le(10n, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +hx: {Nat.is_lt(x, U.U32Nat.dbl(h, 10n)) == True{} : Bool}) -> {Nat.is_lt(x, U.U32Nat.dbl(n, 1n)) == True{} : Bool}:
137 +hh = UO.nat_lt_le_trans(x, U.U32Nat.dbl(h, 10n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), hx, Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(h, 10n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), Nat.is_le(10n, U.U32Nat.dbl(h, 1n)), True{}, UL.dbl_le(h, 10n, U.U32Nat.dbl(h, 1n)), h10))
138 Equal.trans(Bool, Nat.is_lt(x, U.U32Nat.dbl(n, 1n)), Nat.is_lt(x, U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(x, zz), U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), Equal.sym(Nat, U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), Equal.sym(Nat, U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en)))), hh)
139
140def wr.t2(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(x0, 1n+Nat.add(U.U32Nat.dbl(x1, x2), x3)) == Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, 1n+x3)) : Nat}:
141 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x2), x3), Nat.add(x3, U.U32Nat.dbl(x1, x2)), UL.nat_add_comm(U.U32Nat.dbl(x1, x2), x3)) : {Nat.add(x0, Nat.add(1n, _)) == Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, 1n+x3)) : Nat}
142 %Equal.sym(Nat, Nat.add(x0, Nat.add(1n, Nat.add(x3, U.U32Nat.dbl(x1, x2)))), Nat.add(1n, Nat.add(x0, Nat.add(x3, U.U32Nat.dbl(x1, x2)))), UL.nat_add_left_comm(x0, 1n, Nat.add(x3, U.U32Nat.dbl(x1, x2)))) : {_ == Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, 1n+x3)) : Nat}
143 %Equal.sym(Nat, Nat.add(x3, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, x2), x3), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x2), x3), Nat.add(x3, U.U32Nat.dbl(x1, x2)), UL.nat_add_comm(U.U32Nat.dbl(x1, x2), x3))) : {Nat.add(1n, Nat.add(x0, _)) == Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, 1n+x3)) : Nat}
144 %Equal.sym(Nat, Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), x3)), Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, x3)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, x3)), Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), x3)), UL.nat_add_left_comm(U.U32Nat.dbl(x1, x2), x0, x3))) : {Nat.add(1n, _) == Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, 1n+x3)) : Nat}
145 %Equal.sym(Nat, Nat.add(1n, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, x3))), Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(1n, Nat.add(x0, x3))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(1n, Nat.add(x0, x3))), Nat.add(1n, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x1, x2), 1n, Nat.add(x0, x3)))) : {_ == Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, 1n+x3)) : Nat}
146 %Equal.sym(Nat, Nat.add(1n, Nat.add(x0, x3)), Nat.add(x0, Nat.add(1n, x3)), Equal.sym(Nat, Nat.add(x0, Nat.add(1n, x3)), Nat.add(1n, Nat.add(x0, x3)), UL.nat_add_left_comm(x0, 1n, x3))) : {Nat.add(U.U32Nat.dbl(x1, x2), _) == Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(x0, 1n+x3)) : Nat}
147 {==}
148
149def wr.t3(+x0: Nat, +x1: Nat) -> {Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, 1n)) == U.U32Nat.dbl(x0, 1n+x1) : Nat}:
150 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, 1n)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), UL.nat_add_comm(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, 1n))) : {_ == U.U32Nat.dbl(x0, 1n+x1) : Nat}
151 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), U.U32Nat.dbl(x0, Nat.add(1n, x1)), Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(1n, x1)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), UL.dbl_add(x0, 1n, x1))) : {_ == U.U32Nat.dbl(x0, 1n+x1) : Nat}
152 {==}
153
154def wr.t4(+x0: Nat, +x1: Nat) -> {Nat.add(x0, Nat.mul(x1, 10n)) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}:
155 %Equal.sym(Nat, Nat.mul(x1, 10n), Nat.mul(10n, x1), UL.nat_mul_comm(x1, 10n)) : {Nat.add(x0, _) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
156 %Equal.sym(Nat, Nat.add(x0, Nat.mul(10n, x1)), Nat.add(Nat.mul(10n, x1), x0), UL.nat_add_comm(x0, Nat.mul(10n, x1))) : {_ == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
157 %Equal.sym(Nat, Nat.mul(10n, x1), Nat.mul(x1, 10n), Equal.sym(Nat, Nat.mul(x1, 10n), Nat.mul(10n, x1), UL.nat_mul_comm(x1, 10n))) : {Nat.add(_, x0) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
158 {==}
159
160def wr.t5(+x0: Nat) -> {U.U32Nat.dbl(x0, 10n) == Nat.mul(U.U32Nat.dbl(x0, 1n), 10n) : Nat}:
161 %Equal.sym(Nat, Nat.mul(10n, 1n), Nat.mul(1n, 10n), Equal.sym(Nat, Nat.mul(1n, 10n), Nat.mul(10n, 1n), UL.nat_mul_comm(1n, 10n))) : {U.U32Nat.dbl(x0, _) == Nat.mul(U.U32Nat.dbl(x0, 1n), 10n) : Nat}
162 %Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.mul(1n, 10n)), Nat.mul(U.U32Nat.dbl(x0, 1n), 10n), Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(x0, 1n), 10n), U.U32Nat.dbl(x0, Nat.mul(1n, 10n)), UL.dbl_mul_l(x0, 1n, 10n))) : {_ == Nat.mul(U.U32Nat.dbl(x0, 1n), 10n) : Nat}
163 {==}
164
165def wsd.k1(+n: Nat, +h: Nat, +R: Nat, +C: Nat, +Vm: Nat, +V: Nat, +cA: Nat, +en: {Nat.add(h, h) == n : Nat}, +h10: {Nat.is_le(10n, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +hR: {Nat.is_lt(R, 10n) == True{} : Bool}, +hC: {Nat.is_lt(C, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +em: {Vm == U.U32Nat.low(n, U.U32Nat.dbl(h, R)) : Nat}, +ea: {Nat.add(V, U.U32Nat.dbl(n, cA)) == Nat.add(Vm, C) : Nat}) -> {V == Nat.add(U.U32Nat.dbl(h, R), C) : Nat} & {Nat.is_lt(V, U.U32Nat.dbl(h, 10n)) == True{} : Bool}:
166 +evm = Equal.trans(Nat, Vm, U.U32Nat.low(n, U.U32Nat.dbl(h, R)), U.U32Nat.dbl(h, R), em, UL.low_small(n, U.U32Nat.dbl(h, R), wsd.kn(n, h, U.U32Nat.dbl(h, R), en, h10, Equal.trans(Bool, Nat.is_lt(U.U32Nat.dbl(h, R), U.U32Nat.dbl(h, 10n)), Nat.is_lt(R, 10n), True{}, UL.dbl_lt(h, R, 10n), hR))))
167 +vlt = UO.nat_lt_le_trans(Nat.add(U.U32Nat.dbl(h, R), C), U.U32Nat.dbl(h, 1n+R), U.U32Nat.dbl(h, 10n), Equal.trans(Bool, Nat.is_lt(Nat.add(U.U32Nat.dbl(h, R), C), U.U32Nat.dbl(h, 1n+R)), Nat.is_lt(Nat.add(U.U32Nat.dbl(h, R), C), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+C), 1n+Nat.add(U.U32Nat.dbl(h, R), C))), True{}, Equal.sym(Bool, Nat.is_lt(Nat.add(U.U32Nat.dbl(h, R), C), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+C), 1n+Nat.add(U.U32Nat.dbl(h, R), C))), Nat.is_lt(Nat.add(U.U32Nat.dbl(h, R), C), U.U32Nat.dbl(h, 1n+R)), Equal.cong(Nat, Bool, zz => Nat.is_lt(Nat.add(U.U32Nat.dbl(h, R), C), zz), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+C), 1n+Nat.add(U.U32Nat.dbl(h, R), C)), U.U32Nat.dbl(h, 1n+R), Equal.trans(Nat, Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+C), 1n+Nat.add(U.U32Nat.dbl(h, R), C)), Nat.add(U.U32Nat.dbl(h, R), U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(h, 1n+R), Equal.trans(Nat, Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+C), 1n+Nat.add(U.U32Nat.dbl(h, R), C)), Nat.add(U.U32Nat.dbl(h, R), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+C), 1n+C)), Nat.add(U.U32Nat.dbl(h, R), U.U32Nat.dbl(h, 1n)), wr.t2(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+C), h, R, C), Equal.cong(Nat, Nat, zz => Nat.add(U.U32Nat.dbl(h, R), zz), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+C), 1n+C), U.U32Nat.dbl(h, 1n), UL.nat_lt_witness(C, U.U32Nat.dbl(h, 1n), hC))), wr.t3(h, R)))), UL.nat_lt_add(Nat.add(U.U32Nat.dbl(h, R), C), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+C))), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(h, 1n+R), U.U32Nat.dbl(h, 10n)), Nat.is_le(1n+R, 10n), True{}, UL.dbl_le(h, 1n+R, 10n), Equal.trans(Bool, Nat.is_le(1n+R, 10n), Nat.is_lt(R, 10n), True{}, P.wn.le_succ(R, 10n), hR)))
168 +ev = Equal.trans(Nat, V, Nat.add(Vm, C), Nat.add(U.U32Nat.dbl(h, R), C), UL.dbl_nowrap(n, cA, V, Nat.add(Vm, C), Nat.add(U.U32Nat.dbl(h, R), C), ea, Equal.trans(Bool, Nat.is_le(Nat.add(Vm, C), Nat.add(U.U32Nat.dbl(h, R), C)), Nat.is_le(Nat.add(U.U32Nat.dbl(h, R), C), Nat.add(U.U32Nat.dbl(h, R), C)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(zz, Nat.add(U.U32Nat.dbl(h, R), C)), Nat.add(Vm, C), Nat.add(U.U32Nat.dbl(h, R), C), Equal.cong(Nat, Nat, zz => Nat.add(zz, C), Vm, U.U32Nat.dbl(h, R), evm)), UL.nat_le_refl(Nat.add(U.U32Nat.dbl(h, R), C))), wsd.kn(n, h, Nat.add(U.U32Nat.dbl(h, R), C), en, h10, vlt)), Equal.cong(Nat, Nat, zz => Nat.add(zz, C), Vm, U.U32Nat.dbl(h, R), evm))
169 (ev, Equal.trans(Bool, Nat.is_lt(V, U.U32Nat.dbl(h, 10n)), Nat.is_lt(Nat.add(U.U32Nat.dbl(h, R), C), U.U32Nat.dbl(h, 10n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(h, 10n)), V, Nat.add(U.U32Nat.dbl(h, R), C), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(h, R), C), V, Equal.sym(Nat, V, Nat.add(U.U32Nat.dbl(h, R), C), ev))), vlt))
170
171
172def wsd.k2(+h: Nat, +V: Nat, +Dd: Nat, +M: Nat, +edm: {Nat.add(Nat.mul(Dd, 10n), M) == V : Nat}, +hv: {Nat.is_lt(V, U.U32Nat.dbl(h, 10n)) == True{} : Bool}) -> {Nat.is_lt(Dd, U.U32Nat.dbl(h, 1n)) == True{} : Bool}:
173 wsd.mlc(Dd, U.U32Nat.dbl(h, 1n), 10n, UO.nat_le_lt_trans(Nat.mul(Dd, 10n), V, Nat.mul(U.U32Nat.dbl(h, 1n), 10n), Equal.trans(Bool, Nat.is_le(Nat.mul(Dd, 10n), V), Nat.is_le(Nat.mul(Dd, 10n), Nat.add(M, Nat.mul(Dd, 10n))), True{}, Equal.sym(Bool, Nat.is_le(Nat.mul(Dd, 10n), Nat.add(M, Nat.mul(Dd, 10n))), Nat.is_le(Nat.mul(Dd, 10n), V), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.mul(Dd, 10n), zz), Nat.add(M, Nat.mul(Dd, 10n)), V, Equal.trans(Nat, Nat.add(M, Nat.mul(Dd, 10n)), Nat.add(Nat.mul(Dd, 10n), M), V, wr.t4(M, Dd), edm))), UL.nat_le_add(Nat.mul(Dd, 10n), M)), Equal.trans(Bool, Nat.is_lt(V, Nat.mul(U.U32Nat.dbl(h, 1n), 10n)), Nat.is_lt(V, U.U32Nat.dbl(h, 10n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(V, zz), Nat.mul(U.U32Nat.dbl(h, 1n), 10n), U.U32Nat.dbl(h, 10n), Equal.sym(Nat, U.U32Nat.dbl(h, 10n), Nat.mul(U.U32Nat.dbl(h, 1n), 10n), wr.t5(h))), hv)))
174
175
176def wsd.k3(+n: Nat, +h: Nat, +Qo: Nat, +Sq: Nat, +en: {Nat.add(h, h) == n : Nat}, +hQ: {Nat.is_lt(Qo, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +esq: {Sq == U.U32Nat.low(n, U.U32Nat.dbl(h, Qo)) : Nat}) -> {Sq == U.U32Nat.dbl(h, Qo) : Nat}:
177 Equal.trans(Nat, Sq, U.U32Nat.low(n, U.U32Nat.dbl(h, Qo)), U.U32Nat.dbl(h, Qo), esq, UL.low_small(n, U.U32Nat.dbl(h, Qo), Equal.trans(Bool, Nat.is_lt(U.U32Nat.dbl(h, Qo), U.U32Nat.dbl(n, 1n)), Nat.is_lt(U.U32Nat.dbl(h, Qo), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(U.U32Nat.dbl(h, Qo), zz), U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), Equal.sym(Nat, U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), Equal.sym(Nat, U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en)))), Equal.trans(Bool, Nat.is_lt(U.U32Nat.dbl(h, Qo), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), Nat.is_lt(Qo, U.U32Nat.dbl(h, 1n)), True{}, UL.dbl_lt(h, Qo, U.U32Nat.dbl(h, 1n)), hQ))))
178
179def wsd.fst(-x: Nat, -y: Nat, -c: Nat, -d: Nat, pr: {x == y : Nat} & {Nat.is_lt(c, d) == True{} : Bool}) -> {x == y : Nat}:
180 (+u, +v) = pr
181 u
182
183def wsd.snd(-x: Nat, -y: Nat, -c: Nat, -d: Nat, pr: {x == y : Nat} & {Nat.is_lt(c, d) == True{} : Bool}) -> {Nat.is_lt(c, d) == True{} : Bool}:
184 (+u, +v) = pr
185 v
186
187def wsh.q(+a: W.W64) -> W.W64:
188 W.W64.small.q(W.W64.small.divmod(a, 10))
189
190def wsh.r(+a: W.W64) -> U32:
191 W.W64.small.r(W.W64.small.divmod(a, 10))
192
193def wsd.v(+rp: U32, +c: U32) -> U32:
194 U32.add(U32.mul(rp, 65536), c)
195
196def wsd.d(+rp: U32, +c: U32) -> U32:
197 U32.div(wsd.v(rp, c), 10)
198
199def wsd.m(+rp: U32, +c: U32) -> U32:
200 U32.mod(wsd.v(rp, c), 10)
201
202def wsd.q(+qp: U32, +rp: U32, +c: U32) -> U32:
203 U32.or(U32.shln(qp, 16n), wsd.d(rp, c))
204
205def wsd.step(+rp: U32, +qp: U32, +c: U32, +hR: {Nat.is_lt(U32.to_nat(rp), 10n) == True{} : Bool}, +hC: {Nat.is_lt(U32.to_nat(c), U.U32Nat.dbl(16n, 1n)) == True{} : Bool}, +hQ: {Nat.is_lt(U32.to_nat(qp), U.U32Nat.dbl(16n, 1n)) == True{} : Bool}) -> {U32.to_nat(wsd.q(qp, rp, c)) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(qp)), U32.to_nat(wsd.d(rp, c))) : Nat} & {Nat.add(Nat.mul(U32.to_nat(wsd.d(rp, c)), 10n), U32.to_nat(wsd.m(rp, c))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(rp)), U32.to_nat(c)) : Nat} & {Nat.is_lt(U32.to_nat(wsd.m(rp, c)), 10n) == True{} : Bool} & {Nat.is_lt(U32.to_nat(wsd.d(rp, c)), U.U32Nat.dbl(16n, 1n)) == True{} : Bool}:
206 +ev = wsd.fst(U32.to_nat(wsd.v(rp, c)), Nat.add(U.U32Nat.dbl(16n, U32.to_nat(rp)), U32.to_nat(c)), U32.to_nat(wsd.v(rp, c)), U.U32Nat.dbl(16n, 10n), wsd.k1(32n, 16n, U32.to_nat(rp), U32.to_nat(c), U32.to_nat(U32.mul(rp, 65536)), U32.to_nat(wsd.v(rp, c)), U.U32Nat.bit(U32.is_lt(wsd.v(rp, c), U32.mul(rp, 65536))), {==}, {==}, hR, hC, wsd.mul16(rp), UL.u32_add_wrap(U32.mul(rp, 65536), c)))
207 +vl = wsd.snd(U32.to_nat(wsd.v(rp, c)), Nat.add(U.U32Nat.dbl(16n, U32.to_nat(rp)), U32.to_nat(c)), U32.to_nat(wsd.v(rp, c)), U.U32Nat.dbl(16n, 10n), wsd.k1(32n, 16n, U32.to_nat(rp), U32.to_nat(c), U32.to_nat(U32.mul(rp, 65536)), U32.to_nat(wsd.v(rp, c)), U.U32Nat.bit(U32.is_lt(wsd.v(rp, c), U32.mul(rp, 65536))), {==}, {==}, hR, hC, wsd.mul16(rp), UL.u32_add_wrap(U32.mul(rp, 65536), c)))
208 +edm = Equal.trans(Nat, Nat.add(Nat.mul(U32.to_nat(wsd.d(rp, c)), 10n), U32.to_nat(wsd.m(rp, c))), Nat.add(Nat.mul(U32.to_nat(wsd.d(rp, c)), U32.to_nat(10)), U32.to_nat(wsd.m(rp, c))), U32.to_nat(wsd.v(rp, c)), {==}, UL.u32_divmod(wsd.v(rp, c), 10, {==}))
209 +mlt = Equal.trans(Bool, Nat.is_lt(U32.to_nat(wsd.m(rp, c)), 10n), Nat.is_lt(U32.to_nat(wsd.m(rp, c)), U32.to_nat(10)), True{}, {==}, UL.u32_mod_lt(wsd.v(rp, c), 10, {==}))
210 +dlt = wsd.k2(16n, U32.to_nat(wsd.v(rp, c)), U32.to_nat(wsd.d(rp, c)), U32.to_nat(wsd.m(rp, c)), edm, vl)
211 +eq = Equal.trans(Nat, U32.to_nat(wsd.q(qp, rp, c)), Nat.add(U32.to_nat(U32.shln(qp, 16n)), U32.to_nat(wsd.d(rp, c))), Nat.add(U.U32Nat.dbl(16n, U32.to_nat(qp)), U32.to_nat(wsd.d(rp, c))), UL.u32_or_split(U32.shln(qp, 16n), wsd.d(rp, c), 16n, U32.to_nat(qp), wsd.k3(32n, 16n, U32.to_nat(qp), U32.to_nat(U32.shln(qp, 16n)), {==}, hQ, UL.u32_shln_low(qp, 16n)), dlt), Equal.cong(Nat, Nat, zz => Nat.add(zz, U32.to_nat(wsd.d(rp, c))), U32.to_nat(U32.shln(qp, 16n)), U.U32Nat.dbl(16n, U32.to_nat(qp)), wsd.k3(32n, 16n, U32.to_nat(qp), U32.to_nat(U32.shln(qp, 16n)), {==}, hQ, UL.u32_shln_low(qp, 16n))))
212 (eq, Equal.trans(Nat, Nat.add(Nat.mul(U32.to_nat(wsd.d(rp, c)), 10n), U32.to_nat(wsd.m(rp, c))), U32.to_nat(wsd.v(rp, c)), Nat.add(U.U32Nat.dbl(16n, U32.to_nat(rp)), U32.to_nat(c)), edm, ev), mlt, dlt)
213
214def wr.t6(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat) -> {Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), x0)), x1), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), x2)), x3))), 10n), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}:
215 %Equal.sym(Nat, U.U32Nat.dbl(16n, 0n), 0n, UL.dbl_zero(16n)) : {Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(_, x0)), x1), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), x2)), x3))), 10n), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
216 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, x0), x1), Nat.add(x1, U.U32Nat.dbl(16n, x0)), UL.nat_add_comm(U.U32Nat.dbl(16n, x0), x1)) : {Nat.add(Nat.mul(Nat.add(_, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), x2)), x3))), 10n), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
217 %Equal.sym(Nat, U.U32Nat.dbl(16n, 0n), 0n, UL.dbl_zero(16n)) : {Nat.add(Nat.mul(Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(_, x2)), x3))), 10n), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
218 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, x2), x3), Nat.add(x3, U.U32Nat.dbl(16n, x2)), UL.nat_add_comm(U.U32Nat.dbl(16n, x2), x3)) : {Nat.add(Nat.mul(Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, _)), 10n), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
219 %Equal.sym(Nat, U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2))), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, x2))), UL.dbl_add(32n, x3, U.U32Nat.dbl(16n, x2))) : {Nat.add(Nat.mul(Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), _), 10n), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
220 %Equal.sym(Nat, U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, x2)), U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, x2)), UL.dbl_comm(32n, 16n, x2)) : {Nat.add(Nat.mul(Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), _)), 10n), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
221 %Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, x2)), U.U32Nat.dbl(Nat.add(16n, 32n), x2), UL.dbl_dbl(16n, 32n, x2)) : {Nat.add(Nat.mul(Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), _)), 10n), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
222 %Equal.sym(Nat, Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2))), Nat.add(x1, Nat.add(U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)))), UL.nat_add_assoc(x1, U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)))) : {Nat.add(Nat.mul(_, 10n), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
223 %Equal.sym(Nat, Nat.mul(Nat.add(x1, Nat.add(U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)))), 10n), Nat.add(Nat.mul(x1, 10n), Nat.mul(Nat.add(U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2))), 10n)), UL.nat_add_mul(x1, Nat.add(U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2))), 10n)) : {Nat.add(_, x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
224 %Equal.sym(Nat, Nat.mul(Nat.add(U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2))), 10n), Nat.add(Nat.mul(U.U32Nat.dbl(16n, x0), 10n), Nat.mul(Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)), 10n)), UL.nat_add_mul(U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)), 10n)) : {Nat.add(Nat.add(Nat.mul(x1, 10n), _), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
225 %Equal.sym(Nat, Nat.mul(Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)), 10n), Nat.add(Nat.mul(U.U32Nat.dbl(32n, x3), 10n), Nat.mul(U.U32Nat.dbl(48n, x2), 10n)), UL.nat_add_mul(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2), 10n)) : {Nat.add(Nat.add(Nat.mul(x1, 10n), Nat.add(Nat.mul(U.U32Nat.dbl(16n, x0), 10n), _)), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
226 %Equal.sym(Nat, Nat.mul(x1, 10n), Nat.mul(10n, x1), UL.nat_mul_comm(x1, 10n)) : {Nat.add(Nat.add(_, Nat.add(Nat.mul(U.U32Nat.dbl(16n, x0), 10n), Nat.add(Nat.mul(U.U32Nat.dbl(32n, x3), 10n), Nat.mul(U.U32Nat.dbl(48n, x2), 10n)))), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
227 %Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(16n, x0), 10n), U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), UL.dbl_mul_l(16n, x0, 10n)) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(_, Nat.add(Nat.mul(U.U32Nat.dbl(32n, x3), 10n), Nat.mul(U.U32Nat.dbl(48n, x2), 10n)))), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
228 %Equal.sym(Nat, Nat.mul(x0, 10n), Nat.mul(10n, x0), UL.nat_mul_comm(x0, 10n)) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, _), Nat.add(Nat.mul(U.U32Nat.dbl(32n, x3), 10n), Nat.mul(U.U32Nat.dbl(48n, x2), 10n)))), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
229 %Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(32n, x3), 10n), U.U32Nat.dbl(32n, Nat.mul(x3, 10n)), UL.dbl_mul_l(32n, x3, 10n)) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(_, Nat.mul(U.U32Nat.dbl(48n, x2), 10n)))), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
230 %Equal.sym(Nat, Nat.mul(x3, 10n), Nat.mul(10n, x3), UL.nat_mul_comm(x3, 10n)) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, _), Nat.mul(U.U32Nat.dbl(48n, x2), 10n)))), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
231 %Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(48n, x2), 10n), U.U32Nat.dbl(48n, Nat.mul(x2, 10n)), UL.dbl_mul_l(48n, x2, 10n)) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), _))), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
232 %Equal.sym(Nat, Nat.mul(x2, 10n), Nat.mul(10n, x2), UL.nat_mul_comm(x2, 10n)) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, _)))), x4) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
233 %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))))), x4), Nat.add(Nat.mul(10n, x1), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))), x4)), UL.nat_add_assoc(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))), x4)) : {_ == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
234 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))), x4), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))), x4)), UL.nat_add_assoc(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))), x4)) : {Nat.add(Nat.mul(10n, x1), _) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
235 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))), x4), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), Nat.add(U.U32Nat.dbl(48n, Nat.mul(10n, x2)), x4)), UL.nat_add_assoc(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)), x4)) : {Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
236 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(48n, Nat.mul(10n, x2)), x4), Nat.add(x4, U.U32Nat.dbl(48n, Nat.mul(10n, x2))), UL.nat_add_comm(U.U32Nat.dbl(48n, Nat.mul(10n, x2)), x4)) : {Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), _))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
237 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), Nat.add(x4, U.U32Nat.dbl(48n, Nat.mul(10n, x2)))), Nat.add(x4, Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))), UL.nat_add_left_comm(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), x4, U.U32Nat.dbl(48n, Nat.mul(10n, x2)))) : {Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
238 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(x4, Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))))), Nat.add(x4, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))))), UL.nat_add_left_comm(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), x4, Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))))) : {Nat.add(Nat.mul(10n, x1), _) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
239 %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))))), Nat.add(Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))), Equal.sym(Nat, Nat.add(Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))), Nat.add(x4, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))))), UL.nat_add_assoc(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))))) : {Nat.add(Nat.mul(10n, x1), _) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
240 %Equal.sym(Nat, Nat.add(Nat.mul(10n, x1), Nat.add(Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))))), Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0)))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0)))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))), Nat.add(Nat.mul(10n, x1), Nat.add(Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2))))), UL.nat_add_assoc(Nat.mul(10n, x1), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(48n, Nat.mul(10n, x2)))))) : {_ == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
241 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(16n, 32n), Nat.mul(10n, x2)), U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x2))), Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x2))), U.U32Nat.dbl(Nat.add(16n, 32n), Nat.mul(10n, x2)), UL.dbl_dbl(16n, 32n, Nat.mul(10n, x2)))) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0)))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
242 %Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x2))), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x2))), Equal.sym(Nat, U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x2))), U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x2))), UL.dbl_comm(32n, 16n, Nat.mul(10n, x2)))) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0)))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
243 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x2)))), U.U32Nat.dbl(32n, Nat.add(Nat.mul(10n, x3), U.U32Nat.dbl(16n, Nat.mul(10n, x2)))), Equal.sym(Nat, U.U32Nat.dbl(32n, Nat.add(Nat.mul(10n, x3), U.U32Nat.dbl(16n, Nat.mul(10n, x2)))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x3)), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x2)))), UL.dbl_add(32n, Nat.mul(10n, x3), U.U32Nat.dbl(16n, Nat.mul(10n, x2))))) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0)))), _) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
244 %Equal.sym(Nat, Nat.add(Nat.mul(10n, x3), U.U32Nat.dbl(16n, Nat.mul(10n, x2))), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x2)), Nat.mul(10n, x3)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x2)), Nat.mul(10n, x3)), Nat.add(Nat.mul(10n, x3), U.U32Nat.dbl(16n, Nat.mul(10n, x2))), UL.nat_add_comm(U.U32Nat.dbl(16n, Nat.mul(10n, x2)), Nat.mul(10n, x3)))) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0)))), U.U32Nat.dbl(32n, _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
245 %Equal.sym(Nat, Nat.mul(10n, x3), Nat.mul(x3, 10n), Equal.sym(Nat, Nat.mul(x3, 10n), Nat.mul(10n, x3), UL.nat_mul_comm(x3, 10n))) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0)))), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x2)), _))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
246 %Equal.sym(Nat, Nat.mul(10n, x2), Nat.mul(x2, 10n), Equal.sym(Nat, Nat.mul(x2, 10n), Nat.mul(10n, x2), UL.nat_mul_comm(x2, 10n))) : {Nat.add(Nat.add(Nat.mul(10n, x1), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0)))), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, _), Nat.mul(x3, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
247 %Equal.sym(Nat, Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0))), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), x4), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), x4), Nat.add(x4, U.U32Nat.dbl(16n, Nat.mul(10n, x0))), UL.nat_add_comm(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), x4))) : {Nat.add(Nat.add(Nat.mul(10n, x1), _), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
248 %Equal.sym(Nat, Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), x4)), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(Nat.mul(10n, x1), x4)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(Nat.mul(10n, x1), x4)), Nat.add(Nat.mul(10n, x1), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), x4)), UL.nat_add_left_comm(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.mul(10n, x1), x4))) : {Nat.add(_, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
249 %Equal.sym(Nat, Nat.mul(10n, x1), Nat.mul(x1, 10n), Equal.sym(Nat, Nat.mul(x1, 10n), Nat.mul(10n, x1), UL.nat_mul_comm(x1, 10n))) : {Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(_, x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
250 %Equal.sym(Nat, Nat.mul(10n, x0), Nat.mul(x0, 10n), Equal.sym(Nat, Nat.mul(x0, 10n), Nat.mul(10n, x0), UL.nat_mul_comm(x0, 10n))) : {Nat.add(Nat.add(U.U32Nat.dbl(16n, _), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(Nat.mul(x1, 10n), x4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x2, 10n)), Nat.mul(x3, 10n)))) : Nat}
251 {==}
252
253def wr.t7(+x0: Nat, +x1: Nat, +x2: Nat) -> {Nat.add(U.U32Nat.dbl(16n, Nat.mul(x0, 10n)), Nat.add(U.U32Nat.dbl(16n, x1), x2)) == Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(x0, 10n), x1)), x2) : Nat}:
254 %Equal.sym(Nat, Nat.mul(x0, 10n), Nat.mul(10n, x0), UL.nat_mul_comm(x0, 10n)) : {Nat.add(U.U32Nat.dbl(16n, _), Nat.add(U.U32Nat.dbl(16n, x1), x2)) == Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(x0, 10n), x1)), x2) : Nat}
255 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, x1), x2), Nat.add(x2, U.U32Nat.dbl(16n, x1)), UL.nat_add_comm(U.U32Nat.dbl(16n, x1), x2)) : {Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), _) == Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(x0, 10n), x1)), x2) : Nat}
256 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(x2, U.U32Nat.dbl(16n, x1))), Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), U.U32Nat.dbl(16n, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), x2, U.U32Nat.dbl(16n, x1))) : {_ == Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(x0, 10n), x1)), x2) : Nat}
257 %Equal.sym(Nat, Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), U.U32Nat.dbl(16n, x1))), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(x2, U.U32Nat.dbl(16n, x1))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(x2, U.U32Nat.dbl(16n, x1))), Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), U.U32Nat.dbl(16n, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), x2, U.U32Nat.dbl(16n, x1)))) : {_ == Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(x0, 10n), x1)), x2) : Nat}
258 %Equal.sym(Nat, Nat.add(x2, U.U32Nat.dbl(16n, x1)), Nat.add(U.U32Nat.dbl(16n, x1), x2), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, x1), x2), Nat.add(x2, U.U32Nat.dbl(16n, x1)), UL.nat_add_comm(U.U32Nat.dbl(16n, x1), x2))) : {Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), _) == Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(x0, 10n), x1)), x2) : Nat}
259 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(16n, x1), x2)), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), U.U32Nat.dbl(16n, x1)), x2), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), U.U32Nat.dbl(16n, x1)), x2), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), Nat.add(U.U32Nat.dbl(16n, x1), x2)), UL.nat_add_assoc(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), U.U32Nat.dbl(16n, x1), x2))) : {_ == Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(x0, 10n), x1)), x2) : Nat}
260 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), U.U32Nat.dbl(16n, x1)), U.U32Nat.dbl(16n, Nat.add(Nat.mul(10n, x0), x1)), Equal.sym(Nat, U.U32Nat.dbl(16n, Nat.add(Nat.mul(10n, x0), x1)), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x0)), U.U32Nat.dbl(16n, x1)), UL.dbl_add(16n, Nat.mul(10n, x0), x1))) : {Nat.add(_, x2) == Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(x0, 10n), x1)), x2) : Nat}
261 %Equal.sym(Nat, Nat.mul(10n, x0), Nat.mul(x0, 10n), Equal.sym(Nat, Nat.mul(x0, 10n), Nat.mul(10n, x0), UL.nat_mul_comm(x0, 10n))) : {Nat.add(U.U32Nat.dbl(16n, Nat.add(_, x1)), x2) == Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(x0, 10n), x1)), x2) : Nat}
262 {==}
263
264def wr.t8(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat) -> {Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, x0), x1)), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.mul(x4, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}:
265 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, x0), x1), Nat.add(x1, U.U32Nat.dbl(16n, x0)), UL.nat_add_comm(U.U32Nat.dbl(16n, x0), x1)) : {Nat.add(Nat.add(U.U32Nat.dbl(16n, _), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.mul(x4, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
266 %Equal.sym(Nat, U.U32Nat.dbl(16n, Nat.add(x1, U.U32Nat.dbl(16n, x0))), Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(16n, U.U32Nat.dbl(16n, x0))), UL.dbl_add(16n, x1, U.U32Nat.dbl(16n, x0))) : {Nat.add(Nat.add(_, x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.mul(x4, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
267 %Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(Nat.add(16n, 16n), x0), UL.dbl_dbl(16n, 16n, x0)) : {Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), _), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.mul(x4, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
268 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0)), x2), Nat.add(U.U32Nat.dbl(16n, x1), Nat.add(U.U32Nat.dbl(32n, x0), x2)), UL.nat_add_assoc(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0), x2)) : {Nat.add(_, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.mul(x4, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
269 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, x0), x2), Nat.add(x2, U.U32Nat.dbl(32n, x0)), UL.nat_add_comm(U.U32Nat.dbl(32n, x0), x2)) : {Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), _), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.mul(x4, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
270 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, x1), Nat.add(x2, U.U32Nat.dbl(32n, x0))), Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0))), UL.nat_add_left_comm(U.U32Nat.dbl(16n, x1), x2, U.U32Nat.dbl(32n, x0))) : {Nat.add(_, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.mul(x4, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
271 %Equal.sym(Nat, Nat.mul(x3, 10n), Nat.mul(10n, x3), UL.nat_mul_comm(x3, 10n)) : {Nat.add(Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0))), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, _), Nat.mul(x4, 10n)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
272 %Equal.sym(Nat, Nat.mul(x4, 10n), Nat.mul(10n, x4), UL.nat_mul_comm(x4, 10n)) : {Nat.add(Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0))), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), _))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
273 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), Nat.mul(10n, x4)), Nat.add(Nat.mul(10n, x4), U.U32Nat.dbl(16n, Nat.mul(10n, x3))), UL.nat_add_comm(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), Nat.mul(10n, x4))) : {Nat.add(Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0))), U.U32Nat.dbl(32n, _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
274 %Equal.sym(Nat, U.U32Nat.dbl(32n, Nat.add(Nat.mul(10n, x4), U.U32Nat.dbl(16n, Nat.mul(10n, x3)))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x3)))), UL.dbl_add(32n, Nat.mul(10n, x4), U.U32Nat.dbl(16n, Nat.mul(10n, x3)))) : {Nat.add(Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0))), _) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
275 %Equal.sym(Nat, U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x3))), U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x3))), UL.dbl_comm(32n, 16n, Nat.mul(10n, x3))) : {Nat.add(Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
276 %Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x3))), U.U32Nat.dbl(Nat.add(16n, 32n), Nat.mul(10n, x3)), UL.dbl_dbl(16n, 32n, Nat.mul(10n, x3))) : {Nat.add(Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
277 %Equal.sym(Nat, Nat.add(Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(48n, Nat.mul(10n, x3)))), Nat.add(x2, Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(48n, Nat.mul(10n, x3))))), UL.nat_add_assoc(x2, Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(48n, Nat.mul(10n, x3))))) : {_ == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
278 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(48n, Nat.mul(10n, x3)))), Nat.add(U.U32Nat.dbl(16n, x1), Nat.add(U.U32Nat.dbl(32n, x0), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(48n, Nat.mul(10n, x3))))), UL.nat_add_assoc(U.U32Nat.dbl(16n, x1), U.U32Nat.dbl(32n, x0), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(48n, Nat.mul(10n, x3))))) : {Nat.add(x2, _) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
279 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, x0), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(48n, Nat.mul(10n, x3)))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), Nat.add(U.U32Nat.dbl(32n, x0), U.U32Nat.dbl(48n, Nat.mul(10n, x3)))), UL.nat_add_left_comm(U.U32Nat.dbl(32n, x0), U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(48n, Nat.mul(10n, x3)))) : {Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
280 %Equal.sym(Nat, Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), Nat.add(U.U32Nat.dbl(32n, x0), U.U32Nat.dbl(48n, Nat.mul(10n, x3)))))), Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), Nat.add(U.U32Nat.dbl(32n, x0), U.U32Nat.dbl(48n, Nat.mul(10n, x3))))), Equal.sym(Nat, Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), Nat.add(U.U32Nat.dbl(32n, x0), U.U32Nat.dbl(48n, Nat.mul(10n, x3))))), Nat.add(x2, Nat.add(U.U32Nat.dbl(16n, x1), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), Nat.add(U.U32Nat.dbl(32n, x0), U.U32Nat.dbl(48n, Nat.mul(10n, x3)))))), UL.nat_add_assoc(x2, U.U32Nat.dbl(16n, x1), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), Nat.add(U.U32Nat.dbl(32n, x0), U.U32Nat.dbl(48n, Nat.mul(10n, x3))))))) : {_ == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
281 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(16n, 32n), Nat.mul(10n, x3)), U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x3))), Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x3))), U.U32Nat.dbl(Nat.add(16n, 32n), Nat.mul(10n, x3)), UL.dbl_dbl(16n, 32n, Nat.mul(10n, x3)))) : {Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), Nat.add(U.U32Nat.dbl(32n, x0), _))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
282 %Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x3))), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x3))), Equal.sym(Nat, U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x3))), U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, Nat.mul(10n, x3))), UL.dbl_comm(32n, 16n, Nat.mul(10n, x3)))) : {Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), Nat.add(U.U32Nat.dbl(32n, x0), _))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
283 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, x0), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x3)))), U.U32Nat.dbl(32n, Nat.add(x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3)))), Equal.sym(Nat, U.U32Nat.dbl(32n, Nat.add(x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3)))), Nat.add(U.U32Nat.dbl(32n, x0), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, Nat.mul(10n, x3)))), UL.dbl_add(32n, x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3))))) : {Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
284 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(32n, Nat.add(x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3))))), U.U32Nat.dbl(32n, Nat.add(Nat.mul(10n, x4), Nat.add(x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3))))), Equal.sym(Nat, U.U32Nat.dbl(32n, Nat.add(Nat.mul(10n, x4), Nat.add(x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3))))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(10n, x4)), U.U32Nat.dbl(32n, Nat.add(x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3))))), UL.dbl_add(32n, Nat.mul(10n, x4), Nat.add(x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3)))))) : {Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), _) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
285 %Equal.sym(Nat, Nat.add(x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3))), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), x0), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), x0), Nat.add(x0, U.U32Nat.dbl(16n, Nat.mul(10n, x3))), UL.nat_add_comm(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), x0))) : {Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), U.U32Nat.dbl(32n, Nat.add(Nat.mul(10n, x4), _))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
286 %Equal.sym(Nat, Nat.add(Nat.mul(10n, x4), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), x0)), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), Nat.add(Nat.mul(10n, x4), x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), Nat.add(Nat.mul(10n, x4), x0)), Nat.add(Nat.mul(10n, x4), Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), x0)), UL.nat_add_left_comm(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), Nat.mul(10n, x4), x0))) : {Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), U.U32Nat.dbl(32n, _)) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
287 %Equal.sym(Nat, Nat.mul(10n, x4), Nat.mul(x4, 10n), Equal.sym(Nat, Nat.mul(x4, 10n), Nat.mul(10n, x4), UL.nat_mul_comm(x4, 10n))) : {Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(10n, x3)), Nat.add(_, x0)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
288 %Equal.sym(Nat, Nat.mul(10n, x3), Nat.mul(x3, 10n), Equal.sym(Nat, Nat.mul(x3, 10n), Nat.mul(10n, x3), UL.nat_mul_comm(x3, 10n))) : {Nat.add(Nat.add(x2, U.U32Nat.dbl(16n, x1)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, _), Nat.add(Nat.mul(x4, 10n), x0)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
289 %Equal.sym(Nat, Nat.add(x2, U.U32Nat.dbl(16n, x1)), Nat.add(U.U32Nat.dbl(16n, x1), x2), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, x1), x2), Nat.add(x2, U.U32Nat.dbl(16n, x1)), UL.nat_add_comm(U.U32Nat.dbl(16n, x1), x2))) : {Nat.add(_, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) == Nat.add(Nat.add(U.U32Nat.dbl(16n, x1), x2), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(x3, 10n)), Nat.add(Nat.mul(x4, 10n), x0)))) : Nat}
290 {==}
291
292def wr.t9(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(Nat.add(U.U32Nat.dbl(16n, x0), x1), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), x2)), x3))) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}:
293 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, x0), x1), Nat.add(x1, U.U32Nat.dbl(16n, x0)), UL.nat_add_comm(U.U32Nat.dbl(16n, x0), x1)) : {Nat.add(_, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), x2)), x3))) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
294 %Equal.sym(Nat, U.U32Nat.dbl(16n, 0n), 0n, UL.dbl_zero(16n)) : {Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(_, x2)), x3))) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
295 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(16n, x2), x3), Nat.add(x3, U.U32Nat.dbl(16n, x2)), UL.nat_add_comm(U.U32Nat.dbl(16n, x2), x3)) : {Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, _)) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
296 %Equal.sym(Nat, U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2))), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, x2))), UL.dbl_add(32n, x3, U.U32Nat.dbl(16n, x2))) : {Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), _) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
297 %Equal.sym(Nat, U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, x2)), U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, x2)), UL.dbl_comm(32n, 16n, x2)) : {Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), _)) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
298 %Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, x2)), U.U32Nat.dbl(Nat.add(16n, 32n), x2), UL.dbl_dbl(16n, 32n, x2)) : {Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), _)) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
299 %Equal.sym(Nat, Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2))), Nat.add(x1, Nat.add(U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)))), UL.nat_add_assoc(x1, U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)))) : {_ == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
300 %Equal.sym(Nat, Nat.add(x1, Nat.add(U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)))), Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2))), Equal.sym(Nat, Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2))), Nat.add(x1, Nat.add(U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2)))), UL.nat_add_assoc(x1, U.U32Nat.dbl(16n, x0), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(48n, x2))))) : {_ == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
301 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(16n, 32n), x2), U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, x2)), Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, x2)), U.U32Nat.dbl(Nat.add(16n, 32n), x2), UL.dbl_dbl(16n, 32n, x2))) : {Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), _)) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
302 %Equal.sym(Nat, U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, x2)), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, x2)), Equal.sym(Nat, U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, x2)), U.U32Nat.dbl(16n, U.U32Nat.dbl(32n, x2)), UL.dbl_comm(32n, 16n, x2))) : {Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), Nat.add(U.U32Nat.dbl(32n, x3), _)) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
303 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, x2))), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2))), Equal.sym(Nat, U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2))), Nat.add(U.U32Nat.dbl(32n, x3), U.U32Nat.dbl(32n, U.U32Nat.dbl(16n, x2))), UL.dbl_add(32n, x3, U.U32Nat.dbl(16n, x2)))) : {Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), _) == Nat.add(Nat.add(x1, U.U32Nat.dbl(16n, x0)), U.U32Nat.dbl(32n, Nat.add(x3, U.U32Nat.dbl(16n, x2)))) : Nat}
304 {==}
305
306def wsd.alg(+H: Nat, +L: Nat, +Z: Nat, +C1: Nat, +C2: Nat, +C3: Nat, +C4: Nat, +D1: Nat, +D2: Nat, +D3: Nat, +D4: Nat, +M1: Nat, +M2: Nat, +M3: Nat, +M4: Nat, +Q1: Nat, +Q2: Nat, +Q3: Nat, +Q4: Nat, +ez: {Z == 0n : Nat}, +eq1: {Q1 == Nat.add(U.U32Nat.dbl(16n, Z), D1) : Nat}, +eq2: {Q2 == Nat.add(U.U32Nat.dbl(16n, Q1), D2) : Nat}, +eq3: {Q3 == Nat.add(U.U32Nat.dbl(16n, Z), D3) : Nat}, +eq4: {Q4 == Nat.add(U.U32Nat.dbl(16n, Q3), D4) : Nat}, +ed1: {Nat.add(Nat.mul(D1, 10n), M1) == Nat.add(U.U32Nat.dbl(16n, Z), C1) : Nat}, +ed2: {Nat.add(Nat.mul(D2, 10n), M2) == Nat.add(U.U32Nat.dbl(16n, M1), C2) : Nat}, +ed3: {Nat.add(Nat.mul(D3, 10n), M3) == Nat.add(U.U32Nat.dbl(16n, M2), C3) : Nat}, +ed4: {Nat.add(Nat.mul(D4, 10n), M4) == Nat.add(U.U32Nat.dbl(16n, M3), C4) : Nat}, +ec1: {C1 == U.U32Nat.high(16n, H) : Nat}, +ec2: {C2 == U.U32Nat.low(16n, H) : Nat}, +ec3: {C3 == U.U32Nat.high(16n, L) : Nat}, +ec4: {C4 == U.U32Nat.low(16n, L) : Nat}) -> {Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4) == Nat.add(L, U.U32Nat.dbl(32n, H)) : Nat}:
307 Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(L, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.low(16n, H), U.U32Nat.dbl(16n, U.U32Nat.high(16n, H))))), Nat.add(L, U.U32Nat.dbl(32n, H)), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(L, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.low(16n, H), U.U32Nat.dbl(16n, C1)))), Nat.add(L, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.low(16n, H), U.U32Nat.dbl(16n, U.U32Nat.high(16n, H))))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(L, U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), Nat.add(L, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.low(16n, H), U.U32Nat.dbl(16n, C1)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.low(16n, L), U.U32Nat.dbl(16n, U.U32Nat.high(16n, L))), U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), Nat.add(L, U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.low(16n, L), U.U32Nat.dbl(16n, C3)), U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), Nat.add(Nat.add(U.U32Nat.low(16n, L), U.U32Nat.dbl(16n, U.U32Nat.high(16n, L))), U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(C4, U.U32Nat.dbl(16n, C3)), U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), Nat.add(Nat.add(U.U32Nat.low(16n, L), U.U32Nat.dbl(16n, C3)), U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), C1)), C2))), Nat.add(Nat.add(C4, U.U32Nat.dbl(16n, C3)), U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), C1)), C2))), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), C1)), C2))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(D1, 10n), M1)), C2))), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), C1)), C2))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.add(U.U32Nat.dbl(16n, M1), C2)))), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(D1, 10n), M1)), C2))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.add(Nat.mul(D2, 10n), M2)))), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.add(U.U32Nat.dbl(16n, M1), C2)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, M2), C3)), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.add(Nat.mul(D2, 10n), M2)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(D3, 10n), M3)), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, M2), C3)), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(D3, 10n)), Nat.add(U.U32Nat.dbl(16n, M3), C4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(D3, 10n), M3)), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(D3, 10n)), Nat.add(Nat.mul(D4, 10n), M4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(D3, 10n)), Nat.add(U.U32Nat.dbl(16n, M3), C4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), D3)), D4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), D1)), D2))), 10n), M4), Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(D3, 10n)), Nat.add(Nat.mul(D4, 10n), M4)), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D3)), D4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D1)), D2))), 10n), M4), Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), D3)), D4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, 0n), D1)), D2))), 10n), M4), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D3)), D4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Q1), D2))), 10n), M4), Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D3)), D4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D1)), D2))), 10n), M4), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D3)), D4), U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D3)), D4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Q1), D2))), 10n), M4), Equal.trans(Nat, Nat.add(Nat.mul(Nat.add(Q4, U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Q3), D4), U.U32Nat.dbl(32n, Q2)), 10n), M4), Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D3)), D4), U.U32Nat.dbl(32n, Q2)), 10n), M4), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(Nat.add(zz, U.U32Nat.dbl(32n, Q2)), 10n), M4), Q4, Nat.add(U.U32Nat.dbl(16n, Q3), D4), eq4), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, zz), D4), U.U32Nat.dbl(32n, Q2)), 10n), M4), Q3, Nat.add(U.U32Nat.dbl(16n, Z), D3), eq3)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D3)), D4), U.U32Nat.dbl(32n, zz)), 10n), M4), Q2, Nat.add(U.U32Nat.dbl(16n, Q1), D2), eq2)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, Z), D3)), D4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, zz), D2))), 10n), M4), Q1, Nat.add(U.U32Nat.dbl(16n, Z), D1), eq1)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, zz), D3)), D4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, zz), D1)), D2))), 10n), M4), Z, 0n, ez)), wr.t6(D3, D4, D1, D2, M4)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(16n, Nat.mul(D3, 10n)), zz), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Nat.add(Nat.mul(D4, 10n), M4), Nat.add(U.U32Nat.dbl(16n, M3), C4), ed4)), Equal.cong(Nat, Nat, zz => Nat.add(zz, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Nat.add(U.U32Nat.dbl(16n, Nat.mul(D3, 10n)), Nat.add(U.U32Nat.dbl(16n, M3), C4)), Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(D3, 10n), M3)), C4), wr.t7(D3, M3, C4))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(16n, zz), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.mul(D2, 10n)))), Nat.add(Nat.mul(D3, 10n), M3), Nat.add(U.U32Nat.dbl(16n, M2), C3), ed3)), wr.t8(M2, C3, C4, D1, D2)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), zz))), Nat.add(Nat.mul(D2, 10n), M2), Nat.add(U.U32Nat.dbl(16n, M1), C2), ed2)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, zz)), Nat.add(U.U32Nat.dbl(16n, Nat.mul(D1, 10n)), Nat.add(U.U32Nat.dbl(16n, M1), C2)), Nat.add(U.U32Nat.dbl(16n, Nat.add(Nat.mul(D1, 10n), M1)), C2), wr.t7(D1, M1, C2))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, zz), C2))), Nat.add(Nat.mul(D1, 10n), M1), Nat.add(U.U32Nat.dbl(16n, Z), C1), ed1)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(16n, C3), C4), U.U32Nat.dbl(32n, Nat.add(U.U32Nat.dbl(16n, Nat.add(U.U32Nat.dbl(16n, zz), C1)), C2))), Z, 0n, ez)), wr.t9(C3, C4, C1, C2)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(zz, U.U32Nat.dbl(16n, C3)), U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), C4, U.U32Nat.low(16n, L), ec4)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.low(16n, L), U.U32Nat.dbl(16n, zz)), U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), C3, U.U32Nat.high(16n, L), ec3)), Equal.cong(Nat, Nat, zz => Nat.add(zz, U.U32Nat.dbl(32n, Nat.add(C2, U.U32Nat.dbl(16n, C1)))), Nat.add(U.U32Nat.low(16n, L), U.U32Nat.dbl(16n, U.U32Nat.high(16n, L))), L, UL.low_high(16n, L))), Equal.cong(Nat, Nat, zz => Nat.add(L, U.U32Nat.dbl(32n, Nat.add(zz, U.U32Nat.dbl(16n, C1)))), C2, U.U32Nat.low(16n, H), ec2)), Equal.cong(Nat, Nat, zz => Nat.add(L, U.U32Nat.dbl(32n, Nat.add(U.U32Nat.low(16n, H), U.U32Nat.dbl(16n, zz)))), C1, U.U32Nat.high(16n, H), ec1)), Equal.cong(Nat, Nat, zz => Nat.add(L, U.U32Nat.dbl(32n, zz)), Nat.add(U.U32Nat.low(16n, H), U.U32Nat.dbl(16n, U.U32Nat.high(16n, H))), H, UL.low_high(16n, H)))
308
309def wsd.sd4b(+hh: U32, +ll: U32, +a1: {U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n)))) : Nat}, +a2: {U32.to_nat(wsd.q(wsd.q(0, 0, U32.shrn(hh, 16n)), wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n)))), U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) : Nat}, +a3: {U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))) : Nat}, +b1: {Nat.add(Nat.mul(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), 10n), U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(U32.shrn(hh, 16n))) : Nat}, +b2: {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), 10n), U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))), U32.to_nat(U32.and(hh, 65535))) : Nat}, +b3: {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), 10n), U32.to_nat(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))), U32.to_nat(U32.shrn(ll, 16n))) : Nat}, +a4: {U32.to_nat(wsd.q(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))), U32.to_nat(wsd.d(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535)))) : Nat}, +b4: {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))), 10n), U32.to_nat(wsd.m(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))), U32.to_nat(U32.and(ll, 65535))) : Nat}, +m4: {Nat.is_lt(U32.to_nat(wsd.m(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))), 10n) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.small.q(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n), U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10)))) == W.W64.to_nat(W.W64{hh, ll}) : Nat} & {Nat.is_lt(U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n) == True{} : Bool}:
310 (wsd.alg(U32.to_nat(hh), U32.to_nat(ll), U32.to_nat(0), U32.to_nat(U32.shrn(hh, 16n)), U32.to_nat(U32.and(hh, 65535)), U32.to_nat(U32.shrn(ll, 16n)), U32.to_nat(U32.and(ll, 65535)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U32.to_nat(wsd.d(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))), U32.to_nat(wsd.m(0, U32.shrn(hh, 16n))), U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), U32.to_nat(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U32.to_nat(wsd.m(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))), U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))), U32.to_nat(wsd.q(wsd.q(0, 0, U32.shrn(hh, 16n)), wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U32.to_nat(wsd.q(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))), {==}, a1, a2, a3, a4, b1, b2, b3, b4, UL.u32_shrn_value(hh, 16n), UL.u32_and_65535(hh), UL.u32_shrn_value(ll, 16n), UL.u32_and_65535(ll)), m4)
311
312def wsd.sd4(+hh: U32, +ll: U32, +a1: {U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n)))) : Nat}, +a2: {U32.to_nat(wsd.q(wsd.q(0, 0, U32.shrn(hh, 16n)), wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n)))), U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) : Nat}, +a3: {U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))) : Nat}, +b1: {Nat.add(Nat.mul(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), 10n), U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(U32.shrn(hh, 16n))) : Nat}, +b2: {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), 10n), U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))), U32.to_nat(U32.and(hh, 65535))) : Nat}, +b3: {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), 10n), U32.to_nat(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))), U32.to_nat(U32.shrn(ll, 16n))) : Nat}, p4: {U32.to_nat(wsd.q(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))), U32.to_nat(wsd.d(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535)))) : Nat} & {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))), 10n), U32.to_nat(wsd.m(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))), U32.to_nat(U32.and(ll, 65535))) : Nat} & {Nat.is_lt(U32.to_nat(wsd.m(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))), 10n) == True{} : Bool} & {Nat.is_lt(U32.to_nat(wsd.d(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535))), U.U32Nat.dbl(16n, 1n)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.small.q(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n), U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10)))) == W.W64.to_nat(W.W64{hh, ll}) : Nat} & {Nat.is_lt(U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n) == True{} : Bool}:
313 (a4, b4, m4, d4) = p4
314 wsd.sd4b(hh, ll, a1, a2, a3, b1, b2, b3, a4, b4, m4)
315
316def wsd.sd3b(+hh: U32, +ll: U32, +a1: {U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n)))) : Nat}, +a2: {U32.to_nat(wsd.q(wsd.q(0, 0, U32.shrn(hh, 16n)), wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n)))), U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) : Nat}, +b1: {Nat.add(Nat.mul(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), 10n), U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(U32.shrn(hh, 16n))) : Nat}, +b2: {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), 10n), U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))), U32.to_nat(U32.and(hh, 65535))) : Nat}, +a3: {U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))) : Nat}, +b3: {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), 10n), U32.to_nat(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))), U32.to_nat(U32.shrn(ll, 16n))) : Nat}, +m3: {Nat.is_lt(U32.to_nat(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), 10n) == True{} : Bool}, +d3: {Nat.is_lt(U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U.U32Nat.dbl(16n, 1n)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.small.q(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n), U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10)))) == W.W64.to_nat(W.W64{hh, ll}) : Nat} & {Nat.is_lt(U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n) == True{} : Bool}:
317 wsd.sd4(hh, ll, a1, a2, a3, b1, b2, b3, wsd.step(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)), U32.and(ll, 65535), m3, Equal.trans(Bool, Nat.is_lt(U32.to_nat(U32.and(ll, 65535)), U.U32Nat.dbl(16n, 1n)), Nat.is_lt(U.U32Nat.low(16n, U32.to_nat(ll)), U.U32Nat.dbl(16n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(16n, 1n)), U32.to_nat(U32.and(ll, 65535)), U.U32Nat.low(16n, U32.to_nat(ll)), Equal.sym(Nat, U.U32Nat.low(16n, U32.to_nat(ll)), U32.to_nat(U32.and(ll, 65535)), Equal.sym(Nat, U32.to_nat(U32.and(ll, 65535)), U.U32Nat.low(16n, U32.to_nat(ll)), UL.u32_and_65535(ll)))), UL.low_lt(16n, U32.to_nat(ll))), Equal.trans(Bool, Nat.is_lt(U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U.U32Nat.dbl(16n, 1n)), Nat.is_lt(U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U.U32Nat.dbl(16n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(16n, 1n)), U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), Equal.sym(Nat, U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), Equal.sym(Nat, U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), Equal.trans(Nat, U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))), U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), a3, {==})))), d3)))
318
319def wsd.sd3(+hh: U32, +ll: U32, +a1: {U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n)))) : Nat}, +a2: {U32.to_nat(wsd.q(wsd.q(0, 0, U32.shrn(hh, 16n)), wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n)))), U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) : Nat}, +b1: {Nat.add(Nat.mul(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), 10n), U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(U32.shrn(hh, 16n))) : Nat}, +b2: {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), 10n), U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))), U32.to_nat(U32.and(hh, 65535))) : Nat}, p3: {U32.to_nat(wsd.q(0, wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))) : Nat} & {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), 10n), U32.to_nat(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))), U32.to_nat(U32.shrn(ll, 16n))) : Nat} & {Nat.is_lt(U32.to_nat(wsd.m(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), 10n) == True{} : Bool} & {Nat.is_lt(U32.to_nat(wsd.d(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), U32.shrn(ll, 16n))), U.U32Nat.dbl(16n, 1n)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.small.q(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n), U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10)))) == W.W64.to_nat(W.W64{hh, ll}) : Nat} & {Nat.is_lt(U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n) == True{} : Bool}:
320 (a3, b3, m3, d3) = p3
321 wsd.sd3b(hh, ll, a1, a2, b1, b2, a3, b3, m3, d3)
322
323def wsd.sd2b(+hh: U32, +ll: U32, +a1: {U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n)))) : Nat}, +b1: {Nat.add(Nat.mul(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), 10n), U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(U32.shrn(hh, 16n))) : Nat}, +a2: {U32.to_nat(wsd.q(wsd.q(0, 0, U32.shrn(hh, 16n)), wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n)))), U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) : Nat}, +b2: {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), 10n), U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))), U32.to_nat(U32.and(hh, 65535))) : Nat}, +m2: {Nat.is_lt(U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), 10n) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.small.q(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n), U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10)))) == W.W64.to_nat(W.W64{hh, ll}) : Nat} & {Nat.is_lt(U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n) == True{} : Bool}:
324 wsd.sd3(hh, ll, a1, a2, b1, b2, wsd.step(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)), 0, U32.shrn(ll, 16n), m2, Equal.trans(Bool, Nat.is_lt(U32.to_nat(U32.shrn(ll, 16n)), U.U32Nat.dbl(16n, 1n)), Nat.is_lt(U.U32Nat.high(16n, U32.to_nat(ll)), U.U32Nat.dbl(16n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(16n, 1n)), U32.to_nat(U32.shrn(ll, 16n)), U.U32Nat.high(16n, U32.to_nat(ll)), Equal.sym(Nat, U.U32Nat.high(16n, U32.to_nat(ll)), U32.to_nat(U32.shrn(ll, 16n)), Equal.sym(Nat, U32.to_nat(U32.shrn(ll, 16n)), U.U32Nat.high(16n, U32.to_nat(ll)), UL.u32_shrn_value(ll, 16n)))), UL.high_lt(16n, 16n, 32n, U32.to_nat(ll), {==}, wu.lt(ll))), {==}))
325
326def wsd.sd2(+hh: U32, +ll: U32, +a1: {U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n)))) : Nat}, +b1: {Nat.add(Nat.mul(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), 10n), U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(U32.shrn(hh, 16n))) : Nat}, p2: {U32.to_nat(wsd.q(wsd.q(0, 0, U32.shrn(hh, 16n)), wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n)))), U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) : Nat} & {Nat.add(Nat.mul(U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), 10n), U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))), U32.to_nat(U32.and(hh, 65535))) : Nat} & {Nat.is_lt(U32.to_nat(wsd.m(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), 10n) == True{} : Bool} & {Nat.is_lt(U32.to_nat(wsd.d(wsd.m(0, U32.shrn(hh, 16n)), U32.and(hh, 65535))), U.U32Nat.dbl(16n, 1n)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.small.q(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n), U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10)))) == W.W64.to_nat(W.W64{hh, ll}) : Nat} & {Nat.is_lt(U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n) == True{} : Bool}:
327 (a2, b2, m2, d2) = p2
328 wsd.sd2b(hh, ll, a1, b1, a2, b2, m2)
329
330def wsd.sd1b(+hh: U32, +ll: U32, +a1: {U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n)))) : Nat}, +b1: {Nat.add(Nat.mul(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), 10n), U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(U32.shrn(hh, 16n))) : Nat}, +m1: {Nat.is_lt(U32.to_nat(wsd.m(0, U32.shrn(hh, 16n))), 10n) == True{} : Bool}, +d1: {Nat.is_lt(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), U.U32Nat.dbl(16n, 1n)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.small.q(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n), U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10)))) == W.W64.to_nat(W.W64{hh, ll}) : Nat} & {Nat.is_lt(U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n) == True{} : Bool}:
331 wsd.sd2(hh, ll, a1, b1, wsd.step(wsd.m(0, U32.shrn(hh, 16n)), wsd.q(0, 0, U32.shrn(hh, 16n)), U32.and(hh, 65535), m1, Equal.trans(Bool, Nat.is_lt(U32.to_nat(U32.and(hh, 65535)), U.U32Nat.dbl(16n, 1n)), Nat.is_lt(U.U32Nat.low(16n, U32.to_nat(hh)), U.U32Nat.dbl(16n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(16n, 1n)), U32.to_nat(U32.and(hh, 65535)), U.U32Nat.low(16n, U32.to_nat(hh)), Equal.sym(Nat, U.U32Nat.low(16n, U32.to_nat(hh)), U32.to_nat(U32.and(hh, 65535)), Equal.sym(Nat, U32.to_nat(U32.and(hh, 65535)), U.U32Nat.low(16n, U32.to_nat(hh)), UL.u32_and_65535(hh)))), UL.low_lt(16n, U32.to_nat(hh))), Equal.trans(Bool, Nat.is_lt(U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))), U.U32Nat.dbl(16n, 1n)), Nat.is_lt(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), U.U32Nat.dbl(16n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(16n, 1n)), U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), Equal.sym(Nat, U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))), Equal.sym(Nat, U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), Equal.trans(Nat, U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))), Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n)))), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), a1, {==})))), d1)))
332
333def wsd.sd1(+hh: U32, +ll: U32, p1: {U32.to_nat(wsd.q(0, 0, U32.shrn(hh, 16n))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(wsd.d(0, U32.shrn(hh, 16n)))) : Nat} & {Nat.add(Nat.mul(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), 10n), U32.to_nat(wsd.m(0, U32.shrn(hh, 16n)))) == Nat.add(U.U32Nat.dbl(16n, U32.to_nat(0)), U32.to_nat(U32.shrn(hh, 16n))) : Nat} & {Nat.is_lt(U32.to_nat(wsd.m(0, U32.shrn(hh, 16n))), 10n) == True{} : Bool} & {Nat.is_lt(U32.to_nat(wsd.d(0, U32.shrn(hh, 16n))), U.U32Nat.dbl(16n, 1n)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.small.q(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n), U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10)))) == W.W64.to_nat(W.W64{hh, ll}) : Nat} & {Nat.is_lt(U32.to_nat(W.W64.small.r(W.W64.small.divmod(W.W64{hh, ll}, 10))), 10n) == True{} : Bool}:
334 (a1, b1, m1, d1) = p1
335 wsd.sd1b(hh, ll, a1, b1, m1, d1)
336
337
338def wsd.sd(+a: W.W64) -> {Nat.add(Nat.mul(W.W64.to_nat(wsh.q(a)), 10n), U32.to_nat(wsh.r(a))) == W.W64.to_nat(a) : Nat} & {Nat.is_lt(U32.to_nat(wsh.r(a)), 10n) == True{} : Bool}:
339 match a:
340 case W.W64{+hh, +ll}:
341 wsd.sd1(hh, ll, wsd.step(0, 0, U32.shrn(hh, 16n), {==}, Equal.trans(Bool, Nat.is_lt(U32.to_nat(U32.shrn(hh, 16n)), U.U32Nat.dbl(16n, 1n)), Nat.is_lt(U.U32Nat.high(16n, U32.to_nat(hh)), U.U32Nat.dbl(16n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(16n, 1n)), U32.to_nat(U32.shrn(hh, 16n)), U.U32Nat.high(16n, U32.to_nat(hh)), Equal.sym(Nat, U.U32Nat.high(16n, U32.to_nat(hh)), U32.to_nat(U32.shrn(hh, 16n)), Equal.sym(Nat, U32.to_nat(U32.shrn(hh, 16n)), U.U32Nat.high(16n, U32.to_nat(hh)), UL.u32_shrn_value(hh, 16n)))), UL.high_lt(16n, 16n, 32n, U32.to_nat(hh), {==}, wu.lt(hh))), {==}))
342
343def wsd.e(+a: W.W64, pr: {Nat.add(Nat.mul(W.W64.to_nat(wsh.q(a)), 10n), U32.to_nat(wsh.r(a))) == W.W64.to_nat(a) : Nat} & {Nat.is_lt(U32.to_nat(wsh.r(a)), 10n) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(wsh.q(a)), 10n), U32.to_nat(wsh.r(a))) == W.W64.to_nat(a) : Nat}:
344 (+u, +w) = pr
345 u
346
347def wsd.l(+a: W.W64, pr: {Nat.add(Nat.mul(W.W64.to_nat(wsh.q(a)), 10n), U32.to_nat(wsh.r(a))) == W.W64.to_nat(a) : Nat} & {Nat.is_lt(U32.to_nat(wsh.r(a)), 10n) == True{} : Bool}) -> {Nat.is_lt(U32.to_nat(wsh.r(a)), 10n) == True{} : Bool}:
348 (+u, +w) = pr
349 w
350
351def wsh.ed(+r: U32, +hr: {Nat.is_lt(U32.to_nat(r), 10n) == True{} : Bool}) -> {U32.sub(U32.add(48, r), 48) == r : U32}:
352 UL.u32_value_eq(U32.sub(U32.add(48, r), 48), r, Equal.trans(Nat, U32.to_nat(U32.sub(U32.add(48, r), 48)), Nat.sub(U32.to_nat(r), 0n), U32.to_nat(r), Equal.trans(Nat, U32.to_nat(U32.sub(U32.add(48, r), 48)), Nat.sub(Nat.add(U32.to_nat(48), U32.to_nat(r)), U32.to_nat(48)), Nat.sub(U32.to_nat(r), 0n), Equal.trans(Nat, U32.to_nat(U32.sub(U32.add(48, r), 48)), Nat.sub(U32.to_nat(U32.add(48, r)), U32.to_nat(48)), Nat.sub(Nat.add(U32.to_nat(48), U32.to_nat(r)), U32.to_nat(48)), UL.u32_sub_value(U32.add(48, r), 48, Equal.trans(Bool, Nat.is_le(U32.to_nat(48), U32.to_nat(U32.add(48, r))), Nat.is_le(U32.to_nat(48), Nat.add(U32.to_nat(48), U32.to_nat(r))), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(U32.to_nat(48), zz), U32.to_nat(U32.add(48, r)), Nat.add(U32.to_nat(48), U32.to_nat(r)), UL.u32_add_value(48, r, 57, Equal.trans(Bool, Nat.is_le(Nat.add(U32.to_nat(48), U32.to_nat(r)), U32.to_nat(57)), Nat.is_lt(U32.to_nat(r), 10n), True{}, Equal.trans(Bool, Nat.is_le(Nat.add(U32.to_nat(48), U32.to_nat(r)), U32.to_nat(57)), Nat.is_le(1n+U32.to_nat(r), 10n), Nat.is_lt(U32.to_nat(r), 10n), {==}, P.wn.le_succ(U32.to_nat(r), 10n)), hr))), Equal.trans(Bool, Nat.is_le(U32.to_nat(48), Nat.add(U32.to_nat(48), U32.to_nat(r))), Nat.is_le(U32.to_nat(48), Nat.add(U32.to_nat(r), U32.to_nat(48))), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(U32.to_nat(48), zz), Nat.add(U32.to_nat(48), U32.to_nat(r)), Nat.add(U32.to_nat(r), U32.to_nat(48)), UL.nat_add_comm(U32.to_nat(48), U32.to_nat(r))), UL.nat_le_add(U32.to_nat(48), U32.to_nat(r))))), Equal.cong(Nat, Nat, zz => Nat.sub(zz, U32.to_nat(48)), U32.to_nat(U32.add(48, r)), Nat.add(U32.to_nat(48), U32.to_nat(r)), UL.u32_add_value(48, r, 57, Equal.trans(Bool, Nat.is_le(Nat.add(U32.to_nat(48), U32.to_nat(r)), U32.to_nat(57)), Nat.is_lt(U32.to_nat(r), 10n), True{}, Equal.trans(Bool, Nat.is_le(Nat.add(U32.to_nat(48), U32.to_nat(r)), U32.to_nat(57)), Nat.is_le(1n+U32.to_nat(r), 10n), Nat.is_lt(U32.to_nat(r), 10n), {==}, P.wn.le_succ(U32.to_nat(r), 10n)), hr)))), {==}), wn.sub0(U32.to_nat(r))))
353
354def wsh.rd(+r: U32, +acc: String, +x: Nat, +hr: {Nat.is_lt(U32.to_nat(r), 10n) == True{} : Bool}) -> {Nat.read.go(SCon{W.W64.digit(r), acc}, x) == Nat.read.go(acc, Nat.add(Nat.mul(x, 10n), U32.to_nat(r))) : Maybe<&2, Nat>}:
355 Equal.trans(Maybe<&2, Nat>, Nat.read.if(acc, x, U32.sub(U32.add(48, r), 48), U32.is_lt(U32.sub(U32.add(48, r), 48), 10)), Nat.read.if(acc, x, r, U32.is_lt(r, 10)), Nat.read.go(acc, Nat.add(Nat.mul(x, 10n), U32.to_nat(r))), Equal.cong(U32, Maybe<&2, Nat>, zz => Nat.read.if(acc, x, zz, U32.is_lt(zz, 10)), U32.sub(U32.add(48, r), 48), r, wsh.ed(r, hr)), Equal.cong(Bool, Maybe<&2, Nat>, zz => Nat.read.if(acc, x, r, zz), U32.is_lt(r, 10), True{}, Equal.trans(Bool, U32.is_lt(r, 10), Nat.is_lt(U32.to_nat(r), U32.to_nat(10)), True{}, UL.u32_lt_value(r, 10), hr)))
356
357def wr.t10(+x0: Nat, +x1: Nat) -> {Nat.add(Nat.add(Nat.add(9n, Nat.mul(x0, 10n)), x1), 1n) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}:
358 %Equal.sym(Nat, Nat.mul(x0, 10n), Nat.mul(10n, x0), UL.nat_mul_comm(x0, 10n)) : {Nat.add(Nat.add(Nat.add(9n, _), x1), 1n) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
359 %Equal.sym(Nat, Nat.add(9n, Nat.mul(10n, x0)), Nat.add(Nat.mul(10n, x0), 9n), UL.nat_add_comm(9n, Nat.mul(10n, x0))) : {Nat.add(Nat.add(_, x1), 1n) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
360 %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(10n, x0), 9n), x1), Nat.add(Nat.mul(10n, x0), Nat.add(9n, x1)), UL.nat_add_assoc(Nat.mul(10n, x0), 9n, x1)) : {Nat.add(_, 1n) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
361 %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(10n, x0), Nat.add(9n, x1)), 1n), Nat.add(Nat.mul(10n, x0), Nat.add(Nat.add(9n, x1), 1n)), UL.nat_add_assoc(Nat.mul(10n, x0), Nat.add(9n, x1), 1n)) : {_ == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
362 %Equal.sym(Nat, Nat.add(Nat.add(9n, x1), 1n), Nat.add(9n, Nat.add(x1, 1n)), UL.nat_add_assoc(9n, x1, 1n)) : {Nat.add(Nat.mul(10n, x0), _) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
363 %Equal.sym(Nat, Nat.add(x1, 1n), Nat.add(1n, x1), UL.nat_add_comm(x1, 1n)) : {Nat.add(Nat.mul(10n, x0), Nat.add(9n, _)) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
364 %Equal.sym(Nat, Nat.add(9n, Nat.add(1n, x1)), Nat.add(1n, Nat.add(9n, x1)), UL.nat_add_left_comm(9n, 1n, x1)) : {Nat.add(Nat.mul(10n, x0), _) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
365 %Equal.sym(Nat, Nat.add(1n, Nat.add(9n, x1)), Nat.add(Nat.add(1n, 9n), x1), Equal.sym(Nat, Nat.add(Nat.add(1n, 9n), x1), Nat.add(1n, Nat.add(9n, x1)), UL.nat_add_assoc(1n, 9n, x1))) : {Nat.add(Nat.mul(10n, x0), _) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
366 %Equal.sym(Nat, Nat.add(Nat.mul(10n, x0), Nat.add(10n, x1)), Nat.add(10n, Nat.add(Nat.mul(10n, x0), x1)), UL.nat_add_left_comm(Nat.mul(10n, x0), 10n, x1)) : {_ == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
367 %Equal.sym(Nat, Nat.add(10n, Nat.add(Nat.mul(10n, x0), x1)), Nat.add(Nat.add(10n, Nat.mul(10n, x0)), x1), Equal.sym(Nat, Nat.add(Nat.add(10n, Nat.mul(10n, x0)), x1), Nat.add(10n, Nat.add(Nat.mul(10n, x0), x1)), UL.nat_add_assoc(10n, Nat.mul(10n, x0), x1))) : {_ == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
368 %Equal.sym(Nat, Nat.mul(10n, x0), Nat.mul(x0, 10n), Equal.sym(Nat, Nat.mul(x0, 10n), Nat.mul(10n, x0), UL.nat_mul_comm(x0, 10n))) : {Nat.add(Nat.add(10n, _), x1) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
369 %Equal.sym(Nat, Nat.mul(10n, 1n), Nat.mul(1n, 10n), Equal.sym(Nat, Nat.mul(1n, 10n), Nat.mul(10n, 1n), UL.nat_mul_comm(1n, 10n))) : {Nat.add(Nat.add(_, Nat.mul(x0, 10n)), x1) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
370 %Equal.sym(Nat, Nat.add(Nat.mul(1n, 10n), Nat.mul(x0, 10n)), Nat.mul(Nat.add(1n, x0), 10n), Equal.sym(Nat, Nat.mul(Nat.add(1n, x0), 10n), Nat.add(Nat.mul(1n, 10n), Nat.mul(x0, 10n)), UL.nat_add_mul(1n, x0, 10n))) : {Nat.add(_, x1) == Nat.add(Nat.mul(1n+x0, 10n), x1) : Nat}
371 {==}
372
373def wsh.it(n: Nat, +a: W.W64) -> W.W64:
374 match n:
375 case 0n:
376 a
377 case 1n+ +p:
378 wsh.it(p, wsh.q(a))
379
380def wsh.z0(x: Nat, e: {Nat.is_eq(x, 0n) == True{} : Bool}) -> {x == 0n : Nat}:
381 match x:
382 case 0n:
383 {==}
384 case 1n+ +p:
385 Empty.absurd({1n+p == 0n : Nat}, wn.ft(e))
386
387def wsh.zv(+a: W.W64, e: {W.W64.is_zero(a) == True{} : Bool}) -> {W.W64.to_nat(a) == 0n : Nat}:
388 wsh.z0(W.W64.to_nat(a), Equal.trans(Bool, Nat.is_eq(W.W64.to_nat(a), 0n), W.W64.is_zero(a), True{}, Equal.sym(Bool, W.W64.is_zero(a), Nat.is_eq(W.W64.to_nat(a), 0n), WB.eq_value(a, W.W64.zero())), e))
389
390def wsh.vz(+a: W.W64, e: {W.W64.to_nat(a) == 0n : Nat}) -> {W.W64.is_zero(a) == True{} : Bool}:
391 Equal.trans(Bool, W.W64.is_zero(a), Nat.is_eq(W.W64.to_nat(a), 0n), True{}, WB.eq_value(a, W.W64.zero()), Equal.cong(Nat, Bool, zz => Nat.is_eq(zz, 0n), W.W64.to_nat(a), 0n, e))
392
393
394def wsh.m0(x: Nat, +y: Nat, e: {Nat.add(Nat.mul(x, 10n), y) == 0n : Nat}) -> {x == 0n : Nat}:
395 match x:
396 case 0n:
397 {==}
398 case 1n+ +p:
399 Empty.absurd({1n+p == 0n : Nat}, UL.nat_succ_add_absurd(Nat.add(Nat.add(9n, Nat.mul(p, 10n)), y), 0n, Equal.trans(Nat, Nat.add(Nat.add(Nat.add(9n, Nat.mul(p, 10n)), y), 1n), Nat.add(Nat.mul(1n+p, 10n), y), 0n, wr.t10(p, y), e)))
400
401def wsh.step(+p: Nat, +a: W.W64, +acc: String, z: Bool, +ez: {W.W64.is_zero(a) == z : Bool}, +i0: {Nat.read.go(W.W64.show.go(p, wsh.q(a), acc), 0n) == Nat.read.go(acc, W.W64.to_nat(wsh.q(a))) : Maybe<&2, Nat>}, +i1: {Nat.read.go(W.W64.show.go(p, wsh.q(a), SCon{W.W64.digit(wsh.r(a)), acc}), 0n) == Nat.read.go(SCon{W.W64.digit(wsh.r(a)), acc}, W.W64.to_nat(wsh.q(a))) : Maybe<&2, Nat>}) -> {Nat.read.go(W.W64.show.go(p, wsh.q(a), W.W64.show.push(z, acc, wsh.r(a))), 0n) == Nat.read.go(acc, W.W64.to_nat(a)) : Maybe<&2, Nat>}:
402 match z:
403 case True{}:
404 +a0 = wsh.zv(a, ez)
405 +q0 = wsh.m0(W.W64.to_nat(wsh.q(a)), U32.to_nat(wsh.r(a)), Equal.trans(Nat, Nat.add(Nat.mul(W.W64.to_nat(wsh.q(a)), 10n), U32.to_nat(wsh.r(a))), W.W64.to_nat(a), 0n, wsd.e(a, wsd.sd(a)), a0))
406 Equal.trans(Maybe<&2, Nat>, Nat.read.go(W.W64.show.go(p, wsh.q(a), acc), 0n), Nat.read.go(acc, W.W64.to_nat(wsh.q(a))), Nat.read.go(acc, W.W64.to_nat(a)), i0, Equal.cong(Nat, Maybe<&2, Nat>, zz => Nat.read.go(acc, zz), W.W64.to_nat(wsh.q(a)), W.W64.to_nat(a), Equal.trans(Nat, W.W64.to_nat(wsh.q(a)), 0n, W.W64.to_nat(a), q0, Equal.sym(Nat, W.W64.to_nat(a), 0n, a0))))
407 case False{}:
408 Equal.trans(Maybe<&2, Nat>, Nat.read.go(W.W64.show.go(p, wsh.q(a), SCon{W.W64.digit(wsh.r(a)), acc}), 0n), Nat.read.go(SCon{W.W64.digit(wsh.r(a)), acc}, W.W64.to_nat(wsh.q(a))), Nat.read.go(acc, W.W64.to_nat(a)), i1, Equal.trans(Maybe<&2, Nat>, Nat.read.go(SCon{W.W64.digit(wsh.r(a)), acc}, W.W64.to_nat(wsh.q(a))), Nat.read.go(acc, Nat.add(Nat.mul(W.W64.to_nat(wsh.q(a)), 10n), U32.to_nat(wsh.r(a)))), Nat.read.go(acc, W.W64.to_nat(a)), wsh.rd(wsh.r(a), acc, W.W64.to_nat(wsh.q(a)), wsd.l(a, wsd.sd(a))), Equal.cong(Nat, Maybe<&2, Nat>, zz => Nat.read.go(acc, zz), Nat.add(Nat.mul(W.W64.to_nat(wsh.q(a)), 10n), U32.to_nat(wsh.r(a))), W.W64.to_nat(a), wsd.e(a, wsd.sd(a)))))
409
410def wsh.go(n: Nat, +a: W.W64, +acc: String, +hf: {W.W64.is_zero(wsh.it(n, a)) == True{} : Bool}) -> {Nat.read.go(W.W64.show.go(n, a, acc), 0n) == Nat.read.go(acc, W.W64.to_nat(a)) : Maybe<&2, Nat>}:
411 match n:
412 case 0n:
413 Equal.cong(Nat, Maybe<&2, Nat>, zz => Nat.read.go(acc, zz), 0n, W.W64.to_nat(a), Equal.sym(Nat, W.W64.to_nat(a), 0n, wsh.zv(a, hf)))
414 case 1n+ +p:
415 wsh.step(p, a, acc, W.W64.is_zero(a), {==}, wsh.go(p, wsh.q(a), acc, hf), wsh.go(p, wsh.q(a), SCon{W.W64.digit(wsh.r(a)), acc}, hf))
416
417def wr.t11(+x0: Nat, +x1: Nat) -> {Nat.add(x0, Nat.add(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1))) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}:
418 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1)), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)), UL.nat_add_comm(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1))) : {Nat.add(x0, _) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
419 %Equal.sym(Nat, Nat.add(x0, Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1))), Nat.add(U.U32Nat.dbl(1n, x1), Nat.add(x0, U.U32Nat.dbl(3n, x1))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, x1), Nat.add(x0, U.U32Nat.dbl(3n, x1))), Nat.add(x0, Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(1n, x1), x0, U.U32Nat.dbl(3n, x1)))) : {_ == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
420 %Equal.sym(Nat, Nat.add(x0, U.U32Nat.dbl(3n, x1)), Nat.add(U.U32Nat.dbl(3n, x1), x0), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x1), x0), Nat.add(x0, U.U32Nat.dbl(3n, x1)), UL.nat_add_comm(U.U32Nat.dbl(3n, x1), x0))) : {Nat.add(U.U32Nat.dbl(1n, x1), _) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
421 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, x1), Nat.add(U.U32Nat.dbl(3n, x1), x0)), Nat.add(Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)), x0), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)), x0), Nat.add(U.U32Nat.dbl(1n, x1), Nat.add(U.U32Nat.dbl(3n, x1), x0)), UL.nat_add_assoc(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1), x0))) : {_ == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
422 %Equal.sym(Nat, x1, Nat.mul(x1, 1n), Equal.sym(Nat, Nat.mul(x1, 1n), x1, UL.nat_mul_one(x1))) : {Nat.add(Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, _)), x0) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
423 %Equal.sym(Nat, U.U32Nat.dbl(3n, Nat.mul(x1, 1n)), Nat.mul(x1, U.U32Nat.dbl(3n, 1n)), Equal.sym(Nat, Nat.mul(x1, U.U32Nat.dbl(3n, 1n)), U.U32Nat.dbl(3n, Nat.mul(x1, 1n)), UL.dbl_mul_r(3n, x1, 1n))) : {Nat.add(Nat.add(U.U32Nat.dbl(1n, x1), _), x0) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
424 %Equal.sym(Nat, x1, Nat.mul(x1, 1n), Equal.sym(Nat, Nat.mul(x1, 1n), x1, UL.nat_mul_one(x1))) : {Nat.add(Nat.add(U.U32Nat.dbl(1n, _), Nat.mul(x1, U.U32Nat.dbl(3n, 1n))), x0) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
425 %Equal.sym(Nat, U.U32Nat.dbl(1n, Nat.mul(x1, 1n)), Nat.mul(x1, U.U32Nat.dbl(1n, 1n)), Equal.sym(Nat, Nat.mul(x1, U.U32Nat.dbl(1n, 1n)), U.U32Nat.dbl(1n, Nat.mul(x1, 1n)), UL.dbl_mul_r(1n, x1, 1n))) : {Nat.add(Nat.add(_, Nat.mul(x1, U.U32Nat.dbl(3n, 1n))), x0) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
426 %Equal.sym(Nat, Nat.add(Nat.mul(x1, U.U32Nat.dbl(1n, 1n)), Nat.mul(x1, U.U32Nat.dbl(3n, 1n))), Nat.mul(x1, Nat.add(U.U32Nat.dbl(1n, 1n), U.U32Nat.dbl(3n, 1n))), Equal.sym(Nat, Nat.mul(x1, Nat.add(U.U32Nat.dbl(1n, 1n), U.U32Nat.dbl(3n, 1n))), Nat.add(Nat.mul(x1, U.U32Nat.dbl(1n, 1n)), Nat.mul(x1, U.U32Nat.dbl(3n, 1n))), UL.nat_mul_add(x1, U.U32Nat.dbl(1n, 1n), U.U32Nat.dbl(3n, 1n)))) : {Nat.add(_, x0) == Nat.add(Nat.mul(x1, 10n), x0) : Nat}
427 {==}
428
429def wr.t12(+x0: Nat, +x1: Nat) -> {Nat.add(Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)), Nat.add(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}:
430 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0)), UL.nat_add_comm(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))) : {Nat.add(_, Nat.add(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
431 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1)), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)), UL.nat_add_comm(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1))) : {Nat.add(Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0)), _) == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
432 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0)), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1))), Nat.add(U.U32Nat.dbl(1n, x0), Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)))), UL.nat_add_assoc(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)))) : {_ == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
433 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1))), Nat.add(U.U32Nat.dbl(1n, x1), Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(3n, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1))) : {Nat.add(U.U32Nat.dbl(1n, x0), _) == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
434 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, x1), Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(3n, x1))), Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1))), Nat.add(U.U32Nat.dbl(1n, x1), Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(3n, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)))) : {Nat.add(U.U32Nat.dbl(1n, x0), _) == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
435 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, x0), Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)))), Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)))), Nat.add(U.U32Nat.dbl(1n, x0), Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)))), UL.nat_add_left_comm(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1))))) : {_ == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
436 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)), Nat.add(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1)), Nat.add(U.U32Nat.dbl(1n, x1), U.U32Nat.dbl(3n, x1)), UL.nat_add_comm(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1)))) : {Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(1n, x0), _)) == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
437 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, x0), Nat.add(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1))), Nat.add(U.U32Nat.dbl(3n, x1), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x1), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1))), Nat.add(U.U32Nat.dbl(1n, x0), Nat.add(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(3n, x1), U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1)))) : {Nat.add(U.U32Nat.dbl(3n, x0), _) == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
438 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(3n, x1), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1)))), Nat.add(Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(3n, x1)), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(3n, x1)), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1))), Nat.add(U.U32Nat.dbl(3n, x0), Nat.add(U.U32Nat.dbl(3n, x1), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1)))), UL.nat_add_assoc(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(3n, x1), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1))))) : {_ == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
439 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1)), Equal.sym(Nat, U.U32Nat.dbl(1n, Nat.add(x0, x1)), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(1n, x1)), UL.dbl_add(1n, x0, x1))) : {Nat.add(Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(3n, x1)), _) == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
440 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(3n, x1)), U.U32Nat.dbl(3n, Nat.add(x0, x1)), Equal.sym(Nat, U.U32Nat.dbl(3n, Nat.add(x0, x1)), Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(3n, x1)), UL.dbl_add(3n, x0, x1))) : {Nat.add(_, U.U32Nat.dbl(1n, Nat.add(x0, x1))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(x0, x1)), U.U32Nat.dbl(1n, Nat.add(x0, x1))) : Nat}
441 {==}
442
443def wr.t13(+x0: Nat, +x1: Nat) -> {Nat.add(Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)), Nat.add(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x1))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}:
444 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)), UL.nat_add_comm(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))) : {Nat.add(_, Nat.add(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x1))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
445 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x1)), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)), UL.nat_add_comm(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x1))) : {Nat.add(Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
446 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1))), Nat.add(U.U32Nat.dbl(5n, x0), Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)))), UL.nat_add_assoc(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)))) : {_ == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
447 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1))), Nat.add(U.U32Nat.dbl(5n, x1), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(6n, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1))) : {Nat.add(U.U32Nat.dbl(5n, x0), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
448 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(5n, x1), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(6n, x1))), Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1))), Nat.add(U.U32Nat.dbl(5n, x1), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(6n, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)))) : {Nat.add(U.U32Nat.dbl(5n, x0), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
449 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(5n, x0), Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)))), Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)))), Nat.add(U.U32Nat.dbl(5n, x0), Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)))), UL.nat_add_left_comm(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1))))) : {_ == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
450 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)), Nat.add(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x1)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x1)), Nat.add(U.U32Nat.dbl(5n, x1), U.U32Nat.dbl(6n, x1)), UL.nat_add_comm(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x1)))) : {Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(5n, x0), _)) == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
451 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(5n, x0), Nat.add(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x1))), Nat.add(U.U32Nat.dbl(6n, x1), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x1), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1))), Nat.add(U.U32Nat.dbl(5n, x0), Nat.add(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(6n, x1), U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1)))) : {Nat.add(U.U32Nat.dbl(6n, x0), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
452 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(6n, x1), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1)))), Nat.add(Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(6n, x1)), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(6n, x1)), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1))), Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(6n, x1), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1)))), UL.nat_add_assoc(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(6n, x1), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1))))) : {_ == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
453 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1)), Equal.sym(Nat, U.U32Nat.dbl(5n, Nat.add(x0, x1)), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(5n, x1)), UL.dbl_add(5n, x0, x1))) : {Nat.add(Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(6n, x1)), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
454 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(6n, x1)), U.U32Nat.dbl(6n, Nat.add(x0, x1)), Equal.sym(Nat, U.U32Nat.dbl(6n, Nat.add(x0, x1)), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(6n, x1)), UL.dbl_add(6n, x0, x1))) : {Nat.add(_, U.U32Nat.dbl(5n, Nat.add(x0, x1))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(x0, x1)), U.U32Nat.dbl(5n, Nat.add(x0, x1))) : Nat}
455 {==}
456
457def wr.t14(+x0: Nat) -> {Nat.add(U.U32Nat.dbl(2n, x0), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}:
458 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)), UL.nat_add_comm(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))) : {Nat.add(U.U32Nat.dbl(2n, x0), _) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
459 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(1n, 4n), x0), U.U32Nat.dbl(1n, U.U32Nat.dbl(4n, x0)), Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(4n, x0)), U.U32Nat.dbl(Nat.add(1n, 4n), x0), UL.dbl_dbl(1n, 4n, x0))) : {Nat.add(U.U32Nat.dbl(2n, x0), Nat.add(_, U.U32Nat.dbl(6n, x0))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
460 %Equal.sym(Nat, Nat.double(U.U32Nat.dbl(4n, x0)), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(4n, x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(4n, x0)), Nat.double(U.U32Nat.dbl(4n, x0)), Equal.sym(Nat, Nat.double(U.U32Nat.dbl(4n, x0)), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(4n, x0)), UL.nat_double(U.U32Nat.dbl(4n, x0))))) : {Nat.add(U.U32Nat.dbl(2n, x0), Nat.add(_, U.U32Nat.dbl(6n, x0))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
461 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(4n, x0)), U.U32Nat.dbl(6n, x0)), Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0))), Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(4n, x0)), U.U32Nat.dbl(6n, x0)), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(4n, x0)), U.U32Nat.dbl(6n, x0)), Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0))), UL.nat_add_assoc(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0))))) : {Nat.add(U.U32Nat.dbl(2n, x0), _) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
462 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(2n, x0), Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)))), Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(2n, x0), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(2n, x0), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)))), Nat.add(U.U32Nat.dbl(2n, x0), Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)))), UL.nat_add_left_comm(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(2n, x0), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0))))) : {_ == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
463 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(4n, x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(4n, x0)), Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)), UL.nat_add_comm(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(4n, x0)))) : {Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(2n, x0), _)) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
464 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(2n, x0), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(4n, x0))), Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(2n, x0), U.U32Nat.dbl(4n, x0))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(2n, x0), U.U32Nat.dbl(4n, x0))), Nat.add(U.U32Nat.dbl(2n, x0), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(4n, x0))), UL.nat_add_left_comm(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(2n, x0), U.U32Nat.dbl(4n, x0)))) : {Nat.add(U.U32Nat.dbl(4n, x0), _) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
465 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(2n, x0), U.U32Nat.dbl(4n, x0)))), Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)), Nat.add(U.U32Nat.dbl(2n, x0), U.U32Nat.dbl(4n, x0))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)), Nat.add(U.U32Nat.dbl(2n, x0), U.U32Nat.dbl(4n, x0))), Nat.add(U.U32Nat.dbl(4n, x0), Nat.add(U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(2n, x0), U.U32Nat.dbl(4n, x0)))), UL.nat_add_assoc(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0), Nat.add(U.U32Nat.dbl(2n, x0), U.U32Nat.dbl(4n, x0))))) : {_ == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
466 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(1n, 3n), x0), U.U32Nat.dbl(1n, U.U32Nat.dbl(3n, x0)), Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(3n, x0)), U.U32Nat.dbl(Nat.add(1n, 3n), x0), UL.dbl_dbl(1n, 3n, x0))) : {Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)), Nat.add(U.U32Nat.dbl(2n, x0), _)) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
467 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(1n, 1n), x0), U.U32Nat.dbl(1n, U.U32Nat.dbl(1n, x0)), Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(1n, x0)), U.U32Nat.dbl(Nat.add(1n, 1n), x0), UL.dbl_dbl(1n, 1n, x0))) : {Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)), Nat.add(_, U.U32Nat.dbl(1n, U.U32Nat.dbl(3n, x0)))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
468 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, U.U32Nat.dbl(1n, x0)), U.U32Nat.dbl(1n, U.U32Nat.dbl(3n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0))), Equal.sym(Nat, U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0))), Nat.add(U.U32Nat.dbl(1n, U.U32Nat.dbl(1n, x0)), U.U32Nat.dbl(1n, U.U32Nat.dbl(3n, x0))), UL.dbl_add(1n, U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0)))) : {Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)), _) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
469 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0)), Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0)), UL.nat_add_comm(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : {Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), U.U32Nat.dbl(6n, x0)), U.U32Nat.dbl(1n, _)) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
470 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(3n, 3n), x0), U.U32Nat.dbl(3n, U.U32Nat.dbl(3n, x0)), Equal.sym(Nat, U.U32Nat.dbl(3n, U.U32Nat.dbl(3n, x0)), U.U32Nat.dbl(Nat.add(3n, 3n), x0), UL.dbl_dbl(3n, 3n, x0))) : {Nat.add(Nat.add(U.U32Nat.dbl(4n, x0), _), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
471 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(1n, 3n), x0), U.U32Nat.dbl(1n, U.U32Nat.dbl(3n, x0)), Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(3n, x0)), U.U32Nat.dbl(Nat.add(1n, 3n), x0), UL.dbl_dbl(1n, 3n, x0))) : {Nat.add(Nat.add(_, U.U32Nat.dbl(3n, U.U32Nat.dbl(3n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
472 %Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(3n, x0)), U.U32Nat.dbl(3n, U.U32Nat.dbl(1n, x0)), Equal.sym(Nat, U.U32Nat.dbl(3n, U.U32Nat.dbl(1n, x0)), U.U32Nat.dbl(1n, U.U32Nat.dbl(3n, x0)), UL.dbl_comm(3n, 1n, x0))) : {Nat.add(Nat.add(_, U.U32Nat.dbl(3n, U.U32Nat.dbl(3n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
473 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, U.U32Nat.dbl(1n, x0)), U.U32Nat.dbl(3n, U.U32Nat.dbl(3n, x0))), U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0))), Equal.sym(Nat, U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0))), Nat.add(U.U32Nat.dbl(3n, U.U32Nat.dbl(1n, x0)), U.U32Nat.dbl(3n, U.U32Nat.dbl(3n, x0))), UL.dbl_add(3n, U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0)))) : {Nat.add(_, U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
474 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0)), Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)), Nat.add(U.U32Nat.dbl(1n, x0), U.U32Nat.dbl(3n, x0)), UL.nat_add_comm(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : {Nat.add(U.U32Nat.dbl(3n, _), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) == Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, x0), U.U32Nat.dbl(1n, x0)))) : Nat}
475 {==}
476
477def wr.t15(+x0: Nat) -> {Nat.add(U.U32Nat.dbl(10n, x0), U.U32Nat.dbl(13n, x0)) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}:
478 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(1n, 12n), x0), U.U32Nat.dbl(1n, U.U32Nat.dbl(12n, x0)), Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(12n, x0)), U.U32Nat.dbl(Nat.add(1n, 12n), x0), UL.dbl_dbl(1n, 12n, x0))) : {Nat.add(U.U32Nat.dbl(10n, x0), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
479 %Equal.sym(Nat, Nat.double(U.U32Nat.dbl(12n, x0)), Nat.add(U.U32Nat.dbl(12n, x0), U.U32Nat.dbl(12n, x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(12n, x0), U.U32Nat.dbl(12n, x0)), Nat.double(U.U32Nat.dbl(12n, x0)), Equal.sym(Nat, Nat.double(U.U32Nat.dbl(12n, x0)), Nat.add(U.U32Nat.dbl(12n, x0), U.U32Nat.dbl(12n, x0)), UL.nat_double(U.U32Nat.dbl(12n, x0))))) : {Nat.add(U.U32Nat.dbl(10n, x0), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
480 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(1n, 11n), x0), U.U32Nat.dbl(1n, U.U32Nat.dbl(11n, x0)), Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(11n, x0)), U.U32Nat.dbl(Nat.add(1n, 11n), x0), UL.dbl_dbl(1n, 11n, x0))) : {Nat.add(U.U32Nat.dbl(10n, x0), Nat.add(_, U.U32Nat.dbl(12n, x0))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
481 %Equal.sym(Nat, Nat.double(U.U32Nat.dbl(11n, x0)), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(11n, x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(11n, x0)), Nat.double(U.U32Nat.dbl(11n, x0)), Equal.sym(Nat, Nat.double(U.U32Nat.dbl(11n, x0)), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(11n, x0)), UL.nat_double(U.U32Nat.dbl(11n, x0))))) : {Nat.add(U.U32Nat.dbl(10n, x0), Nat.add(_, U.U32Nat.dbl(12n, x0))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
482 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(11n, x0)), U.U32Nat.dbl(12n, x0)), Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0))), Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(11n, x0)), U.U32Nat.dbl(12n, x0)), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(11n, x0)), U.U32Nat.dbl(12n, x0)), Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0))), UL.nat_add_assoc(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0))))) : {Nat.add(U.U32Nat.dbl(10n, x0), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
483 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(10n, x0), Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)))), Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(10n, x0), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(10n, x0), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)))), Nat.add(U.U32Nat.dbl(10n, x0), Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)))), UL.nat_add_left_comm(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(10n, x0), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0))))) : {_ == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
484 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)), Nat.add(U.U32Nat.dbl(12n, x0), U.U32Nat.dbl(11n, x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(12n, x0), U.U32Nat.dbl(11n, x0)), Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)), UL.nat_add_comm(U.U32Nat.dbl(12n, x0), U.U32Nat.dbl(11n, x0)))) : {Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(10n, x0), _)) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
485 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(10n, x0), Nat.add(U.U32Nat.dbl(12n, x0), U.U32Nat.dbl(11n, x0))), Nat.add(U.U32Nat.dbl(12n, x0), Nat.add(U.U32Nat.dbl(10n, x0), U.U32Nat.dbl(11n, x0))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(12n, x0), Nat.add(U.U32Nat.dbl(10n, x0), U.U32Nat.dbl(11n, x0))), Nat.add(U.U32Nat.dbl(10n, x0), Nat.add(U.U32Nat.dbl(12n, x0), U.U32Nat.dbl(11n, x0))), UL.nat_add_left_comm(U.U32Nat.dbl(12n, x0), U.U32Nat.dbl(10n, x0), U.U32Nat.dbl(11n, x0)))) : {Nat.add(U.U32Nat.dbl(11n, x0), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
486 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(12n, x0), Nat.add(U.U32Nat.dbl(10n, x0), U.U32Nat.dbl(11n, x0)))), Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)), Nat.add(U.U32Nat.dbl(10n, x0), U.U32Nat.dbl(11n, x0))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)), Nat.add(U.U32Nat.dbl(10n, x0), U.U32Nat.dbl(11n, x0))), Nat.add(U.U32Nat.dbl(11n, x0), Nat.add(U.U32Nat.dbl(12n, x0), Nat.add(U.U32Nat.dbl(10n, x0), U.U32Nat.dbl(11n, x0)))), UL.nat_add_assoc(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0), Nat.add(U.U32Nat.dbl(10n, x0), U.U32Nat.dbl(11n, x0))))) : {_ == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
487 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(5n, 6n), x0), U.U32Nat.dbl(5n, U.U32Nat.dbl(6n, x0)), Equal.sym(Nat, U.U32Nat.dbl(5n, U.U32Nat.dbl(6n, x0)), U.U32Nat.dbl(Nat.add(5n, 6n), x0), UL.dbl_dbl(5n, 6n, x0))) : {Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)), Nat.add(U.U32Nat.dbl(10n, x0), _)) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
488 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(5n, 5n), x0), U.U32Nat.dbl(5n, U.U32Nat.dbl(5n, x0)), Equal.sym(Nat, U.U32Nat.dbl(5n, U.U32Nat.dbl(5n, x0)), U.U32Nat.dbl(Nat.add(5n, 5n), x0), UL.dbl_dbl(5n, 5n, x0))) : {Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)), Nat.add(_, U.U32Nat.dbl(5n, U.U32Nat.dbl(6n, x0)))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
489 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(5n, U.U32Nat.dbl(5n, x0)), U.U32Nat.dbl(5n, U.U32Nat.dbl(6n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0))), Equal.sym(Nat, U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0))), Nat.add(U.U32Nat.dbl(5n, U.U32Nat.dbl(5n, x0)), U.U32Nat.dbl(5n, U.U32Nat.dbl(6n, x0))), UL.dbl_add(5n, U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)))) : {Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)), _) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
490 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)), UL.nat_add_comm(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : {Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), U.U32Nat.dbl(12n, x0)), U.U32Nat.dbl(5n, _)) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
491 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(6n, 6n), x0), U.U32Nat.dbl(6n, U.U32Nat.dbl(6n, x0)), Equal.sym(Nat, U.U32Nat.dbl(6n, U.U32Nat.dbl(6n, x0)), U.U32Nat.dbl(Nat.add(6n, 6n), x0), UL.dbl_dbl(6n, 6n, x0))) : {Nat.add(Nat.add(U.U32Nat.dbl(11n, x0), _), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
492 %Equal.sym(Nat, U.U32Nat.dbl(Nat.add(5n, 6n), x0), U.U32Nat.dbl(5n, U.U32Nat.dbl(6n, x0)), Equal.sym(Nat, U.U32Nat.dbl(5n, U.U32Nat.dbl(6n, x0)), U.U32Nat.dbl(Nat.add(5n, 6n), x0), UL.dbl_dbl(5n, 6n, x0))) : {Nat.add(Nat.add(_, U.U32Nat.dbl(6n, U.U32Nat.dbl(6n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
493 %Equal.sym(Nat, U.U32Nat.dbl(5n, U.U32Nat.dbl(6n, x0)), U.U32Nat.dbl(6n, U.U32Nat.dbl(5n, x0)), Equal.sym(Nat, U.U32Nat.dbl(6n, U.U32Nat.dbl(5n, x0)), U.U32Nat.dbl(5n, U.U32Nat.dbl(6n, x0)), UL.dbl_comm(6n, 5n, x0))) : {Nat.add(Nat.add(_, U.U32Nat.dbl(6n, U.U32Nat.dbl(6n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
494 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, U.U32Nat.dbl(5n, x0)), U.U32Nat.dbl(6n, U.U32Nat.dbl(6n, x0))), U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0))), Equal.sym(Nat, U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0))), Nat.add(U.U32Nat.dbl(6n, U.U32Nat.dbl(5n, x0)), U.U32Nat.dbl(6n, U.U32Nat.dbl(6n, x0))), UL.dbl_add(6n, U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)))) : {Nat.add(_, U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
495 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)), Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)), Nat.add(U.U32Nat.dbl(5n, x0), U.U32Nat.dbl(6n, x0)), UL.nat_add_comm(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : {Nat.add(U.U32Nat.dbl(6n, _), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) == Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, x0), U.U32Nat.dbl(5n, x0)))) : Nat}
496 {==}
497
498def wsh.f1(+q: Nat, +r: Nat, +x: Nat, +e: {Nat.add(Nat.mul(q, 10n), r) == x : Nat}) -> {Nat.is_le(Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q)), x) == True{} : Bool}:
499 Equal.trans(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q)), x), Nat.is_le(Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q)), Nat.add(r, Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q)))), True{}, Equal.sym(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q)), Nat.add(r, Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q)))), Nat.is_le(Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q)), x), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q)), zz), Nat.add(r, Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q))), x, Equal.trans(Nat, Nat.add(r, Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q))), Nat.add(Nat.mul(q, 10n), r), x, wr.t11(r, q), e))), UL.nat_le_add(Nat.add(U.U32Nat.dbl(3n, q), U.U32Nat.dbl(1n, q)), r))
500
501
502def wsh.fm(+y: Nat, +z: Nat, +h: {Nat.is_le(y, z) == True{} : Bool}) -> {Nat.is_le(Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)), Nat.add(U.U32Nat.dbl(3n, z), U.U32Nat.dbl(1n, z))) == True{} : Bool}:
503 Equal.trans(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)), Nat.add(U.U32Nat.dbl(3n, z), U.U32Nat.dbl(1n, z))), Nat.is_le(Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)), Nat.add(Nat.add(U.U32Nat.dbl(3n, Nat.sub(z, y)), U.U32Nat.dbl(1n, Nat.sub(z, y))), Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)))), True{}, Equal.sym(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)), Nat.add(Nat.add(U.U32Nat.dbl(3n, Nat.sub(z, y)), U.U32Nat.dbl(1n, Nat.sub(z, y))), Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)))), Nat.is_le(Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)), Nat.add(U.U32Nat.dbl(3n, z), U.U32Nat.dbl(1n, z))), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)), zz), Nat.add(Nat.add(U.U32Nat.dbl(3n, Nat.sub(z, y)), U.U32Nat.dbl(1n, Nat.sub(z, y))), Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y))), Nat.add(U.U32Nat.dbl(3n, z), U.U32Nat.dbl(1n, z)), Equal.trans(Nat, Nat.add(Nat.add(U.U32Nat.dbl(3n, Nat.sub(z, y)), U.U32Nat.dbl(1n, Nat.sub(z, y))), Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y))), Nat.add(U.U32Nat.dbl(3n, Nat.add(Nat.sub(z, y), y)), U.U32Nat.dbl(1n, Nat.add(Nat.sub(z, y), y))), Nat.add(U.U32Nat.dbl(3n, z), U.U32Nat.dbl(1n, z)), wr.t12(Nat.sub(z, y), y), Equal.cong(Nat, Nat, zz => Nat.add(U.U32Nat.dbl(3n, zz), U.U32Nat.dbl(1n, zz)), Nat.add(Nat.sub(z, y), y), z, UL.nat_le_witness(y, z, h))))), UL.nat_le_add(Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)), Nat.add(U.U32Nat.dbl(3n, Nat.sub(z, y)), U.U32Nat.dbl(1n, Nat.sub(z, y)))))
504
505def wsh.gm(+y: Nat, +z: Nat, +h: {Nat.is_le(y, z) == True{} : Bool}) -> {Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(U.U32Nat.dbl(6n, z), U.U32Nat.dbl(5n, z))) == True{} : Bool}:
506 Equal.trans(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(U.U32Nat.dbl(6n, z), U.U32Nat.dbl(5n, z))), Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(Nat.add(U.U32Nat.dbl(6n, Nat.sub(z, y)), U.U32Nat.dbl(5n, Nat.sub(z, y))), Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)))), True{}, Equal.sym(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(Nat.add(U.U32Nat.dbl(6n, Nat.sub(z, y)), U.U32Nat.dbl(5n, Nat.sub(z, y))), Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)))), Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(U.U32Nat.dbl(6n, z), U.U32Nat.dbl(5n, z))), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), zz), Nat.add(Nat.add(U.U32Nat.dbl(6n, Nat.sub(z, y)), U.U32Nat.dbl(5n, Nat.sub(z, y))), Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))), Nat.add(U.U32Nat.dbl(6n, z), U.U32Nat.dbl(5n, z)), Equal.trans(Nat, Nat.add(Nat.add(U.U32Nat.dbl(6n, Nat.sub(z, y)), U.U32Nat.dbl(5n, Nat.sub(z, y))), Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))), Nat.add(U.U32Nat.dbl(6n, Nat.add(Nat.sub(z, y), y)), U.U32Nat.dbl(5n, Nat.add(Nat.sub(z, y), y))), Nat.add(U.U32Nat.dbl(6n, z), U.U32Nat.dbl(5n, z)), wr.t13(Nat.sub(z, y), y), Equal.cong(Nat, Nat, zz => Nat.add(U.U32Nat.dbl(6n, zz), U.U32Nat.dbl(5n, zz)), Nat.add(Nat.sub(z, y), y), z, UL.nat_le_witness(y, z, h))))), UL.nat_le_add(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(U.U32Nat.dbl(6n, Nat.sub(z, y)), U.U32Nat.dbl(5n, Nat.sub(z, y)))))
507
508
509def wsh.gf(+y: Nat) -> {Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y))))) == True{} : Bool}:
510 Equal.trans(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y))))), Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(U.U32Nat.dbl(2n, y), Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)))), True{}, Equal.sym(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(U.U32Nat.dbl(2n, y), Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)))), Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y))))), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), zz), Nat.add(U.U32Nat.dbl(2n, y), Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))), Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, y), U.U32Nat.dbl(1n, y)))), wr.t14(y))), UL.nat_le_add(Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)), U.U32Nat.dbl(2n, y)))
511
512def wsh.gg(+y: Nat) -> {Nat.is_le(U.U32Nat.dbl(13n, y), Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))))) == True{} : Bool}:
513 Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(13n, y), Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))))), Nat.is_le(U.U32Nat.dbl(13n, y), Nat.add(U.U32Nat.dbl(10n, y), U.U32Nat.dbl(13n, y))), True{}, Equal.sym(Bool, Nat.is_le(U.U32Nat.dbl(13n, y), Nat.add(U.U32Nat.dbl(10n, y), U.U32Nat.dbl(13n, y))), Nat.is_le(U.U32Nat.dbl(13n, y), Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))))), Equal.cong(Nat, Bool, zz => Nat.is_le(U.U32Nat.dbl(13n, y), zz), Nat.add(U.U32Nat.dbl(10n, y), U.U32Nat.dbl(13n, y)), Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, y), U.U32Nat.dbl(5n, y)))), wr.t15(y))), UL.nat_le_add(U.U32Nat.dbl(13n, y), U.U32Nat.dbl(10n, y)))
514
515def wsh.b4(+x: W.W64) -> {Nat.is_le(U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), W.W64.to_nat(x)) == True{} : Bool}:
516 UO.nat_le_trans(U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(5n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(5n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x))))))))), W.W64.to_nat(x), wsh.gg(W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), UO.nat_le_trans(Nat.add(U.U32Nat.dbl(6n, Nat.add(U.U32Nat.dbl(6n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(5n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))))), U.U32Nat.dbl(5n, Nat.add(U.U32Nat.dbl(6n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(5n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x))))))))), Nat.add(U.U32Nat.dbl(6n, W.W64.to_nat(wsh.q(wsh.q(x)))), U.U32Nat.dbl(5n, W.W64.to_nat(wsh.q(wsh.q(x))))), W.W64.to_nat(x), wsh.gm(Nat.add(U.U32Nat.dbl(6n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(5n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x))))))), W.W64.to_nat(wsh.q(wsh.q(x))), UO.nat_le_trans(Nat.add(U.U32Nat.dbl(6n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(5n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x))))))), Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x))))))))), W.W64.to_nat(wsh.q(wsh.q(x))), wsh.gf(W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), UO.nat_le_trans(Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x))))))))), Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(x))))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(x)))))), W.W64.to_nat(wsh.q(wsh.q(x))), wsh.fm(Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x))))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(x)))), wsh.f1(W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(x))))), U32.to_nat(wsh.r(wsh.q(wsh.q(wsh.q(x))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(x)))), wsd.e(wsh.q(wsh.q(wsh.q(x))), wsd.sd(wsh.q(wsh.q(wsh.q(x))))))), wsh.f1(W.W64.to_nat(wsh.q(wsh.q(wsh.q(x)))), U32.to_nat(wsh.r(wsh.q(wsh.q(x)))), W.W64.to_nat(wsh.q(wsh.q(x))), wsd.e(wsh.q(wsh.q(x)), wsd.sd(wsh.q(wsh.q(x)))))))), UO.nat_le_trans(Nat.add(U.U32Nat.dbl(6n, W.W64.to_nat(wsh.q(wsh.q(x)))), U.U32Nat.dbl(5n, W.W64.to_nat(wsh.q(wsh.q(x))))), Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(x)))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(x)))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(x))))))), W.W64.to_nat(x), wsh.gf(W.W64.to_nat(wsh.q(wsh.q(x)))), UO.nat_le_trans(Nat.add(U.U32Nat.dbl(3n, Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(x)))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(x)))))), U.U32Nat.dbl(1n, Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(x)))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(x))))))), Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(x))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(x)))), W.W64.to_nat(x), wsh.fm(Nat.add(U.U32Nat.dbl(3n, W.W64.to_nat(wsh.q(wsh.q(x)))), U.U32Nat.dbl(1n, W.W64.to_nat(wsh.q(wsh.q(x))))), W.W64.to_nat(wsh.q(x)), wsh.f1(W.W64.to_nat(wsh.q(wsh.q(x))), U32.to_nat(wsh.r(wsh.q(x))), W.W64.to_nat(wsh.q(x)), wsd.e(wsh.q(x), wsd.sd(wsh.q(x))))), wsh.f1(W.W64.to_nat(wsh.q(x)), U32.to_nat(wsh.r(x)), W.W64.to_nat(x), wsd.e(x, wsd.sd(x)))))))
517
518def wr.t16(+x0: Nat, +x1: Nat) -> {Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), Nat.double(U.U32Nat.dbl(x0, x1))), U.U32Nat.dbl(x0, 1n)) == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}:
519 %Equal.sym(Nat, Nat.double(U.U32Nat.dbl(x0, x1)), Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, x1)), UL.nat_double(U.U32Nat.dbl(x0, x1))) : {Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), _), U.U32Nat.dbl(x0, 1n)) == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
520 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, x1))), U.U32Nat.dbl(x0, 1n)), Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, x1)), U.U32Nat.dbl(x0, 1n))), UL.nat_add_assoc(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, x1)), U.U32Nat.dbl(x0, 1n))) : {_ == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
521 %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, x1)), U.U32Nat.dbl(x0, 1n)), Nat.add(U.U32Nat.dbl(x0, x1), Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, 1n))), UL.nat_add_assoc(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, 1n))) : {Nat.add(U.U32Nat.dbl(x0, 1n), _) == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
522 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, 1n)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), UL.nat_add_comm(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, 1n))) : {Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, x1), _)) == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
523 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x1), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1))), Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1))) : {Nat.add(U.U32Nat.dbl(x0, 1n), _) == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
524 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, x1))), Nat.add(U.U32Nat.dbl(x0, x1), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x1), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1))), Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, x1))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x1), U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)))) : {Nat.add(U.U32Nat.dbl(x0, 1n), _) == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
525 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, x1), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)))), Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1))), Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, x1), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)))), UL.nat_add_assoc(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1))))) : {_ == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
526 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), U.U32Nat.dbl(x0, Nat.add(1n, x1)), Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(1n, x1)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), UL.dbl_add(x0, 1n, x1))) : {Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), _) == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
527 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), U.U32Nat.dbl(x0, Nat.add(1n, x1)), Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(1n, x1)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, x1)), UL.dbl_add(x0, 1n, x1))) : {Nat.add(_, U.U32Nat.dbl(x0, 1n+x1)) == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
528 %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n+x1), U.U32Nat.dbl(x0, 1n+x1)), Nat.double(U.U32Nat.dbl(x0, 1n+x1)), Equal.sym(Nat, Nat.double(U.U32Nat.dbl(x0, 1n+x1)), Nat.add(U.U32Nat.dbl(x0, 1n+x1), U.U32Nat.dbl(x0, 1n+x1)), UL.nat_double(U.U32Nat.dbl(x0, 1n+x1)))) : {_ == Nat.double(U.U32Nat.dbl(x0, 1n+x1)) : Nat}
529 {==}
530
531def wsh.lz(y: Nat, +N: Nat, +A: Nat, +h1: {Nat.is_le(Nat.double(U.U32Nat.dbl(N, y)), A) == True{} : Bool}, +h2: {Nat.is_lt(A, U.U32Nat.dbl(N, 1n)) == True{} : Bool}) -> {y == 0n : Nat}:
532 match y:
533 case 0n:
534 {==}
535 case 1n+ +p:
536 Empty.absurd({1n+p == 0n : Nat}, P.wn.lt_irrefl(A, UO.nat_lt_le_trans(A, U.U32Nat.dbl(N, 1n), A, h2, UO.nat_le_trans(U.U32Nat.dbl(N, 1n), Nat.double(U.U32Nat.dbl(N, 1n+p)), A, Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(N, 1n), Nat.double(U.U32Nat.dbl(N, 1n+p))), Nat.is_le(U.U32Nat.dbl(N, 1n), Nat.add(Nat.add(U.U32Nat.dbl(N, 1n), Nat.double(U.U32Nat.dbl(N, p))), U.U32Nat.dbl(N, 1n))), True{}, Equal.sym(Bool, Nat.is_le(U.U32Nat.dbl(N, 1n), Nat.add(Nat.add(U.U32Nat.dbl(N, 1n), Nat.double(U.U32Nat.dbl(N, p))), U.U32Nat.dbl(N, 1n))), Nat.is_le(U.U32Nat.dbl(N, 1n), Nat.double(U.U32Nat.dbl(N, 1n+p))), Equal.cong(Nat, Bool, zz => Nat.is_le(U.U32Nat.dbl(N, 1n), zz), Nat.add(Nat.add(U.U32Nat.dbl(N, 1n), Nat.double(U.U32Nat.dbl(N, p))), U.U32Nat.dbl(N, 1n)), Nat.double(U.U32Nat.dbl(N, 1n+p)), wr.t16(N, p))), UL.nat_le_add(U.U32Nat.dbl(N, 1n), Nat.add(U.U32Nat.dbl(N, 1n), Nat.double(U.U32Nat.dbl(N, p))))), h1))))
537
538def wsh.f20(+a: W.W64) -> {W.W64.is_zero(wsh.it(20n, a)) == True{} : Bool}:
539 wsh.vz(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))), wsh.lz(W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))))), 64n, W.W64.to_nat(a), Equal.trans(Bool, Nat.is_le(Nat.double(U.U32Nat.dbl(64n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))))))), W.W64.to_nat(a)), Nat.is_le(U.U32Nat.dbl(65n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))))), W.W64.to_nat(a)), True{}, {==}, Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(65n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))))), W.W64.to_nat(a)), Nat.is_le(U.U32Nat.dbl(52n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))))))), W.W64.to_nat(a)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(zz, W.W64.to_nat(a)), U.U32Nat.dbl(65n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))))), U.U32Nat.dbl(52n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))))))), Equal.sym(Nat, U.U32Nat.dbl(52n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))))))), U.U32Nat.dbl(65n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))))), Equal.trans(Nat, U.U32Nat.dbl(52n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))))))), U.U32Nat.dbl(Nat.add(52n, 13n), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))))), U.U32Nat.dbl(65n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))))), UL.dbl_dbl(52n, 13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))))), {==}))), UO.nat_le_trans(U.U32Nat.dbl(52n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))))))), U.U32Nat.dbl(52n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), W.W64.to_nat(a), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(52n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))))))), U.U32Nat.dbl(52n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))), Nat.is_le(U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), True{}, UL.dbl_le(52n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), wsh.b4(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(52n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), W.W64.to_nat(a)), Nat.is_le(U.U32Nat.dbl(39n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))), W.W64.to_nat(a)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(zz, W.W64.to_nat(a)), U.U32Nat.dbl(52n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), U.U32Nat.dbl(39n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))), Equal.sym(Nat, U.U32Nat.dbl(39n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))), U.U32Nat.dbl(52n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), Equal.trans(Nat, U.U32Nat.dbl(39n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))), U.U32Nat.dbl(Nat.add(39n, 13n), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), U.U32Nat.dbl(52n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), UL.dbl_dbl(39n, 13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), {==}))), UO.nat_le_trans(U.U32Nat.dbl(39n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))), U.U32Nat.dbl(39n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), W.W64.to_nat(a), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(39n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))))))), U.U32Nat.dbl(39n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))), Nat.is_le(U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), True{}, UL.dbl_le(39n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), wsh.b4(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(39n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), W.W64.to_nat(a)), Nat.is_le(U.U32Nat.dbl(26n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))), W.W64.to_nat(a)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(zz, W.W64.to_nat(a)), U.U32Nat.dbl(39n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), U.U32Nat.dbl(26n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))), Equal.sym(Nat, U.U32Nat.dbl(26n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))), U.U32Nat.dbl(39n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), Equal.trans(Nat, U.U32Nat.dbl(26n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))), U.U32Nat.dbl(Nat.add(26n, 13n), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), U.U32Nat.dbl(39n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), UL.dbl_dbl(26n, 13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), {==}))), UO.nat_le_trans(U.U32Nat.dbl(26n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))), U.U32Nat.dbl(26n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), W.W64.to_nat(a), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(26n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))))))), U.U32Nat.dbl(26n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))), Nat.is_le(U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), True{}, UL.dbl_le(26n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), wsh.b4(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(26n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), W.W64.to_nat(a)), Nat.is_le(U.U32Nat.dbl(13n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))), W.W64.to_nat(a)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(zz, W.W64.to_nat(a)), U.U32Nat.dbl(26n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), U.U32Nat.dbl(13n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))), Equal.sym(Nat, U.U32Nat.dbl(13n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))), U.U32Nat.dbl(26n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), Equal.trans(Nat, U.U32Nat.dbl(13n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))), U.U32Nat.dbl(Nat.add(13n, 13n), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), U.U32Nat.dbl(26n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), UL.dbl_dbl(13n, 13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), {==}))), UO.nat_le_trans(U.U32Nat.dbl(13n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))), U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(a)))))), W.W64.to_nat(a), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(13n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a))))))))))), U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(a))))))), Nat.is_le(U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(a)))))), True{}, UL.dbl_le(13n, U.U32Nat.dbl(13n, W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(wsh.q(a)))))))))), W.W64.to_nat(wsh.q(wsh.q(wsh.q(wsh.q(a)))))), wsh.b4(wsh.q(wsh.q(wsh.q(wsh.q(a)))))), wsh.b4(a)))))))))), wv.lt64(a)))
540
541def wsh.pick(z: Bool, +a: W.W64, ez: {W.W64.is_zero(a) == z : Bool}) -> {Nat.read.go(W.W64.show.pick(z, a), 0n) == Some{W.W64.to_nat(a)} : Maybe<&2, Nat>}:
542 match z:
543 case True{}:
544 Equal.cong(Nat, Maybe<&2, Nat>, zz => Some{zz}, 0n, W.W64.to_nat(a), Equal.sym(Nat, W.W64.to_nat(a), 0n, wsh.zv(a, ez)))
545 case False{}:
546 wsh.go(20n, a, "", wsh.f20(a))
547
548def Laws.show_reads(a):
549 wsh.pick(W.W64.is_zero(a), a, {==})