PROOF_mul.bend

bend-osdev-word64@0.1.1.0 · 369 lines · 31 definitions

1# Generated by gen/proof.py; do not edit by hand. The proofs of LAWS_mul.bend:
2# multiplication.
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-word64@0.1.1.0/LAWS_mul.bend as Laws
13
14# Bounds in the exact form a lemma takes them: a U32 value below 2^32, a W64
15# value below 2^64
16
17def wu.ve(+w: Word(32n)) -> {Word.to_nat(32n, w) == U32.to_nat(U32{w}) : Nat}:
18  {==}
19
20def wu.lt(+x: U32) -> {Nat.is_lt(U32.to_nat(x), U.U32Nat.dbl(32n, 1n)) == True{} : Bool}:
21  match x:
22    case U32{+w}:
23      %wu.ve(w) : {Nat.is_lt(_, U.U32Nat.dbl(32n, 1n)) == True{} : Bool}
24      UL.word_value_lt(32n, w)
25
26def 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}:
27  %e : {Nat.is_lt(P.wv.V(n, h, l), U.U32Nat.dbl(_, 1n)) == True{} : Bool}
28  %UL.dbl_dbl(n, n, 1n) : {Nat.is_lt(P.wv.V(n, h, l), _) == True{} : Bool}
29  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))
30
31def 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}:
32  {==}
33
34def wv.lt64(+x: W.W64) -> {Nat.is_lt(W.W64.to_nat(x), U.U32Nat.dbl(64n, 1n)) == True{} : Bool}:
35  match x:
36    case W.W64{U32{+h}, U32{+l}}:
37      %wv.ve(h, l) : {Nat.is_lt(_, U.U32Nat.dbl(64n, 1n)) == True{} : Bool}
38      wv.g(32n, 64n, h, l, {==})
39
40def wn.sub0(x: Nat) -> {Nat.sub(x, 0n) == x : Nat}:
41  match x:
42    case 0n:
43      {==}
44    case 1n+ +p:
45      {==}
46
47def wn.le0(x: Nat) -> {Nat.is_le(0n, x) == True{} : Bool}:
48  match x:
49    case 0n:
50      {==}
51    case 1n+ +p:
52      {==}
53
54def wn.ft(e: {False{} == True{} : Bool}) -> Empty:
55  P.wn.ft(e)
56
57def wn.tf(e: {True{} == False{} : Bool}) -> Empty:
58  PS.ns.tf(e)
59
60def wn.ge_lt(c: Cmp) -> {Cmp.is_ge(c) == Bool.not(Cmp.is_lt(c)) : Bool}:
61  match c:
62    case LT{}:
63      {==}
64    case EQ{}:
65      {==}
66    case GT{}:
67      {==}
68
69def 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}:
70  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)))
71
72# Products: mulhi from 16-bit partial products, at a width n of two halves h
73
74def wr.m0(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(Nat.add(x0, x1), 1n+U.U32Nat.dbl(x2, x3)) == Nat.add(x0, 1n+Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}:
75  %Equal.sym(Nat, Nat.add(Nat.add(x0, x1), Nat.add(1n, U.U32Nat.dbl(x2, x3))), Nat.add(x0, Nat.add(x1, Nat.add(1n, U.U32Nat.dbl(x2, x3)))), UL.nat_add_assoc(x0, x1, Nat.add(1n, U.U32Nat.dbl(x2, x3)))) : {_ == Nat.add(x0, 1n+Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
76  %Equal.sym(Nat, Nat.add(x1, Nat.add(1n, U.U32Nat.dbl(x2, x3))), Nat.add(1n, Nat.add(x1, U.U32Nat.dbl(x2, x3))), UL.nat_add_left_comm(x1, 1n, U.U32Nat.dbl(x2, x3))) : {Nat.add(x0, _) == Nat.add(x0, 1n+Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
77  %Equal.sym(Nat, Nat.add(x0, Nat.add(1n, Nat.add(x1, U.U32Nat.dbl(x2, x3)))), Nat.add(1n, Nat.add(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3)))), UL.nat_add_left_comm(x0, 1n, Nat.add(x1, U.U32Nat.dbl(x2, x3)))) : {_ == Nat.add(x0, 1n+Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
78  %Equal.sym(Nat, Nat.add(1n, Nat.add(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3)))), Nat.add(x0, Nat.add(1n, Nat.add(x1, U.U32Nat.dbl(x2, x3)))), Equal.sym(Nat, Nat.add(x0, Nat.add(1n, Nat.add(x1, U.U32Nat.dbl(x2, x3)))), Nat.add(1n, Nat.add(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3)))), UL.nat_add_left_comm(x0, 1n, Nat.add(x1, U.U32Nat.dbl(x2, x3))))) : {_ == Nat.add(x0, 1n+Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
79  {==}
80
81def wm.hl(+k: Nat, +x: Nat, +K: Nat, +hx: {Nat.is_lt(x, U.U32Nat.dbl(k, K)) == True{} : Bool}) -> {Nat.is_lt(U.U32Nat.high(k, x), K) == True{} : Bool}:
82  Equal.trans(Bool, Nat.is_lt(U.U32Nat.high(k, x), K), Nat.is_lt(U.U32Nat.dbl(k, U.U32Nat.high(k, x)), U.U32Nat.dbl(k, K)), True{}, Equal.sym(Bool, Nat.is_lt(U.U32Nat.dbl(k, U.U32Nat.high(k, x)), U.U32Nat.dbl(k, K)), Nat.is_lt(U.U32Nat.high(k, x), K), UL.dbl_lt(k, U.U32Nat.high(k, x), K)), Equal.trans(Bool, Nat.is_lt(U.U32Nat.dbl(k, U.U32Nat.high(k, x)), U.U32Nat.dbl(k, K)), Nat.is_lt(U.U32Nat.dbl(k, U.U32Nat.high(k, x)), Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), U.U32Nat.low(k, x)), 1n+U.U32Nat.dbl(k, U.U32Nat.high(k, x)))), True{}, Equal.sym(Bool, Nat.is_lt(U.U32Nat.dbl(k, U.U32Nat.high(k, x)), Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), U.U32Nat.low(k, x)), 1n+U.U32Nat.dbl(k, U.U32Nat.high(k, x)))), Nat.is_lt(U.U32Nat.dbl(k, U.U32Nat.high(k, x)), U.U32Nat.dbl(k, K)), Equal.cong(Nat, Bool, zz => Nat.is_lt(U.U32Nat.dbl(k, U.U32Nat.high(k, x)), zz), Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), U.U32Nat.low(k, x)), 1n+U.U32Nat.dbl(k, U.U32Nat.high(k, x))), U.U32Nat.dbl(k, K), Equal.trans(Nat, Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), U.U32Nat.low(k, x)), 1n+U.U32Nat.dbl(k, U.U32Nat.high(k, x))), Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), 1n+x), U.U32Nat.dbl(k, K), Equal.trans(Nat, Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), U.U32Nat.low(k, x)), 1n+U.U32Nat.dbl(k, U.U32Nat.high(k, x))), Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), 1n+Nat.add(U.U32Nat.low(k, x), U.U32Nat.dbl(k, U.U32Nat.high(k, x)))), Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), 1n+x), wr.m0(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), U.U32Nat.low(k, x), k, U.U32Nat.high(k, x)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), 1n+zz), Nat.add(U.U32Nat.low(k, x), U.U32Nat.dbl(k, U.U32Nat.high(k, x))), x, UL.low_high(k, x))), UL.nat_lt_witness(x, U.U32Nat.dbl(k, K), hx)))), UL.nat_lt_add(U.U32Nat.dbl(k, U.U32Nat.high(k, x)), Nat.add(Nat.sub(U.U32Nat.dbl(k, K), 1n+x), U.U32Nat.low(k, x)))))
83
84def wr.m1(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat, +x5: Nat, +x6: Nat, +x7: Nat) -> {Nat.add(2n+Nat.add(Nat.add(Nat.add(x0, x1), x2), Nat.add(U.U32Nat.dbl(x3, 1n), x4)), 1n+Nat.add(Nat.add(x5, x6), x7)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}:
85  %Equal.sym(Nat, Nat.add(Nat.add(x0, x1), x2), Nat.add(x0, Nat.add(x1, x2)), UL.nat_add_assoc(x0, x1, x2)) : {Nat.add(Nat.add(1n, Nat.add(1n, Nat.add(_, Nat.add(U.U32Nat.dbl(x3, 1n), x4)))), 1n+Nat.add(Nat.add(x5, x6), x7)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
86  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x3, 1n), x4), Nat.add(x4, U.U32Nat.dbl(x3, 1n)), UL.nat_add_comm(U.U32Nat.dbl(x3, 1n), x4)) : {Nat.add(Nat.add(1n, Nat.add(1n, Nat.add(Nat.add(x0, Nat.add(x1, x2)), _))), 1n+Nat.add(Nat.add(x5, x6), x7)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
87  %Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(x1, x2)), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(x0, Nat.add(Nat.add(x1, x2), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), UL.nat_add_assoc(x0, Nat.add(x1, x2), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))) : {Nat.add(Nat.add(1n, Nat.add(1n, _)), 1n+Nat.add(Nat.add(x5, x6), x7)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
88  %Equal.sym(Nat, Nat.add(Nat.add(x1, x2), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), UL.nat_add_assoc(x1, x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))) : {Nat.add(Nat.add(1n, Nat.add(1n, Nat.add(x0, _))), 1n+Nat.add(Nat.add(x5, x6), x7)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
89  %Equal.sym(Nat, Nat.add(1n, Nat.add(1n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n))))))), Nat.add(Nat.add(1n, 1n), Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))))), Equal.sym(Nat, Nat.add(Nat.add(1n, 1n), Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))))), Nat.add(1n, Nat.add(1n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n))))))), UL.nat_add_assoc(1n, 1n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))))))) : {Nat.add(_, 1n+Nat.add(Nat.add(x5, x6), x7)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
90  %Equal.sym(Nat, Nat.add(Nat.add(x5, x6), x7), Nat.add(x5, Nat.add(x6, x7)), UL.nat_add_assoc(x5, x6, x7)) : {Nat.add(Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))))), Nat.add(1n, _)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
91  %Equal.sym(Nat, Nat.add(Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(2n, Nat.add(Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n))))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))), UL.nat_add_assoc(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n))))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))) : {_ == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
92  %Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n))))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(x0, Nat.add(Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))), UL.nat_add_assoc(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))) : {Nat.add(2n, _) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
93  %Equal.sym(Nat, Nat.add(Nat.add(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(x1, Nat.add(Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))), UL.nat_add_assoc(x1, Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))) : {Nat.add(2n, Nat.add(x0, _)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
94  %Equal.sym(Nat, Nat.add(Nat.add(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(x2, Nat.add(Nat.add(x4, U.U32Nat.dbl(x3, 1n)), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))), UL.nat_add_assoc(x2, Nat.add(x4, U.U32Nat.dbl(x3, 1n)), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))) : {Nat.add(2n, Nat.add(x0, Nat.add(x1, _))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
95  %Equal.sym(Nat, Nat.add(Nat.add(x4, U.U32Nat.dbl(x3, 1n)), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(x4, Nat.add(U.U32Nat.dbl(x3, 1n), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))), UL.nat_add_assoc(x4, U.U32Nat.dbl(x3, 1n), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7))))) : {Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, _)))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
96  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x3, 1n), Nat.add(1n, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(1n, Nat.add(U.U32Nat.dbl(x3, 1n), Nat.add(x5, Nat.add(x6, x7)))), UL.nat_add_left_comm(U.U32Nat.dbl(x3, 1n), 1n, Nat.add(x5, Nat.add(x6, x7)))) : {Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, _))))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
97  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x3, 1n), Nat.add(x5, Nat.add(x6, x7))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x3, 1n), Nat.add(x6, x7))), UL.nat_add_left_comm(U.U32Nat.dbl(x3, 1n), x5, Nat.add(x6, x7))) : {Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(1n, _)))))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
98  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x3, 1n), Nat.add(x6, x7)), Nat.add(x6, Nat.add(U.U32Nat.dbl(x3, 1n), x7)), UL.nat_add_left_comm(U.U32Nat.dbl(x3, 1n), x6, x7)) : {Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(1n, Nat.add(x5, _))))))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
99  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x3, 1n), x7), Nat.add(x7, U.U32Nat.dbl(x3, 1n)), UL.nat_add_comm(U.U32Nat.dbl(x3, 1n), x7)) : {Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(1n, Nat.add(x5, Nat.add(x6, _)))))))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
100  %Equal.sym(Nat, Nat.add(x4, Nat.add(1n, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))), Nat.add(1n, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))), UL.nat_add_left_comm(x4, 1n, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))) : {Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, _)))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
101  %Equal.sym(Nat, Nat.add(x2, Nat.add(1n, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))))), Nat.add(1n, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))))), UL.nat_add_left_comm(x2, 1n, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))))) : {Nat.add(2n, Nat.add(x0, Nat.add(x1, _))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
102  %Equal.sym(Nat, Nat.add(x1, Nat.add(1n, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))))), Nat.add(1n, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))))), UL.nat_add_left_comm(x1, 1n, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))))) : {Nat.add(2n, Nat.add(x0, _)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
103  %Equal.sym(Nat, Nat.add(x0, Nat.add(1n, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))))))), Nat.add(1n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))))))), UL.nat_add_left_comm(x0, 1n, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))))))) : {Nat.add(2n, _) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
104  %Equal.sym(Nat, Nat.add(2n, Nat.add(1n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))))))), Nat.add(1n, Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))))))), UL.nat_add_left_comm(2n, 1n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))))))) : {_ == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
105  %Equal.sym(Nat, Nat.add(1n, Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))))))), Nat.add(Nat.add(1n, 2n), Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))))))), Equal.sym(Nat, Nat.add(Nat.add(1n, 2n), Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))))))), Nat.add(1n, Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))))))), UL.nat_add_assoc(1n, 2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))))))))) : {_ == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
106  %Equal.sym(Nat, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))), Nat.add(x5, Nat.add(x4, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))), Equal.sym(Nat, Nat.add(x5, Nat.add(x4, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))), Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))), UL.nat_add_left_comm(x5, x4, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))))) : {Nat.add(3n, Nat.add(x0, Nat.add(x1, Nat.add(x2, _)))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
107  %Equal.sym(Nat, Nat.add(x4, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))), Nat.add(x6, Nat.add(x4, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))), Equal.sym(Nat, Nat.add(x6, Nat.add(x4, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))), Nat.add(x4, Nat.add(x6, Nat.add(x7, U.U32Nat.dbl(x3, 1n)))), UL.nat_add_left_comm(x6, x4, Nat.add(x7, U.U32Nat.dbl(x3, 1n))))) : {Nat.add(3n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, _))))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
108  %Equal.sym(Nat, Nat.add(x4, Nat.add(x7, U.U32Nat.dbl(x3, 1n))), Nat.add(x7, Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Equal.sym(Nat, Nat.add(x7, Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(x4, Nat.add(x7, U.U32Nat.dbl(x3, 1n))), UL.nat_add_left_comm(x7, x4, U.U32Nat.dbl(x3, 1n)))) : {Nat.add(3n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, _)))))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
109  %Equal.sym(Nat, Nat.add(x6, Nat.add(x7, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), Nat.add(Nat.add(x6, x7), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Equal.sym(Nat, Nat.add(Nat.add(x6, x7), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(x6, Nat.add(x7, Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), UL.nat_add_assoc(x6, x7, Nat.add(x4, U.U32Nat.dbl(x3, 1n))))) : {Nat.add(3n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, _))))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
110  %Equal.sym(Nat, Nat.add(x5, Nat.add(Nat.add(x6, x7), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), Nat.add(Nat.add(x5, Nat.add(x6, x7)), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Equal.sym(Nat, Nat.add(Nat.add(x5, Nat.add(x6, x7)), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(x5, Nat.add(Nat.add(x6, x7), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), UL.nat_add_assoc(x5, Nat.add(x6, x7), Nat.add(x4, U.U32Nat.dbl(x3, 1n))))) : {Nat.add(3n, Nat.add(x0, Nat.add(x1, Nat.add(x2, _)))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
111  %Equal.sym(Nat, Nat.add(x2, Nat.add(Nat.add(x5, Nat.add(x6, x7)), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), Nat.add(Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Equal.sym(Nat, Nat.add(Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(x2, Nat.add(Nat.add(x5, Nat.add(x6, x7)), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), UL.nat_add_assoc(x2, Nat.add(x5, Nat.add(x6, x7)), Nat.add(x4, U.U32Nat.dbl(x3, 1n))))) : {Nat.add(3n, Nat.add(x0, Nat.add(x1, _))) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
112  %Equal.sym(Nat, Nat.add(x1, Nat.add(Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), Nat.add(Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Equal.sym(Nat, Nat.add(Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(x1, Nat.add(Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), UL.nat_add_assoc(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))))) : {Nat.add(3n, Nat.add(x0, _)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
113  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), Nat.add(Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(x0, Nat.add(Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), UL.nat_add_assoc(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))))) : {Nat.add(3n, _) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
114  %Equal.sym(Nat, Nat.add(3n, Nat.add(Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), Nat.add(Nat.add(3n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Equal.sym(Nat, Nat.add(Nat.add(3n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))), Nat.add(3n, Nat.add(Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))), Nat.add(x4, U.U32Nat.dbl(x3, 1n)))), UL.nat_add_assoc(3n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))), Nat.add(x4, U.U32Nat.dbl(x3, 1n))))) : {_ == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
115  %Equal.sym(Nat, Nat.add(x4, U.U32Nat.dbl(x3, 1n)), Nat.add(U.U32Nat.dbl(x3, 1n), x4), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x3, 1n), x4), Nat.add(x4, U.U32Nat.dbl(x3, 1n)), UL.nat_add_comm(U.U32Nat.dbl(x3, 1n), x4))) : {Nat.add(Nat.add(3n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), _) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
116  %Equal.sym(Nat, Nat.add(Nat.add(1n, 2n), Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), Nat.add(1n, Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))))), Equal.sym(Nat, Nat.add(1n, Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))))), Nat.add(Nat.add(1n, 2n), Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), Equal.sym(Nat, Nat.add(Nat.add(1n, 2n), Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), Nat.add(1n, Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))))), UL.nat_add_assoc(1n, 2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))))))) : {Nat.add(_, Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
117  %Equal.sym(Nat, Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), Nat.add(x0, Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), Equal.sym(Nat, Nat.add(x0, Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), Nat.add(2n, Nat.add(x0, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7)))))), UL.nat_add_left_comm(x0, 2n, Nat.add(x1, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))))))) : {Nat.add(Nat.add(1n, _), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
118  %Equal.sym(Nat, Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))), Nat.add(x5, Nat.add(x2, Nat.add(x6, x7))), Equal.sym(Nat, Nat.add(x5, Nat.add(x2, Nat.add(x6, x7))), Nat.add(x2, Nat.add(x5, Nat.add(x6, x7))), UL.nat_add_left_comm(x5, x2, Nat.add(x6, x7)))) : {Nat.add(Nat.add(1n, Nat.add(x0, Nat.add(2n, Nat.add(x1, _)))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
119  %Equal.sym(Nat, Nat.add(x1, Nat.add(x5, Nat.add(x2, Nat.add(x6, x7)))), Nat.add(x5, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))), Equal.sym(Nat, Nat.add(x5, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))), Nat.add(x1, Nat.add(x5, Nat.add(x2, Nat.add(x6, x7)))), UL.nat_add_left_comm(x5, x1, Nat.add(x2, Nat.add(x6, x7))))) : {Nat.add(Nat.add(1n, Nat.add(x0, Nat.add(2n, _))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
120  %Equal.sym(Nat, Nat.add(2n, Nat.add(x5, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), Nat.add(x5, Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), Equal.sym(Nat, Nat.add(x5, Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), Nat.add(2n, Nat.add(x5, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), UL.nat_add_left_comm(x5, 2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))))) : {Nat.add(Nat.add(1n, Nat.add(x0, _)), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
121  %Equal.sym(Nat, Nat.add(x0, Nat.add(x5, Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))))), Nat.add(Nat.add(x0, x5), Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), Equal.sym(Nat, Nat.add(Nat.add(x0, x5), Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), Nat.add(x0, Nat.add(x5, Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))))), UL.nat_add_assoc(x0, x5, Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))))) : {Nat.add(Nat.add(1n, _), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
122  %Equal.sym(Nat, Nat.add(1n, Nat.add(Nat.add(x0, x5), Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))))), Nat.add(Nat.add(1n, Nat.add(x0, x5)), Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), Equal.sym(Nat, Nat.add(Nat.add(1n, Nat.add(x0, x5)), Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), Nat.add(1n, Nat.add(Nat.add(x0, x5), Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))))), UL.nat_add_assoc(1n, Nat.add(x0, x5), Nat.add(2n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))))) : {Nat.add(_, Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
123  %Equal.sym(Nat, Nat.add(Nat.add(1n, 1n), Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))), Nat.add(1n, Nat.add(1n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), Equal.sym(Nat, Nat.add(1n, Nat.add(1n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), Nat.add(Nat.add(1n, 1n), Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))), Equal.sym(Nat, Nat.add(Nat.add(1n, 1n), Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))), Nat.add(1n, Nat.add(1n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))), UL.nat_add_assoc(1n, 1n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7))))))) : {Nat.add(Nat.add(Nat.add(1n, Nat.add(x0, x5)), _), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
124  %Equal.sym(Nat, Nat.add(1n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))), Nat.add(x1, Nat.add(1n, Nat.add(x2, Nat.add(x6, x7)))), Equal.sym(Nat, Nat.add(x1, Nat.add(1n, Nat.add(x2, Nat.add(x6, x7)))), Nat.add(1n, Nat.add(x1, Nat.add(x2, Nat.add(x6, x7)))), UL.nat_add_left_comm(x1, 1n, Nat.add(x2, Nat.add(x6, x7))))) : {Nat.add(Nat.add(Nat.add(1n, Nat.add(x0, x5)), Nat.add(1n, _)), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
125  %Equal.sym(Nat, Nat.add(x2, Nat.add(x6, x7)), Nat.add(x6, Nat.add(x2, x7)), Equal.sym(Nat, Nat.add(x6, Nat.add(x2, x7)), Nat.add(x2, Nat.add(x6, x7)), UL.nat_add_left_comm(x6, x2, x7))) : {Nat.add(Nat.add(Nat.add(1n, Nat.add(x0, x5)), Nat.add(1n, Nat.add(x1, Nat.add(1n, _)))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
126  %Equal.sym(Nat, Nat.add(1n, Nat.add(x6, Nat.add(x2, x7))), Nat.add(x6, Nat.add(1n, Nat.add(x2, x7))), Equal.sym(Nat, Nat.add(x6, Nat.add(1n, Nat.add(x2, x7))), Nat.add(1n, Nat.add(x6, Nat.add(x2, x7))), UL.nat_add_left_comm(x6, 1n, Nat.add(x2, x7)))) : {Nat.add(Nat.add(Nat.add(1n, Nat.add(x0, x5)), Nat.add(1n, Nat.add(x1, _))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
127  %Equal.sym(Nat, Nat.add(x1, Nat.add(x6, Nat.add(1n, Nat.add(x2, x7)))), Nat.add(Nat.add(x1, x6), Nat.add(1n, Nat.add(x2, x7))), Equal.sym(Nat, Nat.add(Nat.add(x1, x6), Nat.add(1n, Nat.add(x2, x7))), Nat.add(x1, Nat.add(x6, Nat.add(1n, Nat.add(x2, x7)))), UL.nat_add_assoc(x1, x6, Nat.add(1n, Nat.add(x2, x7))))) : {Nat.add(Nat.add(Nat.add(1n, Nat.add(x0, x5)), Nat.add(1n, _)), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
128  %Equal.sym(Nat, Nat.add(1n, Nat.add(Nat.add(x1, x6), Nat.add(1n, Nat.add(x2, x7)))), Nat.add(Nat.add(1n, Nat.add(x1, x6)), Nat.add(1n, Nat.add(x2, x7))), Equal.sym(Nat, Nat.add(Nat.add(1n, Nat.add(x1, x6)), Nat.add(1n, Nat.add(x2, x7))), Nat.add(1n, Nat.add(Nat.add(x1, x6), Nat.add(1n, Nat.add(x2, x7)))), UL.nat_add_assoc(1n, Nat.add(x1, x6), Nat.add(1n, Nat.add(x2, x7))))) : {Nat.add(Nat.add(Nat.add(1n, Nat.add(x0, x5)), _), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
129  %Equal.sym(Nat, Nat.add(1n, Nat.add(x2, x7)), Nat.add(x2, Nat.add(1n, x7)), Equal.sym(Nat, Nat.add(x2, Nat.add(1n, x7)), Nat.add(1n, Nat.add(x2, x7)), UL.nat_add_left_comm(x2, 1n, x7))) : {Nat.add(Nat.add(Nat.add(1n, Nat.add(x0, x5)), Nat.add(Nat.add(1n, Nat.add(x1, x6)), _)), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
130  %Equal.sym(Nat, Nat.add(1n, Nat.add(x1, x6)), Nat.add(x1, Nat.add(1n, x6)), Equal.sym(Nat, Nat.add(x1, Nat.add(1n, x6)), Nat.add(1n, Nat.add(x1, x6)), UL.nat_add_left_comm(x1, 1n, x6))) : {Nat.add(Nat.add(Nat.add(1n, Nat.add(x0, x5)), Nat.add(_, Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
131  %Equal.sym(Nat, Nat.add(1n, Nat.add(x0, x5)), Nat.add(x0, Nat.add(1n, x5)), Equal.sym(Nat, Nat.add(x0, Nat.add(1n, x5)), Nat.add(1n, Nat.add(x0, x5)), UL.nat_add_left_comm(x0, 1n, x5))) : {Nat.add(Nat.add(_, Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) == Nat.add(Nat.add(Nat.add(x0, 1n+x5), Nat.add(Nat.add(x1, 1n+x6), Nat.add(x2, 1n+x7))), Nat.add(U.U32Nat.dbl(x3, 1n), x4)) : Nat}
132  {==}
133
134def wr.m2(+x0: Nat, +x1: Nat) -> {Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n))), Nat.add(U.U32Nat.dbl(x0, 1n), x1)) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}:
135  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n)), Nat.double(U.U32Nat.dbl(x0, 1n)), Equal.sym(Nat, Nat.double(U.U32Nat.dbl(x0, 1n)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n)), UL.nat_double(U.U32Nat.dbl(x0, 1n)))) : {Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), _), Nat.add(U.U32Nat.dbl(x0, 1n), x1)) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
136  %Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(x0, 1n)), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), UL.dbl_comm(1n, x0, 1n)) : {Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), _), Nat.add(U.U32Nat.dbl(x0, 1n), x1)) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
137  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), x1), Nat.add(x1, U.U32Nat.dbl(x0, 1n)), UL.nat_add_comm(U.U32Nat.dbl(x0, 1n), x1)) : {Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), _) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
138  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), Nat.add(x1, U.U32Nat.dbl(x0, 1n))), Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), Nat.add(x1, U.U32Nat.dbl(x0, 1n)))), UL.nat_add_assoc(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), Nat.add(x1, U.U32Nat.dbl(x0, 1n)))) : {_ == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
139  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), Nat.add(x1, U.U32Nat.dbl(x0, 1n))), Nat.add(x1, Nat.add(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), U.U32Nat.dbl(x0, 1n))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), x1, U.U32Nat.dbl(x0, 1n))) : {Nat.add(U.U32Nat.dbl(x0, 1n), _) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
140  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), U.U32Nat.dbl(x0, 1n)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), UL.nat_add_comm(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), U.U32Nat.dbl(x0, 1n))) : {Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(x1, _)) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
141  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(x1, Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))))), Nat.add(x1, Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))))), UL.nat_add_left_comm(U.U32Nat.dbl(x0, 1n), x1, Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))))) : {_ == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
142  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)))), Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n)), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n)), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), Nat.add(U.U32Nat.dbl(x0, 1n), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)))), UL.nat_add_assoc(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))))) : {Nat.add(x1, _) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
143  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n)), Nat.double(U.U32Nat.dbl(x0, 1n)), Equal.sym(Nat, Nat.double(U.U32Nat.dbl(x0, 1n)), Nat.add(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n)), UL.nat_double(U.U32Nat.dbl(x0, 1n)))) : {Nat.add(x1, Nat.add(_, U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)))) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
144  %Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(x0, 1n)), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), UL.dbl_comm(1n, x0, 1n)) : {Nat.add(x1, Nat.add(_, U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)))) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
145  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), Nat.double(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), Equal.sym(Nat, Nat.double(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), Nat.add(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n)), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), UL.nat_double(U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))))) : {Nat.add(x1, _) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
146  %Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, 1n))), U.U32Nat.dbl(x0, U.U32Nat.dbl(1n, U.U32Nat.dbl(1n, 1n))), UL.dbl_comm(1n, x0, U.U32Nat.dbl(1n, 1n))) : {Nat.add(x1, _) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
147  %Equal.sym(Nat, U.U32Nat.dbl(1n, U.U32Nat.dbl(1n, 1n)), U.U32Nat.dbl(Nat.add(1n, 1n), 1n), UL.dbl_dbl(1n, 1n, 1n)) : {Nat.add(x1, U.U32Nat.dbl(x0, _)) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
148  %Equal.sym(Nat, U.U32Nat.dbl(x0, U.U32Nat.dbl(2n, 1n)), U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n)), Equal.sym(Nat, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n)), U.U32Nat.dbl(x0, U.U32Nat.dbl(2n, 1n)), UL.dbl_comm(2n, x0, 1n))) : {Nat.add(x1, _) == Nat.add(x1, U.U32Nat.dbl(2n, U.U32Nat.dbl(x0, 1n))) : Nat}
149  {==}
150
151def wr.m3(+x0: Nat) -> {Nat.mul(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n)) == U.U32Nat.dbl(x0, U.U32Nat.dbl(x0, 1n)) : Nat}:
152  %Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(x0, 1n), U.U32Nat.dbl(x0, 1n)), U.U32Nat.dbl(x0, Nat.mul(1n, U.U32Nat.dbl(x0, 1n))), UL.dbl_mul_l(x0, 1n, U.U32Nat.dbl(x0, 1n))) : {_ == U.U32Nat.dbl(x0, U.U32Nat.dbl(x0, 1n)) : Nat}
153  %Equal.sym(Nat, Nat.mul(1n, U.U32Nat.dbl(x0, 1n)), U.U32Nat.dbl(x0, Nat.mul(1n, 1n)), UL.dbl_mul_r(x0, 1n, 1n)) : {U.U32Nat.dbl(x0, _) == U.U32Nat.dbl(x0, U.U32Nat.dbl(x0, 1n)) : Nat}
154  {==}
155
156def wm.s3(+h: Nat, +n: Nat, +x: Nat, +y: Nat, +z: Nat, +en: {Nat.add(h, h) == n : Nat}, +h2: {Nat.is_le(2n, h) == True{} : Bool}, +hx: {Nat.is_lt(x, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +hy: {Nat.is_lt(y, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +hz: {Nat.is_lt(z, U.U32Nat.dbl(h, 1n)) == True{} : Bool}) -> {Nat.is_lt(Nat.add(Nat.add(x, y), z), U.U32Nat.dbl(n, 1n)) == True{} : Bool}:
157  Equal.trans(Bool, Nat.is_lt(Nat.add(Nat.add(x, y), z), U.U32Nat.dbl(n, 1n)), Nat.is_lt(Nat.add(Nat.add(x, y), z), Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z))), True{}, Equal.sym(Bool, Nat.is_lt(Nat.add(Nat.add(x, y), z), Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z))), Nat.is_lt(Nat.add(Nat.add(x, y), z), U.U32Nat.dbl(n, 1n)), Equal.cong(Nat, Bool, zz => Nat.is_lt(Nat.add(Nat.add(x, y), z), zz), Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), U.U32Nat.dbl(n, 1n), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), U.U32Nat.dbl(n, 1n), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), U.U32Nat.dbl(h, 1n))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), U.U32Nat.dbl(h, 1n))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), 1n+x), Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), wr.m1(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), h, Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), x, y, z), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(zz, Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), 1n+x), U.U32Nat.dbl(h, 1n), UL.nat_lt_witness(x, U.U32Nat.dbl(h, 1n), hx))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(zz, Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), U.U32Nat.dbl(h, 1n), UL.nat_lt_witness(y, U.U32Nat.dbl(h, 1n), hy))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), zz)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z), U.U32Nat.dbl(h, 1n), UL.nat_lt_witness(z, U.U32Nat.dbl(h, 1n), hz))), wr.m2(h, Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), UL.nat_le_witness(U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n)), Nat.is_le(U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n)), zz), U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en)), UL.dbl_le_exp(2n, h, U.U32Nat.dbl(h, 1n), h2)))))), UL.nat_lt_add(Nat.add(Nat.add(x, y), z), 2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n)))))))
158
159# lo + 2^h hi < 2^n for lo, hi < 2^h
160def wm.low2(+h: Nat, +n: Nat, +x: Nat, +y: Nat, +en: {Nat.add(h, h) == n : Nat}, +hx: {Nat.is_lt(x, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +hy: {Nat.is_lt(y, U.U32Nat.dbl(h, 1n)) == True{} : Bool}) -> {Nat.is_lt(Nat.add(x, U.U32Nat.dbl(h, y)), U.U32Nat.dbl(n, 1n)) == True{} : Bool}:
161  Equal.trans(Bool, Nat.is_lt(Nat.add(x, U.U32Nat.dbl(h, y)), U.U32Nat.dbl(n, 1n)), Nat.is_lt(Nat.add(x, U.U32Nat.dbl(h, y)), P.wv.Q(h, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(Nat.add(x, U.U32Nat.dbl(h, y)), zz), U.U32Nat.dbl(n, 1n), P.wv.Q(h, 1n), Equal.sym(Nat, P.wv.Q(h, 1n), U.U32Nat.dbl(n, 1n), Equal.sym(Nat, U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en)))), P.wv.val_lt2(h, x, y, hx, hy))
162
163# x, y < 2^h: x y < 2^n
164def wm.pl(+h: Nat, +n: Nat, +x: Nat, +y: Nat, +en: {Nat.add(h, h) == n : Nat}, +hx: {Nat.is_lt(x, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +hy: {Nat.is_lt(y, U.U32Nat.dbl(h, 1n)) == True{} : Bool}) -> {Nat.is_lt(Nat.mul(x, y), U.U32Nat.dbl(n, 1n)) == True{} : Bool}:
165  Equal.trans(Bool, Nat.is_lt(Nat.mul(x, y), U.U32Nat.dbl(n, 1n)), Nat.is_lt(Nat.mul(x, y), Nat.mul(U.U32Nat.dbl(h, 1n), U.U32Nat.dbl(h, 1n))), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(Nat.mul(x, y), zz), U.U32Nat.dbl(n, 1n), Nat.mul(U.U32Nat.dbl(h, 1n), U.U32Nat.dbl(h, 1n)), Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(h, 1n), U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), Equal.trans(Nat, Nat.mul(U.U32Nat.dbl(h, 1n), U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), wr.m3(h), Equal.sym(Nat, U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en))))), UL.nat_mul_lt(x, y, U.U32Nat.dbl(h, 1n), U.U32Nat.dbl(h, 1n), hx, hy))
166
167def wr.m4(+x0: Nat, +x1: Nat, +x2: Nat) -> {Nat.add(x0, Nat.add(x1, x2)) == Nat.add(Nat.add(x1, x2), x0) : Nat}:
168  %Equal.sym(Nat, Nat.add(x0, Nat.add(x1, x2)), Nat.add(x1, Nat.add(x0, x2)), Equal.sym(Nat, Nat.add(x1, Nat.add(x0, x2)), Nat.add(x0, Nat.add(x1, x2)), UL.nat_add_left_comm(x1, x0, x2))) : {_ == Nat.add(Nat.add(x1, x2), x0) : Nat}
169  %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(x1, _) == Nat.add(Nat.add(x1, x2), x0) : Nat}
170  %Equal.sym(Nat, Nat.add(x1, Nat.add(x2, x0)), Nat.add(Nat.add(x1, x2), x0), Equal.sym(Nat, Nat.add(Nat.add(x1, x2), x0), Nat.add(x1, Nat.add(x2, x0)), UL.nat_add_assoc(x1, x2, x0))) : {_ == Nat.add(Nat.add(x1, x2), x0) : Nat}
171  {==}
172
173def wr.m5(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat) -> {Nat.mul(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(x3, U.U32Nat.dbl(x1, x4))) == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}:
174  %Equal.sym(Nat, Nat.mul(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(x3, U.U32Nat.dbl(x1, x4))), Nat.add(Nat.mul(x0, Nat.add(x3, U.U32Nat.dbl(x1, x4))), Nat.mul(U.U32Nat.dbl(x1, x2), Nat.add(x3, U.U32Nat.dbl(x1, x4)))), UL.nat_add_mul(x0, U.U32Nat.dbl(x1, x2), Nat.add(x3, U.U32Nat.dbl(x1, x4)))) : {_ == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
175  %Equal.sym(Nat, Nat.mul(x0, Nat.add(x3, U.U32Nat.dbl(x1, x4))), Nat.add(Nat.mul(x0, x3), Nat.mul(x0, U.U32Nat.dbl(x1, x4))), UL.nat_mul_add(x0, x3, U.U32Nat.dbl(x1, x4))) : {Nat.add(_, Nat.mul(U.U32Nat.dbl(x1, x2), Nat.add(x3, U.U32Nat.dbl(x1, x4)))) == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
176  %Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(x1, x2), Nat.add(x3, U.U32Nat.dbl(x1, x4))), Nat.add(Nat.mul(U.U32Nat.dbl(x1, x2), x3), Nat.mul(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, x4))), UL.nat_mul_add(U.U32Nat.dbl(x1, x2), x3, U.U32Nat.dbl(x1, x4))) : {Nat.add(Nat.add(Nat.mul(x0, x3), Nat.mul(x0, U.U32Nat.dbl(x1, x4))), _) == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
177  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x3), Nat.mul(x0, U.U32Nat.dbl(x1, x4))), Nat.add(Nat.mul(U.U32Nat.dbl(x1, x2), x3), Nat.mul(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, x4)))), Nat.add(Nat.mul(x0, x3), Nat.add(Nat.mul(x0, U.U32Nat.dbl(x1, x4)), Nat.add(Nat.mul(U.U32Nat.dbl(x1, x2), x3), Nat.mul(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, x4))))), UL.nat_add_assoc(Nat.mul(x0, x3), Nat.mul(x0, U.U32Nat.dbl(x1, x4)), Nat.add(Nat.mul(U.U32Nat.dbl(x1, x2), x3), Nat.mul(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, x4))))) : {_ == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
178  %Equal.sym(Nat, Nat.mul(x0, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, Nat.mul(x0, x4)), UL.dbl_mul_r(x1, x0, x4)) : {Nat.add(Nat.mul(x0, x3), Nat.add(_, Nat.add(Nat.mul(U.U32Nat.dbl(x1, x2), x3), Nat.mul(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, x4))))) == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
179  %Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(x1, x2), x3), U.U32Nat.dbl(x1, Nat.mul(x2, x3)), UL.dbl_mul_l(x1, x2, x3)) : {Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), Nat.add(_, Nat.mul(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, x4))))) == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
180  %Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, Nat.mul(x2, U.U32Nat.dbl(x1, x4))), UL.dbl_mul_l(x1, x2, U.U32Nat.dbl(x1, x4))) : {Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), Nat.add(U.U32Nat.dbl(x1, Nat.mul(x2, x3)), _))) == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
181  %Equal.sym(Nat, Nat.mul(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, Nat.mul(x2, x4)), UL.dbl_mul_r(x1, x2, x4)) : {Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), Nat.add(U.U32Nat.dbl(x1, Nat.mul(x2, x3)), U.U32Nat.dbl(x1, _)))) == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
182  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), Nat.add(U.U32Nat.dbl(x1, Nat.mul(x2, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), U.U32Nat.dbl(x1, Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4)))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), U.U32Nat.dbl(x1, Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4)))), Nat.add(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), Nat.add(U.U32Nat.dbl(x1, Nat.mul(x2, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), U.U32Nat.dbl(x1, Nat.mul(x2, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4)))))) : {Nat.add(Nat.mul(x0, x3), _) == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
183  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), U.U32Nat.dbl(x1, Nat.mul(x2, x3))), U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), Nat.add(U.U32Nat.dbl(x1, Nat.mul(x0, x4)), U.U32Nat.dbl(x1, Nat.mul(x2, x3))), UL.dbl_add(x1, Nat.mul(x0, x4), Nat.mul(x2, x3)))) : {Nat.add(Nat.mul(x0, x3), Nat.add(_, U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) == Nat.add(Nat.mul(x0, x3), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.mul(x0, x4), Nat.mul(x2, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x2, x4))))) : Nat}
184  {==}
185
186def wr.m6(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat, +x5: Nat, +x6: Nat, +x7: Nat) -> {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x3, U.U32Nat.dbl(x1, x4)), Nat.add(x5, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}:
187  %Equal.sym(Nat, Nat.add(Nat.add(x3, U.U32Nat.dbl(x1, x4)), Nat.add(x5, U.U32Nat.dbl(x1, x6))), Nat.add(x3, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(x5, U.U32Nat.dbl(x1, x6)))), UL.nat_add_assoc(x3, U.U32Nat.dbl(x1, x4), Nat.add(x5, U.U32Nat.dbl(x1, x6)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, _), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
188  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(x5, U.U32Nat.dbl(x1, x6))), Nat.add(x5, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x6))), UL.nat_add_left_comm(U.U32Nat.dbl(x1, x4), x5, U.U32Nat.dbl(x1, x6))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, _)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
189  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x3, Nat.add(x5, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x6))))), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, Nat.add(x5, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x6))))), UL.dbl_add(x1, x3, Nat.add(x5, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x6))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(_, U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
190  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x5, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x6)))), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x6)))), UL.dbl_add(x1, x5, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x6)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), _), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
191  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x6))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x6))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x5), _)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
192  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), _) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
193  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, x3), _)) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
194  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))), UL.nat_add_assoc(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x5), _))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
195  %Equal.sym(Nat, Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))))))), Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))))))), UL.nat_add_assoc(x0, U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))))))) : {_ == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
196  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))))), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))))))) : {Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), _)) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
197  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))))), Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7)))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))))))) : {Nat.add(x0, _) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
198  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x7))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7)))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), _))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
199  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7)))), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7)))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7)))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7))))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5))), _)) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
200  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7)), U.U32Nat.dbl(x1, Nat.add(x6, x7)), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x6, x7)), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, x7)), UL.dbl_add(x1, x6, x7))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), _)))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
201  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, Nat.add(x6, x7))), U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x6, x7))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x6, x7))), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, Nat.add(x6, x7))), UL.dbl_add(x1, x4, Nat.add(x6, x7)))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, _))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
202  %Equal.sym(Nat, Nat.add(x6, x7), Nat.add(x7, x6), Equal.sym(Nat, Nat.add(x7, x6), Nat.add(x6, x7), UL.nat_add_comm(x7, x6))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x4, _))))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
203  %Equal.sym(Nat, Nat.add(x4, Nat.add(x7, x6)), Nat.add(Nat.add(x4, x7), x6), Equal.sym(Nat, Nat.add(Nat.add(x4, x7), x6), Nat.add(x4, Nat.add(x7, x6)), UL.nat_add_assoc(x4, x7, x6))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, _)))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
204  %Equal.sym(Nat, Nat.add(x4, x7), Nat.add(x7, x4), Equal.sym(Nat, Nat.add(x7, x4), Nat.add(x4, x7), UL.nat_add_comm(x7, x4))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(_, x6))))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
205  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, Nat.add(x3, x5)), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x3, x5)), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x5)), UL.dbl_add(x1, x3, x5))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), _), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
206  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, Nat.add(x3, x5))), U.U32Nat.dbl(x1, Nat.add(x2, Nat.add(x3, x5))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x2, Nat.add(x3, x5))), Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, Nat.add(x3, x5))), UL.dbl_add(x1, x2, Nat.add(x3, x5)))) : {Nat.add(x0, Nat.add(_, U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
207  %Equal.sym(Nat, Nat.add(x2, Nat.add(x3, x5)), Nat.add(Nat.add(x2, x3), x5), Equal.sym(Nat, Nat.add(Nat.add(x2, x3), x5), Nat.add(x2, Nat.add(x3, x5)), UL.nat_add_assoc(x2, x3, x5))) : {Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, _), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) == Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x7, x4), x6))))) : Nat}
208  {==}
209
210def wr.m7(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat, +x5: Nat, +x6: Nat) -> {Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, Nat.add(x2, U.U32Nat.dbl(x1, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x4, x5), x6))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}:
211  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x2, U.U32Nat.dbl(x1, x3))), Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3))), UL.dbl_add(x1, x2, U.U32Nat.dbl(x1, x3))) : {Nat.add(x0, Nat.add(_, U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x4, x5), x6))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
212  %Equal.sym(Nat, Nat.add(Nat.add(x4, x5), x6), Nat.add(x4, Nat.add(x5, x6)), UL.nat_add_assoc(x4, x5, x6)) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, _)))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
213  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x5, x6))), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, Nat.add(x5, x6))), UL.dbl_add(x1, x4, Nat.add(x5, x6))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3))), U.U32Nat.dbl(x1, _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
214  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x5, x6)), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)), UL.dbl_add(x1, x5, x6)) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3))), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), _)))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
215  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3))), _)) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
216  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))) : {Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
217  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))))), Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))))) : {Nat.add(x0, _) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
218  %Equal.sym(Nat, Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))))))), Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))))), Equal.sym(Nat, Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))))), Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))))))), UL.nat_add_assoc(x0, U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))))))) : {_ == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
219  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
220  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), _)) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
221  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))))), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), _) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
222  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, Nat.add(x5, x6)), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x5, x6)), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)), UL.dbl_add(x1, x5, x6))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), _)))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
223  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x5, x6))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x5, x6))), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, Nat.add(x5, x6))), UL.dbl_add(x1, x4, Nat.add(x5, x6)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
224  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x5, x6)))), U.U32Nat.dbl(x1, Nat.add(x3, Nat.add(x4, Nat.add(x5, x6)))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x3, Nat.add(x4, Nat.add(x5, x6)))), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x5, x6)))), UL.dbl_add(x1, x3, Nat.add(x4, Nat.add(x5, x6))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, _)) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
225  %Equal.sym(Nat, Nat.add(x3, Nat.add(x4, Nat.add(x5, x6))), Nat.add(x4, Nat.add(x3, Nat.add(x5, x6))), Equal.sym(Nat, Nat.add(x4, Nat.add(x3, Nat.add(x5, x6))), Nat.add(x3, Nat.add(x4, Nat.add(x5, x6))), UL.nat_add_left_comm(x4, x3, Nat.add(x5, x6)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
226  %Equal.sym(Nat, Nat.add(x3, Nat.add(x5, x6)), Nat.add(x5, Nat.add(x3, x6)), Equal.sym(Nat, Nat.add(x5, Nat.add(x3, x6)), Nat.add(x3, Nat.add(x5, x6)), UL.nat_add_left_comm(x5, x3, x6))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x4, _)))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
227  %Equal.sym(Nat, Nat.add(x3, x6), Nat.add(x6, x3), Equal.sym(Nat, Nat.add(x6, x3), Nat.add(x3, x6), UL.nat_add_comm(x6, x3))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x5, _))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
228  %Equal.sym(Nat, Nat.add(x5, Nat.add(x6, x3)), Nat.add(Nat.add(x5, x6), x3), Equal.sym(Nat, Nat.add(Nat.add(x5, x6), x3), Nat.add(x5, Nat.add(x6, x3)), UL.nat_add_assoc(x5, x6, x3))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x4, _)))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
229  %Equal.sym(Nat, Nat.add(x4, Nat.add(Nat.add(x5, x6), x3)), Nat.add(Nat.add(x4, Nat.add(x5, x6)), x3), Equal.sym(Nat, Nat.add(Nat.add(x4, Nat.add(x5, x6)), x3), Nat.add(x4, Nat.add(Nat.add(x5, x6), x3)), UL.nat_add_assoc(x4, Nat.add(x5, x6), x3))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
230  %Equal.sym(Nat, Nat.add(x4, Nat.add(x5, x6)), Nat.add(Nat.add(x4, x5), x6), Equal.sym(Nat, Nat.add(Nat.add(x4, x5), x6), Nat.add(x4, Nat.add(x5, x6)), UL.nat_add_assoc(x4, x5, x6))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(_, x3)))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(Nat.add(x4, x5), x6), x3)))) : Nat}
231  {==}
232
233def wr.m8(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(Nat.add(x0, x1), Nat.add(x2, x3)) == Nat.add(Nat.add(Nat.add(x2, x3), x0), x1) : Nat}:
234  %Equal.sym(Nat, Nat.add(Nat.add(x0, x1), Nat.add(x2, x3)), Nat.add(x0, Nat.add(x1, Nat.add(x2, x3))), UL.nat_add_assoc(x0, x1, Nat.add(x2, x3))) : {_ == Nat.add(Nat.add(Nat.add(x2, x3), x0), x1) : Nat}
235  %Equal.sym(Nat, Nat.add(x1, Nat.add(x2, x3)), Nat.add(x2, Nat.add(x1, x3)), Equal.sym(Nat, Nat.add(x2, Nat.add(x1, x3)), Nat.add(x1, Nat.add(x2, x3)), UL.nat_add_left_comm(x2, x1, x3))) : {Nat.add(x0, _) == Nat.add(Nat.add(Nat.add(x2, x3), x0), x1) : Nat}
236  %Equal.sym(Nat, Nat.add(x1, x3), Nat.add(x3, x1), Equal.sym(Nat, Nat.add(x3, x1), Nat.add(x1, x3), UL.nat_add_comm(x3, x1))) : {Nat.add(x0, Nat.add(x2, _)) == Nat.add(Nat.add(Nat.add(x2, x3), x0), x1) : Nat}
237  %Equal.sym(Nat, Nat.add(x2, Nat.add(x3, x1)), Nat.add(Nat.add(x2, x3), x1), Equal.sym(Nat, Nat.add(Nat.add(x2, x3), x1), Nat.add(x2, Nat.add(x3, x1)), UL.nat_add_assoc(x2, x3, x1))) : {Nat.add(x0, _) == Nat.add(Nat.add(Nat.add(x2, x3), x0), x1) : Nat}
238  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.add(x2, x3), x1)), Nat.add(Nat.add(x0, Nat.add(x2, x3)), x1), Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(x2, x3)), x1), Nat.add(x0, Nat.add(Nat.add(x2, x3), x1)), UL.nat_add_assoc(x0, Nat.add(x2, x3), x1))) : {_ == Nat.add(Nat.add(Nat.add(x2, x3), x0), x1) : Nat}
239  %Equal.sym(Nat, Nat.add(x0, Nat.add(x2, x3)), Nat.add(x2, Nat.add(x0, x3)), 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(_, x1) == Nat.add(Nat.add(Nat.add(x2, x3), x0), x1) : Nat}
240  %Equal.sym(Nat, Nat.add(x0, x3), Nat.add(x3, x0), Equal.sym(Nat, Nat.add(x3, x0), Nat.add(x0, x3), UL.nat_add_comm(x3, x0))) : {Nat.add(Nat.add(x2, _), x1) == Nat.add(Nat.add(Nat.add(x2, x3), x0), x1) : Nat}
241  %Equal.sym(Nat, Nat.add(x2, Nat.add(x3, x0)), Nat.add(Nat.add(x2, x3), x0), Equal.sym(Nat, Nat.add(Nat.add(x2, x3), x0), Nat.add(x2, Nat.add(x3, x0)), UL.nat_add_assoc(x2, x3, x0))) : {Nat.add(_, x1) == Nat.add(Nat.add(Nat.add(x2, x3), x0), x1) : Nat}
242  {==}
243
244def wr.m9(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(x0, Nat.add(Nat.add(x1, x2), x3)) == Nat.add(Nat.add(Nat.add(x1, x2), x3), x0) : Nat}:
245  %Equal.sym(Nat, Nat.add(Nat.add(x1, x2), x3), Nat.add(x1, Nat.add(x2, x3)), UL.nat_add_assoc(x1, x2, x3)) : {Nat.add(x0, _) == Nat.add(Nat.add(Nat.add(x1, x2), x3), x0) : Nat}
246  %Equal.sym(Nat, Nat.add(x0, Nat.add(x1, Nat.add(x2, x3))), Nat.add(x1, Nat.add(x0, Nat.add(x2, x3))), Equal.sym(Nat, Nat.add(x1, Nat.add(x0, Nat.add(x2, x3))), Nat.add(x0, Nat.add(x1, Nat.add(x2, x3))), UL.nat_add_left_comm(x1, x0, Nat.add(x2, x3)))) : {_ == Nat.add(Nat.add(Nat.add(x1, x2), x3), x0) : Nat}
247  %Equal.sym(Nat, Nat.add(x0, Nat.add(x2, x3)), Nat.add(x2, Nat.add(x0, x3)), 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(x1, _) == Nat.add(Nat.add(Nat.add(x1, x2), x3), x0) : Nat}
248  %Equal.sym(Nat, Nat.add(x0, x3), Nat.add(x3, x0), Equal.sym(Nat, Nat.add(x3, x0), Nat.add(x0, x3), UL.nat_add_comm(x3, x0))) : {Nat.add(x1, Nat.add(x2, _)) == Nat.add(Nat.add(Nat.add(x1, x2), x3), x0) : Nat}
249  %Equal.sym(Nat, Nat.add(x2, Nat.add(x3, x0)), Nat.add(Nat.add(x2, x3), x0), Equal.sym(Nat, Nat.add(Nat.add(x2, x3), x0), Nat.add(x2, Nat.add(x3, x0)), UL.nat_add_assoc(x2, x3, x0))) : {Nat.add(x1, _) == Nat.add(Nat.add(Nat.add(x1, x2), x3), x0) : Nat}
250  %Equal.sym(Nat, Nat.add(x1, Nat.add(Nat.add(x2, x3), x0)), Nat.add(Nat.add(x1, Nat.add(x2, x3)), x0), Equal.sym(Nat, Nat.add(Nat.add(x1, Nat.add(x2, x3)), x0), Nat.add(x1, Nat.add(Nat.add(x2, x3), x0)), UL.nat_add_assoc(x1, Nat.add(x2, x3), x0))) : {_ == Nat.add(Nat.add(Nat.add(x1, x2), x3), x0) : Nat}
251  %Equal.sym(Nat, Nat.add(x1, Nat.add(x2, x3)), Nat.add(Nat.add(x1, x2), x3), Equal.sym(Nat, Nat.add(Nat.add(x1, x2), x3), Nat.add(x1, Nat.add(x2, x3)), UL.nat_add_assoc(x1, x2, x3))) : {Nat.add(_, x0) == Nat.add(Nat.add(Nat.add(x1, x2), x3), x0) : Nat}
252  {==}
253
254def wm.k(+n: Nat, +h: Nat, +A: Nat, +B: Nat, +X0: Nat, +X1: Nat, +Y0: Nat, +Y1: Nat, +P00: Nat, +P01: Nat, +P10: Nat, +P11: Nat, +S00: Nat, +L01: Nat, +L10: Nat, +M1: Nat, +MID: Nat, +H01: Nat, +H10: Nat, +HM: Nat, +T1: Nat, +T2: Nat, +HI: Nat, +LO: Nat, +C1: Nat, +C2: Nat, +C3: Nat, +C4: Nat, +C5: Nat, +en: {Nat.add(h, h) == n : Nat}, +h2: {Nat.is_le(2n, h) == True{} : Bool}, +hA: {Nat.is_lt(A, U.U32Nat.dbl(n, 1n)) == True{} : Bool}, +hB: {Nat.is_lt(B, U.U32Nat.dbl(n, 1n)) == True{} : Bool}, +eX0: {X0 == U.U32Nat.low(h, A) : Nat}, +eX1: {X1 == U.U32Nat.high(h, A) : Nat}, +eY0: {Y0 == U.U32Nat.low(h, B) : Nat}, +eY1: {Y1 == U.U32Nat.high(h, B) : Nat}, +e00: {P00 == U.U32Nat.low(n, Nat.mul(X0, Y0)) : Nat}, +e01: {P01 == U.U32Nat.low(n, Nat.mul(X0, Y1)) : Nat}, +e10: {P10 == U.U32Nat.low(n, Nat.mul(X1, Y0)) : Nat}, +e11: {P11 == U.U32Nat.low(n, Nat.mul(X1, Y1)) : Nat}, +eS: {S00 == U.U32Nat.high(h, P00) : Nat}, +eL1: {L01 == U.U32Nat.low(h, P01) : Nat}, +eL2: {L10 == U.U32Nat.low(h, P10) : Nat}, +eM1: {Nat.add(M1, U.U32Nat.dbl(n, C1)) == Nat.add(S00, L01) : Nat}, +eMID: {Nat.add(MID, U.U32Nat.dbl(n, C2)) == Nat.add(M1, L10) : Nat}, +eH1: {H01 == U.U32Nat.high(h, P01) : Nat}, +eH2: {H10 == U.U32Nat.high(h, P10) : Nat}, +eHM: {HM == U.U32Nat.high(h, MID) : Nat}, +eT1: {Nat.add(T1, U.U32Nat.dbl(n, C3)) == Nat.add(P11, H01) : Nat}, +eT2: {Nat.add(T2, U.U32Nat.dbl(n, C4)) == Nat.add(T1, H10) : Nat}, +eHI: {Nat.add(HI, U.U32Nat.dbl(n, C5)) == Nat.add(T2, HM) : Nat}, +eLO: {LO == U.U32Nat.low(n, Nat.mul(A, B)) : Nat}) -> {Nat.add(LO, U.U32Nat.dbl(n, HI)) == Nat.mul(A, B) : Nat}:
255  +hx0 = Equal.trans(Bool, Nat.is_lt(X0, U.U32Nat.dbl(h, 1n)), Nat.is_lt(U.U32Nat.low(h, A), U.U32Nat.dbl(h, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(h, 1n)), X0, U.U32Nat.low(h, A), Equal.sym(Nat, U.U32Nat.low(h, A), X0, Equal.sym(Nat, X0, U.U32Nat.low(h, A), eX0))), UL.low_lt(h, A))
256  +hy0 = Equal.trans(Bool, Nat.is_lt(Y0, U.U32Nat.dbl(h, 1n)), Nat.is_lt(U.U32Nat.low(h, B), U.U32Nat.dbl(h, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(h, 1n)), Y0, U.U32Nat.low(h, B), Equal.sym(Nat, U.U32Nat.low(h, B), Y0, Equal.sym(Nat, Y0, U.U32Nat.low(h, B), eY0))), UL.low_lt(h, B))
257  +hx1 = Equal.trans(Bool, Nat.is_lt(X1, U.U32Nat.dbl(h, 1n)), Nat.is_lt(U.U32Nat.high(h, A), U.U32Nat.dbl(h, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(h, 1n)), X1, U.U32Nat.high(h, A), Equal.sym(Nat, U.U32Nat.high(h, A), X1, Equal.sym(Nat, X1, U.U32Nat.high(h, A), eX1))), wm.hl(h, A, U.U32Nat.dbl(h, 1n), Equal.trans(Bool, Nat.is_lt(A, U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), Nat.is_lt(A, U.U32Nat.dbl(n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(A, zz), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), Equal.sym(Nat, U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en))), hA)))
258  +hy1 = Equal.trans(Bool, Nat.is_lt(Y1, U.U32Nat.dbl(h, 1n)), Nat.is_lt(U.U32Nat.high(h, B), U.U32Nat.dbl(h, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(h, 1n)), Y1, U.U32Nat.high(h, B), Equal.sym(Nat, U.U32Nat.high(h, B), Y1, Equal.sym(Nat, Y1, U.U32Nat.high(h, B), eY1))), wm.hl(h, B, U.U32Nat.dbl(h, 1n), Equal.trans(Bool, Nat.is_lt(B, U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), Nat.is_lt(B, U.U32Nat.dbl(n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(B, zz), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), Equal.sym(Nat, U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en))), hB)))
259  +pl00 = wm.pl(h, n, X0, Y0, en, hx0, hy0)
260  +pe00 = Equal.trans(Nat, P00, U.U32Nat.low(n, Nat.mul(X0, Y0)), Nat.mul(X0, Y0), e00, UL.low_small(n, Nat.mul(X0, Y0), pl00))
261  +plt00 = Equal.trans(Bool, Nat.is_lt(P00, U.U32Nat.dbl(n, 1n)), Nat.is_lt(Nat.mul(X0, Y0), U.U32Nat.dbl(n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(n, 1n)), P00, Nat.mul(X0, Y0), Equal.sym(Nat, Nat.mul(X0, Y0), P00, Equal.sym(Nat, P00, Nat.mul(X0, Y0), pe00))), pl00)
262  +pl01 = wm.pl(h, n, X0, Y1, en, hx0, hy1)
263  +pe01 = Equal.trans(Nat, P01, U.U32Nat.low(n, Nat.mul(X0, Y1)), Nat.mul(X0, Y1), e01, UL.low_small(n, Nat.mul(X0, Y1), pl01))
264  +plt01 = Equal.trans(Bool, Nat.is_lt(P01, U.U32Nat.dbl(n, 1n)), Nat.is_lt(Nat.mul(X0, Y1), U.U32Nat.dbl(n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(n, 1n)), P01, Nat.mul(X0, Y1), Equal.sym(Nat, Nat.mul(X0, Y1), P01, Equal.sym(Nat, P01, Nat.mul(X0, Y1), pe01))), pl01)
265  +pl10 = wm.pl(h, n, X1, Y0, en, hx1, hy0)
266  +pe10 = Equal.trans(Nat, P10, U.U32Nat.low(n, Nat.mul(X1, Y0)), Nat.mul(X1, Y0), e10, UL.low_small(n, Nat.mul(X1, Y0), pl10))
267  +plt10 = Equal.trans(Bool, Nat.is_lt(P10, U.U32Nat.dbl(n, 1n)), Nat.is_lt(Nat.mul(X1, Y0), U.U32Nat.dbl(n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(n, 1n)), P10, Nat.mul(X1, Y0), Equal.sym(Nat, Nat.mul(X1, Y0), P10, Equal.sym(Nat, P10, Nat.mul(X1, Y0), pe10))), pl10)
268  +pl11 = wm.pl(h, n, X1, Y1, en, hx1, hy1)
269  +pe11 = Equal.trans(Nat, P11, U.U32Nat.low(n, Nat.mul(X1, Y1)), Nat.mul(X1, Y1), e11, UL.low_small(n, Nat.mul(X1, Y1), pl11))
270  +plt11 = Equal.trans(Bool, Nat.is_lt(P11, U.U32Nat.dbl(n, 1n)), Nat.is_lt(Nat.mul(X1, Y1), U.U32Nat.dbl(n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(n, 1n)), P11, Nat.mul(X1, Y1), Equal.sym(Nat, Nat.mul(X1, Y1), P11, Equal.sym(Nat, P11, Nat.mul(X1, Y1), pe11))), pl11)
271  +hS = Equal.trans(Bool, Nat.is_lt(S00, U.U32Nat.dbl(h, 1n)), Nat.is_lt(U.U32Nat.high(h, P00), U.U32Nat.dbl(h, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(h, 1n)), S00, U.U32Nat.high(h, P00), Equal.sym(Nat, U.U32Nat.high(h, P00), S00, Equal.sym(Nat, S00, U.U32Nat.high(h, P00), eS))), wm.hl(h, P00, U.U32Nat.dbl(h, 1n), Equal.trans(Bool, Nat.is_lt(P00, U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), Nat.is_lt(P00, U.U32Nat.dbl(n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(P00, zz), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), Equal.sym(Nat, U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en))), plt00)))
272  +hL1 = Equal.trans(Bool, Nat.is_lt(L01, U.U32Nat.dbl(h, 1n)), Nat.is_lt(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(h, 1n)), L01, U.U32Nat.low(h, P01), Equal.sym(Nat, U.U32Nat.low(h, P01), L01, Equal.sym(Nat, L01, U.U32Nat.low(h, P01), eL1))), UL.low_lt(h, P01))
273  +hL2 = Equal.trans(Bool, Nat.is_lt(L10, U.U32Nat.dbl(h, 1n)), Nat.is_lt(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(h, 1n)), L10, U.U32Nat.low(h, P10), Equal.sym(Nat, U.U32Nat.low(h, P10), L10, Equal.sym(Nat, L10, U.U32Nat.low(h, P10), eL2))), UL.low_lt(h, P10))
274  +s3lt = wm.s3(h, n, S00, L01, L10, en, h2, hS, hL1, hL2)
275  +em1 = UL.dbl_nowrap(n, C1, M1, Nat.add(S00, L01), Nat.add(Nat.add(S00, L01), L10), eM1, Equal.trans(Bool, Nat.is_le(Nat.add(S00, L01), Nat.add(Nat.add(S00, L01), L10)), Nat.is_le(Nat.add(S00, L01), Nat.add(L10, Nat.add(S00, L01))), True{}, Equal.sym(Bool, Nat.is_le(Nat.add(S00, L01), Nat.add(L10, Nat.add(S00, L01))), Nat.is_le(Nat.add(S00, L01), Nat.add(Nat.add(S00, L01), L10)), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.add(S00, L01), zz), Nat.add(L10, Nat.add(S00, L01)), Nat.add(Nat.add(S00, L01), L10), wr.m4(L10, S00, L01))), UL.nat_le_add(Nat.add(S00, L01), L10)), s3lt)
276  +emid = Equal.trans(Nat, MID, Nat.add(M1, L10), Nat.add(Nat.add(S00, L01), L10), UL.dbl_nowrap(n, C2, MID, Nat.add(M1, L10), Nat.add(Nat.add(S00, L01), L10), eMID, Equal.trans(Bool, Nat.is_le(Nat.add(M1, L10), Nat.add(Nat.add(S00, L01), L10)), Nat.is_le(Nat.add(Nat.add(S00, L01), L10), Nat.add(Nat.add(S00, L01), L10)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(zz, Nat.add(Nat.add(S00, L01), L10)), Nat.add(M1, L10), Nat.add(Nat.add(S00, L01), L10), Equal.cong(Nat, Nat, zz => Nat.add(zz, L10), M1, Nat.add(S00, L01), em1)), UL.nat_le_refl(Nat.add(Nat.add(S00, L01), L10))), s3lt), Equal.cong(Nat, Nat, zz => Nat.add(zz, L10), M1, Nat.add(S00, L01), em1))
277  +eE = Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.low(h, MID))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.low(h, MID))), U.U32Nat.dbl(n, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, Nat.add(U.U32Nat.low(h, MID), U.U32Nat.dbl(h, HM))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.low(h, MID))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, Nat.add(U.U32Nat.low(h, MID), U.U32Nat.dbl(h, U.U32Nat.high(h, MID)))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, Nat.add(U.U32Nat.low(h, MID), U.U32Nat.dbl(h, HM))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, MID), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, Nat.add(U.U32Nat.low(h, MID), U.U32Nat.dbl(h, U.U32Nat.high(h, MID)))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(S00, L01), L10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, MID), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, H01)), Nat.add(L10, U.U32Nat.dbl(h, H10)))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(S00, L01), L10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, H01)), Nat.add(L10, U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, H01)), Nat.add(L10, U.U32Nat.dbl(h, H10)))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, H01)), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, H01)), Nat.add(L10, U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, H01)), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), Nat.add(U.U32Nat.dbl(h, Nat.add(P01, P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(P01, P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), Nat.add(U.U32Nat.dbl(h, Nat.add(P01, P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(P01, P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(P01, P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(P01, Nat.mul(X1, Y0))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(P01, P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.mul(X0, Y1), Nat.mul(X1, Y0))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(P01, Nat.mul(X1, Y0))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Equal.trans(Nat, Nat.mul(A, B), Nat.add(Nat.mul(X0, Y0), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.mul(X0, Y1), Nat.mul(X1, Y0))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.mul(X0, Y1), Nat.mul(X1, Y0))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Equal.trans(Nat, Nat.mul(A, B), Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, X1)), Nat.add(Y0, U.U32Nat.dbl(h, Y1))), Nat.add(Nat.mul(X0, Y0), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.mul(X0, Y1), Nat.mul(X1, Y0))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Equal.trans(Nat, Nat.mul(A, B), Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, X1)), Nat.add(Y0, U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, X1)), Nat.add(Y0, U.U32Nat.dbl(h, Y1))), Equal.trans(Nat, Nat.mul(A, B), Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, X1)), Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, X1)), Nat.add(Y0, U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), Equal.trans(Nat, Nat.mul(A, B), Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, U.U32Nat.high(h, A))), Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, X1)), Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), Equal.trans(Nat, Nat.mul(A, B), Nat.mul(Nat.add(U.U32Nat.low(h, A), U.U32Nat.dbl(h, U.U32Nat.high(h, A))), Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, U.U32Nat.high(h, A))), Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), Equal.trans(Nat, Nat.mul(A, B), Nat.mul(Nat.add(U.U32Nat.low(h, A), U.U32Nat.dbl(h, U.U32Nat.high(h, A))), B), Nat.mul(Nat.add(U.U32Nat.low(h, A), U.U32Nat.dbl(h, U.U32Nat.high(h, A))), Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), Equal.cong(Nat, Nat, zz => Nat.mul(zz, B), A, Nat.add(U.U32Nat.low(h, A), U.U32Nat.dbl(h, U.U32Nat.high(h, A))), Equal.sym(Nat, Nat.add(U.U32Nat.low(h, A), U.U32Nat.dbl(h, U.U32Nat.high(h, A))), A, UL.low_high(h, A))), Equal.cong(Nat, Nat, zz => Nat.mul(Nat.add(U.U32Nat.low(h, A), U.U32Nat.dbl(h, U.U32Nat.high(h, A))), zz), B, Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B))), Equal.sym(Nat, Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B))), B, UL.low_high(h, B)))), Equal.cong(Nat, Nat, zz => Nat.mul(Nat.add(zz, U.U32Nat.dbl(h, U.U32Nat.high(h, A))), Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), U.U32Nat.low(h, A), X0, Equal.sym(Nat, X0, U.U32Nat.low(h, A), eX0))), Equal.cong(Nat, Nat, zz => Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, zz)), Nat.add(U.U32Nat.low(h, B), U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), U.U32Nat.high(h, A), X1, Equal.sym(Nat, X1, U.U32Nat.high(h, A), eX1))), Equal.cong(Nat, Nat, zz => Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, X1)), Nat.add(zz, U.U32Nat.dbl(h, U.U32Nat.high(h, B)))), U.U32Nat.low(h, B), Y0, Equal.sym(Nat, Y0, U.U32Nat.low(h, B), eY0))), Equal.cong(Nat, Nat, zz => Nat.mul(Nat.add(X0, U.U32Nat.dbl(h, X1)), Nat.add(Y0, U.U32Nat.dbl(h, zz))), U.U32Nat.high(h, B), Y1, Equal.sym(Nat, Y1, U.U32Nat.high(h, B), eY1))), wr.m5(X0, h, X1, Y0, Y1)), Equal.cong(Nat, Nat, zz => Nat.add(zz, Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.mul(X0, Y1), Nat.mul(X1, Y0))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Nat.mul(X0, Y0), P00, Equal.sym(Nat, P00, Nat.mul(X0, Y0), pe00))), Equal.cong(Nat, Nat, zz => Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(zz, Nat.mul(X1, Y0))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Nat.mul(X0, Y1), P01, Equal.sym(Nat, P01, Nat.mul(X0, Y1), pe01))), Equal.cong(Nat, Nat, zz => Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(P01, zz)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.mul(X1, Y1))))), Nat.mul(X1, Y0), P10, Equal.sym(Nat, P10, Nat.mul(X1, Y0), pe10))), Equal.cong(Nat, Nat, zz => Nat.add(P00, Nat.add(U.U32Nat.dbl(h, Nat.add(P01, P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, zz)))), Nat.mul(X1, Y1), P11, Equal.sym(Nat, P11, Nat.mul(X1, Y1), pe11))), Equal.cong(Nat, Nat, zz => Nat.add(zz, Nat.add(U.U32Nat.dbl(h, Nat.add(P01, P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), P00, Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), Equal.sym(Nat, Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), P00, UL.low_high(h, P00)))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), Nat.add(U.U32Nat.dbl(h, Nat.add(zz, P10)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), P01, Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), Equal.sym(Nat, Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), P01, UL.low_high(h, P01)))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.high(h, P00))), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), zz)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), P10, Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))), Equal.sym(Nat, Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))), P10, UL.low_high(h, P10)))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, zz)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(U.U32Nat.low(h, P01), U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), U.U32Nat.high(h, P00), S00, Equal.sym(Nat, S00, U.U32Nat.high(h, P00), eS))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(zz, U.U32Nat.dbl(h, U.U32Nat.high(h, P01))), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), U.U32Nat.low(h, P01), L01, Equal.sym(Nat, L01, U.U32Nat.low(h, P01), eL1))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, zz)), Nat.add(U.U32Nat.low(h, P10), U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), U.U32Nat.high(h, P01), H01, Equal.sym(Nat, H01, U.U32Nat.high(h, P01), eH1))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, H01)), Nat.add(zz, U.U32Nat.dbl(h, U.U32Nat.high(h, P10))))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), U.U32Nat.low(h, P10), L10, Equal.sym(Nat, L10, U.U32Nat.low(h, P10), eL2))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, S00)), Nat.add(U.U32Nat.dbl(h, Nat.add(Nat.add(L01, U.U32Nat.dbl(h, H01)), Nat.add(L10, U.U32Nat.dbl(h, zz)))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, P11)))), U.U32Nat.high(h, P10), H10, Equal.sym(Nat, H10, U.U32Nat.high(h, P10), eH2))), wr.m6(U.U32Nat.low(h, P00), h, S00, L01, H01, L10, H10, P11)), Equal.cong(Nat, Nat, zz => Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, zz), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), Nat.add(Nat.add(S00, L01), L10), MID, Equal.sym(Nat, MID, Nat.add(Nat.add(S00, L01), L10), emid))), Equal.cong(Nat, Nat, zz => Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, zz), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), MID, Nat.add(U.U32Nat.low(h, MID), U.U32Nat.dbl(h, U.U32Nat.high(h, MID))), Equal.sym(Nat, Nat.add(U.U32Nat.low(h, MID), U.U32Nat.dbl(h, U.U32Nat.high(h, MID))), MID, UL.low_high(h, MID)))), Equal.cong(Nat, Nat, zz => Nat.add(U.U32Nat.low(h, P00), Nat.add(U.U32Nat.dbl(h, Nat.add(U.U32Nat.low(h, MID), U.U32Nat.dbl(h, zz))), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(P11, H01), H10))))), U.U32Nat.high(h, MID), HM, Equal.sym(Nat, HM, U.U32Nat.high(h, MID), eHM))), wr.m7(U.U32Nat.low(h, P00), h, U.U32Nat.low(h, MID), HM, P11, H01, H10)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.low(h, MID))), zz), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM))), U.U32Nat.dbl(n, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), Equal.sym(Nat, U.U32Nat.dbl(n, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM))), wm.fn(h, n, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), en))))
278  +lowlt = wm.low2(h, n, U.U32Nat.low(h, P00), U.U32Nat.low(h, MID), en, UL.low_lt(h, P00), UL.low_lt(h, MID))
279  +ehi = UL.high_unique(n, Nat.mul(A, B), Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.low(h, MID))), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), Equal.sym(Nat, Nat.mul(A, B), Nat.add(Nat.add(U.U32Nat.low(h, P00), U.U32Nat.dbl(h, U.U32Nat.low(h, MID))), U.U32Nat.dbl(n, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM))), eE), lowlt)
280  +hilt = Equal.trans(Bool, Nat.is_lt(Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), U.U32Nat.dbl(n, 1n)), Nat.is_lt(U.U32Nat.high(n, Nat.mul(A, B)), U.U32Nat.dbl(n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(zz, U.U32Nat.dbl(n, 1n)), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), U.U32Nat.high(n, Nat.mul(A, B)), Equal.sym(Nat, U.U32Nat.high(n, Nat.mul(A, B)), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), Equal.sym(Nat, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), U.U32Nat.high(n, Nat.mul(A, B)), ehi))), wm.hl(n, Nat.mul(A, B), U.U32Nat.dbl(n, 1n), Equal.trans(Bool, Nat.is_lt(Nat.mul(A, B), U.U32Nat.dbl(n, U.U32Nat.dbl(n, 1n))), Nat.is_lt(Nat.mul(A, B), Nat.mul(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(n, 1n))), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(Nat.mul(A, B), zz), U.U32Nat.dbl(n, U.U32Nat.dbl(n, 1n)), Nat.mul(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(n, 1n)), Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(n, 1n)), U.U32Nat.dbl(n, U.U32Nat.dbl(n, 1n)), wr.m3(n))), UL.nat_mul_lt(A, B, U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(n, 1n), hA, hB))))
281  +et1 = UL.dbl_nowrap(n, C3, T1, Nat.add(P11, H01), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), eT1, Equal.trans(Bool, Nat.is_le(Nat.add(P11, H01), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), Nat.is_le(Nat.add(P11, H01), Nat.add(Nat.add(H10, HM), Nat.add(P11, H01))), True{}, Equal.sym(Bool, Nat.is_le(Nat.add(P11, H01), Nat.add(Nat.add(H10, HM), Nat.add(P11, H01))), Nat.is_le(Nat.add(P11, H01), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.add(P11, H01), zz), Nat.add(Nat.add(H10, HM), Nat.add(P11, H01)), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), wr.m8(H10, HM, P11, H01))), UL.nat_le_add(Nat.add(P11, H01), Nat.add(H10, HM))), hilt)
282  +et2 = Equal.trans(Nat, T2, Nat.add(T1, H10), Nat.add(Nat.add(P11, H01), H10), UL.dbl_nowrap(n, C4, T2, Nat.add(T1, H10), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), eT2, Equal.trans(Bool, Nat.is_le(Nat.add(T1, H10), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), Nat.is_le(Nat.add(Nat.add(P11, H01), H10), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(zz, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), Nat.add(T1, H10), Nat.add(Nat.add(P11, H01), H10), Equal.cong(Nat, Nat, zz => Nat.add(zz, H10), T1, Nat.add(P11, H01), et1)), Equal.trans(Bool, Nat.is_le(Nat.add(Nat.add(P11, H01), H10), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), Nat.is_le(Nat.add(Nat.add(P11, H01), H10), Nat.add(HM, Nat.add(Nat.add(P11, H01), H10))), True{}, Equal.sym(Bool, Nat.is_le(Nat.add(Nat.add(P11, H01), H10), Nat.add(HM, Nat.add(Nat.add(P11, H01), H10))), Nat.is_le(Nat.add(Nat.add(P11, H01), H10), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), Equal.cong(Nat, Bool, zz => Nat.is_le(Nat.add(Nat.add(P11, H01), H10), zz), Nat.add(HM, Nat.add(Nat.add(P11, H01), H10)), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), wr.m9(HM, P11, H01, H10))), UL.nat_le_add(Nat.add(Nat.add(P11, H01), H10), HM))), hilt), Equal.cong(Nat, Nat, zz => Nat.add(zz, H10), T1, Nat.add(P11, H01), et1))
283  +ehi2 = Equal.trans(Nat, HI, Nat.add(T2, HM), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), UL.dbl_nowrap(n, C5, HI, Nat.add(T2, HM), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), eHI, Equal.trans(Bool, Nat.is_le(Nat.add(T2, HM), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), Nat.is_le(Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(zz, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM)), Nat.add(T2, HM), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), Equal.cong(Nat, Nat, zz => Nat.add(zz, HM), T2, Nat.add(Nat.add(P11, H01), H10), et2)), UL.nat_le_refl(Nat.add(Nat.add(Nat.add(P11, H01), H10), HM))), hilt), Equal.cong(Nat, Nat, zz => Nat.add(zz, HM), T2, Nat.add(Nat.add(P11, H01), H10), et2))
284  Equal.trans(Nat, Nat.add(LO, U.U32Nat.dbl(n, HI)), Nat.add(U.U32Nat.low(n, Nat.mul(A, B)), U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(A, B)))), Nat.mul(A, B), Equal.trans(Nat, Nat.add(LO, U.U32Nat.dbl(n, HI)), Nat.add(U.U32Nat.low(n, Nat.mul(A, B)), U.U32Nat.dbl(n, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM))), Nat.add(U.U32Nat.low(n, Nat.mul(A, B)), U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(A, B)))), Equal.trans(Nat, Nat.add(LO, U.U32Nat.dbl(n, HI)), Nat.add(U.U32Nat.low(n, Nat.mul(A, B)), U.U32Nat.dbl(n, HI)), Nat.add(U.U32Nat.low(n, Nat.mul(A, B)), U.U32Nat.dbl(n, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM))), Equal.cong(Nat, Nat, zz => Nat.add(zz, U.U32Nat.dbl(n, HI)), LO, U.U32Nat.low(n, Nat.mul(A, B)), eLO), Equal.cong(Nat, Nat, zz => Nat.add(U.U32Nat.low(n, Nat.mul(A, B)), U.U32Nat.dbl(n, zz)), HI, Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), ehi2)), Equal.cong(Nat, Nat, zz => Nat.add(U.U32Nat.low(n, Nat.mul(A, B)), U.U32Nat.dbl(n, zz)), Nat.add(Nat.add(Nat.add(P11, H01), H10), HM), U.U32Nat.high(n, Nat.mul(A, B)), ehi)), UL.low_high(n, Nat.mul(A, B)))
285
286def Laws.mulhi_value(a, b):
287  wm.k(32n, 16n, U32.to_nat(a), U32.to_nat(b), U32.to_nat(U32.and(a, 65535)), U32.to_nat(U32.shrn(a, 16n)), U32.to_nat(U32.and(b, 65535)), U32.to_nat(U32.shrn(b, 16n)), U32.to_nat(U32.mul(U32.and(a, 65535), U32.and(b, 65535))), U32.to_nat(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n))), U32.to_nat(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535))), U32.to_nat(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n))), U32.to_nat(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n)), U32.to_nat(U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.to_nat(U32.and(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 65535)), U32.to_nat(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535))), U32.to_nat(U32.add(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.and(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 65535))), U32.to_nat(U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), U32.to_nat(U32.shrn(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 16n)), U32.to_nat(U32.shrn(U32.add(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.and(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 65535)), 16n)), U32.to_nat(U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n))), U32.to_nat(U32.add(U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), U32.shrn(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 16n))), U32.to_nat(U32.add(U32.add(U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), U32.shrn(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 16n)), U32.shrn(U32.add(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.and(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 65535)), 16n))), U32.to_nat(U32.mul(a, b)), U.U32Nat.bit(U32.is_lt(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n))), U.U32Nat.bit(U32.is_lt(U32.add(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.and(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 65535)), U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)))), U.U32Nat.bit(U32.is_lt(U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)))), U.U32Nat.bit(U32.is_lt(U32.add(U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), U32.shrn(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 16n)), U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)))), U.U32Nat.bit(U32.is_lt(U32.add(U32.add(U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), U32.shrn(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 16n)), U32.shrn(U32.add(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.and(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 65535)), 16n)), U32.add(U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), U32.shrn(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 16n)))), {==}, {==}, wu.lt(a), wu.lt(b), UL.u32_and_65535(a), UL.u32_shrn_value(a, 16n), UL.u32_and_65535(b), UL.u32_shrn_value(b, 16n), UL.u32_mul_low(U32.and(a, 65535), U32.and(b, 65535)), UL.u32_mul_low(U32.and(a, 65535), U32.shrn(b, 16n)), UL.u32_mul_low(U32.shrn(a, 16n), U32.and(b, 65535)), UL.u32_mul_low(U32.shrn(a, 16n), U32.shrn(b, 16n)), UL.u32_shrn_value(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), UL.u32_and_65535(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n))), UL.u32_and_65535(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535))), UL.u32_add_wrap(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), UL.u32_add_wrap(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.and(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 65535)), UL.u32_shrn_value(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n), UL.u32_shrn_value(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 16n), UL.u32_shrn_value(U32.add(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.and(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 65535)), 16n), UL.u32_add_wrap(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), UL.u32_add_wrap(U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), U32.shrn(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 16n)), UL.u32_add_wrap(U32.add(U32.add(U32.mul(U32.shrn(a, 16n), U32.shrn(b, 16n)), U32.shrn(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 16n)), U32.shrn(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 16n)), U32.shrn(U32.add(U32.add(U32.shrn(U32.mul(U32.and(a, 65535), U32.and(b, 65535)), 16n), U32.and(U32.mul(U32.and(a, 65535), U32.shrn(b, 16n)), 65535)), U32.and(U32.mul(U32.shrn(a, 16n), U32.and(b, 65535)), 65535)), 16n)), UL.u32_mul_low(a, b))
288
289def wr.m10(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat, +x5: Nat, +x6: Nat, +x7: Nat, +x8: Nat) -> {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x3, x4), Nat.add(Nat.add(x5, x6), Nat.mul(x7, x8)))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}:
290  %Equal.sym(Nat, Nat.add(Nat.add(x5, x6), Nat.mul(x7, x8)), Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8))), UL.nat_add_assoc(x5, x6, Nat.mul(x7, x8))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(Nat.add(x3, x4), _)))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
291  %Equal.sym(Nat, Nat.add(Nat.add(x3, x4), Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8)))), Nat.add(x3, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8))))), UL.nat_add_assoc(x3, x4, Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
292  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x3, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8)))))), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8)))))), UL.dbl_add(x1, x3, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8)))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, _)) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
293  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x4, Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8))))), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8))))), UL.dbl_add(x1, x4, Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
294  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x5, Nat.add(x6, Nat.mul(x7, x8)))), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, Nat.add(x6, Nat.mul(x7, x8)))), UL.dbl_add(x1, x5, Nat.add(x6, Nat.mul(x7, x8)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), _)))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
295  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x6, Nat.mul(x7, x8))), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8))), UL.dbl_add(x1, x6, Nat.mul(x7, x8))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), _))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
296  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), _) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
297  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), _)) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
298  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x5), Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
299  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x6), U.U32Nat.dbl(x1, Nat.mul(x7, x8)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), _)))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
300  %Equal.sym(Nat, Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))))), Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))))), UL.nat_add_assoc(x0, U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))))) : {_ == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
301  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))))) : {Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), _)) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
302  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))))) : {Nat.add(x0, _) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
303  %Equal.sym(Nat, Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), UL.nat_add_assoc(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))))) : {_ == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
304  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))) : {Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))))), _) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
305  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)))) : {Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))))), Nat.add(_, U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
306  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, Nat.add(x5, x6)), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x5, x6)), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)), UL.dbl_add(x1, x5, x6))) : {Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))))), Nat.add(U.U32Nat.dbl(x1, _), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
307  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x3)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x4))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)))) : {Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), _)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
308  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)))), U.U32Nat.dbl(x1, Nat.add(x2, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x2, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)))), Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)))), UL.dbl_add(x1, x2, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4))))) : {Nat.add(Nat.add(x0, _), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
309  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x3)), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x3)), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)), UL.nat_add_comm(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x3)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(x2, _))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
310  %Equal.sym(Nat, Nat.add(x2, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x3))), Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)), Equal.sym(Nat, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)), Nat.add(x2, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x3))), UL.nat_add_assoc(x2, U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, x3)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, _)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, U.U32Nat.dbl(x1, x4)), U.U32Nat.dbl(x1, x3)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
311  {==}
312
313def wr.m11(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat) -> {Nat.add(Nat.add(x0, x1), U.U32Nat.dbl(x2, x3)) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x2, x3)), x1) : Nat}:
314  %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(Nat.add(x0, U.U32Nat.dbl(x2, x3)), x1) : Nat}
315  %Equal.sym(Nat, Nat.add(x1, U.U32Nat.dbl(x2, x3)), Nat.add(U.U32Nat.dbl(x2, x3), x1), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x2, x3), x1), Nat.add(x1, U.U32Nat.dbl(x2, x3)), UL.nat_add_comm(U.U32Nat.dbl(x2, x3), x1))) : {Nat.add(x0, _) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x2, x3)), x1) : Nat}
316  %Equal.sym(Nat, Nat.add(x0, Nat.add(U.U32Nat.dbl(x2, x3), x1)), Nat.add(Nat.add(x0, U.U32Nat.dbl(x2, x3)), x1), Equal.sym(Nat, Nat.add(Nat.add(x0, U.U32Nat.dbl(x2, x3)), x1), Nat.add(x0, Nat.add(U.U32Nat.dbl(x2, x3), x1)), UL.nat_add_assoc(x0, U.U32Nat.dbl(x2, x3), x1))) : {_ == Nat.add(Nat.add(x0, U.U32Nat.dbl(x2, x3)), x1) : Nat}
317  {==}
318
319def wr.m12(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat, +x5: Nat, +x6: Nat, +x7: Nat, +x8: Nat) -> {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, Nat.add(Nat.add(x2, x3), x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}:
320  %Equal.sym(Nat, Nat.add(Nat.add(x2, x3), x4), Nat.add(x2, Nat.add(x3, x4)), UL.nat_add_assoc(x2, x3, x4)) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, _)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
321  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x2, Nat.add(x3, x4))), Nat.add(U.U32Nat.dbl(x1, x2), U.U32Nat.dbl(x1, Nat.add(x3, x4))), UL.dbl_add(x1, x2, Nat.add(x3, x4))) : {Nat.add(Nat.add(x0, _), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
322  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x3, x4)), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)), UL.dbl_add(x1, x3, x4)) : {Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), _)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.add(x5, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
323  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x5, x6)), Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6)), UL.dbl_add(x1, x5, x6)) : {Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)))), Nat.add(U.U32Nat.dbl(x1, _), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
324  %Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), UL.dbl_add(x1, U.U32Nat.dbl(x1, x5), U.U32Nat.dbl(x1, x6))) : {Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)))), Nat.add(_, U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
325  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : {Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)))), _) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
326  %Equal.sym(Nat, Nat.add(Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Nat.add(x0, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), UL.nat_add_assoc(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))) : {_ == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
327  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))) : {Nat.add(x0, _) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
328  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))) : {Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), _)) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
329  %Equal.sym(Nat, Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))))), Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))))), Equal.sym(Nat, Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))))), Nat.add(x0, Nat.add(U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))))))), UL.nat_add_assoc(x0, U.U32Nat.dbl(x1, x2), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))))))) : {_ == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
330  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), _))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
331  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(U.U32Nat.dbl(x1, x3), _)) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
332  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8)))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), _) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
333  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), Nat.add(U.U32Nat.dbl(x1, x4), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), UL.nat_add_left_comm(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), _), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
334  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))))), Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5))), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5))), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))), Nat.add(U.U32Nat.dbl(x1, x3), Nat.add(U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))))), UL.nat_add_assoc(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5)), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6)))))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(_, U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
335  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6))), Nat.add(U.U32Nat.dbl(x1, x4), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x6))), UL.dbl_add(x1, x4, U.U32Nat.dbl(x1, x6)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5))), _), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
336  %Equal.sym(Nat, Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), Equal.sym(Nat, U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), Nat.add(U.U32Nat.dbl(x1, x3), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, x5))), UL.dbl_add(x1, x3, U.U32Nat.dbl(x1, x5)))) : {Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(_, U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) == Nat.add(Nat.add(x0, U.U32Nat.dbl(x1, x2)), Nat.add(Nat.add(U.U32Nat.dbl(x1, Nat.add(x3, U.U32Nat.dbl(x1, x5))), U.U32Nat.dbl(x1, Nat.add(x4, U.U32Nat.dbl(x1, x6)))), U.U32Nat.dbl(x1, U.U32Nat.dbl(x1, Nat.mul(x7, x8))))) : Nat}
337  {==}
338
339def wr.m13(+x0: Nat, +x1: Nat, +x2: Nat, +x3: Nat, +x4: Nat) -> {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), U.U32Nat.dbl(x2, Nat.mul(x4, x1))), U.U32Nat.dbl(x2, U.U32Nat.dbl(x2, Nat.mul(x4, x3))))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}:
340  %Equal.sym(Nat, Nat.mul(x4, x1), Nat.mul(x1, x4), UL.nat_mul_comm(x4, x1)) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), U.U32Nat.dbl(x2, _)), U.U32Nat.dbl(x2, U.U32Nat.dbl(x2, Nat.mul(x4, x3))))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
341  %Equal.sym(Nat, Nat.mul(x4, x3), Nat.mul(x3, x4), UL.nat_mul_comm(x4, x3)) : {Nat.add(Nat.mul(x0, x1), Nat.add(Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), U.U32Nat.dbl(x2, Nat.mul(x1, x4))), U.U32Nat.dbl(x2, U.U32Nat.dbl(x2, _)))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
342  %Equal.sym(Nat, Nat.add(Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), U.U32Nat.dbl(x2, Nat.mul(x1, x4))), U.U32Nat.dbl(x2, U.U32Nat.dbl(x2, Nat.mul(x3, x4)))), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x1, x4)), U.U32Nat.dbl(x2, U.U32Nat.dbl(x2, Nat.mul(x3, x4))))), UL.nat_add_assoc(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), U.U32Nat.dbl(x2, Nat.mul(x1, x4)), U.U32Nat.dbl(x2, U.U32Nat.dbl(x2, Nat.mul(x3, x4))))) : {Nat.add(Nat.mul(x0, x1), _) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
343  %Equal.sym(Nat, Nat.mul(x3, x4), Nat.mul(x4, x3), Equal.sym(Nat, Nat.mul(x4, x3), Nat.mul(x3, x4), UL.nat_mul_comm(x4, x3))) : {Nat.add(Nat.mul(x0, x1), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x1, x4)), U.U32Nat.dbl(x2, U.U32Nat.dbl(x2, _))))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
344  %Equal.sym(Nat, U.U32Nat.dbl(x2, Nat.mul(x4, x3)), Nat.mul(x4, U.U32Nat.dbl(x2, x3)), Equal.sym(Nat, Nat.mul(x4, U.U32Nat.dbl(x2, x3)), U.U32Nat.dbl(x2, Nat.mul(x4, x3)), UL.dbl_mul_r(x2, x4, x3))) : {Nat.add(Nat.mul(x0, x1), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x1, x4)), U.U32Nat.dbl(x2, _)))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
345  %Equal.sym(Nat, U.U32Nat.dbl(x2, Nat.mul(x4, U.U32Nat.dbl(x2, x3))), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3)), Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3)), U.U32Nat.dbl(x2, Nat.mul(x4, U.U32Nat.dbl(x2, x3))), UL.dbl_mul_l(x2, x4, U.U32Nat.dbl(x2, x3)))) : {Nat.add(Nat.mul(x0, x1), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x1, x4)), _))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
346  %Equal.sym(Nat, Nat.mul(x1, x4), Nat.mul(x4, x1), Equal.sym(Nat, Nat.mul(x4, x1), Nat.mul(x1, x4), UL.nat_mul_comm(x4, x1))) : {Nat.add(Nat.mul(x0, x1), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), Nat.add(U.U32Nat.dbl(x2, _), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3))))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
347  %Equal.sym(Nat, U.U32Nat.dbl(x2, Nat.mul(x4, x1)), Nat.mul(U.U32Nat.dbl(x2, x4), x1), Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(x2, x4), x1), U.U32Nat.dbl(x2, Nat.mul(x4, x1)), UL.dbl_mul_l(x2, x4, x1))) : {Nat.add(Nat.mul(x0, x1), Nat.add(U.U32Nat.dbl(x2, Nat.mul(x0, x3)), Nat.add(_, Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3))))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
348  %Equal.sym(Nat, U.U32Nat.dbl(x2, Nat.mul(x0, x3)), Nat.mul(x0, U.U32Nat.dbl(x2, x3)), Equal.sym(Nat, Nat.mul(x0, U.U32Nat.dbl(x2, x3)), U.U32Nat.dbl(x2, Nat.mul(x0, x3)), UL.dbl_mul_r(x2, x0, x3))) : {Nat.add(Nat.mul(x0, x1), Nat.add(_, Nat.add(Nat.mul(U.U32Nat.dbl(x2, x4), x1), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3))))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
349  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, U.U32Nat.dbl(x2, x3)), Nat.add(Nat.mul(U.U32Nat.dbl(x2, x4), x1), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3))))), Nat.add(Nat.add(Nat.mul(x0, x1), Nat.mul(x0, U.U32Nat.dbl(x2, x3))), Nat.add(Nat.mul(U.U32Nat.dbl(x2, x4), x1), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3)))), Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(x0, x1), Nat.mul(x0, U.U32Nat.dbl(x2, x3))), Nat.add(Nat.mul(U.U32Nat.dbl(x2, x4), x1), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3)))), Nat.add(Nat.mul(x0, x1), Nat.add(Nat.mul(x0, U.U32Nat.dbl(x2, x3)), Nat.add(Nat.mul(U.U32Nat.dbl(x2, x4), x1), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3))))), UL.nat_add_assoc(Nat.mul(x0, x1), Nat.mul(x0, U.U32Nat.dbl(x2, x3)), Nat.add(Nat.mul(U.U32Nat.dbl(x2, x4), x1), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3)))))) : {_ == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
350  %Equal.sym(Nat, Nat.add(Nat.mul(U.U32Nat.dbl(x2, x4), x1), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3))), Nat.mul(U.U32Nat.dbl(x2, x4), Nat.add(x1, U.U32Nat.dbl(x2, x3))), Equal.sym(Nat, Nat.mul(U.U32Nat.dbl(x2, x4), Nat.add(x1, U.U32Nat.dbl(x2, x3))), Nat.add(Nat.mul(U.U32Nat.dbl(x2, x4), x1), Nat.mul(U.U32Nat.dbl(x2, x4), U.U32Nat.dbl(x2, x3))), UL.nat_mul_add(U.U32Nat.dbl(x2, x4), x1, U.U32Nat.dbl(x2, x3)))) : {Nat.add(Nat.add(Nat.mul(x0, x1), Nat.mul(x0, U.U32Nat.dbl(x2, x3))), _) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
351  %Equal.sym(Nat, Nat.add(Nat.mul(x0, x1), Nat.mul(x0, U.U32Nat.dbl(x2, x3))), Nat.mul(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3))), Equal.sym(Nat, Nat.mul(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3))), Nat.add(Nat.mul(x0, x1), Nat.mul(x0, U.U32Nat.dbl(x2, x3))), UL.nat_mul_add(x0, x1, U.U32Nat.dbl(x2, x3)))) : {Nat.add(_, Nat.mul(U.U32Nat.dbl(x2, x4), Nat.add(x1, U.U32Nat.dbl(x2, x3)))) == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
352  %Equal.sym(Nat, Nat.add(Nat.mul(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3))), Nat.mul(U.U32Nat.dbl(x2, x4), Nat.add(x1, U.U32Nat.dbl(x2, x3)))), Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))), Equal.sym(Nat, Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))), Nat.add(Nat.mul(x0, Nat.add(x1, U.U32Nat.dbl(x2, x3))), Nat.mul(U.U32Nat.dbl(x2, x4), Nat.add(x1, U.U32Nat.dbl(x2, x3)))), UL.nat_add_mul(x0, U.U32Nat.dbl(x2, x4), Nat.add(x1, U.U32Nat.dbl(x2, x3))))) : {_ == Nat.mul(Nat.add(x0, U.U32Nat.dbl(x2, x4)), Nat.add(x1, U.U32Nat.dbl(x2, x3))) : Nat}
353  {==}
354
355def wq.k(+n: Nat, +m: Nat, +AL: Nat, +AH: Nat, +BL: Nat, +BH: Nat, +LO: Nat, +MH: Nat, +C1v: Nat, +C2v: Nat, +S1: Nat, +HI: Nat, +k1: Nat, +k2: Nat, +em: {Nat.add(n, n) == m : Nat}, +emh: {Nat.add(LO, U.U32Nat.dbl(n, MH)) == Nat.mul(AL, BL) : Nat}, +ec1: {Nat.add(C1v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AL, BH)))) == Nat.mul(AL, BH) : Nat}, +ec2: {Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))) == Nat.mul(AH, BL) : Nat}, +ea1: {Nat.add(S1, U.U32Nat.dbl(n, k1)) == Nat.add(MH, C1v) : Nat}, +ea2: {Nat.add(HI, U.U32Nat.dbl(n, k2)) == Nat.add(S1, C2v) : Nat}, +hLO: {Nat.is_lt(LO, U.U32Nat.dbl(n, 1n)) == True{} : Bool}, +hHI: {Nat.is_lt(HI, U.U32Nat.dbl(n, 1n)) == True{} : Bool}) -> {Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, U.U32Nat.high(m, Nat.mul(Nat.add(AL, U.U32Nat.dbl(n, AH)), Nat.add(BL, U.U32Nat.dbl(n, BH)))))) == Nat.mul(Nat.add(AL, U.U32Nat.dbl(n, AH)), Nat.add(BL, U.U32Nat.dbl(n, BH))) : Nat}:
356  +eE = Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.add(Nat.mul(AL, BL), Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.mul(AL, BH)), U.U32Nat.dbl(n, Nat.mul(AH, BL))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.mul(Nat.add(AL, U.U32Nat.dbl(n, AH)), Nat.add(BL, U.U32Nat.dbl(n, BH))), Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.add(Nat.mul(AL, BL), Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.mul(AL, BH)), U.U32Nat.dbl(n, Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(Nat.mul(AL, BL), Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.mul(AL, BH)), U.U32Nat.dbl(n, Nat.mul(AH, BL))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.add(Nat.mul(AL, BL), Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.add(C1v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AL, BH))))), U.U32Nat.dbl(n, Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(Nat.mul(AL, BL), Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.mul(AL, BH)), U.U32Nat.dbl(n, Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, MH)), Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.add(C1v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AL, BH))))), U.U32Nat.dbl(n, Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(Nat.mul(AL, BL), Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.add(C1v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AL, BH))))), U.U32Nat.dbl(n, Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(Nat.add(MH, C1v), C2v))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, MH)), Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.add(C1v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AL, BH))))), U.U32Nat.dbl(n, Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(Nat.add(S1, U.U32Nat.dbl(n, k1)), C2v))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(Nat.add(MH, C1v), C2v))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(Nat.add(S1, C2v), U.U32Nat.dbl(n, k1)))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(Nat.add(S1, U.U32Nat.dbl(n, k1)), C2v))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(Nat.add(HI, U.U32Nat.dbl(n, k2)), U.U32Nat.dbl(n, k1)))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(Nat.add(S1, C2v), U.U32Nat.dbl(n, k1)))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH)))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(Nat.add(HI, U.U32Nat.dbl(n, k2)), U.U32Nat.dbl(n, k1)))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), zz), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH)))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), wm.fn(n, m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))), em)), wr.m10(LO, n, HI, k1, k2, U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL)), AH, BH)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(zz, U.U32Nat.dbl(n, k1)))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(HI, U.U32Nat.dbl(n, k2)), Nat.add(S1, C2v), ea2)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(LO, U.U32Nat.dbl(n, zz)), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(Nat.add(S1, C2v), U.U32Nat.dbl(n, k1)), Nat.add(Nat.add(S1, U.U32Nat.dbl(n, k1)), C2v), wr.m11(S1, C2v, n, k1))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(LO, U.U32Nat.dbl(n, Nat.add(zz, C2v))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(S1, U.U32Nat.dbl(n, k1)), Nat.add(MH, C1v), ea1)), wr.m12(LO, n, MH, C1v, C2v, U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL)), AH, BH)), Equal.cong(Nat, Nat, zz => Nat.add(zz, Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.add(C1v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AL, BH))))), U.U32Nat.dbl(n, Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(LO, U.U32Nat.dbl(n, MH)), Nat.mul(AL, BL), emh)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(AL, BL), Nat.add(Nat.add(U.U32Nat.dbl(n, zz), U.U32Nat.dbl(n, Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(C1v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AL, BH)))), Nat.mul(AL, BH), ec1)), Equal.cong(Nat, Nat, zz => Nat.add(Nat.mul(AL, BL), Nat.add(Nat.add(U.U32Nat.dbl(n, Nat.mul(AL, BH)), U.U32Nat.dbl(n, zz)), U.U32Nat.dbl(n, U.U32Nat.dbl(n, Nat.mul(AH, BH))))), Nat.add(C2v, U.U32Nat.dbl(n, U.U32Nat.high(n, Nat.mul(AH, BL)))), Nat.mul(AH, BL), ec2)), wr.m13(AL, BL, n, BH, AH))
357  +eK = UL.high_unique(m, Nat.mul(Nat.add(AL, U.U32Nat.dbl(n, AH)), Nat.add(BL, U.U32Nat.dbl(n, BH))), Nat.add(LO, U.U32Nat.dbl(n, HI)), Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))), eE, Equal.trans(Bool, Nat.is_lt(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, 1n)), Nat.is_lt(Nat.add(LO, U.U32Nat.dbl(n, HI)), P.wv.Q(n, 1n)), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(Nat.add(LO, U.U32Nat.dbl(n, HI)), zz), U.U32Nat.dbl(m, 1n), P.wv.Q(n, 1n), Equal.sym(Nat, P.wv.Q(n, 1n), U.U32Nat.dbl(m, 1n), Equal.sym(Nat, U.U32Nat.dbl(m, 1n), U.U32Nat.dbl(n, U.U32Nat.dbl(n, 1n)), wm.fn(n, m, 1n, em)))), P.wv.val_lt2(n, LO, HI, hLO, hHI)))
358  Equal.trans(Nat, Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, U.U32Nat.high(m, Nat.mul(Nat.add(AL, U.U32Nat.dbl(n, AH)), Nat.add(BL, U.U32Nat.dbl(n, BH)))))), Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))))), Nat.mul(Nat.add(AL, U.U32Nat.dbl(n, AH)), Nat.add(BL, U.U32Nat.dbl(n, BH))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(LO, U.U32Nat.dbl(n, HI)), U.U32Nat.dbl(m, zz)), U.U32Nat.high(m, Nat.mul(Nat.add(AL, U.U32Nat.dbl(n, AH)), Nat.add(BL, U.U32Nat.dbl(n, BH)))), Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))), Equal.sym(Nat, Nat.add(Nat.add(k1, k2), Nat.add(Nat.add(U.U32Nat.high(n, Nat.mul(AL, BH)), U.U32Nat.high(n, Nat.mul(AH, BL))), Nat.mul(AH, BH))), U.U32Nat.high(m, Nat.mul(Nat.add(AL, U.U32Nat.dbl(n, AH)), Nat.add(BL, U.U32Nat.dbl(n, BH)))), eK)), eE)
359
360def Laws.mul_wrap(a, b):
361  match a b:
362    case W.W64{+ah, +al} W.W64{+bh, +bl}:
363      wq.k(32n, 64n, U32.to_nat(al), U32.to_nat(ah), U32.to_nat(bl), U32.to_nat(bh), U32.to_nat(U32.mul(al, bl)), U32.to_nat(W.W64.mulhi(al, bl)), U32.to_nat(U32.mul(al, bh)), U32.to_nat(U32.mul(ah, bl)), U32.to_nat(U32.add(W.W64.mulhi(al, bl), U32.mul(al, bh))), U32.to_nat(U32.add(U32.add(W.W64.mulhi(al, bl), U32.mul(al, bh)), U32.mul(ah, bl))), U.U32Nat.bit(U32.is_lt(U32.add(W.W64.mulhi(al, bl), U32.mul(al, bh)), W.W64.mulhi(al, bl))), U.U32Nat.bit(U32.is_lt(U32.add(U32.add(W.W64.mulhi(al, bl), U32.mul(al, bh)), U32.mul(ah, bl)), U32.add(W.W64.mulhi(al, bl), U32.mul(al, bh)))), {==}, Laws.mulhi_value(al, bl), UL.u32_mul_wrap(al, bh), UL.u32_mul_wrap(ah, bl), UL.u32_add_wrap(W.W64.mulhi(al, bl), U32.mul(al, bh)), UL.u32_add_wrap(U32.add(W.W64.mulhi(al, bl), U32.mul(al, bh)), U32.mul(ah, bl)), wu.lt(U32.mul(al, bl)), wu.lt(U32.add(U32.add(W.W64.mulhi(al, bl), U32.mul(al, bh)), U32.mul(ah, bl))))
364
365def Laws.mul_low(a, b):
366  UL.low_unique(64n, Nat.mul(W.W64.to_nat(a), W.W64.to_nat(b)), W.W64.to_nat(W.W64.mul(a, b)), U.U32Nat.high(64n, Nat.mul(W.W64.to_nat(a), W.W64.to_nat(b))), Laws.mul_wrap(a, b), wv.lt64(W.W64.mul(a, b)))
367
368def Laws.mul_value(a, b, c, h):
369  UL.dbl_nowrap(64n, U.U32Nat.high(64n, Nat.mul(W.W64.to_nat(a), W.W64.to_nat(b))), W.W64.to_nat(W.W64.mul(a, b)), Nat.mul(W.W64.to_nat(a), W.W64.to_nat(b)), W.W64.to_nat(c), Laws.mul_wrap(a, b), h, wv.lt64(c))