PROOF_div.bend

bend-osdev-word64@0.1.1.0 · 442 lines · 39 definitions

1# Generated by gen/proof.py; do not edit by hand. The proofs of LAWS_div.bend:
2# division.
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_bits.bend as LB
15import bend-osdev-word64@0.1.1.0/PROOF_bits.bend as LBP
16import bend-osdev-word64@0.1.1.0/LAWS_div.bend as Laws
17
18# Bounds in the exact form a lemma takes them: a U32 value below 2^32, a W64
19# value below 2^64
20
21def wu.ve(+w: Word(32n)) -> {Word.to_nat(32n, w) == U32.to_nat(U32{w}) : Nat}:
22  {==}
23
24def wu.lt(+x: U32) -> {Nat.is_lt(U32.to_nat(x), U.U32Nat.dbl(32n, 1n)) == True{} : Bool}:
25  match x:
26    case U32{+w}:
27      %wu.ve(w) : {Nat.is_lt(_, U.U32Nat.dbl(32n, 1n)) == True{} : Bool}
28      UL.word_value_lt(32n, w)
29
30def 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}:
31  %e : {Nat.is_lt(P.wv.V(n, h, l), U.U32Nat.dbl(_, 1n)) == True{} : Bool}
32  %UL.dbl_dbl(n, n, 1n) : {Nat.is_lt(P.wv.V(n, h, l), _) == True{} : Bool}
33  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))
34
35def 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}:
36  {==}
37
38def wv.lt64(+x: W.W64) -> {Nat.is_lt(W.W64.to_nat(x), U.U32Nat.dbl(64n, 1n)) == True{} : Bool}:
39  match x:
40    case W.W64{U32{+h}, U32{+l}}:
41      %wv.ve(h, l) : {Nat.is_lt(_, U.U32Nat.dbl(64n, 1n)) == True{} : Bool}
42      wv.g(32n, 64n, h, l, {==})
43
44def wn.sub0(x: Nat) -> {Nat.sub(x, 0n) == x : Nat}:
45  match x:
46    case 0n:
47      {==}
48    case 1n+ +p:
49      {==}
50
51def wn.le0(x: Nat) -> {Nat.is_le(0n, x) == True{} : Bool}:
52  match x:
53    case 0n:
54      {==}
55    case 1n+ +p:
56      {==}
57
58def wn.ft(e: {False{} == True{} : Bool}) -> Empty:
59  P.wn.ft(e)
60
61def wn.tf(e: {True{} == False{} : Bool}) -> Empty:
62  PS.ns.tf(e)
63
64def wn.ge_lt(c: Cmp) -> {Cmp.is_ge(c) == Bool.not(Cmp.is_lt(c)) : Bool}:
65  match c:
66    case LT{}:
67      {==}
68    case EQ{}:
69      {==}
70    case GT{}:
71      {==}
72
73def 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}:
74  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)))
75
76# Division: W64.div.go reads the bits of a's two halves, most significant
77# first (W64.div.bits), one W64.div.step a bit. Reading the m bits of w onto
78# (q, r) with r < b gives (q', r') with q' b + r' = (q b + r) 2^m + w and
79# r' < b (wd.bits, by induction on w), each step being bend-osdev-u32's
80# divstep_value and divstep_lt at n = 64; the bound
81# (q b + r) 2^m + w < 2^64 keeps q's shifts from wrapping.
82
83def wd.lt2(x: Nat, h: {Nat.is_lt(x, U.U32Nat.dbl(1n, 1n)) == True{} : Bool}) -> {Nat.is_le(x, 1n) == True{} : Bool}:
84  match x:
85    case 0n:
86      {==}
87    case 1n+ +p:
88      match p:
89        case 0n:
90          {==}
91        case 1n+ +q:
92          match q:
93            case 0n:
94              Empty.absurd({Nat.is_le(2n, 1n) == True{} : Bool}, wn.ft(h))
95            case 1n+ +r:
96              Empty.absurd({Nat.is_le(3n+r, 1n) == True{} : Bool}, wn.ft(h))
97
98def wd.bt(x: Nat, h: {Nat.is_lt(x, U.U32Nat.dbl(1n, 1n)) == True{} : Bool}) -> {U.U32Nat.bit(Nat.is_eq(x, 1n)) == x : Nat}:
99  match x:
100    case 0n:
101      {==}
102    case 1n+ +p:
103      match p:
104        case 0n:
105          {==}
106        case 1n+ +q:
107          match q:
108            case 0n:
109              Empty.absurd({U.U32Nat.bit(Nat.is_eq(2n, 1n)) == 2n : Nat}, wn.ft(h))
110            case 1n+ +r:
111              Empty.absurd({U.U32Nat.bit(Nat.is_eq(3n+r, 1n)) == 3n+r : Nat}, wn.ft(h))
112
113def wd.bv(g: Bool) -> {U32.to_nat(W.W64.bit(g)) == U.U32Nat.bit(g) : Nat}:
114  match g:
115    case True{}:
116      {==}
117    case False{}:
118      {==}
119
120def wd.bl(g: Bool) -> {Nat.is_lt(U32.to_nat(W.W64.bit(g)), U.U32Nat.dbl(1n, 1n)) == True{} : Bool}:
121  match g:
122    case True{}:
123      {==}
124    case False{}:
125      {==}
126
127# the top bit of a word, below 2
128def wd.top(+x: W.W64) -> {Nat.is_lt(U32.to_nat(U32.shrn(W.W64.hi(x), 31n)), U.U32Nat.dbl(1n, 1n)) == True{} : Bool}:
129  Equal.trans(Bool, Nat.is_lt(U32.to_nat(U32.shrn(W.W64.hi(x), 31n)), U.U32Nat.dbl(1n, 1n)), Nat.is_lt(U.U32Nat.high(31n, U32.to_nat(W.W64.hi(x))), U.U32Nat.dbl(1n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(1n, 1n)), U32.to_nat(U32.shrn(W.W64.hi(x), 31n)), U.U32Nat.high(31n, U32.to_nat(W.W64.hi(x))), Equal.sym(Nat, U.U32Nat.high(31n, U32.to_nat(W.W64.hi(x))), U32.to_nat(U32.shrn(W.W64.hi(x), 31n)), Equal.sym(Nat, U32.to_nat(U32.shrn(W.W64.hi(x), 31n)), U.U32Nat.high(31n, U32.to_nat(W.W64.hi(x))), UL.u32_shrn_value(W.W64.hi(x), 31n)))), UL.high_lt(31n, 1n, 32n, U32.to_nat(W.W64.hi(x)), {==}, wu.lt(W.W64.hi(x))))
130
131def wd.nz(x: Nat, e: {Nat.is_eq(x, 0n) == False{} : Bool}) -> {Nat.is_lt(0n, x) == True{} : Bool}:
132  match x:
133    case 0n:
134      Empty.absurd({Nat.is_lt(0n, 0n) == True{} : Bool}, wn.tf(e))
135    case 1n+ +p:
136      {==}
137
138# the value of a word one bit longer
139def wd.wv(p: Nat, x: Bool, t: Word(p)) -> {Word.to_nat(1n+p, WCon{x, t}) == Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, t))) : Nat}:
140  match x:
141    case True{}:
142      {==}
143    case False{}:
144      {==}
145
146# a pair is its two parts
147def wd.eta(p: W.W64 & W.W64) -> {p == (W.W64.fst(p), W.W64.snd(p)) : W.W64 & W.W64}:
148  (q, r) = p
149  {==}
150
151def wd.p1(-x: Nat, -y: Nat, -c: Nat, -d: Nat, pr: {x == y : Nat} & {Nat.is_lt(c, d) == True{} : Bool}) -> {x == y : Nat}:
152  (+u, +v) = pr
153  u
154
155def wd.p2(-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}:
156  (+u, +v) = pr
157  v
158
159def wr.d0(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(Nat.add(x0, x1), U.U32Nat.dbl(x2, x3)) == Nat.add(x1, Nat.add(x0, U.U32Nat.dbl(x2, x3))) : Nat}:
160  %Equal.sym(Nat, Nat.add(Nat.add(x0, x1), U.U32Nat.dbl(x2, x3)), Nat.add(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3))), UL.nat_add_assoc(x0, x1, U.U32Nat.dbl(x2, x3))) : {_ == Nat.add(x1, Nat.add(x0, U.U32Nat.dbl(x2, x3))) : Nat}
161  %Equal.sym(Nat, Nat.add(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3))), Nat.add(x1, Nat.add(x0, U.U32Nat.dbl(x2, x3))), Equal.sym(Nat, Nat.add(x1, Nat.add(x0, U.U32Nat.dbl(x2, x3))), Nat.add(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3))), UL.nat_add_left_comm(x1, x0, U.U32Nat.dbl(x2, x3)))) : {_ == Nat.add(x1, Nat.add(x0, U.U32Nat.dbl(x2, x3))) : Nat}
162  {==}
163
164def wr.d1(+x0: Nat, +x1: Nat, +x2: Nat) -> {Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}:
165  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2), x0)) : {_ == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
166  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x0)), UL.nat_add_assoc(Nat.mul(x0, x2), x2, x0)) : {Nat.add(Nat.mul(x0, x1), _) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
167  %Equal.sym(Nat, Nat.add(x2, x0), Nat.add(x0, x2), UL.nat_add_comm(x2, x0)) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), _)) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
168  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x0, x2)), Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2)), UL.nat_add_left_comm(Nat.mul(x0, x2), x0, x2)) : {Nat.add(Nat.mul(x0, x1), _) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
169  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), UL.nat_add_left_comm(Nat.mul(x0, x1), x0, Nat.add(Nat.mul(x0, x2), x2))) : {_ == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
170  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2)), x2), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2)), x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.mul(x0, x2), x2))) : {Nat.add(x0, _) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
171  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2)), x2)), Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2))), x2), Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2))), x2), Nat.add(x0, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2)), x2)), UL.nat_add_assoc(x0, Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2)), x2))) : {_ == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
172  %Equal.sym(Nat, x0, Nat.mul(1n, x0), Equal.sym(Nat, Nat.mul(1n, x0), x0, UL.nat_one_mul(x0))) : {Nat.add(Nat.add(_, Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2))), x2) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
173  %Equal.sym(Nat, Nat.mul(1n, x0), Nat.mul(x0, 1n), Equal.sym(Nat, Nat.mul(x0, 1n), Nat.mul(1n, x0), UL.nat_mul_comm(x0, 1n))) : {Nat.add(Nat.add(_, Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2))), x2) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
174  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2)), Nat.mul(x0, Nat.add(x1, x2)), Equal.sym(Nat, Nat.mul(x0, Nat.add(x1, x2)), Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x2)), UL.nat_mul_add(x0, x1, x2))) : {Nat.add(Nat.add(Nat.mul(x0, 1n), _), x2) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
175  %Equal.sym(Nat, Nat.add(Nat.mul(x0, 1n), Nat.mul(x0, Nat.add(x1, x2))), Nat.mul(x0, Nat.add(1n, Nat.add(x1, x2))), Equal.sym(Nat, Nat.mul(x0, Nat.add(1n, Nat.add(x1, x2))), Nat.add(Nat.mul(x0, 1n), Nat.mul(x0, Nat.add(x1, x2))), UL.nat_mul_add(x0, 1n, Nat.add(x1, x2)))) : {Nat.add(_, x2) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
176  %Equal.sym(Nat, Nat.add(1n, Nat.add(x1, x2)), Nat.add(x1, Nat.add(1n, x2)), Equal.sym(Nat, Nat.add(x1, Nat.add(1n, x2)), Nat.add(1n, Nat.add(x1, x2)), UL.nat_add_left_comm(x1, 1n, x2))) : {Nat.add(Nat.mul(x0, _), x2) == Nat.add(Nat.mul(x0, Nat.add(x1, 1n+x2)), x2) : Nat}
177  {==}
178
179def wr.d2(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), x3), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}:
180  %Equal.sym(Nat, Nat.double(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), UL.nat_double(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))) : {Nat.add(Nat.add(_, x3), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
181  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))) : {Nat.add(Nat.add(_, x3), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
182  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), UL.nat_add_assoc(Nat.mul(x0, x2), x2, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))) : {Nat.add(Nat.add(Nat.add(Nat.mul(x0, x1), _), x3), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
183  %Equal.sym(Nat, Nat.add(x2, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.mul(x0, x1), Nat.add(x2, Nat.add(Nat.mul(x0, x2), x2))), UL.nat_add_left_comm(x2, Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))) : {Nat.add(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), _)), x3), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
184  %Equal.sym(Nat, Nat.add(x2, Nat.add(Nat.mul(x0, x2), x2)), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), UL.nat_add_left_comm(x2, Nat.mul(x0, x2), x2)) : {Nat.add(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x1), _))), x3), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
185  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), UL.nat_add_left_comm(Nat.mul(x0, x2), Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))) : {Nat.add(Nat.add(Nat.add(Nat.mul(x0, x1), _), x3), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
186  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), x3), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), x3)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), x3)) : {Nat.add(_, Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
187  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), x3), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))), x3)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))), x3)) : {Nat.add(Nat.add(Nat.mul(x0, x1), _), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
188  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))), x3), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), x3)), UL.nat_add_assoc(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), x3)) : {Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), _)), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
189  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), x3), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.add(x2, x2), x3)), UL.nat_add_assoc(Nat.mul(x0, x2), Nat.add(x2, x2), x3)) : {Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), _))), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
190  %Equal.sym(Nat, Nat.add(Nat.add(x2, x2), x3), Nat.add(x2, Nat.add(x2, x3)), UL.nat_add_assoc(x2, x2, x3)) : {Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), _)))), Nat.double(x0)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
191  %Equal.sym(Nat, Nat.double(x0), Nat.add(x0, x0), UL.nat_double(x0)) : {Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))), _) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
192  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))), Nat.add(x0, x0)), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))), Nat.add(x0, x0))), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))), Nat.add(x0, x0))) : {_ == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
193  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))), Nat.add(x0, x0)), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))), Nat.add(x0, x0))), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))), Nat.add(x0, x0))) : {Nat.add(Nat.mul(x0, x1), _) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
194  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))), Nat.add(x0, x0)), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))), Nat.add(x0, x0))), UL.nat_add_assoc(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))), Nat.add(x0, x0))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), _)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
195  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))), Nat.add(x0, x0)), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.add(x2, Nat.add(x2, x3)), Nat.add(x0, x0))), UL.nat_add_assoc(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)), Nat.add(x0, x0))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), _))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
196  %Equal.sym(Nat, Nat.add(Nat.add(x2, Nat.add(x2, x3)), Nat.add(x0, x0)), Nat.add(x2, Nat.add(Nat.add(x2, x3), Nat.add(x0, x0))), UL.nat_add_assoc(x2, Nat.add(x2, x3), Nat.add(x0, x0))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), _)))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
197  %Equal.sym(Nat, Nat.add(Nat.add(x2, x3), Nat.add(x0, x0)), Nat.add(x2, Nat.add(x3, Nat.add(x0, x0))), UL.nat_add_assoc(x2, x3, Nat.add(x0, x0))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, _))))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
198  %Equal.sym(Nat, Nat.add(x3, Nat.add(x0, x0)), Nat.add(x0, Nat.add(x3, x0)), UL.nat_add_left_comm(x3, x0, x0)) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, _)))))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
199  %Equal.sym(Nat, Nat.add(x3, x0), Nat.add(x0, x3), UL.nat_add_comm(x3, x0)) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, Nat.add(x0, _))))))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
200  %Equal.sym(Nat, Nat.add(x2, Nat.add(x0, Nat.add(x0, x3))), Nat.add(x0, Nat.add(x2, Nat.add(x0, x3))), UL.nat_add_left_comm(x2, x0, Nat.add(x0, x3))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, _))))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
201  %Equal.sym(Nat, Nat.add(x2, Nat.add(x0, x3)), Nat.add(x0, Nat.add(x2, x3)), UL.nat_add_left_comm(x2, x0, x3)) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x0, _)))))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
202  %Equal.sym(Nat, Nat.add(x2, Nat.add(x0, Nat.add(x0, Nat.add(x2, x3)))), Nat.add(x0, Nat.add(x2, Nat.add(x0, Nat.add(x2, x3)))), UL.nat_add_left_comm(x2, x0, Nat.add(x0, Nat.add(x2, x3)))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), _)))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
203  %Equal.sym(Nat, Nat.add(x2, Nat.add(x0, Nat.add(x2, x3))), Nat.add(x0, Nat.add(x2, Nat.add(x2, x3))), UL.nat_add_left_comm(x2, x0, Nat.add(x2, x3))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x0, _))))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
204  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x0, Nat.add(x0, Nat.add(x2, Nat.add(x2, x3))))), Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(x0, Nat.add(x2, Nat.add(x2, x3))))), UL.nat_add_left_comm(Nat.mul(x0, x2), x0, Nat.add(x0, Nat.add(x2, Nat.add(x2, x3))))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), _))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
205  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x0, Nat.add(x2, Nat.add(x2, x3)))), Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))), UL.nat_add_left_comm(Nat.mul(x0, x2), x0, Nat.add(x2, Nat.add(x2, x3)))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x0, _)))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
206  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))), Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))), UL.nat_add_left_comm(Nat.mul(x0, x2), x0, Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), _)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
207  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))), Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))), UL.nat_add_left_comm(Nat.mul(x0, x2), x0, Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(x0, _))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
208  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))))), UL.nat_add_left_comm(Nat.mul(x0, x1), x0, Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))))) : {Nat.add(Nat.mul(x0, x1), _) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
209  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))), UL.nat_add_left_comm(Nat.mul(x0, x1), x0, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))) : {Nat.add(Nat.mul(x0, x1), Nat.add(x0, _)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
210  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))))), UL.nat_add_left_comm(Nat.mul(x0, x1), x0, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3)))))))) : {_ == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
211  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))))), UL.nat_add_left_comm(Nat.mul(x0, x1), x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x2, x3))))))) : {Nat.add(x0, _) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
212  %Equal.sym(Nat, Nat.add(x2, Nat.add(x2, x3)), Nat.add(Nat.add(x2, x2), x3), Equal.sym(Nat, Nat.add(Nat.add(x2, x2), x3), Nat.add(x2, Nat.add(x2, x3)), UL.nat_add_assoc(x2, x2, x3))) : {Nat.add(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), _)))))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
213  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.add(x2, x2), x3)), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), x3), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), x3), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.add(x2, x2), x3)), UL.nat_add_assoc(Nat.mul(x0, x2), Nat.add(x2, x2), x3))) : {Nat.add(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), _))))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
214  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), x3)), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))), x3), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))), x3), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), x3)), UL.nat_add_assoc(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), x3))) : {Nat.add(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), _)))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
215  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))), x3)), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), x3), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), x3), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))), x3)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))), x3))) : {Nat.add(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x1), _))) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
216  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), x3)), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), x3), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), x3), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), x3)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), x3))) : {Nat.add(x0, Nat.add(x0, _)) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
217  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), x3)), Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))), x3), Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))), x3), Nat.add(x0, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), x3)), UL.nat_add_assoc(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), x3))) : {Nat.add(x0, _) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
218  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))), x3)), Nat.add(Nat.add(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))))), x3), Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))))), x3), Nat.add(x0, Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))), x3)), UL.nat_add_assoc(x0, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))), x3))) : {_ == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
219  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))), Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))), Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))), UL.nat_add_left_comm(Nat.mul(x0, x1), x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))))) : {Nat.add(Nat.add(x0, _), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
220  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))), UL.nat_add_left_comm(Nat.mul(x0, x2), Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))) : {Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(x0, _))), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
221  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), Nat.add(Nat.mul(x0, x2), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), Nat.add(x0, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2))))), UL.nat_add_left_comm(Nat.mul(x0, x2), x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)))))) : {Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), _)), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
222  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), Nat.add(x2, Nat.add(Nat.mul(x0, x2), x2)), Equal.sym(Nat, Nat.add(x2, Nat.add(Nat.mul(x0, x2), x2)), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x2)), UL.nat_add_left_comm(x2, Nat.mul(x0, x2), x2))) : {Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x0, Nat.add(Nat.mul(x0, x1), _))))), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
223  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x2, Nat.add(Nat.mul(x0, x2), x2))), Nat.add(x2, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Equal.sym(Nat, Nat.add(x2, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.mul(x0, x1), Nat.add(x2, Nat.add(Nat.mul(x0, x2), x2))), UL.nat_add_left_comm(x2, Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))) : {Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), Nat.add(x0, _)))), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
224  %Equal.sym(Nat, Nat.add(x0, Nat.add(x2, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), Nat.add(x2, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), Equal.sym(Nat, Nat.add(x2, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), Nat.add(x0, Nat.add(x2, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), UL.nat_add_left_comm(x2, x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))))) : {Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), _))), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
225  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))))), Nat.add(Nat.add(Nat.mul(x0, x2), x2), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), x2), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), Nat.add(Nat.mul(x0, x2), Nat.add(x2, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))))), UL.nat_add_assoc(Nat.mul(x0, x2), x2, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))))) : {Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), _)), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
226  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), x2), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))))), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), x2), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))))), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))))) : {Nat.add(Nat.add(x0, _), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
227  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))))), Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))), Nat.add(x0, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))))), UL.nat_add_assoc(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)))))) : {Nat.add(_, x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
228  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2))), Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), UL.nat_add_left_comm(Nat.mul(x0, x1), x0, Nat.add(Nat.mul(x0, x2), x2)))) : {Nat.add(Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), _), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
229  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2)), Nat.add(Nat.mul(x0, x2), Nat.add(x0, x2)), Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x0, x2)), Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2)), UL.nat_add_left_comm(Nat.mul(x0, x2), x0, x2))) : {Nat.add(Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.mul(x0, x1), _)), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
230  %Equal.sym(Nat, Nat.add(x0, x2), Nat.add(x2, x0), Equal.sym(Nat, Nat.add(x2, x0), Nat.add(x0, x2), UL.nat_add_comm(x2, x0))) : {Nat.add(Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), _))), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
231  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x2, x0)), Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x0)), UL.nat_add_assoc(Nat.mul(x0, x2), x2, x0))) : {Nat.add(Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.mul(x0, x1), _)), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
232  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0)), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2), x0))) : {Nat.add(Nat.add(Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), _), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
233  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2))), Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2))), Nat.add(x0, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2))), UL.nat_add_left_comm(Nat.mul(x0, x1), x0, Nat.add(Nat.mul(x0, x2), x2)))) : {Nat.add(Nat.add(_, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
234  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2)), Nat.add(Nat.mul(x0, x2), Nat.add(x0, x2)), Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x0, x2)), Nat.add(x0, Nat.add(Nat.mul(x0, x2), x2)), UL.nat_add_left_comm(Nat.mul(x0, x2), x0, x2))) : {Nat.add(Nat.add(Nat.add(Nat.mul(x0, x1), _), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
235  %Equal.sym(Nat, Nat.add(x0, x2), Nat.add(x2, x0), Equal.sym(Nat, Nat.add(x2, x0), Nat.add(x0, x2), UL.nat_add_comm(x2, x0))) : {Nat.add(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), _)), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
236  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(x2, x0)), Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0), Nat.add(Nat.mul(x0, x2), Nat.add(x2, x0)), UL.nat_add_assoc(Nat.mul(x0, x2), x2, x0))) : {Nat.add(Nat.add(Nat.add(Nat.mul(x0, x1), _), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
237  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0)), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x2), x2), x0)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2), x0))) : {Nat.add(Nat.add(_, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
238  %Equal.sym(Nat, Nat.add(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), Equal.sym(Nat, Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), Nat.add(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), UL.nat_double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)))) : {Nat.add(_, x3) == Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x2), x2)), x0)), x3) : Nat}
239  {==}
240
241def wr.d3(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(Nat.mul(Nat.add(Nat.double(x0), x1), x2), x3) == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}:
242  %Equal.sym(Nat, Nat.double(x0), Nat.add(x0, x0), UL.nat_double(x0)) : {Nat.add(Nat.mul(Nat.add(_, x1), x2), x3) == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}
243  %Equal.sym(Nat, Nat.add(Nat.add(x0, x0), x1), Nat.add(x0, Nat.add(x0, x1)), UL.nat_add_assoc(x0, x0, x1)) : {Nat.add(Nat.mul(_, x2), x3) == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}
244  %Equal.sym(Nat, Nat.mul(Nat.add(x0, Nat.add(x0, x1)), x2), Nat.add(Nat.mul(x0, x2), Nat.mul(Nat.add(x0, x1), x2)), UL.nat_add_mul(x0, Nat.add(x0, x1), x2)) : {Nat.add(_, x3) == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}
245  %Equal.sym(Nat, Nat.mul(Nat.add(x0, x1), x2), Nat.add(Nat.mul(x0, x2), Nat.mul(x1, x2)), UL.nat_add_mul(x0, x1, x2)) : {Nat.add(Nat.add(Nat.mul(x0, x2), _), x3) == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}
246  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.mul(x1, x2))), x3), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.mul(x1, x2)), x3)), UL.nat_add_assoc(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.mul(x1, x2)), x3)) : {_ == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}
247  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), Nat.mul(x1, x2)), x3), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x1, x2), x3)), UL.nat_add_assoc(Nat.mul(x0, x2), Nat.mul(x1, x2), x3)) : {Nat.add(Nat.mul(x0, x2), _) == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}
248  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x1, x2), x3))), Nat.add(Nat.add(Nat.mul(x0, x2), Nat.mul(x0, x2)), Nat.add(Nat.mul(x1, x2), x3)), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x2), Nat.mul(x0, x2)), Nat.add(Nat.mul(x1, x2), x3)), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x0, x2), Nat.add(Nat.mul(x1, x2), x3))), UL.nat_add_assoc(Nat.mul(x0, x2), Nat.mul(x0, x2), Nat.add(Nat.mul(x1, x2), x3)))) : {_ == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}
249  %Equal.sym(Nat, Nat.add(Nat.mul(x1, x2), x3), Nat.add(x3, Nat.mul(x1, x2)), Equal.sym(Nat, Nat.add(x3, Nat.mul(x1, x2)), Nat.add(Nat.mul(x1, x2), x3), UL.nat_add_comm(x3, Nat.mul(x1, x2)))) : {Nat.add(Nat.add(Nat.mul(x0, x2), Nat.mul(x0, x2)), _) == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}
250  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x2), Nat.mul(x0, x2)), Nat.double(Nat.mul(x0, x2)), Equal.sym(Nat, Nat.double(Nat.mul(x0, x2)), Nat.add(Nat.mul(x0, x2), Nat.mul(x0, x2)), UL.nat_double(Nat.mul(x0, x2)))) : {Nat.add(_, Nat.add(x3, Nat.mul(x1, x2))) == Nat.add(Nat.double(Nat.mul(x0, x2)), Nat.add(x3, Nat.mul(x1, x2))) : Nat}
251  {==}
252
253def wr.d4(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(Nat.double(Nat.mul(x0, x1)), Nat.add(x2, Nat.double(x3))) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}:
254  %Equal.sym(Nat, Nat.double(Nat.mul(x0, x1)), Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x1)), UL.nat_double(Nat.mul(x0, x1))) : {Nat.add(_, Nat.add(x2, Nat.double(x3))) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
255  %Equal.sym(Nat, Nat.double(x3), Nat.add(x3, x3), UL.nat_double(x3)) : {Nat.add(Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x1)), Nat.add(x2, _)) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
256  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.mul(x0, x1)), Nat.add(x2, Nat.add(x3, x3))), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(x2, Nat.add(x3, x3)))), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.mul(x0, x1), Nat.add(x2, Nat.add(x3, x3)))) : {_ == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
257  %Equal.sym(Nat, Nat.add(x2, Nat.add(x3, x3)), Nat.add(x3, Nat.add(x2, x3)), Equal.sym(Nat, Nat.add(x3, Nat.add(x2, x3)), Nat.add(x2, Nat.add(x3, x3)), UL.nat_add_left_comm(x3, x2, x3))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), _)) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
258  %Equal.sym(Nat, Nat.add(x2, x3), Nat.add(x3, x2), Equal.sym(Nat, Nat.add(x3, x2), Nat.add(x2, x3), UL.nat_add_comm(x3, x2))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(x3, _))) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
259  %Equal.sym(Nat, Nat.add(x3, Nat.add(x3, x2)), Nat.add(Nat.add(x3, x3), x2), Equal.sym(Nat, Nat.add(Nat.add(x3, x3), x2), Nat.add(x3, Nat.add(x3, x2)), UL.nat_add_assoc(x3, x3, x2))) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), _)) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
260  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(x3, x3), x2)), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(x3, x3)), x2), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(x3, x3)), x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(x3, x3), x2)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(x3, x3), x2))) : {Nat.add(Nat.mul(x0, x1), _) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
261  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(x3, x3)), x2)), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(x3, x3))), x2), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(x3, x3))), x2), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.add(x3, x3)), x2)), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, x1), Nat.add(x3, x3)), x2))) : {_ == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
262  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x3, x3)), Nat.add(x3, Nat.add(Nat.mul(x0, x1), x3)), Equal.sym(Nat, Nat.add(x3, Nat.add(Nat.mul(x0, x1), x3)), Nat.add(Nat.mul(x0, x1), Nat.add(x3, x3)), UL.nat_add_left_comm(x3, Nat.mul(x0, x1), x3))) : {Nat.add(Nat.add(Nat.mul(x0, x1), _), x2) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
263  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(x3, Nat.add(Nat.mul(x0, x1), x3))), Nat.add(Nat.add(Nat.mul(x0, x1), x3), Nat.add(Nat.mul(x0, x1), x3)), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), x3), Nat.add(Nat.mul(x0, x1), x3)), Nat.add(Nat.mul(x0, x1), Nat.add(x3, Nat.add(Nat.mul(x0, x1), x3))), UL.nat_add_assoc(Nat.mul(x0, x1), x3, Nat.add(Nat.mul(x0, x1), x3)))) : {Nat.add(_, x2) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
264  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), x3), Nat.add(Nat.mul(x0, x1), x3)), Nat.double(Nat.add(Nat.mul(x0, x1), x3)), Equal.sym(Nat, Nat.double(Nat.add(Nat.mul(x0, x1), x3)), Nat.add(Nat.add(Nat.mul(x0, x1), x3), Nat.add(Nat.mul(x0, x1), x3)), UL.nat_double(Nat.add(Nat.mul(x0, x1), x3)))) : {Nat.add(_, x2) == Nat.add(Nat.double(Nat.add(Nat.mul(x0, x1), x3)), x2) : Nat}
265  {==}
266
267def wd.k(+N: Nat, +Q: Nat, +B: Nat, +R: Nat, +tx: Nat, +Sr: Nat, +tr: Nat, +R2: Nat, +Sq: Nat, +tq: Nat, +Q1: Nat, +R1: Nat, +T: Bool, +L: Bool, +g: Bool, +hR: {Nat.is_lt(R, B) == True{} : Bool}, +hB: {Nat.is_lt(B, U.U32Nat.dbl(N, 1n)) == True{} : Bool}, +hX: {Nat.is_lt(Nat.add(Nat.double(Nat.add(Nat.mul(Q, B), R)), tx), U.U32Nat.dbl(N, 1n)) == True{} : Bool}, +fr: {Nat.add(Sr, U.U32Nat.dbl(N, tr)) == Nat.double(R) : Nat}, +fq: {Nat.add(Sq, U.U32Nat.dbl(N, tq)) == Nat.double(Q) : Nat}, +er2: {R2 == Nat.add(Sr, tx) : Nat}, +eq1: {Q1 == Nat.add(Sq, U.U32Nat.bit(g)) : Nat}, +htx: {Nat.is_lt(tx, U.U32Nat.dbl(1n, 1n)) == True{} : Bool}, +htr: {Nat.is_lt(tr, U.U32Nat.dbl(1n, 1n)) == True{} : Bool}, +eT: {T == Nat.is_eq(tr, 1n) : Bool}, +eL: {Nat.is_lt(R2, B) == L : Bool}, +eg: {Bool.or(T, Bool.not(L)) == g : Bool}, +er1: {Nat.add(R1, Nat.mul(U.U32Nat.bit(g), B)) == Nat.add(R2, U.U32Nat.dbl(N, Nat.mul(U.U32Nat.bit(g), U.U32Nat.bit(L)))) : Nat}) -> {Nat.add(Nat.mul(Q1, B), R1) == Nat.add(Nat.double(Nat.add(Nat.mul(Q, B), R)), tx) : Nat} & {Nat.is_lt(R1, B) == True{} : Bool}:
268  +bT = Equal.trans(Nat, U.U32Nat.bit(T), U.U32Nat.bit(Nat.is_eq(tr, 1n)), tr, Equal.cong(Bool, Nat, zz => U.U32Nat.bit(zz), T, Nat.is_eq(tr, 1n), eT), wd.bt(tr, htr))
269  +eput = Equal.trans(Nat, Nat.add(R2, U.U32Nat.dbl(N, U.U32Nat.bit(T))), Nat.add(tx, Nat.add(Sr, U.U32Nat.dbl(N, tr))), Nat.add(tx, Nat.double(R)), Equal.trans(Nat, Nat.add(R2, U.U32Nat.dbl(N, U.U32Nat.bit(T))), Nat.add(Nat.add(Sr, tx), U.U32Nat.dbl(N, tr)), Nat.add(tx, Nat.add(Sr, U.U32Nat.dbl(N, tr))), Equal.trans(Nat, Nat.add(R2, U.U32Nat.dbl(N, U.U32Nat.bit(T))), Nat.add(Nat.add(Sr, tx), U.U32Nat.dbl(N, U.U32Nat.bit(T))), Nat.add(Nat.add(Sr, tx), U.U32Nat.dbl(N, tr)), Equal.cong(Nat, Nat, zz => Nat.add(zz, U.U32Nat.dbl(N, U.U32Nat.bit(T))), R2, Nat.add(Sr, tx), er2), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(Sr, tx), U.U32Nat.dbl(N, zz)), U.U32Nat.bit(T), tr, bT)), wr.d0(Sr, tx, N, tr)), Equal.cong(Nat, Nat, zz => Nat.add(tx, zz), Nat.add(Sr, U.U32Nat.dbl(N, tr)), Nat.double(R), fr))
270  +c1 = UL.divstep_value(N, R2, B, R, tx, R1, T, L, g, eput, eL, eg, er1, wd.lt2(tx, htx), hR, hB)
271  +c2 = UL.divstep_lt(N, R2, B, R, tx, R1, T, L, g, eput, eL, eg, er1, wd.lt2(tx, htx), hR, hB)
272  +qle = Equal.trans(Nat, Nat.add(Nat.add(Nat.mul(Q, Nat.sub(B, 1n+R)), Nat.add(Nat.mul(Q, R), R)), Q), Nat.add(Nat.mul(Q, Nat.add(Nat.sub(B, 1n+R), 1n+R)), R), Nat.add(Nat.mul(Q, B), R), wr.d1(Q, Nat.sub(B, 1n+R), R), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(Q, zz), R), Nat.add(Nat.sub(B, 1n+R), 1n+R), B, UL.nat_lt_witness(R, B, hR)))
273  +hQ = UO.nat_le_lt_trans(Nat.double(Q), Nat.add(Nat.double(Nat.add(Nat.mul(Q, B), R)), tx), U.U32Nat.dbl(N, 1n), Equal.trans(Bool, Nat.is_le(Nat.double(Q), Nat.add(Nat.double(Nat.add(Nat.mul(Q, B), R)), tx)), Nat.is_le(Nat.double(Q), Nat.add(Nat.add(Nat.double(Nat.add(Nat.mul(Q, Nat.sub(B, 1n+R)), Nat.add(Nat.mul(Q, R), R))), tx), Nat.double(Q))), True{}, Equal.sym(Bool, Nat.is_le(Nat.double(Q), Nat.add(Nat.add(Nat.double(Nat.add(Nat.mul(Q, Nat.sub(B, 1n+R)), Nat.add(Nat.mul(Q, R), R))), tx), Nat.double(Q))), Nat.is_le(Nat.double(Q), Nat.add(Nat.double(Nat.add(Nat.mul(Q, B), R)), tx)), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.double(Q), zz), Nat.add(Nat.add(Nat.double(Nat.add(Nat.mul(Q, Nat.sub(B, 1n+R)), Nat.add(Nat.mul(Q, R), R))), tx), Nat.double(Q)), Nat.add(Nat.double(Nat.add(Nat.mul(Q, B), R)), tx), Equal.trans(Nat, Nat.add(Nat.add(Nat.double(Nat.add(Nat.mul(Q, Nat.sub(B, 1n+R)), Nat.add(Nat.mul(Q, R), R))), tx), Nat.double(Q)), Nat.add(Nat.double(Nat.add(Nat.add(Nat.mul(Q, Nat.sub(B, 1n+R)), Nat.add(Nat.mul(Q, R), R)), Q)), tx), Nat.add(Nat.double(Nat.add(Nat.mul(Q, B), R)), tx), wr.d2(Q, Nat.sub(B, 1n+R), R, tx), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(zz), tx), Nat.add(Nat.add(Nat.mul(Q, Nat.sub(B, 1n+R)), Nat.add(Nat.mul(Q, R), R)), Q), Nat.add(Nat.mul(Q, B), R), qle)))), UL.nat_le_add(Nat.double(Q), Nat.add(Nat.double(Nat.add(Nat.mul(Q, Nat.sub(B, 1n+R)), Nat.add(Nat.mul(Q, R), R))), tx))), hX)
274  +esq = UL.dbl_nowrap(N, tq, Sq, Nat.double(Q), Nat.double(Q), fq, UL.nat_le_refl(Nat.double(Q)), hQ)
275  (Equal.trans(Nat, Nat.add(Nat.mul(Q1, B), R1), Nat.add(Nat.double(Nat.mul(Q, B)), Nat.add(tx, Nat.double(R))), Nat.add(Nat.double(Nat.add(Nat.mul(Q, B), R)), tx), Equal.trans(Nat, Nat.add(Nat.mul(Q1, B), R1), Nat.add(Nat.double(Nat.mul(Q, B)), Nat.add(R1, Nat.mul(U.U32Nat.bit(g), B))), Nat.add(Nat.double(Nat.mul(Q, B)), Nat.add(tx, Nat.double(R))), Equal.trans(Nat, Nat.add(Nat.mul(Q1, B), R1), Nat.add(Nat.mul(Nat.add(Nat.double(Q), U.U32Nat.bit(g)), B), R1), Nat.add(Nat.double(Nat.mul(Q, B)), Nat.add(R1, Nat.mul(U.U32Nat.bit(g), B))), Equal.trans(Nat, Nat.add(Nat.mul(Q1, B), R1), Nat.add(Nat.mul(Nat.add(Sq, U.U32Nat.bit(g)), B), R1), Nat.add(Nat.mul(Nat.add(Nat.double(Q), U.U32Nat.bit(g)), B), R1), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(zz, B), R1), Q1, Nat.add(Sq, U.U32Nat.bit(g)), eq1), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(Nat.add(zz, U.U32Nat.bit(g)), B), R1), Sq, Nat.double(Q), esq)), wr.d3(Q, U.U32Nat.bit(g), B, R1)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(Nat.mul(Q, B)), zz), Nat.add(R1, Nat.mul(U.U32Nat.bit(g), B)), Nat.add(tx, Nat.double(R)), c1)), wr.d4(Q, B, tx, R)), c2)
276
277def wr.d5(+x0: Nat) -> {Nat.mul(1n, x0) == x0 : Nat}:
278  %Equal.sym(Nat, Nat.mul(1n, x0), x0, UL.nat_one_mul(x0)) : {_ == x0 : Nat}
279  {==}
280
281def wr.d6(+x0: Nat) -> {x0 == Nat.mul(1n, x0) : Nat}:
282  %Equal.sym(Nat, x0, Nat.mul(1n, x0), Equal.sym(Nat, Nat.mul(1n, x0), x0, UL.nat_one_mul(x0))) : {_ == Nat.mul(1n, x0) : Nat}
283  {==}
284
285def wr.d7(+x0: Nat, +x1: Nat, +x2: Nat) -> {Nat.add(x0, Nat.mul(0n, x1)) == Nat.add(x0, U.U32Nat.dbl(64n, Nat.mul(0n, x2))) : Nat}:
286  %Equal.sym(Nat, Nat.add(x0, 0n), x0, UL.nat_add_zero(x0)) : {_ == Nat.add(x0, U.U32Nat.dbl(64n, Nat.mul(0n, x2))) : Nat}
287  %Equal.sym(Nat, x0, Nat.add(x0, 0n), Equal.sym(Nat, Nat.add(x0, 0n), x0, UL.nat_add_zero(x0))) : {_ == Nat.add(x0, U.U32Nat.dbl(64n, Nat.mul(0n, x2))) : Nat}
288  %Equal.sym(Nat, 0n, U.U32Nat.dbl(64n, 0n), Equal.sym(Nat, U.U32Nat.dbl(64n, 0n), 0n, UL.dbl_zero(64n))) : {Nat.add(x0, _) == Nat.add(x0, U.U32Nat.dbl(64n, Nat.mul(0n, x2))) : Nat}
289  {==}
290
291def wd.sel(g: Bool, +r2: W.W64, +b: W.W64) -> {Nat.add(W.W64.to_nat(W.W64.sel(g, W.W64.sub(r2, b), r2)), Nat.mul(U.U32Nat.bit(g), W.W64.to_nat(b))) == Nat.add(W.W64.to_nat(r2), U.U32Nat.dbl(64n, Nat.mul(U.U32Nat.bit(g), U.U32Nat.bit(W.W64.is_lt(r2, b))))) : Nat}:
292  match g:
293    case True{}:
294      Equal.trans(Nat, Nat.add(W.W64.to_nat(W.W64.sub(r2, b)), Nat.mul(1n, W.W64.to_nat(b))), Nat.add(W.W64.to_nat(r2), U.U32Nat.dbl(64n, U.U32Nat.bit(W.W64.is_lt(r2, b)))), Nat.add(W.W64.to_nat(r2), U.U32Nat.dbl(64n, Nat.mul(1n, U.U32Nat.bit(W.W64.is_lt(r2, b))))), Equal.trans(Nat, Nat.add(W.W64.to_nat(W.W64.sub(r2, b)), Nat.mul(1n, W.W64.to_nat(b))), Nat.add(W.W64.to_nat(W.W64.sub(r2, b)), W.W64.to_nat(b)), Nat.add(W.W64.to_nat(r2), U.U32Nat.dbl(64n, U.U32Nat.bit(W.W64.is_lt(r2, b)))), Equal.cong(Nat, Nat, zz => Nat.add(W.W64.to_nat(W.W64.sub(r2, b)), zz), Nat.mul(1n, W.W64.to_nat(b)), W.W64.to_nat(b), wr.d5(W.W64.to_nat(b))), WB.sub_wrap(r2, b)), Equal.cong(Nat, Nat, zz => Nat.add(W.W64.to_nat(r2), U.U32Nat.dbl(64n, zz)), U.U32Nat.bit(W.W64.is_lt(r2, b)), Nat.mul(1n, U.U32Nat.bit(W.W64.is_lt(r2, b))), wr.d6(U.U32Nat.bit(W.W64.is_lt(r2, b)))))
295    case False{}:
296      wr.d7(W.W64.to_nat(r2), W.W64.to_nat(b), U.U32Nat.bit(W.W64.is_lt(r2, b)))
297
298def wd.st(+x: Bool, +b: W.W64, +q: W.W64, +r: W.W64, +hR: {Nat.is_lt(W.W64.to_nat(r), W.W64.to_nat(b)) == True{} : Bool}, +hb: {Nat.is_lt(W.W64.to_nat(b), U.U32Nat.dbl(64n, 1n)) == True{} : Bool}, +hX: {Nat.is_lt(Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U.U32Nat.bit(x)), U.U32Nat.dbl(64n, 1n)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.step(x, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.step(x, b, (q, r))))) == Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U.U32Nat.bit(x)) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.div.step(x, b, (q, r)))), W.W64.to_nat(b)) == True{} : Bool}:
299  (Equal.trans(Nat, Nat.add(Nat.mul(W.W64.to_nat(W.W64.or(W.W64.shl(q, 1n), W.W64.from_u32(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.sel(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.sub(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x)))))), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U32.to_nat(W.W64.bit(x))), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U.U32Nat.bit(x)), wd.p1(Nat.add(Nat.mul(W.W64.to_nat(W.W64.or(W.W64.shl(q, 1n), W.W64.from_u32(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.sel(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.sub(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x)))))), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U32.to_nat(W.W64.bit(x))), W.W64.to_nat(W.W64.sel(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.sub(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))))), W.W64.to_nat(b), wd.k(64n, W.W64.to_nat(q), W.W64.to_nat(b), W.W64.to_nat(r), U32.to_nat(W.W64.bit(x)), W.W64.to_nat(W.W64.shl(r, 1n)), U32.to_nat(U32.shrn(W.W64.hi(r), 31n)), W.W64.to_nat(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x)))), W.W64.to_nat(W.W64.shl(q, 1n)), U32.to_nat(U32.shrn(W.W64.hi(q), 31n)), W.W64.to_nat(W.W64.or(W.W64.shl(q, 1n), W.W64.from_u32(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))))), W.W64.to_nat(W.W64.sel(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.sub(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))))), U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_lt(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), hR, hb, Equal.trans(Bool, Nat.is_lt(Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U32.to_nat(W.W64.bit(x))), U.U32Nat.dbl(64n, 1n)), Nat.is_lt(Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U.U32Nat.bit(x)), U.U32Nat.dbl(64n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(64n, 1n)), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U32.to_nat(W.W64.bit(x))), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U.U32Nat.bit(x)), Equal.sym(Nat, Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U.U32Nat.bit(x)), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U32.to_nat(W.W64.bit(x))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), zz), U.U32Nat.bit(x), U32.to_nat(W.W64.bit(x)), Equal.sym(Nat, U32.to_nat(W.W64.bit(x)), U.U32Nat.bit(x), wd.bv(x))))), hX), LB.shl_one_wrap(r), LB.shl_one_wrap(q), LBP.wb.or_bit(r, W.W64.bit(x), wd.bl(x)), Equal.trans(Nat, W.W64.to_nat(W.W64.or(W.W64.shl(q, 1n), W.W64.from_u32(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))))), Nat.add(W.W64.to_nat(W.W64.shl(q, 1n)), U32.to_nat(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))))), Nat.add(W.W64.to_nat(W.W64.shl(q, 1n)), U.U32Nat.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))), LBP.wb.or_bit(q, W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))), wd.bl(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))), Equal.cong(Nat, Nat, zz => Nat.add(W.W64.to_nat(W.W64.shl(q, 1n)), zz), U32.to_nat(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))), U.U32Nat.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))), wd.bv(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))))), wd.bl(x), wd.top(r), Equal.trans(Bool, U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), Nat.is_eq(U32.to_nat(U32.shrn(W.W64.hi(r), 31n)), U32.to_nat(1)), Nat.is_eq(U32.to_nat(U32.shrn(W.W64.hi(r), 31n)), 1n), UL.u32_eq_value(U32.shrn(W.W64.hi(r), 31n), 1), {==}), Equal.sym(Bool, W.W64.is_lt(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), Nat.is_lt(W.W64.to_nat(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x)))), W.W64.to_nat(b)), WB.lt_value(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), Equal.cong(Bool, Bool, zz => Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), zz), Bool.not(W.W64.is_lt(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), Equal.sym(Bool, W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), Bool.not(W.W64.is_lt(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), wn.ge_lt(W.W64.cmp(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))), wd.sel(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), zz), U32.to_nat(W.W64.bit(x)), U.U32Nat.bit(x), wd.bv(x))), wd.p2(Nat.add(Nat.mul(W.W64.to_nat(W.W64.or(W.W64.shl(q, 1n), W.W64.from_u32(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.sel(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.sub(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x)))))), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U32.to_nat(W.W64.bit(x))), W.W64.to_nat(W.W64.sel(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.sub(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))))), W.W64.to_nat(b), wd.k(64n, W.W64.to_nat(q), W.W64.to_nat(b), W.W64.to_nat(r), U32.to_nat(W.W64.bit(x)), W.W64.to_nat(W.W64.shl(r, 1n)), U32.to_nat(U32.shrn(W.W64.hi(r), 31n)), W.W64.to_nat(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x)))), W.W64.to_nat(W.W64.shl(q, 1n)), U32.to_nat(U32.shrn(W.W64.hi(q), 31n)), W.W64.to_nat(W.W64.or(W.W64.shl(q, 1n), W.W64.from_u32(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))))), W.W64.to_nat(W.W64.sel(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.sub(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))))), U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_lt(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), hR, hb, Equal.trans(Bool, Nat.is_lt(Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U32.to_nat(W.W64.bit(x))), U.U32Nat.dbl(64n, 1n)), Nat.is_lt(Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U.U32Nat.bit(x)), U.U32Nat.dbl(64n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(64n, 1n)), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U32.to_nat(W.W64.bit(x))), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U.U32Nat.bit(x)), Equal.sym(Nat, Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U.U32Nat.bit(x)), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), U32.to_nat(W.W64.bit(x))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), zz), U.U32Nat.bit(x), U32.to_nat(W.W64.bit(x)), Equal.sym(Nat, U32.to_nat(W.W64.bit(x)), U.U32Nat.bit(x), wd.bv(x))))), hX), LB.shl_one_wrap(r), LB.shl_one_wrap(q), LBP.wb.or_bit(r, W.W64.bit(x), wd.bl(x)), Equal.trans(Nat, W.W64.to_nat(W.W64.or(W.W64.shl(q, 1n), W.W64.from_u32(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))))), Nat.add(W.W64.to_nat(W.W64.shl(q, 1n)), U32.to_nat(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))))), Nat.add(W.W64.to_nat(W.W64.shl(q, 1n)), U.U32Nat.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))), LBP.wb.or_bit(q, W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))), wd.bl(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))), Equal.cong(Nat, Nat, zz => Nat.add(W.W64.to_nat(W.W64.shl(q, 1n)), zz), U32.to_nat(W.W64.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))), U.U32Nat.bit(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))), wd.bv(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))))), wd.bl(x), wd.top(r), Equal.trans(Bool, U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), Nat.is_eq(U32.to_nat(U32.shrn(W.W64.hi(r), 31n)), U32.to_nat(1)), Nat.is_eq(U32.to_nat(U32.shrn(W.W64.hi(r), 31n)), 1n), UL.u32_eq_value(U32.shrn(W.W64.hi(r), 31n), 1), {==}), Equal.sym(Bool, W.W64.is_lt(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), Nat.is_lt(W.W64.to_nat(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x)))), W.W64.to_nat(b)), WB.lt_value(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), Equal.cong(Bool, Bool, zz => Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), zz), Bool.not(W.W64.is_lt(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), Equal.sym(Bool, W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b), Bool.not(W.W64.is_lt(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), wn.ge_lt(W.W64.cmp(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)))), wd.sel(Bool.or(U32.is_eq(U32.shrn(W.W64.hi(r), 31n), 1), W.W64.is_ge(W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b)), W.W64.or(W.W64.shl(r, 1n), W.W64.from_u32(W.W64.bit(x))), b))))
300
301def wr.d8(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat, +x5: Nat) -> {Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}:
302  %Equal.sym(Nat, Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), UL.nat_double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4))) : {Nat.add(_, x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
303  %Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), UL.dbl_add(x0, Nat.mul(x1, x2), x3)) : {Nat.add(Nat.add(Nat.add(_, x4), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
304  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x4), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), x4)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), x4)) : {Nat.add(Nat.add(_, Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
305  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x4), Nat.add(x4, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x4)) : {Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
306  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, U.U32Nat.dbl(x0, x3))) : {Nat.add(Nat.add(_, Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
307  %Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), UL.dbl_add(x0, Nat.mul(x1, x2), x3)) : {Nat.add(Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(_, x4)), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
308  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x4), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), x4)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), x4)) : {Nat.add(Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), _), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
309  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x4), Nat.add(x4, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x4)) : {Nat.add(Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
310  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, U.U32Nat.dbl(x0, x3))) : {Nat.add(Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), _), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
311  %Equal.sym(Nat, Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))), UL.nat_add_assoc(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))) : {Nat.add(_, x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
312  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))) : {Nat.add(Nat.add(x4, _), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
313  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))) : {Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
314  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))) : {Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, _))), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
315  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))) : {Nat.add(Nat.add(x4, _), x5) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
316  %Equal.sym(Nat, Nat.add(Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), x5), Nat.add(x4, Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), x5)), UL.nat_add_assoc(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), x5)) : {_ == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
317  %Equal.sym(Nat, Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), x5), Nat.add(x4, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), x5)), UL.nat_add_assoc(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), x5)) : {Nat.add(x4, _) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
318  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), x5), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), x5)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), x5)) : {Nat.add(x4, Nat.add(x4, _)) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
319  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), x5), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), x5)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), x5)) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
320  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), x5), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, x3), x5)), UL.nat_add_assoc(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3), x5)) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
321  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x5), Nat.add(x5, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x5)) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), _))))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
322  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x5, U.U32Nat.dbl(x0, x3))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x5, U.U32Nat.dbl(x0, x3))) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
323  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
324  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))) : {Nat.add(x4, Nat.add(x4, _)) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
325  %Equal.sym(Nat, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))) : {Nat.add(x4, Nat.add(x4, _)) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
326  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))))) : {Nat.add(x4, _) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
327  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))))) : {_ == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
328  %Equal.sym(Nat, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x4, _))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
329  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, _)) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
330  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
331  %Equal.sym(Nat, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x5, U.U32Nat.dbl(x0, x3))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x5, U.U32Nat.dbl(x0, x3))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x5, U.U32Nat.dbl(x0, x3)))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(x4, _)))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
332  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x5, U.U32Nat.dbl(x0, x3)))), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x5, U.U32Nat.dbl(x0, x3)))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x5, U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x5, U.U32Nat.dbl(x0, x3)))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x4, Nat.add(x5, U.U32Nat.dbl(x0, x3))))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, _))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
333  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x5, U.U32Nat.dbl(x0, x3))))), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x4, Nat.add(x5, U.U32Nat.dbl(x0, x3))))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x4, Nat.add(x5, U.U32Nat.dbl(x0, x3))))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x5, U.U32Nat.dbl(x0, x3))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x4, Nat.add(x4, Nat.add(x5, U.U32Nat.dbl(x0, x3)))))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
334  %Equal.sym(Nat, Nat.add(x5, U.U32Nat.dbl(x0, x3)), Nat.add(U.U32Nat.dbl(x0, x3), x5), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x5), Nat.add(x5, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x5))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x4, _))))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
335  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), x5)), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, x5)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, x5)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), x5)), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x4, x5))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, _)))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
336  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, x5))), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x4, x5))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x4, x5))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, x5))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x4, Nat.add(x4, x5)))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), _))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
337  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x4, x5)))), Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(x4, x5))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(x4, x5))), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x4, x5)))), UL.nat_add_assoc(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(x4, x5))))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
338  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(x4, x5)))), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(x4, x5))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(x4, x5))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(x4, x5)))), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(x4, x5))))) : {Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
339  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(x4, x5)))), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(x4, x5))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(x4, x5))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(x4, x5)))), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(x4, x5))))) : {_ == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
340  %Equal.sym(Nat, Nat.add(x4, x5), Nat.add(x5, x4), Equal.sym(Nat, Nat.add(x5, x4), Nat.add(x4, x5), UL.nat_add_comm(x5, x4))) : {Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, _)) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
341  %Equal.sym(Nat, Nat.add(x4, Nat.add(x5, x4)), Nat.add(x5, Nat.add(x4, x4)), Equal.sym(Nat, Nat.add(x5, Nat.add(x4, x4)), Nat.add(x4, Nat.add(x5, x4)), UL.nat_add_left_comm(x5, x4, x4))) : {Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), _) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
342  %Equal.sym(Nat, Nat.add(x4, x4), Nat.double(x4), Equal.sym(Nat, Nat.double(x4), Nat.add(x4, x4), UL.nat_double(x4))) : {Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Nat.add(x5, _)) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
343  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))) : {Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _), Nat.add(x5, Nat.double(x4))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
344  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))) : {Nat.add(_, Nat.add(x5, Nat.double(x4))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
345  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), UL.dbl_add(x0, Nat.mul(x1, x2), x3))) : {Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), _), Nat.add(x5, Nat.double(x4))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
346  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), UL.dbl_add(x0, Nat.mul(x1, x2), x3))) : {Nat.add(Nat.add(_, U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
347  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Equal.sym(Nat, Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), UL.nat_double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))))) : {Nat.add(_, Nat.add(x5, Nat.double(x4))) == Nat.add(Nat.double(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3))), Nat.add(x5, Nat.double(x4))) : Nat}
348  {==}
349
350def wr.d9(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat, +x5: Nat) -> {Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4), x5), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}:
351  %Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), UL.dbl_add(x0, Nat.mul(x1, x2), x3)) : {Nat.add(Nat.add(Nat.add(_, x4), x5), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
352  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x4), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), x4)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), x4)) : {Nat.add(Nat.add(_, x5), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
353  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x4), Nat.add(x4, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x4)) : {Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _), x5), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
354  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, U.U32Nat.dbl(x0, x3))) : {Nat.add(Nat.add(_, x5), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
355  %Equal.sym(Nat, Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), x5), Nat.add(x4, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x5)), UL.nat_add_assoc(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x5)) : {Nat.add(_, Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
356  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x5), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), x5)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), x5)) : {Nat.add(Nat.add(x4, _), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
357  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x5), Nat.add(x5, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x5)) : {Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
358  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, U.U32Nat.dbl(x0, x3))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x5, U.U32Nat.dbl(x0, x3))) : {Nat.add(Nat.add(x4, _), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
359  %Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), UL.dbl_add(x0, Nat.mul(x1, x2), x3)) : {Nat.add(Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(_, x4)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
360  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x4), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), x4)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), x4)) : {Nat.add(Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), _) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
361  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x4), Nat.add(x4, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x4)) : {Nat.add(Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
362  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, U.U32Nat.dbl(x0, x3))) : {Nat.add(Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), _) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
363  %Equal.sym(Nat, Nat.add(Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))), UL.nat_add_assoc(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))) : {_ == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
364  %Equal.sym(Nat, Nat.add(Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(x5, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))), UL.nat_add_assoc(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))) : {Nat.add(x4, _) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
365  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))) : {Nat.add(x4, Nat.add(x5, _)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
366  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))) : {Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _))) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
367  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))) : {Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, _)))) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
368  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))) : {Nat.add(x4, Nat.add(x5, _)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
369  %Equal.sym(Nat, Nat.add(x5, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), Nat.add(x4, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), UL.nat_add_left_comm(x5, x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))) : {Nat.add(x4, _) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
370  %Equal.sym(Nat, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))) : {Nat.add(x4, Nat.add(x4, _)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
371  %Equal.sym(Nat, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _))) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
372  %Equal.sym(Nat, Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x5, U.U32Nat.dbl(x0, x3))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x5, U.U32Nat.dbl(x0, x3))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x5, U.U32Nat.dbl(x0, x3)))) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)))) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
373  %Equal.sym(Nat, Nat.add(x5, U.U32Nat.dbl(x0, x3)), Nat.add(U.U32Nat.dbl(x0, x3), x5), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x5), Nat.add(x5, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x5))) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), _))))) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
374  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, x3), x5)), Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), x5), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), x5), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, x3), x5)), UL.nat_add_assoc(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3), x5))) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)))) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
375  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), x5)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), x5), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), x5), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), x5)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)), x5))) : {Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _))) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
376  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), x5)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), x5), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), x5), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), x5)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), x5))) : {Nat.add(x4, Nat.add(x4, _)) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
377  %Equal.sym(Nat, Nat.add(x4, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), x5)), Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), x5), Equal.sym(Nat, Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), x5), Nat.add(x4, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), x5)), UL.nat_add_assoc(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))), x5))) : {Nat.add(x4, _) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
378  %Equal.sym(Nat, Nat.add(x4, Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), x5)), Nat.add(Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), x5), Equal.sym(Nat, Nat.add(Nat.add(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))), x5), Nat.add(x4, Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), x5)), UL.nat_add_assoc(x4, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), x5))) : {_ == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
379  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3)))))) : {Nat.add(Nat.add(x4, _), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
380  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))) : {Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, _))), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
381  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, x3), x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))) : {Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
382  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))))) : {Nat.add(Nat.add(x4, _), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
383  %Equal.sym(Nat, Nat.add(x4, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))), Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Equal.sym(Nat, Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))), Nat.add(x4, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))))), UL.nat_add_assoc(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)))))) : {Nat.add(_, x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
384  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, U.U32Nat.dbl(x0, x3))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, U.U32Nat.dbl(x0, x3)))) : {Nat.add(Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), _), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
385  %Equal.sym(Nat, Nat.add(x4, U.U32Nat.dbl(x0, x3)), Nat.add(U.U32Nat.dbl(x0, x3), x4), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x4), Nat.add(x4, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x4))) : {Nat.add(Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _)), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
386  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), x4)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x4), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x4), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), x4)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), x4))) : {Nat.add(Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), _), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
387  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), UL.dbl_add(x0, Nat.mul(x1, x2), x3))) : {Nat.add(Nat.add(Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(_, x4)), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
388  %Equal.sym(Nat, Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, U.U32Nat.dbl(x0, x3))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(x4, U.U32Nat.dbl(x0, x3))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), x4, U.U32Nat.dbl(x0, x3)))) : {Nat.add(Nat.add(_, Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
389  %Equal.sym(Nat, Nat.add(x4, U.U32Nat.dbl(x0, x3)), Nat.add(U.U32Nat.dbl(x0, x3), x4), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, x3), x4), Nat.add(x4, U.U32Nat.dbl(x0, x3)), UL.nat_add_comm(U.U32Nat.dbl(x0, x3), x4))) : {Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), _), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
390  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), x4)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x4), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), x4), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(x0, x3), x4)), UL.nat_add_assoc(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3), x4))) : {Nat.add(Nat.add(_, Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
391  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Equal.sym(Nat, U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(x0, Nat.mul(x1, x2)), U.U32Nat.dbl(x0, x3)), UL.dbl_add(x0, Nat.mul(x1, x2), x3))) : {Nat.add(Nat.add(Nat.add(_, x4), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
392  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), Equal.sym(Nat, Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), Nat.add(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4), Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), UL.nat_double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)))) : {Nat.add(_, x5) == Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(x0, Nat.add(Nat.mul(x1, x2), x3)), x4)), x5) : Nat}
393  {==}
394
395def wd.bs(+p: Nat, +x: Bool, +hi: Word(p), +b: W.W64, +q: W.W64, +r: W.W64, +hb: {Nat.is_lt(W.W64.to_nat(b), U.U32Nat.dbl(64n, 1n)) == True{} : Bool}, +hX: {Nat.is_lt(Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), U.U32Nat.dbl(64n, 1n)) == True{} : Bool}, ih: {Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))))) == Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(1n+p, WCon{x, hi}, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(1n+p, WCon{x, hi}, b, (q, r))))) == Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.div.bits(1n+p, WCon{x, hi}, b, (q, r)))), W.W64.to_nat(b)) == True{} : Bool}:
396  (+e, +l) = ih
397  %Equal.sym(W.W64 & W.W64, W.W64.div.bits(p, hi, b, (q, r)), (W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))), wd.eta(W.W64.div.bits(p, hi, b, (q, r)))) : {Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.step(x, b, _))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.step(x, b, _)))) == Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.div.step(x, b, _))), W.W64.to_nat(b)) == True{} : Bool}
398  (Equal.trans(Nat, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.step(x, b, (W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))))))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.step(x, b, (W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))))), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), wd.p1(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.step(x, b, (W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))))))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.step(x, b, (W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))))), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), W.W64.to_nat(W.W64.snd(W.W64.div.step(x, b, (W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))))))), W.W64.to_nat(b), wd.st(x, b, W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))), l, hb, Equal.trans(Bool, Nat.is_lt(Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), U.U32Nat.dbl(64n, 1n)), Nat.is_lt(Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), U.U32Nat.dbl(64n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(64n, 1n)), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Equal.sym(Nat, Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(zz), U.U32Nat.bit(x)), Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))))), Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), e), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Word.to_nat(1n+p, WCon{x, hi})), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi)))), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Word.to_nat(1n+p, WCon{x, hi})), wr.d8(p, W.W64.to_nat(q), W.W64.to_nat(b), W.W64.to_nat(r), Word.to_nat(p, hi), U.U32Nat.bit(x)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), zz), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi))), Word.to_nat(1n+p, WCon{x, hi}), Equal.sym(Nat, Word.to_nat(1n+p, WCon{x, hi}), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi))), wd.wv(p, x, hi)))), {==}))))), hX))), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(zz), U.U32Nat.bit(x)), Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))))), Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), e), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Word.to_nat(1n+p, WCon{x, hi})), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi)))), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Word.to_nat(1n+p, WCon{x, hi})), wr.d8(p, W.W64.to_nat(q), W.W64.to_nat(b), W.W64.to_nat(r), Word.to_nat(p, hi), U.U32Nat.bit(x)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), zz), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi))), Word.to_nat(1n+p, WCon{x, hi}), Equal.sym(Nat, Word.to_nat(1n+p, WCon{x, hi}), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi))), wd.wv(p, x, hi)))), {==}))), wd.p2(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.step(x, b, (W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))))))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.step(x, b, (W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))))), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), W.W64.to_nat(W.W64.snd(W.W64.div.step(x, b, (W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))))))), W.W64.to_nat(b), wd.st(x, b, W.W64.fst(W.W64.div.bits(p, hi, b, (q, r))), W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))), l, hb, Equal.trans(Bool, Nat.is_lt(Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), U.U32Nat.dbl(64n, 1n)), Nat.is_lt(Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), U.U32Nat.dbl(64n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(64n, 1n)), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Equal.sym(Nat, Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r)))))), U.U32Nat.bit(x)), Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(zz), U.U32Nat.bit(x)), Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(p, hi, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(p, hi, b, (q, r))))), Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), e), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Word.to_nat(1n+p, WCon{x, hi})), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi)))), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Word.to_nat(1n+p, WCon{x, hi})), wr.d8(p, W.W64.to_nat(q), W.W64.to_nat(b), W.W64.to_nat(r), Word.to_nat(p, hi), U.U32Nat.bit(x)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), zz), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi))), Word.to_nat(1n+p, WCon{x, hi}), Equal.sym(Nat, Word.to_nat(1n+p, WCon{x, hi}), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi))), wd.wv(p, x, hi)))), {==}))))), hX))))
399
400def wd.bits(m: Nat, w: Word(m), +b: W.W64, +q: W.W64, +r: W.W64, +hR: {Nat.is_lt(W.W64.to_nat(r), W.W64.to_nat(b)) == True{} : Bool}, +hb: {Nat.is_lt(W.W64.to_nat(b), U.U32Nat.dbl(64n, 1n)) == True{} : Bool}, +hX: {Nat.is_lt(Nat.add(U.U32Nat.dbl(m, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(m, w)), U.U32Nat.dbl(64n, 1n)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(m, w, b, (q, r)))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(m, w, b, (q, r))))) == Nat.add(U.U32Nat.dbl(m, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(m, w)) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.div.bits(m, w, b, (q, r)))), W.W64.to_nat(b)) == True{} : Bool}:
401  match m w:
402    case 0n WNil{}:
403      (Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)), 0n), Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)), UL.nat_add_zero(Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), hR)
404    case 1n+ +p WCon{+x, +hi}:
405      wd.bs(p, x, hi, b, q, r, hb, hX, wd.bits(p, hi, b, q, r, hR, hb, UO.nat_le_lt_trans(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), U.U32Nat.dbl(64n, 1n), Equal.trans(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi}))), Nat.is_le(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)))), True{}, Equal.sym(Bool, Nat.is_le(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)))), Nat.is_le(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi}))), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), zz), Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.trans(Nat, Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), wr.d9(p, W.W64.to_nat(q), W.W64.to_nat(b), W.W64.to_nat(r), Word.to_nat(p, hi), U.U32Nat.bit(x)), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Word.to_nat(1n+p, WCon{x, hi})), Nat.add(U.U32Nat.dbl(1n+p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(1n+p, WCon{x, hi})), Equal.trans(Nat, Nat.add(Nat.double(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi))), U.U32Nat.bit(x)), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi)))), Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), Word.to_nat(1n+p, WCon{x, hi})), wr.d8(p, W.W64.to_nat(q), W.W64.to_nat(b), W.W64.to_nat(r), Word.to_nat(p, hi), U.U32Nat.bit(x)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.double(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r)))), zz), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi))), Word.to_nat(1n+p, WCon{x, hi}), Equal.sym(Nat, Word.to_nat(1n+p, WCon{x, hi}), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, hi))), wd.wv(p, x, hi)))), {==})))), UL.nat_le_add(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), Nat.add(Nat.add(U.U32Nat.dbl(p, Nat.add(Nat.mul(W.W64.to_nat(q), W.W64.to_nat(b)), W.W64.to_nat(r))), Word.to_nat(p, hi)), U.U32Nat.bit(x)))), hX)))
406
407def wr.d10(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(x0, U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3))) == Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3)), x0) : Nat}:
408  %Equal.sym(Nat, U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), U.U32Nat.dbl(32n, x3)), UL.dbl_add(32n, Nat.mul(x1, x2), x3)) : {Nat.add(x0, _) == Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3)), x0) : Nat}
409  %Equal.sym(Nat, Nat.add(x0, Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), U.U32Nat.dbl(32n, x3))), Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), Nat.add(x0, U.U32Nat.dbl(32n, x3))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), Nat.add(x0, U.U32Nat.dbl(32n, x3))), Nat.add(x0, Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), U.U32Nat.dbl(32n, x3))), UL.nat_add_left_comm(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), x0, U.U32Nat.dbl(32n, x3)))) : {_ == Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3)), x0) : Nat}
410  %Equal.sym(Nat, Nat.add(x0, U.U32Nat.dbl(32n, x3)), Nat.add(U.U32Nat.dbl(32n, x3), x0), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, x3), x0), Nat.add(x0, U.U32Nat.dbl(32n, x3)), UL.nat_add_comm(U.U32Nat.dbl(32n, x3), x0))) : {Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), _) == Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3)), x0) : Nat}
411  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(32n, x3), x0)), Nat.add(Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), U.U32Nat.dbl(32n, x3)), x0), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), U.U32Nat.dbl(32n, x3)), x0), Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), Nat.add(U.U32Nat.dbl(32n, x3), x0)), UL.nat_add_assoc(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), U.U32Nat.dbl(32n, x3), x0))) : {_ == Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3)), x0) : Nat}
412  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), U.U32Nat.dbl(32n, x3)), U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3)), Equal.sym(Nat, U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3)), Nat.add(U.U32Nat.dbl(32n, Nat.mul(x1, x2)), U.U32Nat.dbl(32n, x3)), UL.dbl_add(32n, Nat.mul(x1, x2), x3))) : {Nat.add(_, x0) == Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(x1, x2), x3)), x0) : Nat}
413  {==}
414
415def wd.dz2(+hw: Word(32n), +lw: Word(32n), +b: W.W64, +h: {W.W64.is_zero(b) == False{} : Bool}, i1: {Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))) == Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.zero()), W.W64.to_nat(b)), W.W64.to_nat(W.W64.zero()))), Word.to_nat(32n, hw)) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)) == True{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.divmod.pick(False{}, W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(False{}, W.W64{U32{hw}, U32{lw}}, b)))) == W.W64.to_nat(W.W64{U32{hw}, U32{lw}}) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(False{}, W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b)) == True{} : Bool}:
416  (+e1, +l1) = i1
417  %Equal.sym(W.W64 & W.W64, W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())), (W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), wd.eta(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))) : {Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, lw, b, _))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, lw, b, _)))) == W.W64.to_nat(W.W64{U32{hw}, U32{lw}}) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, lw, b, _))), W.W64.to_nat(b)) == True{} : Bool}
418  (Equal.trans(Nat, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, lw, b, (W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, lw, b, (W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))))), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), wd.p1(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, lw, b, (W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, lw, b, (W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))))), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, lw, b, (W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), W.W64.to_nat(b), wd.bits(32n, lw, b, W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), l1, wv.lt64(b), Equal.trans(Bool, Nat.is_lt(Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), U.U32Nat.dbl(64n, 1n)), Nat.is_lt(W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), U.U32Nat.dbl(64n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(64n, 1n)), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Equal.sym(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), Equal.trans(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), Equal.trans(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Word.to_nat(32n, hw))), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), Equal.trans(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(U32.to_nat(U32{lw}), U.U32Nat.dbl(32n, U32.to_nat(U32{hw}))), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Word.to_nat(32n, hw))), WB.to_nat_parts(U32{hw}, U32{lw}), {==}), Equal.cong(Nat, Nat, zz => Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, zz)), Word.to_nat(32n, hw), Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))), Equal.sym(Nat, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))), Word.to_nat(32n, hw), Equal.trans(Nat, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.zero()), W.W64.to_nat(b)), W.W64.to_nat(W.W64.zero()))), Word.to_nat(32n, hw)), Word.to_nat(32n, hw), e1, {==})))), wr.d10(Word.to_nat(32n, lw), W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))))), wv.lt64(W.W64{U32{hw}, U32{lw}})))), Equal.sym(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), Equal.trans(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), Equal.trans(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Word.to_nat(32n, hw))), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), Equal.trans(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(U32.to_nat(U32{lw}), U.U32Nat.dbl(32n, U32.to_nat(U32{hw}))), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Word.to_nat(32n, hw))), WB.to_nat_parts(U32{hw}, U32{lw}), {==}), Equal.cong(Nat, Nat, zz => Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, zz)), Word.to_nat(32n, hw), Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))), Equal.sym(Nat, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))), Word.to_nat(32n, hw), Equal.trans(Nat, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.zero()), W.W64.to_nat(b)), W.W64.to_nat(W.W64.zero()))), Word.to_nat(32n, hw)), Word.to_nat(32n, hw), e1, {==})))), wr.d10(Word.to_nat(32n, lw), W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))))), wd.p2(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, lw, b, (W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, lw, b, (W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))))), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, lw, b, (W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), W.W64.to_nat(b), wd.bits(32n, lw, b, W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))), l1, wv.lt64(b), Equal.trans(Bool, Nat.is_lt(Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), U.U32Nat.dbl(64n, 1n)), Nat.is_lt(W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), U.U32Nat.dbl(64n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(64n, 1n)), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Equal.sym(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), Equal.trans(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))), Word.to_nat(32n, lw)), Equal.trans(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Word.to_nat(32n, hw))), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))))), Equal.trans(Nat, W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), Nat.add(U32.to_nat(U32{lw}), U.U32Nat.dbl(32n, U32.to_nat(U32{hw}))), Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, Word.to_nat(32n, hw))), WB.to_nat_parts(U32{hw}, U32{lw}), {==}), Equal.cong(Nat, Nat, zz => Nat.add(Word.to_nat(32n, lw), U.U32Nat.dbl(32n, zz)), Word.to_nat(32n, hw), Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))), Equal.sym(Nat, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))), Word.to_nat(32n, hw), Equal.trans(Nat, Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero()))))), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.zero()), W.W64.to_nat(b)), W.W64.to_nat(W.W64.zero()))), Word.to_nat(32n, hw)), Word.to_nat(32n, hw), e1, {==})))), wr.d10(Word.to_nat(32n, lw), W.W64.to_nat(W.W64.fst(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))), W.W64.to_nat(b), W.W64.to_nat(W.W64.snd(W.W64.div.bits(32n, hw, b, (W.W64.zero(), W.W64.zero())))))))), wv.lt64(W.W64{U32{hw}, U32{lw}})))))
419
420def wd.dz(+hw: Word(32n), +lw: Word(32n), +b: W.W64, z: Bool, ez: {W.W64.is_zero(b) == z : Bool}, +h: {W.W64.is_zero(b) == False{} : Bool}) -> {Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.divmod.pick(z, W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(z, W.W64{U32{hw}, U32{lw}}, b)))) == W.W64.to_nat(W.W64{U32{hw}, U32{lw}}) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(z, W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b)) == True{} : Bool}:
421  match z:
422    case True{}:
423      Empty.absurd({Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.divmod.pick(True{}, W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(True{}, W.W64{U32{hw}, U32{lw}}, b)))) == W.W64.to_nat(W.W64{U32{hw}, U32{lw}}) : Nat} & {Nat.is_lt(W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(True{}, W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b)) == True{} : Bool}, wn.tf(Equal.trans(Bool, True{}, W.W64.is_zero(b), False{}, Equal.sym(Bool, W.W64.is_zero(b), True{}, ez), h)))
424    case False{}:
425      wd.dz2(hw, lw, b, h, wd.bits(32n, hw, b, W.W64.zero(), W.W64.zero(), Equal.trans(Bool, Nat.is_lt(W.W64.to_nat(W.W64.zero()), W.W64.to_nat(b)), Nat.is_lt(0n, W.W64.to_nat(b)), True{}, {==}, wd.nz(W.W64.to_nat(b), Equal.trans(Bool, Nat.is_eq(W.W64.to_nat(b), 0n), W.W64.is_zero(b), False{}, Equal.sym(Bool, W.W64.is_zero(b), Nat.is_eq(W.W64.to_nat(b), 0n), WB.eq_value(b, W.W64.zero())), h))), wv.lt64(b), Equal.trans(Bool, Nat.is_lt(Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.zero()), W.W64.to_nat(b)), W.W64.to_nat(W.W64.zero()))), Word.to_nat(32n, hw)), U.U32Nat.dbl(64n, 1n)), Nat.is_lt(Word.to_nat(32n, hw), U.U32Nat.dbl(64n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(64n, 1n)), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.zero()), W.W64.to_nat(b)), W.W64.to_nat(W.W64.zero()))), Word.to_nat(32n, hw)), Word.to_nat(32n, hw), Equal.sym(Nat, Word.to_nat(32n, hw), Nat.add(U.U32Nat.dbl(32n, Nat.add(Nat.mul(W.W64.to_nat(W.W64.zero()), W.W64.to_nat(b)), W.W64.to_nat(W.W64.zero()))), Word.to_nat(32n, hw)), {==})), UO.nat_lt_le_trans(Word.to_nat(32n, hw), U.U32Nat.dbl(32n, 1n), U.U32Nat.dbl(64n, 1n), UL.word_value_lt(32n, hw), UL.dbl_le_exp(32n, 64n, 1n, {==})))))
426
427
428def Laws.divmod_value(a, b, h):
429  match a:
430    case W.W64{U32{+hw}, U32{+lw}}:
431      wd.p1(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.divmod.pick(W.W64.is_zero(b), W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(W.W64.is_zero(b), W.W64{U32{hw}, U32{lw}}, b)))), W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(W.W64.is_zero(b), W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b), wd.dz(hw, lw, b, W.W64.is_zero(b), {==}, h))
432
433def Laws.mod_lt(a, b, h):
434  match a:
435    case W.W64{U32{+hw}, U32{+lw}}:
436      wd.p2(Nat.add(Nat.mul(W.W64.to_nat(W.W64.fst(W.W64.divmod.pick(W.W64.is_zero(b), W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b)), W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(W.W64.is_zero(b), W.W64{U32{hw}, U32{lw}}, b)))), W.W64.to_nat(W.W64{U32{hw}, U32{lw}}), W.W64.to_nat(W.W64.snd(W.W64.divmod.pick(W.W64.is_zero(b), W.W64{U32{hw}, U32{lw}}, b))), W.W64.to_nat(b), wd.dz(hw, lw, b, W.W64.is_zero(b), {==}, h))
437
438def Laws.div_zero(a):
439  {==}
440
441def Laws.mod_zero(a):
442  {==}