PROOF.bend
bend-osdev-legacy-ciphers@0.1.0.0 · 8,799 lines · 237 definitions
1import Base
2import bend-osdev-bytes@0.1.0.0/bytes.bend as B
3import bend-osdev-bytes@0.1.0.0/LAWS.bend as BL
4import bend-osdev-bytes@0.1.0.0/PROOF.bend as BP
5import bend-osdev-cipher-modes@0.1.0.0/cipher_modes.bend as M
6import bend-osdev-legacy-ciphers@0.1.0.0/legacy_ciphers.bend as L
7import bend-osdev-legacy-ciphers@0.1.0.0/des.bend as D
8import bend-osdev-legacy-ciphers@0.1.0.0/tdes.bend as T
9import bend-osdev-legacy-ciphers@0.1.0.0/sm4.bend as S
10import bend-osdev-legacy-ciphers@0.1.0.0/camellia.bend as C
11import bend-osdev-legacy-ciphers@0.1.0.0/serpent.bend as P
12import bend-osdev-legacy-ciphers@0.1.0.0/twofish.bend as F
13import bend-osdev-legacy-ciphers@0.1.0.0/rc4.bend as R
14import bend-osdev-legacy-ciphers@0.1.0.0/modes64.bend as X
15import bend-osdev-legacy-ciphers@0.1.0.0/aria.bend as A
16import bend-osdev-legacy-ciphers@0.1.0.0/cast6.bend as C6
17import bend-osdev-legacy-ciphers@0.1.0.0/blowfish.bend as BF
18import bend-osdev-legacy-ciphers@0.1.0.0/cast5.bend as C5
19import bend-osdev-legacy-ciphers@0.1.0.0/tea.bend as TE
20import bend-osdev-legacy-ciphers@0.1.0.0/xtea.bend as XT
21import bend-osdev-legacy-ciphers@0.1.0.0/fcrypt.bend as FC
22import bend-osdev-legacy-ciphers@0.1.0.0/LAWS.bend as Laws
23
24
25
26
27def bool_xx(a: Bool, b: Bool) -> {a == Bool.xor(Bool.xor(a, b), b) : Bool}:
28 match a b:
29 case True{} True{}:
30 {==}
31 case True{} False{}:
32 {==}
33 case False{} True{}:
34 {==}
35 case False{} False{}:
36 {==}
37
38def word_xx(n: Nat, a: Word(n), b: Word(n)) -> {a == Word.xor(n, Word.xor(n, a, b), b) : Word(n)}:
39 match n:
40 case 0n:
41 match a b:
42 case WNil{} WNil{}:
43 {==}
44 case 1n+p:
45 match a b:
46 case WCon{ah, at} WCon{bh, bt}:
47 %bool_xx(ah, bh) : {WCon{ah, at} == WCon{_, Word.xor(p, Word.xor(p, at, bt), bt)} : Word(1n+p)}
48 %word_xx(p, at, bt) : {WCon{ah, at} == WCon{ah, _} : Word(1n+p)}
49 {==}
50
51def u32_xx(a: U32, b: U32) -> {a == U32.xor(U32.xor(a, b), b) : U32}:
52 match a b:
53 case U32{x} U32{y}:
54 %word_xx(32n, x, y) : {U32{x} == U32{_} : U32}
55 {==}
56
57def block_xx(s: M.CmBlock, k: M.CmBlock) -> {s == M.CmBlock.xor(M.CmBlock.xor(s, k), k) : M.CmBlock}:
58 match s k:
59 case M.CmBlock{+a0, +a1, +a2, +a3} M.CmBlock{+b0, +b1, +b2, +b3}:
60 %u32_xx(a0, b0) : {M.CmBlock{a0, a1, a2, a3} == M.CmBlock{_, U32.xor(U32.xor(a1, b1), b1), U32.xor(U32.xor(a2, b2), b2), U32.xor(U32.xor(a3, b3), b3)} : M.CmBlock}
61 %u32_xx(a1, b1) : {M.CmBlock{a0, a1, a2, a3} == M.CmBlock{a0, _, U32.xor(U32.xor(a2, b2), b2), U32.xor(U32.xor(a3, b3), b3)} : M.CmBlock}
62 %u32_xx(a2, b2) : {M.CmBlock{a0, a1, a2, a3} == M.CmBlock{a0, a1, _, U32.xor(U32.xor(a3, b3), b3)} : M.CmBlock}
63 %u32_xx(a3, b3) : {M.CmBlock{a0, a1, a2, a3} == M.CmBlock{a0, a1, a2, _} : M.CmBlock}
64 {==}
65
66
67
68
69def rot_1_31(x: U32) -> {x == L.lc.rotl1.bits(L.lc.rotl31.bits(x)) : U32}:
70 match x:
71 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
72 {==}
73
74def rot_31_1(x: U32) -> {x == L.lc.rotl31.bits(L.lc.rotl1.bits(x)) : U32}:
75 match x:
76 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
77 {==}
78
79def rot_19_13(x: U32) -> {x == L.lc.rotl19.bits(L.lc.rotl13.bits(x)) : U32}:
80 match x:
81 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
82 {==}
83
84def rot_13_19(x: U32) -> {x == L.lc.rotl13.bits(L.lc.rotl19.bits(x)) : U32}:
85 match x:
86 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
87 {==}
88
89def rot_29_3(x: U32) -> {x == L.lc.rotl29.bits(L.lc.rotl3.bits(x)) : U32}:
90 match x:
91 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
92 {==}
93
94def rot_3_29(x: U32) -> {x == L.lc.rotl3.bits(L.lc.rotl29.bits(x)) : U32}:
95 match x:
96 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
97 {==}
98
99def rot_25_7(x: U32) -> {x == L.lc.rotl25.bits(L.lc.rotl7.bits(x)) : U32}:
100 match x:
101 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
102 {==}
103
104def rot_7_25(x: U32) -> {x == L.lc.rotl7.bits(L.lc.rotl25.bits(x)) : U32}:
105 match x:
106 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
107 {==}
108
109def rot_27_5(x: U32) -> {x == L.lc.rotl27.bits(L.lc.rotl5.bits(x)) : U32}:
110 match x:
111 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
112 {==}
113
114def rot_5_27(x: U32) -> {x == L.lc.rotl5.bits(L.lc.rotl27.bits(x)) : U32}:
115 match x:
116 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
117 {==}
118
119def rot_10_22(x: U32) -> {x == L.lc.rotl10.bits(L.lc.rotl22.bits(x)) : U32}:
120 match x:
121 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
122 {==}
123
124def rot_22_10(x: U32) -> {x == L.lc.rotl22.bits(L.lc.rotl10.bits(x)) : U32}:
125 match x:
126 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
127 {==}
128
129def bswap2(x: U32) -> {x == L.lc.bswap.bits(L.lc.bswap.bits(x)) : U32}:
130 match x:
131 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
132 {==}
133
134
135def des_ip_fp(h: D.LcDesHalves) -> {h == D.des.ip(D.des.fp(h)) : D.LcDesHalves}:
136 match h:
137 case D.LcDesHalves{U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, U32{WCon{b0, WCon{b1, WCon{b2, WCon{b3, WCon{b4, WCon{b5, WCon{b6, WCon{b7, WCon{b8, WCon{b9, WCon{b10, WCon{b11, WCon{b12, WCon{b13, WCon{b14, WCon{b15, WCon{b16, WCon{b17, WCon{b18, WCon{b19, WCon{b20, WCon{b21, WCon{b22, WCon{b23, WCon{b24, WCon{b25, WCon{b26, WCon{b27, WCon{b28, WCon{b29, WCon{b30, WCon{b31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
138 {==}
139
140def des_fp_ip(b: L.LcBlock64) -> {b == D.des.fp(D.des.ip(b)) : L.LcBlock64}:
141 match b:
142 case L.LcBlock64{U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, U32{WCon{b0, WCon{b1, WCon{b2, WCon{b3, WCon{b4, WCon{b5, WCon{b6, WCon{b7, WCon{b8, WCon{b9, WCon{b10, WCon{b11, WCon{b12, WCon{b13, WCon{b14, WCon{b15, WCon{b16, WCon{b17, WCon{b18, WCon{b19, WCon{b20, WCon{b21, WCon{b22, WCon{b23, WCon{b24, WCon{b25, WCon{b26, WCon{b27, WCon{b28, WCon{b29, WCon{b30, WCon{b31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
143 {==}
144
145
146def byte_xor_byte(z: U32, k: U32) -> {B.byte(U32.xor(z, k)) == B.byte(U32.xor(B.byte(z), k)) : U32}:
147 match z k:
148 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} U32{WCon{b0, WCon{b1, WCon{b2, WCon{b3, WCon{b4, WCon{b5, WCon{b6, WCon{b7, WCon{b8, WCon{b9, WCon{b10, WCon{b11, WCon{b12, WCon{b13, WCon{b14, WCon{b15, WCon{b16, WCon{b17, WCon{b18, WCon{b19, WCon{b20, WCon{b21, WCon{b22, WCon{b23, WCon{b24, WCon{b25, WCon{b26, WCon{b27, WCon{b28, WCon{b29, WCon{b30, WCon{b31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
149 {==}
150
151
152def blk_bytes(b: L.LcBlock64) -> {L.lc.block_of(B.mask(L.lc.block_bytes(b, Nil{}))) == Some{b} : Maybe<&2, L.LcBlock64>}:
153 match b:
154 case L.LcBlock64{U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, U32{WCon{c0, WCon{c1, WCon{c2, WCon{c3, WCon{c4, WCon{c5, WCon{c6, WCon{c7, WCon{c8, WCon{c9, WCon{c10, WCon{c11, WCon{c12, WCon{c13, WCon{c14, WCon{c15, WCon{c16, WCon{c17, WCon{c18, WCon{c19, WCon{c20, WCon{c21, WCon{c22, WCon{c23, WCon{c24, WCon{c25, WCon{c26, WCon{c27, WCon{c28, WCon{c29, WCon{c30, WCon{c31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
155 {==}
156
157def blk8(hi: U32, lo: U32) -> {L.LcBlock64{hi, lo} == L.lc.block8(B.byte(L.lc.b0.bits(hi)), B.byte(L.lc.b1.bits(hi)), B.byte(L.lc.b2.bits(hi)), B.byte(L.lc.b3.bits(hi)), B.byte(L.lc.b0.bits(lo)), B.byte(L.lc.b1.bits(lo)), B.byte(L.lc.b2.bits(lo)), B.byte(L.lc.b3.bits(lo))) : L.LcBlock64}:
158 match hi lo:
159 case U32{WCon{a0, WCon{a1, WCon{a2, WCon{a3, WCon{a4, WCon{a5, WCon{a6, WCon{a7, WCon{a8, WCon{a9, WCon{a10, WCon{a11, WCon{a12, WCon{a13, WCon{a14, WCon{a15, WCon{a16, WCon{a17, WCon{a18, WCon{a19, WCon{a20, WCon{a21, WCon{a22, WCon{a23, WCon{a24, WCon{a25, WCon{a26, WCon{a27, WCon{a28, WCon{a29, WCon{a30, WCon{a31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} U32{WCon{c0, WCon{c1, WCon{c2, WCon{c3, WCon{c4, WCon{c5, WCon{c6, WCon{c7, WCon{c8, WCon{c9, WCon{c10, WCon{c11, WCon{c12, WCon{c13, WCon{c14, WCon{c15, WCon{c16, WCon{c17, WCon{c18, WCon{c19, WCon{c20, WCon{c21, WCon{c22, WCon{c23, WCon{c24, WCon{c25, WCon{c26, WCon{c27, WCon{c28, WCon{c29, WCon{c30, WCon{c31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
160 {==}
161
162
163
164
165
166def des_swap2(h: D.LcDesHalves) -> {h == D.des.swap(D.des.swap(h)) : D.LcDesHalves}:
167 match h:
168 case D.LcDesHalves{l, r}:
169 {==}
170
171def des_unstep_step(+k: D.LcDesRk, h: D.LcDesHalves) -> {h == D.des.unstep(k, D.des.step(k, h)) : D.LcDesHalves}:
172 match h:
173 case D.LcDesHalves{l, +r}:
174 %u32_xx(l, D.des.f(k, r)) : {D.LcDesHalves{l, r} == D.LcDesHalves{_, r} : D.LcDesHalves}
175 {==}
176
177def des_step_unstep(+k: D.LcDesRk, h: D.LcDesHalves) -> {h == D.des.step(k, D.des.unstep(k, h)) : D.LcDesHalves}:
178 match h:
179 case D.LcDesHalves{+a, b}:
180 %u32_xx(b, D.des.f(k, a)) : {D.LcDesHalves{a, b} == D.LcDesHalves{a, _} : D.LcDesHalves}
181 {==}
182
183def des_unrounds_rounds(ks: List<&2, D.LcDesRk>, +h: D.LcDesHalves) -> {h == D.des.unrounds(ks, D.des.rounds(ks, h)) : D.LcDesHalves}:
184 match ks:
185 case Nil{}:
186 {==}
187 case Con{+k, +t}:
188 %des_unrounds_rounds(t, D.des.step(k, h)) : {h == D.des.unstep(k, _) : D.LcDesHalves}
189 des_unstep_step(k, h)
190
191def des_rounds_unrounds(ks: List<&2, D.LcDesRk>, +h: D.LcDesHalves) -> {h == D.des.rounds(ks, D.des.unrounds(ks, h)) : D.LcDesHalves}:
192 match ks:
193 case Nil{}:
194 {==}
195 case Con{+k, +t}:
196 %des_step_unstep(k, D.des.unrounds(t, h)) : {h == D.des.rounds(t, _) : D.LcDesHalves}
197 des_rounds_unrounds(t, h)
198
199def Laws.des_round_trip(k, b):
200 match k:
201 case D.LcDesKey{+ks}:
202 %des_ip_fp(D.des.swap(D.des.rounds(ks, D.des.ip(b)))) : {D.des.fp(D.des.unrounds(ks, D.des.swap(_))) == b : L.LcBlock64}
203 %des_swap2(D.des.rounds(ks, D.des.ip(b))) : {D.des.fp(D.des.unrounds(ks, _)) == b : L.LcBlock64}
204 %des_unrounds_rounds(ks, D.des.ip(b)) : {D.des.fp(_) == b : L.LcBlock64}
205 Equal.sym(L.LcBlock64, b, D.des.fp(D.des.ip(b)), des_fp_ip(b))
206
207def Laws.des_round_trip_dual(k, b):
208 match k:
209 case D.LcDesKey{+ks}:
210 %des_ip_fp(D.des.unrounds(ks, D.des.swap(D.des.ip(b)))) : {D.des.fp(D.des.swap(D.des.rounds(ks, _))) == b : L.LcBlock64}
211 %des_rounds_unrounds(ks, D.des.swap(D.des.ip(b))) : {D.des.fp(D.des.swap(_)) == b : L.LcBlock64}
212 %des_swap2(D.des.ip(b)) : {D.des.fp(_) == b : L.LcBlock64}
213 Equal.sym(L.LcBlock64, b, D.des.fp(D.des.ip(b)), des_fp_ip(b))
214
215
216
217def des_rt(k: D.LcDesKey, +b: L.LcBlock64) -> {b == D.LcDes.decrypt(k, D.LcDes.encrypt(k, b)) : L.LcBlock64}:
218 Equal.sym(L.LcBlock64, D.LcDes.decrypt(k, D.LcDes.encrypt(k, b)), b, Laws.des_round_trip(k, b))
219
220def des_rt_dual(k: D.LcDesKey, +b: L.LcBlock64) -> {b == D.LcDes.encrypt(k, D.LcDes.decrypt(k, b)) : L.LcBlock64}:
221 Equal.sym(L.LcBlock64, D.LcDes.encrypt(k, D.LcDes.decrypt(k, b)), b, Laws.des_round_trip_dual(k, b))
222
223def Laws.tdes_round_trip(k, b):
224 match k:
225 case T.LcTdesKey{+k1, +k2, +k3}:
226 %des_rt(k3, D.LcDes.decrypt(k2, D.LcDes.encrypt(k1, b))) : {D.LcDes.decrypt(k1, D.LcDes.encrypt(k2, _)) == b : L.LcBlock64}
227 %des_rt_dual(k2, D.LcDes.encrypt(k1, b)) : {D.LcDes.decrypt(k1, _) == b : L.LcBlock64}
228 Laws.des_round_trip(k1, b)
229
230def Laws.tdes_round_trip_dual(k, b):
231 match k:
232 case T.LcTdesKey{+k1, +k2, +k3}:
233 %des_rt_dual(k1, D.LcDes.encrypt(k2, D.LcDes.decrypt(k3, b))) : {D.LcDes.encrypt(k3, D.LcDes.decrypt(k2, _)) == b : L.LcBlock64}
234 %des_rt(k2, D.LcDes.decrypt(k3, b)) : {D.LcDes.encrypt(k3, _) == b : L.LcBlock64}
235 Laws.des_round_trip_dual(k3, b)
236
237
238
239def sm4_unstep_step(+tab: L.LcTab, +rk: U32, s: M.CmBlock) -> {s == S.sm4.unstep(tab, rk, S.sm4.step(tab, rk, s)) : M.CmBlock}:
240 match s:
241 case M.CmBlock{x0, +x1, +x2, +x3}:
242 %u32_xx(x0, S.sm4.t(tab, U32.xor(U32.xor(U32.xor(x1, x2), x3), rk))) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{_, x1, x2, x3} : M.CmBlock}
243 {==}
244
245def sm4_step_unstep(+tab: L.LcTab, +rk: U32, s: M.CmBlock) -> {s == S.sm4.step(tab, rk, S.sm4.unstep(tab, rk, s)) : M.CmBlock}:
246 match s:
247 case M.CmBlock{+y0, +y1, +y2, y3}:
248 %u32_xx(y3, S.sm4.t(tab, U32.xor(U32.xor(U32.xor(y0, y1), y2), rk))) : {M.CmBlock{y0, y1, y2, y3} == M.CmBlock{y0, y1, y2, _} : M.CmBlock}
249 {==}
250
251def sm4_unrounds_rounds(+tab: L.LcTab, ks: List<&2, U32>, +s: M.CmBlock) -> {s == S.sm4.unrounds(tab, ks, S.sm4.rounds(tab, ks, s)) : M.CmBlock}:
252 match ks:
253 case Nil{}:
254 {==}
255 case Con{+k, +t}:
256 %sm4_unrounds_rounds(tab, t, S.sm4.step(tab, k, s)) : {s == S.sm4.unstep(tab, k, _) : M.CmBlock}
257 sm4_unstep_step(tab, k, s)
258
259def sm4_rounds_unrounds(+tab: L.LcTab, ks: List<&2, U32>, +s: M.CmBlock) -> {s == S.sm4.rounds(tab, ks, S.sm4.unrounds(tab, ks, s)) : M.CmBlock}:
260 match ks:
261 case Nil{}:
262 {==}
263 case Con{+k, +t}:
264 %sm4_step_unstep(tab, k, S.sm4.unrounds(tab, t, s)) : {s == S.sm4.rounds(tab, t, _) : M.CmBlock}
265 sm4_rounds_unrounds(tab, t, s)
266
267def sm4_rev2(s: M.CmBlock) -> {s == S.sm4.rev(S.sm4.rev(s)) : M.CmBlock}:
268 match s:
269 case M.CmBlock{a, b, c, d}:
270 {==}
271
272def Laws.sm4_round_trip(k, b):
273 match k:
274 case S.LcSm4Key{+tab, +ks}:
275 %sm4_rev2(S.sm4.rounds(tab, ks, b)) : {S.sm4.unrounds(tab, ks, _) == b : M.CmBlock}
276 Equal.sym(M.CmBlock, b, S.sm4.unrounds(tab, ks, S.sm4.rounds(tab, ks, b)), sm4_unrounds_rounds(tab, ks, b))
277
278def Laws.sm4_round_trip_dual(k, b):
279 match k:
280 case S.LcSm4Key{+tab, +ks}:
281 %sm4_rounds_unrounds(tab, ks, S.sm4.rev(b)) : {S.sm4.rev(_) == b : M.CmBlock}
282 Equal.sym(M.CmBlock, b, S.sm4.rev(S.sm4.rev(b)), sm4_rev2(b))
283
284
285
286
287def cam_fl_inv(x: L.LcBlock64, k: L.LcBlock64) -> {x == C.cam.flinv(C.cam.fl(x, k), k) : L.LcBlock64}:
288 match x k:
289 case L.LcBlock64{+x1, +x2} L.LcBlock64{+k1, +k2}:
290 %u32_xx(x1, U32.or(U32.xor(x2, L.lc.rotl(U32.and(x1, k1), 1n)), k2)) : {L.LcBlock64{x1, x2} == L.LcBlock64{_, U32.xor(U32.xor(x2, L.lc.rotl(U32.and(x1, k1), 1n)), L.lc.rotl(U32.and(_, k1), 1n))} : L.LcBlock64}
291 %u32_xx(x2, L.lc.rotl(U32.and(x1, k1), 1n)) : {L.LcBlock64{x1, x2} == L.LcBlock64{x1, _} : L.LcBlock64}
292 {==}
293
294def cam_flinv_inv(y: L.LcBlock64, k: L.LcBlock64) -> {y == C.cam.fl(C.cam.flinv(y, k), k) : L.LcBlock64}:
295 match y k:
296 case L.LcBlock64{+y1, +y2} L.LcBlock64{+k1, +k2}:
297 %u32_xx(y2, L.lc.rotl(U32.and(U32.xor(y1, U32.or(y2, k2)), k1), 1n)) : {L.LcBlock64{y1, y2} == L.LcBlock64{U32.xor(U32.xor(y1, U32.or(y2, k2)), U32.or(_, k2)), _} : L.LcBlock64}
298 %u32_xx(y1, U32.or(y2, k2)) : {L.LcBlock64{y1, y2} == L.LcBlock64{_, y2} : L.LcBlock64}
299 {==}
300
301def cam_white(a: L.LcBlock64, b: L.LcBlock64, +s: M.CmBlock) -> {s == C.cam.white(a, b, C.cam.white(a, b, s)) : M.CmBlock}:
302 match a b:
303 case L.LcBlock64{+a0, +a1} L.LcBlock64{+b0, +b1}:
304 block_xx(s, M.CmBlock{a0, a1, b0, b1})
305
306def cam_f1(+t: C.LcCamTabs, +k: L.LcBlock64, s: M.CmBlock) -> {s == C.cam.unop(C.LcCamF1{t, k}, C.cam.op(C.LcCamF1{t, k}, s)) : M.CmBlock}:
307 match s:
308 case M.CmBlock{+s0, +s1, +s2, +s3}:
309 %u32_xx(s2, C.cam.hi(C.cam.f(t, L.LcBlock64{s0, s1}, k))) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{s0, s1, _, U32.xor(U32.xor(s3, C.cam.lo(C.cam.f(t, L.LcBlock64{s0, s1}, k))), C.cam.lo(C.cam.f(t, L.LcBlock64{s0, s1}, k)))} : M.CmBlock}
310 %u32_xx(s3, C.cam.lo(C.cam.f(t, L.LcBlock64{s0, s1}, k))) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{s0, s1, s2, _} : M.CmBlock}
311 {==}
312
313def cam_f1d(+t: C.LcCamTabs, +k: L.LcBlock64, s: M.CmBlock) -> {s == C.cam.op(C.LcCamF1{t, k}, C.cam.unop(C.LcCamF1{t, k}, s)) : M.CmBlock}:
314 match s:
315 case M.CmBlock{+s0, +s1, +s2, +s3}:
316 %u32_xx(s2, C.cam.hi(C.cam.f(t, L.LcBlock64{s0, s1}, k))) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{s0, s1, _, U32.xor(U32.xor(s3, C.cam.lo(C.cam.f(t, L.LcBlock64{s0, s1}, k))), C.cam.lo(C.cam.f(t, L.LcBlock64{s0, s1}, k)))} : M.CmBlock}
317 %u32_xx(s3, C.cam.lo(C.cam.f(t, L.LcBlock64{s0, s1}, k))) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{s0, s1, s2, _} : M.CmBlock}
318 {==}
319
320def cam_f2(+t: C.LcCamTabs, +k: L.LcBlock64, s: M.CmBlock) -> {s == C.cam.unop(C.LcCamF2{t, k}, C.cam.op(C.LcCamF2{t, k}, s)) : M.CmBlock}:
321 match s:
322 case M.CmBlock{+s0, +s1, +s2, +s3}:
323 %u32_xx(s0, C.cam.hi(C.cam.f(t, L.LcBlock64{s2, s3}, k))) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{_, U32.xor(U32.xor(s1, C.cam.lo(C.cam.f(t, L.LcBlock64{s2, s3}, k))), C.cam.lo(C.cam.f(t, L.LcBlock64{s2, s3}, k))), s2, s3} : M.CmBlock}
324 %u32_xx(s1, C.cam.lo(C.cam.f(t, L.LcBlock64{s2, s3}, k))) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{s0, _, s2, s3} : M.CmBlock}
325 {==}
326
327def cam_f2d(+t: C.LcCamTabs, +k: L.LcBlock64, s: M.CmBlock) -> {s == C.cam.op(C.LcCamF2{t, k}, C.cam.unop(C.LcCamF2{t, k}, s)) : M.CmBlock}:
328 match s:
329 case M.CmBlock{+s0, +s1, +s2, +s3}:
330 %u32_xx(s0, C.cam.hi(C.cam.f(t, L.LcBlock64{s2, s3}, k))) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{_, U32.xor(U32.xor(s1, C.cam.lo(C.cam.f(t, L.LcBlock64{s2, s3}, k))), C.cam.lo(C.cam.f(t, L.LcBlock64{s2, s3}, k))), s2, s3} : M.CmBlock}
331 %u32_xx(s1, C.cam.lo(C.cam.f(t, L.LcBlock64{s2, s3}, k))) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{s0, _, s2, s3} : M.CmBlock}
332 {==}
333
334def cam_fl_step(a: L.LcBlock64, b: L.LcBlock64, s: M.CmBlock) -> {s == C.cam.unop(C.LcCamFl{a, b}, C.cam.op(C.LcCamFl{a, b}, s)) : M.CmBlock}:
335 match a b s:
336 case L.LcBlock64{+a0, +a1} L.LcBlock64{+b0, +b1} M.CmBlock{+s0, +s1, +s2, +s3}:
337 %cam_fl_inv(L.LcBlock64{s0, s1}, L.LcBlock64{a0, a1}) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{C.cam.hi(_), C.cam.lo(_), C.cam.hi(C.cam.fl(C.cam.flinv(L.LcBlock64{s2, s3}, L.LcBlock64{b0, b1}), L.LcBlock64{b0, b1})), C.cam.lo(C.cam.fl(C.cam.flinv(L.LcBlock64{s2, s3}, L.LcBlock64{b0, b1}), L.LcBlock64{b0, b1}))} : M.CmBlock}
338 %cam_flinv_inv(L.LcBlock64{s2, s3}, L.LcBlock64{b0, b1}) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{s0, s1, C.cam.hi(_), C.cam.lo(_)} : M.CmBlock}
339 {==}
340
341def cam_fl_step_dual(a: L.LcBlock64, b: L.LcBlock64, s: M.CmBlock) -> {s == C.cam.op(C.LcCamFl{a, b}, C.cam.unop(C.LcCamFl{a, b}, s)) : M.CmBlock}:
342 match a b s:
343 case L.LcBlock64{+a0, +a1} L.LcBlock64{+b0, +b1} M.CmBlock{+s0, +s1, +s2, +s3}:
344 %cam_flinv_inv(L.LcBlock64{s0, s1}, L.LcBlock64{a0, a1}) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{C.cam.hi(_), C.cam.lo(_), C.cam.hi(C.cam.flinv(C.cam.fl(L.LcBlock64{s2, s3}, L.LcBlock64{b0, b1}), L.LcBlock64{b0, b1})), C.cam.lo(C.cam.flinv(C.cam.fl(L.LcBlock64{s2, s3}, L.LcBlock64{b0, b1}), L.LcBlock64{b0, b1}))} : M.CmBlock}
345 %cam_fl_inv(L.LcBlock64{s2, s3}, L.LcBlock64{b0, b1}) : {M.CmBlock{s0, s1, s2, s3} == M.CmBlock{s0, s1, C.cam.hi(_), C.cam.lo(_)} : M.CmBlock}
346 {==}
347
348def cam_unop_op(o: C.LcCamOp, +s: M.CmBlock) -> {s == C.cam.unop(o, C.cam.op(o, s)) : M.CmBlock}:
349 match o:
350 case C.LcCamWhite{a, b}:
351 cam_white(a, b, s)
352 case C.LcCamF1{t, k}:
353 cam_f1(t, k, s)
354 case C.LcCamF2{t, k}:
355 cam_f2(t, k, s)
356 case C.LcCamFl{a, b}:
357 cam_fl_step(a, b, s)
358 case C.LcCamSwap{}:
359 match s:
360 case M.CmBlock{s0, s1, s2, s3}:
361 {==}
362
363def cam_op_unop(o: C.LcCamOp, +s: M.CmBlock) -> {s == C.cam.op(o, C.cam.unop(o, s)) : M.CmBlock}:
364 match o:
365 case C.LcCamWhite{a, b}:
366 cam_white(a, b, s)
367 case C.LcCamF1{t, k}:
368 cam_f1d(t, k, s)
369 case C.LcCamF2{t, k}:
370 cam_f2d(t, k, s)
371 case C.LcCamFl{a, b}:
372 cam_fl_step_dual(a, b, s)
373 case C.LcCamSwap{}:
374 match s:
375 case M.CmBlock{s0, s1, s2, s3}:
376 {==}
377
378def cam_unrun_run(os: List<&2, C.LcCamOp>, +s: M.CmBlock) -> {s == C.cam.unrun(os, C.cam.run(os, s)) : M.CmBlock}:
379 match os:
380 case Nil{}:
381 {==}
382 case Con{+o, +t}:
383 %cam_unrun_run(t, C.cam.op(o, s)) : {s == C.cam.unop(o, _) : M.CmBlock}
384 cam_unop_op(o, s)
385
386def cam_run_unrun(os: List<&2, C.LcCamOp>, +s: M.CmBlock) -> {s == C.cam.run(os, C.cam.unrun(os, s)) : M.CmBlock}:
387 match os:
388 case Nil{}:
389 {==}
390 case Con{+o, +t}:
391 %cam_op_unop(o, C.cam.unrun(t, s)) : {s == C.cam.run(t, _) : M.CmBlock}
392 cam_run_unrun(t, s)
393
394def Laws.camellia_round_trip(k, b):
395 match k:
396 case C.LcCamelliaKey{ops}:
397 Equal.sym(M.CmBlock, b, C.cam.unrun(ops, C.cam.run(ops, b)), cam_unrun_run(ops, b))
398
399def Laws.camellia_round_trip_dual(k, b):
400 match k:
401 case C.LcCamelliaKey{ops}:
402 Equal.sym(M.CmBlock, b, C.cam.run(ops, C.cam.unrun(ops, b)), cam_run_unrun(ops, b))
403
404
405
406
407def tf_bswap(s: M.CmBlock) -> {s == F.tf.unop(F.LcTfBswap{}, F.tf.op(F.LcTfBswap{}, s)) : M.CmBlock}:
408 match s:
409 case M.CmBlock{+a, +b, +c, +d}:
410 %bswap2(a) : {M.CmBlock{a, b, c, d} == M.CmBlock{_, L.lc.bswap.bits(L.lc.bswap.bits(b)), L.lc.bswap.bits(L.lc.bswap.bits(c)), L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
411 %bswap2(b) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, _, L.lc.bswap.bits(L.lc.bswap.bits(c)), L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
412 %bswap2(c) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, _, L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
413 %bswap2(d) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, c, _} : M.CmBlock}
414 {==}
415
416def tf_bswapd(s: M.CmBlock) -> {s == F.tf.op(F.LcTfBswap{}, F.tf.unop(F.LcTfBswap{}, s)) : M.CmBlock}:
417 match s:
418 case M.CmBlock{+a, +b, +c, +d}:
419 %bswap2(a) : {M.CmBlock{a, b, c, d} == M.CmBlock{_, L.lc.bswap.bits(L.lc.bswap.bits(b)), L.lc.bswap.bits(L.lc.bswap.bits(c)), L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
420 %bswap2(b) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, _, L.lc.bswap.bits(L.lc.bswap.bits(c)), L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
421 %bswap2(c) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, _, L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
422 %bswap2(d) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, c, _} : M.CmBlock}
423 {==}
424
425def tf_round(+tb: F.LcTfTabs, +sk: List<&2, U32>, +ka: U32, +kb: U32, s: M.CmBlock) -> {s == F.tf.unop(F.LcTfRound{tb, sk, ka, kb}, F.tf.op(F.LcTfRound{tb, sk, ka, kb}, s)) : M.CmBlock}:
426 match s:
427 case M.CmBlock{+r0, +r1, +r2, +r3}:
428 %rot_1_31(U32.xor(r2, F.tf.f0(F.tf.f(tb, sk, r0, r1, ka, kb)))) : {M.CmBlock{r0, r1, r2, r3} == M.CmBlock{r0, r1, U32.xor(_, F.tf.f0(F.tf.f(tb, sk, r0, r1, ka, kb))), L.lc.rotl31.bits(U32.xor(U32.xor(L.lc.rotl1.bits(r3), F.tf.f1(F.tf.f(tb, sk, r0, r1, ka, kb))), F.tf.f1(F.tf.f(tb, sk, r0, r1, ka, kb))))} : M.CmBlock}
429 %u32_xx(r2, F.tf.f0(F.tf.f(tb, sk, r0, r1, ka, kb))) : {M.CmBlock{r0, r1, r2, r3} == M.CmBlock{r0, r1, _, L.lc.rotl31.bits(U32.xor(U32.xor(L.lc.rotl1.bits(r3), F.tf.f1(F.tf.f(tb, sk, r0, r1, ka, kb))), F.tf.f1(F.tf.f(tb, sk, r0, r1, ka, kb))))} : M.CmBlock}
430 %u32_xx(L.lc.rotl1.bits(r3), F.tf.f1(F.tf.f(tb, sk, r0, r1, ka, kb))) : {M.CmBlock{r0, r1, r2, r3} == M.CmBlock{r0, r1, r2, L.lc.rotl31.bits(_)} : M.CmBlock}
431 %rot_31_1(r3) : {M.CmBlock{r0, r1, r2, r3} == M.CmBlock{r0, r1, r2, _} : M.CmBlock}
432 {==}
433
434def tf_roundd(+tb: F.LcTfTabs, +sk: List<&2, U32>, +ka: U32, +kb: U32, s: M.CmBlock) -> {s == F.tf.op(F.LcTfRound{tb, sk, ka, kb}, F.tf.unop(F.LcTfRound{tb, sk, ka, kb}, s)) : M.CmBlock}:
435 match s:
436 case M.CmBlock{+a, +b, +c, +d}:
437 %u32_xx(L.lc.rotl1.bits(a), F.tf.f0(F.tf.f(tb, sk, c, d, ka, kb))) : {M.CmBlock{a, b, c, d} == M.CmBlock{L.lc.rotl31.bits(_), U32.xor(L.lc.rotl1.bits(L.lc.rotl31.bits(U32.xor(b, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))))), F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))), c, d} : M.CmBlock}
438 %rot_31_1(a) : {M.CmBlock{a, b, c, d} == M.CmBlock{_, U32.xor(L.lc.rotl1.bits(L.lc.rotl31.bits(U32.xor(b, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))))), F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))), c, d} : M.CmBlock}
439 %rot_1_31(U32.xor(b, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb)))) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, U32.xor(_, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))), c, d} : M.CmBlock}
440 %u32_xx(b, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, _, c, d} : M.CmBlock}
441 {==}
442
443def tf_unop_op(o: F.LcTfOp, +s: M.CmBlock) -> {s == F.tf.unop(o, F.tf.op(o, s)) : M.CmBlock}:
444 match o:
445 case F.LcTfBswap{}:
446 tf_bswap(s)
447 case F.LcTfWhite{k}:
448 block_xx(s, k)
449 case F.LcTfRound{tb, sk, ka, kb}:
450 tf_round(tb, sk, ka, kb, s)
451 case F.LcTfSwap{}:
452 match s:
453 case M.CmBlock{a, b, c, d}:
454 {==}
455
456def tf_op_unop(o: F.LcTfOp, +s: M.CmBlock) -> {s == F.tf.op(o, F.tf.unop(o, s)) : M.CmBlock}:
457 match o:
458 case F.LcTfBswap{}:
459 tf_bswapd(s)
460 case F.LcTfWhite{k}:
461 block_xx(s, k)
462 case F.LcTfRound{tb, sk, ka, kb}:
463 tf_roundd(tb, sk, ka, kb, s)
464 case F.LcTfSwap{}:
465 match s:
466 case M.CmBlock{a, b, c, d}:
467 {==}
468
469def tf_unrun_run(os: List<&2, F.LcTfOp>, +s: M.CmBlock) -> {s == F.tf.unrun(os, F.tf.run(os, s)) : M.CmBlock}:
470 match os:
471 case Nil{}:
472 {==}
473 case Con{+o, +t}:
474 %tf_unrun_run(t, F.tf.op(o, s)) : {s == F.tf.unop(o, _) : M.CmBlock}
475 tf_unop_op(o, s)
476
477def tf_run_unrun(os: List<&2, F.LcTfOp>, +s: M.CmBlock) -> {s == F.tf.run(os, F.tf.unrun(os, s)) : M.CmBlock}:
478 match os:
479 case Nil{}:
480 {==}
481 case Con{+o, +t}:
482 %tf_op_unop(o, F.tf.unrun(t, s)) : {s == F.tf.run(t, _) : M.CmBlock}
483 tf_run_unrun(t, s)
484
485def Laws.twofish_round_trip(k, b):
486 match k:
487 case F.LcTwofishKey{ops}:
488 Equal.sym(M.CmBlock, b, F.tf.unrun(ops, F.tf.run(ops, b)), tf_unrun_run(ops, b))
489
490def Laws.twofish_round_trip_dual(k, b):
491 match k:
492 case F.LcTwofishKey{ops}:
493 Equal.sym(M.CmBlock, b, F.tf.run(ops, F.tf.unrun(ops, b)), tf_run_unrun(ops, b))
494
495
496
497
498
499
500
501
502
503def sp_nib_0_t(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp0{}, False{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp0{}, True{}, n)), P.sp.nb(P.sp.nib(P.LcSp0{}, True{}, n)), P.sp.nc(P.sp.nib(P.LcSp0{}, True{}, n)), P.sp.nd(P.sp.nib(P.LcSp0{}, True{}, n))}) : P.LcSpNib}:
504 match n:
505 case P.LcSpNib{a, b, c, d}:
506 match a b c d:
507 case True{} True{} True{} True{}:
508 {==}
509 case True{} True{} True{} False{}:
510 {==}
511 case True{} True{} False{} True{}:
512 {==}
513 case True{} True{} False{} False{}:
514 {==}
515 case True{} False{} True{} True{}:
516 {==}
517 case True{} False{} True{} False{}:
518 {==}
519 case True{} False{} False{} True{}:
520 {==}
521 case True{} False{} False{} False{}:
522 {==}
523 case False{} True{} True{} True{}:
524 {==}
525 case False{} True{} True{} False{}:
526 {==}
527 case False{} True{} False{} True{}:
528 {==}
529 case False{} True{} False{} False{}:
530 {==}
531 case False{} False{} True{} True{}:
532 {==}
533 case False{} False{} True{} False{}:
534 {==}
535 case False{} False{} False{} True{}:
536 {==}
537 case False{} False{} False{} False{}:
538 {==}
539
540def sp_nib_0_f(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp0{}, True{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp0{}, False{}, n)), P.sp.nb(P.sp.nib(P.LcSp0{}, False{}, n)), P.sp.nc(P.sp.nib(P.LcSp0{}, False{}, n)), P.sp.nd(P.sp.nib(P.LcSp0{}, False{}, n))}) : P.LcSpNib}:
541 match n:
542 case P.LcSpNib{a, b, c, d}:
543 match a b c d:
544 case True{} True{} True{} True{}:
545 {==}
546 case True{} True{} True{} False{}:
547 {==}
548 case True{} True{} False{} True{}:
549 {==}
550 case True{} True{} False{} False{}:
551 {==}
552 case True{} False{} True{} True{}:
553 {==}
554 case True{} False{} True{} False{}:
555 {==}
556 case True{} False{} False{} True{}:
557 {==}
558 case True{} False{} False{} False{}:
559 {==}
560 case False{} True{} True{} True{}:
561 {==}
562 case False{} True{} True{} False{}:
563 {==}
564 case False{} True{} False{} True{}:
565 {==}
566 case False{} True{} False{} False{}:
567 {==}
568 case False{} False{} True{} True{}:
569 {==}
570 case False{} False{} True{} False{}:
571 {==}
572 case False{} False{} False{} True{}:
573 {==}
574 case False{} False{} False{} False{}:
575 {==}
576
577def sp_nib_1_t(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp1{}, False{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp1{}, True{}, n)), P.sp.nb(P.sp.nib(P.LcSp1{}, True{}, n)), P.sp.nc(P.sp.nib(P.LcSp1{}, True{}, n)), P.sp.nd(P.sp.nib(P.LcSp1{}, True{}, n))}) : P.LcSpNib}:
578 match n:
579 case P.LcSpNib{a, b, c, d}:
580 match a b c d:
581 case True{} True{} True{} True{}:
582 {==}
583 case True{} True{} True{} False{}:
584 {==}
585 case True{} True{} False{} True{}:
586 {==}
587 case True{} True{} False{} False{}:
588 {==}
589 case True{} False{} True{} True{}:
590 {==}
591 case True{} False{} True{} False{}:
592 {==}
593 case True{} False{} False{} True{}:
594 {==}
595 case True{} False{} False{} False{}:
596 {==}
597 case False{} True{} True{} True{}:
598 {==}
599 case False{} True{} True{} False{}:
600 {==}
601 case False{} True{} False{} True{}:
602 {==}
603 case False{} True{} False{} False{}:
604 {==}
605 case False{} False{} True{} True{}:
606 {==}
607 case False{} False{} True{} False{}:
608 {==}
609 case False{} False{} False{} True{}:
610 {==}
611 case False{} False{} False{} False{}:
612 {==}
613
614def sp_nib_1_f(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp1{}, True{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp1{}, False{}, n)), P.sp.nb(P.sp.nib(P.LcSp1{}, False{}, n)), P.sp.nc(P.sp.nib(P.LcSp1{}, False{}, n)), P.sp.nd(P.sp.nib(P.LcSp1{}, False{}, n))}) : P.LcSpNib}:
615 match n:
616 case P.LcSpNib{a, b, c, d}:
617 match a b c d:
618 case True{} True{} True{} True{}:
619 {==}
620 case True{} True{} True{} False{}:
621 {==}
622 case True{} True{} False{} True{}:
623 {==}
624 case True{} True{} False{} False{}:
625 {==}
626 case True{} False{} True{} True{}:
627 {==}
628 case True{} False{} True{} False{}:
629 {==}
630 case True{} False{} False{} True{}:
631 {==}
632 case True{} False{} False{} False{}:
633 {==}
634 case False{} True{} True{} True{}:
635 {==}
636 case False{} True{} True{} False{}:
637 {==}
638 case False{} True{} False{} True{}:
639 {==}
640 case False{} True{} False{} False{}:
641 {==}
642 case False{} False{} True{} True{}:
643 {==}
644 case False{} False{} True{} False{}:
645 {==}
646 case False{} False{} False{} True{}:
647 {==}
648 case False{} False{} False{} False{}:
649 {==}
650
651def sp_nib_2_t(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp2{}, False{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp2{}, True{}, n)), P.sp.nb(P.sp.nib(P.LcSp2{}, True{}, n)), P.sp.nc(P.sp.nib(P.LcSp2{}, True{}, n)), P.sp.nd(P.sp.nib(P.LcSp2{}, True{}, n))}) : P.LcSpNib}:
652 match n:
653 case P.LcSpNib{a, b, c, d}:
654 match a b c d:
655 case True{} True{} True{} True{}:
656 {==}
657 case True{} True{} True{} False{}:
658 {==}
659 case True{} True{} False{} True{}:
660 {==}
661 case True{} True{} False{} False{}:
662 {==}
663 case True{} False{} True{} True{}:
664 {==}
665 case True{} False{} True{} False{}:
666 {==}
667 case True{} False{} False{} True{}:
668 {==}
669 case True{} False{} False{} False{}:
670 {==}
671 case False{} True{} True{} True{}:
672 {==}
673 case False{} True{} True{} False{}:
674 {==}
675 case False{} True{} False{} True{}:
676 {==}
677 case False{} True{} False{} False{}:
678 {==}
679 case False{} False{} True{} True{}:
680 {==}
681 case False{} False{} True{} False{}:
682 {==}
683 case False{} False{} False{} True{}:
684 {==}
685 case False{} False{} False{} False{}:
686 {==}
687
688def sp_nib_2_f(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp2{}, True{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp2{}, False{}, n)), P.sp.nb(P.sp.nib(P.LcSp2{}, False{}, n)), P.sp.nc(P.sp.nib(P.LcSp2{}, False{}, n)), P.sp.nd(P.sp.nib(P.LcSp2{}, False{}, n))}) : P.LcSpNib}:
689 match n:
690 case P.LcSpNib{a, b, c, d}:
691 match a b c d:
692 case True{} True{} True{} True{}:
693 {==}
694 case True{} True{} True{} False{}:
695 {==}
696 case True{} True{} False{} True{}:
697 {==}
698 case True{} True{} False{} False{}:
699 {==}
700 case True{} False{} True{} True{}:
701 {==}
702 case True{} False{} True{} False{}:
703 {==}
704 case True{} False{} False{} True{}:
705 {==}
706 case True{} False{} False{} False{}:
707 {==}
708 case False{} True{} True{} True{}:
709 {==}
710 case False{} True{} True{} False{}:
711 {==}
712 case False{} True{} False{} True{}:
713 {==}
714 case False{} True{} False{} False{}:
715 {==}
716 case False{} False{} True{} True{}:
717 {==}
718 case False{} False{} True{} False{}:
719 {==}
720 case False{} False{} False{} True{}:
721 {==}
722 case False{} False{} False{} False{}:
723 {==}
724
725def sp_nib_3_t(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp3{}, False{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp3{}, True{}, n)), P.sp.nb(P.sp.nib(P.LcSp3{}, True{}, n)), P.sp.nc(P.sp.nib(P.LcSp3{}, True{}, n)), P.sp.nd(P.sp.nib(P.LcSp3{}, True{}, n))}) : P.LcSpNib}:
726 match n:
727 case P.LcSpNib{a, b, c, d}:
728 match a b c d:
729 case True{} True{} True{} True{}:
730 {==}
731 case True{} True{} True{} False{}:
732 {==}
733 case True{} True{} False{} True{}:
734 {==}
735 case True{} True{} False{} False{}:
736 {==}
737 case True{} False{} True{} True{}:
738 {==}
739 case True{} False{} True{} False{}:
740 {==}
741 case True{} False{} False{} True{}:
742 {==}
743 case True{} False{} False{} False{}:
744 {==}
745 case False{} True{} True{} True{}:
746 {==}
747 case False{} True{} True{} False{}:
748 {==}
749 case False{} True{} False{} True{}:
750 {==}
751 case False{} True{} False{} False{}:
752 {==}
753 case False{} False{} True{} True{}:
754 {==}
755 case False{} False{} True{} False{}:
756 {==}
757 case False{} False{} False{} True{}:
758 {==}
759 case False{} False{} False{} False{}:
760 {==}
761
762def sp_nib_3_f(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp3{}, True{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp3{}, False{}, n)), P.sp.nb(P.sp.nib(P.LcSp3{}, False{}, n)), P.sp.nc(P.sp.nib(P.LcSp3{}, False{}, n)), P.sp.nd(P.sp.nib(P.LcSp3{}, False{}, n))}) : P.LcSpNib}:
763 match n:
764 case P.LcSpNib{a, b, c, d}:
765 match a b c d:
766 case True{} True{} True{} True{}:
767 {==}
768 case True{} True{} True{} False{}:
769 {==}
770 case True{} True{} False{} True{}:
771 {==}
772 case True{} True{} False{} False{}:
773 {==}
774 case True{} False{} True{} True{}:
775 {==}
776 case True{} False{} True{} False{}:
777 {==}
778 case True{} False{} False{} True{}:
779 {==}
780 case True{} False{} False{} False{}:
781 {==}
782 case False{} True{} True{} True{}:
783 {==}
784 case False{} True{} True{} False{}:
785 {==}
786 case False{} True{} False{} True{}:
787 {==}
788 case False{} True{} False{} False{}:
789 {==}
790 case False{} False{} True{} True{}:
791 {==}
792 case False{} False{} True{} False{}:
793 {==}
794 case False{} False{} False{} True{}:
795 {==}
796 case False{} False{} False{} False{}:
797 {==}
798
799def sp_nib_4_t(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp4{}, False{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp4{}, True{}, n)), P.sp.nb(P.sp.nib(P.LcSp4{}, True{}, n)), P.sp.nc(P.sp.nib(P.LcSp4{}, True{}, n)), P.sp.nd(P.sp.nib(P.LcSp4{}, True{}, n))}) : P.LcSpNib}:
800 match n:
801 case P.LcSpNib{a, b, c, d}:
802 match a b c d:
803 case True{} True{} True{} True{}:
804 {==}
805 case True{} True{} True{} False{}:
806 {==}
807 case True{} True{} False{} True{}:
808 {==}
809 case True{} True{} False{} False{}:
810 {==}
811 case True{} False{} True{} True{}:
812 {==}
813 case True{} False{} True{} False{}:
814 {==}
815 case True{} False{} False{} True{}:
816 {==}
817 case True{} False{} False{} False{}:
818 {==}
819 case False{} True{} True{} True{}:
820 {==}
821 case False{} True{} True{} False{}:
822 {==}
823 case False{} True{} False{} True{}:
824 {==}
825 case False{} True{} False{} False{}:
826 {==}
827 case False{} False{} True{} True{}:
828 {==}
829 case False{} False{} True{} False{}:
830 {==}
831 case False{} False{} False{} True{}:
832 {==}
833 case False{} False{} False{} False{}:
834 {==}
835
836def sp_nib_4_f(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp4{}, True{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp4{}, False{}, n)), P.sp.nb(P.sp.nib(P.LcSp4{}, False{}, n)), P.sp.nc(P.sp.nib(P.LcSp4{}, False{}, n)), P.sp.nd(P.sp.nib(P.LcSp4{}, False{}, n))}) : P.LcSpNib}:
837 match n:
838 case P.LcSpNib{a, b, c, d}:
839 match a b c d:
840 case True{} True{} True{} True{}:
841 {==}
842 case True{} True{} True{} False{}:
843 {==}
844 case True{} True{} False{} True{}:
845 {==}
846 case True{} True{} False{} False{}:
847 {==}
848 case True{} False{} True{} True{}:
849 {==}
850 case True{} False{} True{} False{}:
851 {==}
852 case True{} False{} False{} True{}:
853 {==}
854 case True{} False{} False{} False{}:
855 {==}
856 case False{} True{} True{} True{}:
857 {==}
858 case False{} True{} True{} False{}:
859 {==}
860 case False{} True{} False{} True{}:
861 {==}
862 case False{} True{} False{} False{}:
863 {==}
864 case False{} False{} True{} True{}:
865 {==}
866 case False{} False{} True{} False{}:
867 {==}
868 case False{} False{} False{} True{}:
869 {==}
870 case False{} False{} False{} False{}:
871 {==}
872
873def sp_nib_5_t(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp5{}, False{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp5{}, True{}, n)), P.sp.nb(P.sp.nib(P.LcSp5{}, True{}, n)), P.sp.nc(P.sp.nib(P.LcSp5{}, True{}, n)), P.sp.nd(P.sp.nib(P.LcSp5{}, True{}, n))}) : P.LcSpNib}:
874 match n:
875 case P.LcSpNib{a, b, c, d}:
876 match a b c d:
877 case True{} True{} True{} True{}:
878 {==}
879 case True{} True{} True{} False{}:
880 {==}
881 case True{} True{} False{} True{}:
882 {==}
883 case True{} True{} False{} False{}:
884 {==}
885 case True{} False{} True{} True{}:
886 {==}
887 case True{} False{} True{} False{}:
888 {==}
889 case True{} False{} False{} True{}:
890 {==}
891 case True{} False{} False{} False{}:
892 {==}
893 case False{} True{} True{} True{}:
894 {==}
895 case False{} True{} True{} False{}:
896 {==}
897 case False{} True{} False{} True{}:
898 {==}
899 case False{} True{} False{} False{}:
900 {==}
901 case False{} False{} True{} True{}:
902 {==}
903 case False{} False{} True{} False{}:
904 {==}
905 case False{} False{} False{} True{}:
906 {==}
907 case False{} False{} False{} False{}:
908 {==}
909
910def sp_nib_5_f(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp5{}, True{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp5{}, False{}, n)), P.sp.nb(P.sp.nib(P.LcSp5{}, False{}, n)), P.sp.nc(P.sp.nib(P.LcSp5{}, False{}, n)), P.sp.nd(P.sp.nib(P.LcSp5{}, False{}, n))}) : P.LcSpNib}:
911 match n:
912 case P.LcSpNib{a, b, c, d}:
913 match a b c d:
914 case True{} True{} True{} True{}:
915 {==}
916 case True{} True{} True{} False{}:
917 {==}
918 case True{} True{} False{} True{}:
919 {==}
920 case True{} True{} False{} False{}:
921 {==}
922 case True{} False{} True{} True{}:
923 {==}
924 case True{} False{} True{} False{}:
925 {==}
926 case True{} False{} False{} True{}:
927 {==}
928 case True{} False{} False{} False{}:
929 {==}
930 case False{} True{} True{} True{}:
931 {==}
932 case False{} True{} True{} False{}:
933 {==}
934 case False{} True{} False{} True{}:
935 {==}
936 case False{} True{} False{} False{}:
937 {==}
938 case False{} False{} True{} True{}:
939 {==}
940 case False{} False{} True{} False{}:
941 {==}
942 case False{} False{} False{} True{}:
943 {==}
944 case False{} False{} False{} False{}:
945 {==}
946
947def sp_nib_6_t(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp6{}, False{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp6{}, True{}, n)), P.sp.nb(P.sp.nib(P.LcSp6{}, True{}, n)), P.sp.nc(P.sp.nib(P.LcSp6{}, True{}, n)), P.sp.nd(P.sp.nib(P.LcSp6{}, True{}, n))}) : P.LcSpNib}:
948 match n:
949 case P.LcSpNib{a, b, c, d}:
950 match a b c d:
951 case True{} True{} True{} True{}:
952 {==}
953 case True{} True{} True{} False{}:
954 {==}
955 case True{} True{} False{} True{}:
956 {==}
957 case True{} True{} False{} False{}:
958 {==}
959 case True{} False{} True{} True{}:
960 {==}
961 case True{} False{} True{} False{}:
962 {==}
963 case True{} False{} False{} True{}:
964 {==}
965 case True{} False{} False{} False{}:
966 {==}
967 case False{} True{} True{} True{}:
968 {==}
969 case False{} True{} True{} False{}:
970 {==}
971 case False{} True{} False{} True{}:
972 {==}
973 case False{} True{} False{} False{}:
974 {==}
975 case False{} False{} True{} True{}:
976 {==}
977 case False{} False{} True{} False{}:
978 {==}
979 case False{} False{} False{} True{}:
980 {==}
981 case False{} False{} False{} False{}:
982 {==}
983
984def sp_nib_6_f(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp6{}, True{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp6{}, False{}, n)), P.sp.nb(P.sp.nib(P.LcSp6{}, False{}, n)), P.sp.nc(P.sp.nib(P.LcSp6{}, False{}, n)), P.sp.nd(P.sp.nib(P.LcSp6{}, False{}, n))}) : P.LcSpNib}:
985 match n:
986 case P.LcSpNib{a, b, c, d}:
987 match a b c d:
988 case True{} True{} True{} True{}:
989 {==}
990 case True{} True{} True{} False{}:
991 {==}
992 case True{} True{} False{} True{}:
993 {==}
994 case True{} True{} False{} False{}:
995 {==}
996 case True{} False{} True{} True{}:
997 {==}
998 case True{} False{} True{} False{}:
999 {==}
1000 case True{} False{} False{} True{}:
1001 {==}
1002 case True{} False{} False{} False{}:
1003 {==}
1004 case False{} True{} True{} True{}:
1005 {==}
1006 case False{} True{} True{} False{}:
1007 {==}
1008 case False{} True{} False{} True{}:
1009 {==}
1010 case False{} True{} False{} False{}:
1011 {==}
1012 case False{} False{} True{} True{}:
1013 {==}
1014 case False{} False{} True{} False{}:
1015 {==}
1016 case False{} False{} False{} True{}:
1017 {==}
1018 case False{} False{} False{} False{}:
1019 {==}
1020
1021def sp_nib_7_t(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp7{}, False{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp7{}, True{}, n)), P.sp.nb(P.sp.nib(P.LcSp7{}, True{}, n)), P.sp.nc(P.sp.nib(P.LcSp7{}, True{}, n)), P.sp.nd(P.sp.nib(P.LcSp7{}, True{}, n))}) : P.LcSpNib}:
1022 match n:
1023 case P.LcSpNib{a, b, c, d}:
1024 match a b c d:
1025 case True{} True{} True{} True{}:
1026 {==}
1027 case True{} True{} True{} False{}:
1028 {==}
1029 case True{} True{} False{} True{}:
1030 {==}
1031 case True{} True{} False{} False{}:
1032 {==}
1033 case True{} False{} True{} True{}:
1034 {==}
1035 case True{} False{} True{} False{}:
1036 {==}
1037 case True{} False{} False{} True{}:
1038 {==}
1039 case True{} False{} False{} False{}:
1040 {==}
1041 case False{} True{} True{} True{}:
1042 {==}
1043 case False{} True{} True{} False{}:
1044 {==}
1045 case False{} True{} False{} True{}:
1046 {==}
1047 case False{} True{} False{} False{}:
1048 {==}
1049 case False{} False{} True{} True{}:
1050 {==}
1051 case False{} False{} True{} False{}:
1052 {==}
1053 case False{} False{} False{} True{}:
1054 {==}
1055 case False{} False{} False{} False{}:
1056 {==}
1057
1058def sp_nib_7_f(+n: P.LcSpNib) -> {n == P.sp.nib(P.LcSp7{}, True{}, P.LcSpNib{P.sp.na(P.sp.nib(P.LcSp7{}, False{}, n)), P.sp.nb(P.sp.nib(P.LcSp7{}, False{}, n)), P.sp.nc(P.sp.nib(P.LcSp7{}, False{}, n)), P.sp.nd(P.sp.nib(P.LcSp7{}, False{}, n))}) : P.LcSpNib}:
1059 match n:
1060 case P.LcSpNib{a, b, c, d}:
1061 match a b c d:
1062 case True{} True{} True{} True{}:
1063 {==}
1064 case True{} True{} True{} False{}:
1065 {==}
1066 case True{} True{} False{} True{}:
1067 {==}
1068 case True{} True{} False{} False{}:
1069 {==}
1070 case True{} False{} True{} True{}:
1071 {==}
1072 case True{} False{} True{} False{}:
1073 {==}
1074 case True{} False{} False{} True{}:
1075 {==}
1076 case True{} False{} False{} False{}:
1077 {==}
1078 case False{} True{} True{} True{}:
1079 {==}
1080 case False{} True{} True{} False{}:
1081 {==}
1082 case False{} True{} False{} True{}:
1083 {==}
1084 case False{} True{} False{} False{}:
1085 {==}
1086 case False{} False{} True{} True{}:
1087 {==}
1088 case False{} False{} True{} False{}:
1089 {==}
1090 case False{} False{} False{} True{}:
1091 {==}
1092 case False{} False{} False{} False{}:
1093 {==}
1094
1095def sp_nib_inv(bx: P.LcSpBox, inv: Bool, +n: P.LcSpNib) -> {n == P.sp.nib(bx, Bool.not(inv), P.LcSpNib{P.sp.na(P.sp.nib(bx, inv, n)), P.sp.nb(P.sp.nib(bx, inv, n)), P.sp.nc(P.sp.nib(bx, inv, n)), P.sp.nd(P.sp.nib(bx, inv, n))}) : P.LcSpNib}:
1096 match bx:
1097 case P.LcSp0{}:
1098 match inv:
1099 case True{}:
1100 sp_nib_0_t(n)
1101 case False{}:
1102 sp_nib_0_f(n)
1103 case P.LcSp1{}:
1104 match inv:
1105 case True{}:
1106 sp_nib_1_t(n)
1107 case False{}:
1108 sp_nib_1_f(n)
1109 case P.LcSp2{}:
1110 match inv:
1111 case True{}:
1112 sp_nib_2_t(n)
1113 case False{}:
1114 sp_nib_2_f(n)
1115 case P.LcSp3{}:
1116 match inv:
1117 case True{}:
1118 sp_nib_3_t(n)
1119 case False{}:
1120 sp_nib_3_f(n)
1121 case P.LcSp4{}:
1122 match inv:
1123 case True{}:
1124 sp_nib_4_t(n)
1125 case False{}:
1126 sp_nib_4_f(n)
1127 case P.LcSp5{}:
1128 match inv:
1129 case True{}:
1130 sp_nib_5_t(n)
1131 case False{}:
1132 sp_nib_5_f(n)
1133 case P.LcSp6{}:
1134 match inv:
1135 case True{}:
1136 sp_nib_6_t(n)
1137 case False{}:
1138 sp_nib_6_f(n)
1139 case P.LcSp7{}:
1140 match inv:
1141 case True{}:
1142 sp_nib_7_t(n)
1143 case False{}:
1144 sp_nib_7_f(n)
1145
1146
1147def sp_eta(+bx: P.LcSpBox, +inv: Bool, -p: Nat, z: P.LcSpQ<p>) -> {P.sp.layer(bx, inv, p, z) == P.sp.layer(bx, inv, p, P.LcSpQ{P.sp.qa(p, z), P.sp.qb(p, z), P.sp.qc(p, z), P.sp.qd(p, z)}) : P.LcSpQ<p>}:
1148 match z:
1149 case P.LcSpQ{a, b, c, d}:
1150 {==}
1151
1152
1153def sp_layer_inv(+bx: P.LcSpBox, +inv: Bool, m: Nat, +q: P.LcSpQ<m>) -> {q == P.sp.layer(bx, Bool.not(inv), m, P.sp.layer(bx, inv, m, q)) : P.LcSpQ<m>}:
1154 match m:
1155 case 0n:
1156 {==}
1157 case 1n+(+p):
1158 match q:
1159 case P.LcSpQ{WCon{+x0, +t0}, WCon{+x1, +t1}, WCon{+x2, +t2}, WCon{+x3, +t3}}:
1160 %sp_nib_inv(bx, inv, P.LcSpNib{x0, x1, x2, x3}) : {P.LcSpQ{WCon{x0, t0}, WCon{x1, t1}, WCon{x2, t2}, WCon{x3, t3}} == P.LcSpQ{WCon{P.sp.na(_), P.sp.qa(p, P.sp.layer(bx, Bool.not(inv), p, P.LcSpQ{P.sp.qa(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qb(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qc(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qd(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3}))}))}, WCon{P.sp.nb(_), P.sp.qb(p, P.sp.layer(bx, Bool.not(inv), p, P.LcSpQ{P.sp.qa(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qb(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qc(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qd(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3}))}))}, WCon{P.sp.nc(_), P.sp.qc(p, P.sp.layer(bx, Bool.not(inv), p, P.LcSpQ{P.sp.qa(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qb(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qc(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qd(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3}))}))}, WCon{P.sp.nd(_), P.sp.qd(p, P.sp.layer(bx, Bool.not(inv), p, P.LcSpQ{P.sp.qa(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qb(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qc(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qd(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3}))}))}} : P.LcSpQ<1n+p>}
1161 %Equal.trans(P.LcSpQ<p>, P.LcSpQ{t0, t1, t2, t3}, P.sp.layer(bx, Bool.not(inv), p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.layer(bx, Bool.not(inv), p, P.LcSpQ{P.sp.qa(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qb(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qc(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3})), P.sp.qd(p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3}))}), sp_layer_inv(bx, inv, p, P.LcSpQ{t0, t1, t2, t3}), sp_eta(bx, Bool.not(inv), p, P.sp.layer(bx, inv, p, P.LcSpQ{t0, t1, t2, t3}))) : {P.LcSpQ{WCon{x0, t0}, WCon{x1, t1}, WCon{x2, t2}, WCon{x3, t3}} == P.LcSpQ{WCon{x0, P.sp.qa(p, _)}, WCon{x1, P.sp.qb(p, _)}, WCon{x2, P.sp.qc(p, _)}, WCon{x3, P.sp.qd(p, _)}} : P.LcSpQ<1n+p>}
1162 {==}
1163
1164
1165def sp_sop_inv(+bx: P.LcSpBox, +inv: Bool, s: M.CmBlock) -> {s == P.sp.sop(bx, Bool.not(inv), P.sp.sop(bx, inv, s)) : M.CmBlock}:
1166 match s:
1167 case M.CmBlock{U32{+w0}, U32{+w1}, U32{+w2}, U32{+w3}}:
1168 %Equal.trans(P.LcSpQ<32n>, P.LcSpQ{w0, w1, w2, w3}, P.sp.layer(bx, Bool.not(inv), 32n, P.sp.layer(bx, inv, 32n, P.LcSpQ{w0, w1, w2, w3})), P.sp.layer(bx, Bool.not(inv), 32n, P.LcSpQ{P.sp.qa(32n, P.sp.layer(bx, inv, 32n, P.LcSpQ{w0, w1, w2, w3})), P.sp.qb(32n, P.sp.layer(bx, inv, 32n, P.LcSpQ{w0, w1, w2, w3})), P.sp.qc(32n, P.sp.layer(bx, inv, 32n, P.LcSpQ{w0, w1, w2, w3})), P.sp.qd(32n, P.sp.layer(bx, inv, 32n, P.LcSpQ{w0, w1, w2, w3}))}), sp_layer_inv(bx, inv, 32n, P.LcSpQ{w0, w1, w2, w3}), sp_eta(bx, Bool.not(inv), 32n, P.sp.layer(bx, inv, 32n, P.LcSpQ{w0, w1, w2, w3}))) : {M.CmBlock{U32{w0}, U32{w1}, U32{w2}, U32{w3}} == M.CmBlock{U32{P.sp.qa(32n, _)}, U32{P.sp.qb(32n, _)}, U32{P.sp.qc(32n, _)}, U32{P.sp.qd(32n, _)}} : M.CmBlock}
1169 {==}
1170
1171
1172def sp_lt1(s: M.CmBlock) -> {s == P.sp.ilt1(P.sp.lt1(s)) : M.CmBlock}:
1173 match s:
1174 case M.CmBlock{+x0, +x1, +x2, +x3}:
1175 %rot_19_13(x0) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{_, x1, x2, x3} : M.CmBlock}
1176 {==}
1177
1178def sp_lt1d(s: M.CmBlock) -> {s == P.sp.lt1(P.sp.ilt1(s)) : M.CmBlock}:
1179 match s:
1180 case M.CmBlock{+x0, +x1, +x2, +x3}:
1181 %rot_13_19(x0) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{_, x1, x2, x3} : M.CmBlock}
1182 {==}
1183
1184def sp_lt2(s: M.CmBlock) -> {s == P.sp.ilt2(P.sp.lt2(s)) : M.CmBlock}:
1185 match s:
1186 case M.CmBlock{+x0, +x1, +x2, +x3}:
1187 %rot_29_3(x2) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, x1, _, x3} : M.CmBlock}
1188 {==}
1189
1190def sp_lt2d(s: M.CmBlock) -> {s == P.sp.lt2(P.sp.ilt2(s)) : M.CmBlock}:
1191 match s:
1192 case M.CmBlock{+x0, +x1, +x2, +x3}:
1193 %rot_3_29(x2) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, x1, _, x3} : M.CmBlock}
1194 {==}
1195
1196def sp_lt3(s: M.CmBlock) -> {s == P.sp.lt3(P.sp.lt3(s)) : M.CmBlock}:
1197 match s:
1198 case M.CmBlock{+x0, +x1, +x2, +x3}:
1199 %u32_xx(x1, U32.xor(x0, x2)) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, _, x2, x3} : M.CmBlock}
1200 {==}
1201
1202def sp_lt4(s: M.CmBlock) -> {s == P.sp.lt4(P.sp.lt4(s)) : M.CmBlock}:
1203 match s:
1204 case M.CmBlock{+x0, +x1, +x2, +x3}:
1205 %u32_xx(x3, U32.xor(x2, U32.shln(x0, 3n))) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, x1, x2, _} : M.CmBlock}
1206 {==}
1207
1208def sp_lt5(s: M.CmBlock) -> {s == P.sp.ilt5(P.sp.lt5(s)) : M.CmBlock}:
1209 match s:
1210 case M.CmBlock{+x0, +x1, +x2, +x3}:
1211 %rot_31_1(x1) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, _, x2, L.lc.rotl25.bits(L.lc.rotl7.bits(x3))} : M.CmBlock}
1212 %rot_25_7(x3) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, x1, x2, _} : M.CmBlock}
1213 {==}
1214
1215def sp_lt5d(s: M.CmBlock) -> {s == P.sp.lt5(P.sp.ilt5(s)) : M.CmBlock}:
1216 match s:
1217 case M.CmBlock{+x0, +x1, +x2, +x3}:
1218 %rot_1_31(x1) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, _, x2, L.lc.rotl7.bits(L.lc.rotl25.bits(x3))} : M.CmBlock}
1219 %rot_7_25(x3) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, x1, x2, _} : M.CmBlock}
1220 {==}
1221
1222def sp_lt6(s: M.CmBlock) -> {s == P.sp.lt6(P.sp.lt6(s)) : M.CmBlock}:
1223 match s:
1224 case M.CmBlock{+x0, +x1, +x2, +x3}:
1225 %u32_xx(x0, U32.xor(x1, x3)) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{_, x1, x2, x3} : M.CmBlock}
1226 {==}
1227
1228def sp_lt7(s: M.CmBlock) -> {s == P.sp.lt7(P.sp.lt7(s)) : M.CmBlock}:
1229 match s:
1230 case M.CmBlock{+x0, +x1, +x2, +x3}:
1231 %u32_xx(x2, U32.xor(x3, U32.shln(x1, 7n))) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, x1, _, x3} : M.CmBlock}
1232 {==}
1233
1234def sp_lt8(s: M.CmBlock) -> {s == P.sp.ilt8(P.sp.lt8(s)) : M.CmBlock}:
1235 match s:
1236 case M.CmBlock{+x0, +x1, +x2, +x3}:
1237 %rot_27_5(x0) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{_, x1, L.lc.rotl10.bits(L.lc.rotl22.bits(x2)), x3} : M.CmBlock}
1238 %rot_10_22(x2) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, x1, _, x3} : M.CmBlock}
1239 {==}
1240
1241def sp_lt8d(s: M.CmBlock) -> {s == P.sp.lt8(P.sp.ilt8(s)) : M.CmBlock}:
1242 match s:
1243 case M.CmBlock{+x0, +x1, +x2, +x3}:
1244 %rot_5_27(x0) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{_, x1, L.lc.rotl22.bits(L.lc.rotl10.bits(x2)), x3} : M.CmBlock}
1245 %rot_22_10(x2) : {M.CmBlock{x0, x1, x2, x3} == M.CmBlock{x0, x1, _, x3} : M.CmBlock}
1246 {==}
1247
1248def sp_lt_inv(+s: M.CmBlock) -> {s == P.sp.ilt(P.sp.lt(s)) : M.CmBlock}:
1249 %sp_lt8(P.sp.lt7(P.sp.lt6(P.sp.lt5(P.sp.lt4(P.sp.lt3(P.sp.lt2(P.sp.lt1(s)))))))) : {s == P.sp.ilt1(P.sp.ilt2(P.sp.lt3(P.sp.lt4(P.sp.ilt5(P.sp.lt6(P.sp.lt7(_))))))) : M.CmBlock}
1250 %sp_lt7(P.sp.lt6(P.sp.lt5(P.sp.lt4(P.sp.lt3(P.sp.lt2(P.sp.lt1(s))))))) : {s == P.sp.ilt1(P.sp.ilt2(P.sp.lt3(P.sp.lt4(P.sp.ilt5(P.sp.lt6(_)))))) : M.CmBlock}
1251 %sp_lt6(P.sp.lt5(P.sp.lt4(P.sp.lt3(P.sp.lt2(P.sp.lt1(s)))))) : {s == P.sp.ilt1(P.sp.ilt2(P.sp.lt3(P.sp.lt4(P.sp.ilt5(_))))) : M.CmBlock}
1252 %sp_lt5(P.sp.lt4(P.sp.lt3(P.sp.lt2(P.sp.lt1(s))))) : {s == P.sp.ilt1(P.sp.ilt2(P.sp.lt3(P.sp.lt4(_)))) : M.CmBlock}
1253 %sp_lt4(P.sp.lt3(P.sp.lt2(P.sp.lt1(s)))) : {s == P.sp.ilt1(P.sp.ilt2(P.sp.lt3(_))) : M.CmBlock}
1254 %sp_lt3(P.sp.lt2(P.sp.lt1(s))) : {s == P.sp.ilt1(P.sp.ilt2(_)) : M.CmBlock}
1255 %sp_lt2(P.sp.lt1(s)) : {s == P.sp.ilt1(_) : M.CmBlock}
1256 sp_lt1(s)
1257
1258def sp_lt_invd(+s: M.CmBlock) -> {s == P.sp.lt(P.sp.ilt(s)) : M.CmBlock}:
1259 %sp_lt1d(P.sp.ilt2(P.sp.lt3(P.sp.lt4(P.sp.ilt5(P.sp.lt6(P.sp.lt7(P.sp.ilt8(s)))))))) : {s == P.sp.lt8(P.sp.lt7(P.sp.lt6(P.sp.lt5(P.sp.lt4(P.sp.lt3(P.sp.lt2(_))))))) : M.CmBlock}
1260 %sp_lt2d(P.sp.lt3(P.sp.lt4(P.sp.ilt5(P.sp.lt6(P.sp.lt7(P.sp.ilt8(s))))))) : {s == P.sp.lt8(P.sp.lt7(P.sp.lt6(P.sp.lt5(P.sp.lt4(P.sp.lt3(_)))))) : M.CmBlock}
1261 %sp_lt3(P.sp.lt4(P.sp.ilt5(P.sp.lt6(P.sp.lt7(P.sp.ilt8(s)))))) : {s == P.sp.lt8(P.sp.lt7(P.sp.lt6(P.sp.lt5(P.sp.lt4(_))))) : M.CmBlock}
1262 %sp_lt4(P.sp.ilt5(P.sp.lt6(P.sp.lt7(P.sp.ilt8(s))))) : {s == P.sp.lt8(P.sp.lt7(P.sp.lt6(P.sp.lt5(_)))) : M.CmBlock}
1263 %sp_lt5d(P.sp.lt6(P.sp.lt7(P.sp.ilt8(s)))) : {s == P.sp.lt8(P.sp.lt7(P.sp.lt6(_))) : M.CmBlock}
1264 %sp_lt6(P.sp.lt7(P.sp.ilt8(s))) : {s == P.sp.lt8(P.sp.lt7(_)) : M.CmBlock}
1265 %sp_lt7(P.sp.ilt8(s)) : {s == P.sp.lt8(_) : M.CmBlock}
1266 sp_lt8d(s)
1267
1268
1269def sp_bswap(s: M.CmBlock) -> {s == P.sp.unop(P.LcSpBswap{}, P.sp.op(P.LcSpBswap{}, s)) : M.CmBlock}:
1270 match s:
1271 case M.CmBlock{+a, +b, +c, +d}:
1272 %bswap2(a) : {M.CmBlock{a, b, c, d} == M.CmBlock{_, L.lc.bswap.bits(L.lc.bswap.bits(b)), L.lc.bswap.bits(L.lc.bswap.bits(c)), L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
1273 %bswap2(b) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, _, L.lc.bswap.bits(L.lc.bswap.bits(c)), L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
1274 %bswap2(c) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, _, L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
1275 %bswap2(d) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, c, _} : M.CmBlock}
1276 {==}
1277
1278def sp_bswapd(s: M.CmBlock) -> {s == P.sp.op(P.LcSpBswap{}, P.sp.unop(P.LcSpBswap{}, s)) : M.CmBlock}:
1279 match s:
1280 case M.CmBlock{+a, +b, +c, +d}:
1281 %bswap2(a) : {M.CmBlock{a, b, c, d} == M.CmBlock{_, L.lc.bswap.bits(L.lc.bswap.bits(b)), L.lc.bswap.bits(L.lc.bswap.bits(c)), L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
1282 %bswap2(b) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, _, L.lc.bswap.bits(L.lc.bswap.bits(c)), L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
1283 %bswap2(c) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, _, L.lc.bswap.bits(L.lc.bswap.bits(d))} : M.CmBlock}
1284 %bswap2(d) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, c, _} : M.CmBlock}
1285 {==}
1286
1287def sp_unop_op(o: P.LcSpOp, +s: M.CmBlock) -> {s == P.sp.unop(o, P.sp.op(o, s)) : M.CmBlock}:
1288 match o:
1289 case P.LcSpBswap{}:
1290 sp_bswap(s)
1291 case P.LcSpKey{k}:
1292 block_xx(s, k)
1293 case P.LcSpS{bx}:
1294 sp_sop_inv(bx, False{}, s)
1295 case P.LcSpLt{}:
1296 sp_lt_inv(s)
1297
1298def sp_op_unop(o: P.LcSpOp, +s: M.CmBlock) -> {s == P.sp.op(o, P.sp.unop(o, s)) : M.CmBlock}:
1299 match o:
1300 case P.LcSpBswap{}:
1301 sp_bswapd(s)
1302 case P.LcSpKey{k}:
1303 block_xx(s, k)
1304 case P.LcSpS{bx}:
1305 sp_sop_inv(bx, True{}, s)
1306 case P.LcSpLt{}:
1307 sp_lt_invd(s)
1308
1309def sp_unrun_run(os: List<&2, P.LcSpOp>, +s: M.CmBlock) -> {s == P.sp.unrun(os, P.sp.run(os, s)) : M.CmBlock}:
1310 match os:
1311 case Nil{}:
1312 {==}
1313 case Con{+o, +t}:
1314 %sp_unrun_run(t, P.sp.op(o, s)) : {s == P.sp.unop(o, _) : M.CmBlock}
1315 sp_unop_op(o, s)
1316
1317def sp_run_unrun(os: List<&2, P.LcSpOp>, +s: M.CmBlock) -> {s == P.sp.run(os, P.sp.unrun(os, s)) : M.CmBlock}:
1318 match os:
1319 case Nil{}:
1320 {==}
1321 case Con{+o, +t}:
1322 %sp_op_unop(o, P.sp.unrun(t, s)) : {s == P.sp.run(t, _) : M.CmBlock}
1323 sp_run_unrun(t, s)
1324
1325def Laws.serpent_round_trip(k, b):
1326 match k:
1327 case P.LcSerpentKey{ops}:
1328 Equal.sym(M.CmBlock, b, P.sp.unrun(ops, P.sp.run(ops, b)), sp_unrun_run(ops, b))
1329
1330def Laws.serpent_round_trip_dual(k, b):
1331 match k:
1332 case P.LcSerpentKey{ops}:
1333 Equal.sym(M.CmBlock, b, P.sp.run(ops, P.sp.unrun(ops, b)), sp_run_unrun(ops, b))
1334
1335
1336
1337
1338def adc_add_sub(n: Nat, a: Word(n), b: Word(n), c: Bool) -> {a == Word.adc(n, Word.adc(n, a, b, False{}, c), b, True{}, Bool.not(c)) : Word(n)}:
1339 match n:
1340 case 0n:
1341 match a:
1342 case WNil{}:
1343 {==}
1344 case 1n+p:
1345 match a b c:
1346 case WCon{True{}, at} WCon{True{}, bt} True{}:
1347 %adc_add_sub(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1348 {==}
1349 case WCon{True{}, at} WCon{True{}, bt} False{}:
1350 %adc_add_sub(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1351 {==}
1352 case WCon{True{}, at} WCon{False{}, bt} True{}:
1353 %adc_add_sub(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1354 {==}
1355 case WCon{True{}, at} WCon{False{}, bt} False{}:
1356 %adc_add_sub(p, at, bt, False{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1357 {==}
1358 case WCon{False{}, at} WCon{True{}, bt} True{}:
1359 %adc_add_sub(p, at, bt, True{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1360 {==}
1361 case WCon{False{}, at} WCon{True{}, bt} False{}:
1362 %adc_add_sub(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1363 {==}
1364 case WCon{False{}, at} WCon{False{}, bt} True{}:
1365 %adc_add_sub(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1366 {==}
1367 case WCon{False{}, at} WCon{False{}, bt} False{}:
1368 %adc_add_sub(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1369 {==}
1370
1371def adc_sub_add(n: Nat, a: Word(n), b: Word(n), c: Bool) -> {a == Word.adc(n, Word.adc(n, a, b, True{}, c), b, False{}, Bool.not(c)) : Word(n)}:
1372 match n:
1373 case 0n:
1374 match a:
1375 case WNil{}:
1376 {==}
1377 case 1n+p:
1378 match a b c:
1379 case WCon{True{}, at} WCon{True{}, bt} True{}:
1380 %adc_sub_add(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1381 {==}
1382 case WCon{True{}, at} WCon{True{}, bt} False{}:
1383 %adc_sub_add(p, at, bt, False{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1384 {==}
1385 case WCon{True{}, at} WCon{False{}, bt} True{}:
1386 %adc_sub_add(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1387 {==}
1388 case WCon{True{}, at} WCon{False{}, bt} False{}:
1389 %adc_sub_add(p, at, bt, True{}) : {WCon{True{}, at} == WCon{True{}, _} : Word(1n+p)}
1390 {==}
1391 case WCon{False{}, at} WCon{True{}, bt} True{}:
1392 %adc_sub_add(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1393 {==}
1394 case WCon{False{}, at} WCon{True{}, bt} False{}:
1395 %adc_sub_add(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1396 {==}
1397 case WCon{False{}, at} WCon{False{}, bt} True{}:
1398 %adc_sub_add(p, at, bt, True{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1399 {==}
1400 case WCon{False{}, at} WCon{False{}, bt} False{}:
1401 %adc_sub_add(p, at, bt, False{}) : {WCon{False{}, at} == WCon{False{}, _} : Word(1n+p)}
1402 {==}
1403
1404def u32_add_sub(a: U32, b: U32) -> {a == U32.sub(U32.add(a, b), b) : U32}:
1405 match a b:
1406 case U32{x} U32{y}:
1407 %adc_add_sub(32n, x, y, False{}) : {U32{x} == U32{_} : U32}
1408 {==}
1409
1410def u32_sub_add(a: U32, b: U32) -> {a == U32.add(U32.sub(a, b), b) : U32}:
1411 match a b:
1412 case U32{x} U32{y}:
1413 %adc_sub_add(32n, x, y, True{}) : {U32{x} == U32{_} : U32}
1414 {==}
1415
1416
1417
1418
1419
1420
1421def fe_unstep_step(~RK: Data, ~f: RK -> U32 -> U32, +k: RK, b: L.LcBlock64) -> {b == L.lc.fe.unstep(~RK, ~f, k, L.lc.fe.step(~RK, ~f, k, b)) : L.LcBlock64}:
1422 match b:
1423 case L.LcBlock64{l, +r}:
1424 %u32_xx(l, f(k, r)) : {L.LcBlock64{l, r} == L.LcBlock64{_, r} : L.LcBlock64}
1425 {==}
1426
1427def fe_step_unstep(~RK: Data, ~f: RK -> U32 -> U32, +k: RK, b: L.LcBlock64) -> {b == L.lc.fe.step(~RK, ~f, k, L.lc.fe.unstep(~RK, ~f, k, b)) : L.LcBlock64}:
1428 match b:
1429 case L.LcBlock64{+l, r}:
1430 %u32_xx(r, f(k, l)) : {L.LcBlock64{l, r} == L.LcBlock64{l, _} : L.LcBlock64}
1431 {==}
1432
1433def fe_unrun_run(~RK: Data, ~f: RK -> U32 -> U32, ks: List<&2, RK>, +b: L.LcBlock64) -> {b == L.lc.fe.unrun(~RK, ~f, ks, L.lc.fe.run(~RK, ~f, ks, b)) : L.LcBlock64}:
1434 match ks:
1435 case Nil{}:
1436 {==}
1437 case Con{+k, +t}:
1438 %fe_unrun_run(~RK, ~f, t, L.lc.fe.step(~RK, ~f, k, b)) : {b == L.lc.fe.unstep(~RK, ~f, k, _) : L.LcBlock64}
1439 fe_unstep_step(~RK, ~f, k, b)
1440
1441def fe_run_unrun(~RK: Data, ~f: RK -> U32 -> U32, ks: List<&2, RK>, +b: L.LcBlock64) -> {b == L.lc.fe.run(~RK, ~f, ks, L.lc.fe.unrun(~RK, ~f, ks, b)) : L.LcBlock64}:
1442 match ks:
1443 case Nil{}:
1444 {==}
1445 case Con{+k, +t}:
1446 %fe_step_unstep(~RK, ~f, k, L.lc.fe.unrun(~RK, ~f, t, b)) : {b == L.lc.fe.run(~RK, ~f, t, _) : L.LcBlock64}
1447 fe_run_unrun(~RK, ~f, t, b)
1448
1449def swap2(b: L.LcBlock64) -> {b == L.lc.swap(L.lc.swap(b)) : L.LcBlock64}:
1450 match b:
1451 case L.LcBlock64{h, l}:
1452 {==}
1453
1454
1455
1456def Laws.fcrypt_round_trip(k, b):
1457 match k:
1458 case FC.LcFcryptKey{+rks}:
1459 Equal.sym(L.LcBlock64, b, L.lc.fe.unrun(~FC.LcFcRk, ~FC.fc.f, rks, L.lc.fe.run(~FC.LcFcRk, ~FC.fc.f, rks, b)), fe_unrun_run(~FC.LcFcRk, ~FC.fc.f, rks, b))
1460
1461def Laws.fcrypt_round_trip_dual(k, b):
1462 match k:
1463 case FC.LcFcryptKey{+rks}:
1464 Equal.sym(L.LcBlock64, b, L.lc.fe.run(~FC.LcFcRk, ~FC.fc.f, rks, L.lc.fe.unrun(~FC.LcFcRk, ~FC.fc.f, rks, b)), fe_run_unrun(~FC.LcFcRk, ~FC.fc.f, rks, b))
1465
1466
1467
1468def Laws.cast5_round_trip(k, b):
1469 match k:
1470 case C5.LcCast5Key{+rks}:
1471 %swap2(L.lc.fe.run(~C5.LcCast5Rk, ~C5.cast5.f, rks, b)) : {L.lc.fe.unrun(~C5.LcCast5Rk, ~C5.cast5.f, rks, _) == b : L.LcBlock64}
1472 Equal.sym(L.LcBlock64, b, L.lc.fe.unrun(~C5.LcCast5Rk, ~C5.cast5.f, rks, L.lc.fe.run(~C5.LcCast5Rk, ~C5.cast5.f, rks, b)), fe_unrun_run(~C5.LcCast5Rk, ~C5.cast5.f, rks, b))
1473
1474def Laws.cast5_round_trip_dual(k, b):
1475 match k:
1476 case C5.LcCast5Key{+rks}:
1477 %fe_run_unrun(~C5.LcCast5Rk, ~C5.cast5.f, rks, L.lc.swap(b)) : {L.lc.swap(_) == b : L.LcBlock64}
1478 Equal.sym(L.LcBlock64, b, L.lc.swap(L.lc.swap(b)), swap2(b))
1479
1480
1481
1482
1483
1484def tea_unop_op(o: TE.LcTeaOp, b: L.LcBlock64) -> {b == TE.tea.unop(o, TE.tea.op(o, b)) : L.LcBlock64}:
1485 match o:
1486 case TE.LcTeaY{+s, +ka, +kb}:
1487 match b:
1488 case L.LcBlock64{y, +z}:
1489 %u32_add_sub(y, TE.tea.g(z, s, ka, kb)) : {L.LcBlock64{y, z} == L.LcBlock64{_, z} : L.LcBlock64}
1490 {==}
1491 case TE.LcTeaZ{+s, +ka, +kb}:
1492 match b:
1493 case L.LcBlock64{+y, z}:
1494 %u32_add_sub(z, TE.tea.g(y, s, ka, kb)) : {L.LcBlock64{y, z} == L.LcBlock64{y, _} : L.LcBlock64}
1495 {==}
1496 case TE.LcXteaY{+c}:
1497 match b:
1498 case L.LcBlock64{y, +z}:
1499 %u32_add_sub(y, TE.xtea.g(z, c)) : {L.LcBlock64{y, z} == L.LcBlock64{_, z} : L.LcBlock64}
1500 {==}
1501 case TE.LcXteaZ{+c}:
1502 match b:
1503 case L.LcBlock64{+y, z}:
1504 %u32_add_sub(z, TE.xtea.g(y, c)) : {L.LcBlock64{y, z} == L.LcBlock64{y, _} : L.LcBlock64}
1505 {==}
1506 case TE.LcTeaBswap{}:
1507 match b:
1508 case L.LcBlock64{+y, +z}:
1509 %bswap2(y) : {L.LcBlock64{y, z} == L.LcBlock64{_, L.lc.bswap.bits(L.lc.bswap.bits(z))} : L.LcBlock64}
1510 %bswap2(z) : {L.LcBlock64{y, z} == L.LcBlock64{y, _} : L.LcBlock64}
1511 {==}
1512
1513def tea_op_unop(o: TE.LcTeaOp, b: L.LcBlock64) -> {b == TE.tea.op(o, TE.tea.unop(o, b)) : L.LcBlock64}:
1514 match o:
1515 case TE.LcTeaY{+s, +ka, +kb}:
1516 match b:
1517 case L.LcBlock64{y, +z}:
1518 %u32_sub_add(y, TE.tea.g(z, s, ka, kb)) : {L.LcBlock64{y, z} == L.LcBlock64{_, z} : L.LcBlock64}
1519 {==}
1520 case TE.LcTeaZ{+s, +ka, +kb}:
1521 match b:
1522 case L.LcBlock64{+y, z}:
1523 %u32_sub_add(z, TE.tea.g(y, s, ka, kb)) : {L.LcBlock64{y, z} == L.LcBlock64{y, _} : L.LcBlock64}
1524 {==}
1525 case TE.LcXteaY{+c}:
1526 match b:
1527 case L.LcBlock64{y, +z}:
1528 %u32_sub_add(y, TE.xtea.g(z, c)) : {L.LcBlock64{y, z} == L.LcBlock64{_, z} : L.LcBlock64}
1529 {==}
1530 case TE.LcXteaZ{+c}:
1531 match b:
1532 case L.LcBlock64{+y, z}:
1533 %u32_sub_add(z, TE.xtea.g(y, c)) : {L.LcBlock64{y, z} == L.LcBlock64{y, _} : L.LcBlock64}
1534 {==}
1535 case TE.LcTeaBswap{}:
1536 match b:
1537 case L.LcBlock64{+y, +z}:
1538 %bswap2(y) : {L.LcBlock64{y, z} == L.LcBlock64{_, L.lc.bswap.bits(L.lc.bswap.bits(z))} : L.LcBlock64}
1539 %bswap2(z) : {L.LcBlock64{y, z} == L.LcBlock64{y, _} : L.LcBlock64}
1540 {==}
1541
1542def tea_unrun_run(os: List<&2, TE.LcTeaOp>, +b: L.LcBlock64) -> {b == TE.tea.unrun(os, TE.tea.run(os, b)) : L.LcBlock64}:
1543 match os:
1544 case Nil{}:
1545 {==}
1546 case Con{+o, +t}:
1547 %tea_unrun_run(t, TE.tea.op(o, b)) : {b == TE.tea.unop(o, _) : L.LcBlock64}
1548 tea_unop_op(o, b)
1549
1550def tea_run_unrun(os: List<&2, TE.LcTeaOp>, +b: L.LcBlock64) -> {b == TE.tea.run(os, TE.tea.unrun(os, b)) : L.LcBlock64}:
1551 match os:
1552 case Nil{}:
1553 {==}
1554 case Con{+o, +t}:
1555 %tea_op_unop(o, TE.tea.unrun(t, b)) : {b == TE.tea.run(t, _) : L.LcBlock64}
1556 tea_run_unrun(t, b)
1557
1558def Laws.tea_round_trip(k, b):
1559 match k:
1560 case TE.LcTeaKey{+ops}:
1561 Equal.sym(L.LcBlock64, b, TE.tea.unrun(ops, TE.tea.run(ops, b)), tea_unrun_run(ops, b))
1562
1563def Laws.tea_round_trip_dual(k, b):
1564 match k:
1565 case TE.LcTeaKey{+ops}:
1566 Equal.sym(L.LcBlock64, b, TE.tea.run(ops, TE.tea.unrun(ops, b)), tea_run_unrun(ops, b))
1567
1568def Laws.xtea_round_trip(k, b):
1569 match k:
1570 case XT.LcXteaKey{+ops}:
1571 Equal.sym(L.LcBlock64, b, TE.tea.unrun(ops, TE.tea.run(ops, b)), tea_unrun_run(ops, b))
1572
1573def Laws.xtea_round_trip_dual(k, b):
1574 match k:
1575 case XT.LcXteaKey{+ops}:
1576 Equal.sym(L.LcBlock64, b, TE.tea.run(ops, TE.tea.unrun(ops, b)), tea_run_unrun(ops, b))
1577
1578
1579
1580def bf_unop_op(o: BF.LcBfOp, b: L.LcBlock64) -> {b == BF.bf.unop(o, BF.bf.op(o, b)) : L.LcBlock64}:
1581 match o:
1582 case BF.LcBfRound{+p, +t}:
1583 match b:
1584 case L.LcBlock64{+l, +r}:
1585 %u32_xx(l, p) : {L.LcBlock64{l, r} == L.LcBlock64{_, U32.xor(U32.xor(r, BF.bf.f(t, U32.xor(l, p))), BF.bf.f(t, U32.xor(l, p)))} : L.LcBlock64}
1586 %u32_xx(r, BF.bf.f(t, U32.xor(l, p))) : {L.LcBlock64{l, r} == L.LcBlock64{l, _} : L.LcBlock64}
1587 {==}
1588 case BF.LcBfFinal{+p17, +p18}:
1589 match b:
1590 case L.LcBlock64{+l, +r}:
1591 %u32_xx(l, p17) : {L.LcBlock64{l, r} == L.LcBlock64{_, U32.xor(U32.xor(r, p18), p18)} : L.LcBlock64}
1592 %u32_xx(r, p18) : {L.LcBlock64{l, r} == L.LcBlock64{l, _} : L.LcBlock64}
1593 {==}
1594
1595def bf_op_unop(o: BF.LcBfOp, b: L.LcBlock64) -> {b == BF.bf.op(o, BF.bf.unop(o, b)) : L.LcBlock64}:
1596 match o:
1597 case BF.LcBfRound{+p, +t}:
1598 match b:
1599 case L.LcBlock64{+x, +y}:
1600 %u32_xx(y, p) : {L.LcBlock64{x, y} == L.LcBlock64{U32.xor(U32.xor(x, BF.bf.f(t, y)), BF.bf.f(t, _)), _} : L.LcBlock64}
1601 %u32_xx(x, BF.bf.f(t, y)) : {L.LcBlock64{x, y} == L.LcBlock64{_, y} : L.LcBlock64}
1602 {==}
1603 case BF.LcBfFinal{+p17, +p18}:
1604 match b:
1605 case L.LcBlock64{+x, +y}:
1606 %u32_xx(x, p18) : {L.LcBlock64{x, y} == L.LcBlock64{_, U32.xor(U32.xor(y, p17), p17)} : L.LcBlock64}
1607 %u32_xx(y, p17) : {L.LcBlock64{x, y} == L.LcBlock64{x, _} : L.LcBlock64}
1608 {==}
1609
1610def bf_unrun_run(os: List<&2, BF.LcBfOp>, +b: L.LcBlock64) -> {b == BF.bf.unrun(os, BF.bf.run(os, b)) : L.LcBlock64}:
1611 match os:
1612 case Nil{}:
1613 {==}
1614 case Con{+o, +t}:
1615 %bf_unrun_run(t, BF.bf.op(o, b)) : {b == BF.bf.unop(o, _) : L.LcBlock64}
1616 bf_unop_op(o, b)
1617
1618def bf_run_unrun(os: List<&2, BF.LcBfOp>, +b: L.LcBlock64) -> {b == BF.bf.run(os, BF.bf.unrun(os, b)) : L.LcBlock64}:
1619 match os:
1620 case Nil{}:
1621 {==}
1622 case Con{+o, +t}:
1623 %bf_op_unop(o, BF.bf.unrun(t, b)) : {b == BF.bf.run(t, _) : L.LcBlock64}
1624 bf_run_unrun(t, b)
1625
1626def Laws.blowfish_round_trip(k, b):
1627 match k:
1628 case BF.LcBlowfishKey{+ops}:
1629 Equal.sym(L.LcBlock64, b, BF.bf.unrun(ops, BF.bf.run(ops, b)), bf_unrun_run(ops, b))
1630
1631def Laws.blowfish_round_trip_dual(k, b):
1632 match k:
1633 case BF.LcBlowfishKey{+ops}:
1634 Equal.sym(L.LcBlock64, b, BF.bf.run(ops, BF.bf.unrun(ops, b)), bf_run_unrun(ops, b))
1635
1636
1637
1638
1639def c6_sc2(k: C6.LcCast6Ks, s: M.CmBlock) -> {s == C6.c6.sc(k, C6.c6.sc(k, s)) : M.CmBlock}:
1640 match k:
1641 case C6.LcCast6Ks{+m0, +m1, +m2, +m3, +r0, +r1, +r2, +r3, +t}:
1642 match s:
1643 case M.CmBlock{a, b, c, +d}:
1644 %u32_xx(c, C5.cast.f(C5.LcCastF1{}, t, d, m0, r0)) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, _, d} : M.CmBlock}
1645 {==}
1646
1647def c6_sb2(k: C6.LcCast6Ks, s: M.CmBlock) -> {s == C6.c6.sb(k, C6.c6.sb(k, s)) : M.CmBlock}:
1648 match k:
1649 case C6.LcCast6Ks{+m0, +m1, +m2, +m3, +r0, +r1, +r2, +r3, +t}:
1650 match s:
1651 case M.CmBlock{a, b, +c, d}:
1652 %u32_xx(b, C5.cast.f(C5.LcCastF2{}, t, c, m1, r1)) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, _, c, d} : M.CmBlock}
1653 {==}
1654
1655def c6_sa2(k: C6.LcCast6Ks, s: M.CmBlock) -> {s == C6.c6.sa(k, C6.c6.sa(k, s)) : M.CmBlock}:
1656 match k:
1657 case C6.LcCast6Ks{+m0, +m1, +m2, +m3, +r0, +r1, +r2, +r3, +t}:
1658 match s:
1659 case M.CmBlock{a, +b, c, d}:
1660 %u32_xx(a, C5.cast.f(C5.LcCastF3{}, t, b, m2, r2)) : {M.CmBlock{a, b, c, d} == M.CmBlock{_, b, c, d} : M.CmBlock}
1661 {==}
1662
1663def c6_sd2(k: C6.LcCast6Ks, s: M.CmBlock) -> {s == C6.c6.sd(k, C6.c6.sd(k, s)) : M.CmBlock}:
1664 match k:
1665 case C6.LcCast6Ks{+m0, +m1, +m2, +m3, +r0, +r1, +r2, +r3, +t}:
1666 match s:
1667 case M.CmBlock{+a, b, c, d}:
1668 %u32_xx(d, C5.cast.f(C5.LcCastF1{}, t, a, m3, r3)) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, b, c, _} : M.CmBlock}
1669 {==}
1670
1671def c6_qq(+k: C6.LcCast6Ks, +s: M.CmBlock) -> {s == C6.c6.qbar(k, C6.c6.q(k, s)) : M.CmBlock}:
1672 %c6_sd2(k, C6.c6.sa(k, C6.c6.sb(k, C6.c6.sc(k, s)))) : {s == C6.c6.sc(k, C6.c6.sb(k, C6.c6.sa(k, _))) : M.CmBlock}
1673 %c6_sa2(k, C6.c6.sb(k, C6.c6.sc(k, s))) : {s == C6.c6.sc(k, C6.c6.sb(k, _)) : M.CmBlock}
1674 %c6_sb2(k, C6.c6.sc(k, s)) : {s == C6.c6.sc(k, _) : M.CmBlock}
1675 c6_sc2(k, s)
1676
1677def c6_qbq(+k: C6.LcCast6Ks, +s: M.CmBlock) -> {s == C6.c6.q(k, C6.c6.qbar(k, s)) : M.CmBlock}:
1678 %c6_sc2(k, C6.c6.sb(k, C6.c6.sa(k, C6.c6.sd(k, s)))) : {s == C6.c6.sd(k, C6.c6.sa(k, C6.c6.sb(k, _))) : M.CmBlock}
1679 %c6_sb2(k, C6.c6.sa(k, C6.c6.sd(k, s))) : {s == C6.c6.sd(k, C6.c6.sa(k, _)) : M.CmBlock}
1680 %c6_sa2(k, C6.c6.sd(k, s)) : {s == C6.c6.sd(k, _) : M.CmBlock}
1681 c6_sd2(k, s)
1682
1683def c6_unop_op(o: C6.LcCast6Op, +s: M.CmBlock) -> {s == C6.c6.unop(o, C6.c6.op(o, s)) : M.CmBlock}:
1684 match o:
1685 case C6.LcCast6Op{fwd, +k}:
1686 match fwd:
1687 case True{}:
1688 c6_qq(k, s)
1689 case False{}:
1690 c6_qbq(k, s)
1691
1692def c6_op_unop(o: C6.LcCast6Op, +s: M.CmBlock) -> {s == C6.c6.op(o, C6.c6.unop(o, s)) : M.CmBlock}:
1693 match o:
1694 case C6.LcCast6Op{fwd, +k}:
1695 match fwd:
1696 case True{}:
1697 c6_qbq(k, s)
1698 case False{}:
1699 c6_qq(k, s)
1700
1701def c6_unrun_run(os: List<&2, C6.LcCast6Op>, +s: M.CmBlock) -> {s == C6.c6.unrun(os, C6.c6.run(os, s)) : M.CmBlock}:
1702 match os:
1703 case Nil{}:
1704 {==}
1705 case Con{+o, +t}:
1706 %c6_unrun_run(t, C6.c6.op(o, s)) : {s == C6.c6.unop(o, _) : M.CmBlock}
1707 c6_unop_op(o, s)
1708
1709def c6_run_unrun(os: List<&2, C6.LcCast6Op>, +s: M.CmBlock) -> {s == C6.c6.run(os, C6.c6.unrun(os, s)) : M.CmBlock}:
1710 match os:
1711 case Nil{}:
1712 {==}
1713 case Con{+o, +t}:
1714 %c6_op_unop(o, C6.c6.unrun(t, s)) : {s == C6.c6.run(t, _) : M.CmBlock}
1715 c6_run_unrun(t, s)
1716
1717def Laws.cast6_round_trip(k, b):
1718 match k:
1719 case C6.LcCast6Key{+ops}:
1720 Equal.sym(M.CmBlock, b, C6.c6.unrun(ops, C6.c6.run(ops, b)), c6_unrun_run(ops, b))
1721
1722def Laws.cast6_round_trip_dual(k, b):
1723 match k:
1724 case C6.LcCast6Key{+ops}:
1725 Equal.sym(M.CmBlock, b, C6.c6.run(ops, C6.c6.unrun(ops, b)), c6_run_unrun(ops, b))
1726
1727
1728
1729
1730
1731
1732def aria_sb31(w0: Word(8n)) -> {w0 == A.aria.sb3(A.aria.sb1(w0)) : Word(8n)}:
1733 match w0:
1734 case WCon{False{}, w1}:
1735 match w1:
1736 case WCon{False{}, w2}:
1737 match w2:
1738 case WCon{False{}, w3}:
1739 match w3:
1740 case WCon{False{}, w4}:
1741 match w4:
1742 case WCon{False{}, w5}:
1743 match w5:
1744 case WCon{False{}, w6}:
1745 match w6:
1746 case WCon{False{}, w7}:
1747 match w7:
1748 case WCon{False{}, w8}:
1749 match w8:
1750 case WNil{}:
1751 {==}
1752 case WCon{True{}, w8}:
1753 match w8:
1754 case WNil{}:
1755 {==}
1756 case WCon{True{}, w7}:
1757 match w7:
1758 case WCon{False{}, w8}:
1759 match w8:
1760 case WNil{}:
1761 {==}
1762 case WCon{True{}, w8}:
1763 match w8:
1764 case WNil{}:
1765 {==}
1766 case WCon{True{}, w6}:
1767 match w6:
1768 case WCon{False{}, w7}:
1769 match w7:
1770 case WCon{False{}, w8}:
1771 match w8:
1772 case WNil{}:
1773 {==}
1774 case WCon{True{}, w8}:
1775 match w8:
1776 case WNil{}:
1777 {==}
1778 case WCon{True{}, w7}:
1779 match w7:
1780 case WCon{False{}, w8}:
1781 match w8:
1782 case WNil{}:
1783 {==}
1784 case WCon{True{}, w8}:
1785 match w8:
1786 case WNil{}:
1787 {==}
1788 case WCon{True{}, w5}:
1789 match w5:
1790 case WCon{False{}, w6}:
1791 match w6:
1792 case WCon{False{}, w7}:
1793 match w7:
1794 case WCon{False{}, w8}:
1795 match w8:
1796 case WNil{}:
1797 {==}
1798 case WCon{True{}, w8}:
1799 match w8:
1800 case WNil{}:
1801 {==}
1802 case WCon{True{}, w7}:
1803 match w7:
1804 case WCon{False{}, w8}:
1805 match w8:
1806 case WNil{}:
1807 {==}
1808 case WCon{True{}, w8}:
1809 match w8:
1810 case WNil{}:
1811 {==}
1812 case WCon{True{}, w6}:
1813 match w6:
1814 case WCon{False{}, w7}:
1815 match w7:
1816 case WCon{False{}, w8}:
1817 match w8:
1818 case WNil{}:
1819 {==}
1820 case WCon{True{}, w8}:
1821 match w8:
1822 case WNil{}:
1823 {==}
1824 case WCon{True{}, w7}:
1825 match w7:
1826 case WCon{False{}, w8}:
1827 match w8:
1828 case WNil{}:
1829 {==}
1830 case WCon{True{}, w8}:
1831 match w8:
1832 case WNil{}:
1833 {==}
1834 case WCon{True{}, w4}:
1835 match w4:
1836 case WCon{False{}, w5}:
1837 match w5:
1838 case WCon{False{}, w6}:
1839 match w6:
1840 case WCon{False{}, w7}:
1841 match w7:
1842 case WCon{False{}, w8}:
1843 match w8:
1844 case WNil{}:
1845 {==}
1846 case WCon{True{}, w8}:
1847 match w8:
1848 case WNil{}:
1849 {==}
1850 case WCon{True{}, w7}:
1851 match w7:
1852 case WCon{False{}, w8}:
1853 match w8:
1854 case WNil{}:
1855 {==}
1856 case WCon{True{}, w8}:
1857 match w8:
1858 case WNil{}:
1859 {==}
1860 case WCon{True{}, w6}:
1861 match w6:
1862 case WCon{False{}, w7}:
1863 match w7:
1864 case WCon{False{}, w8}:
1865 match w8:
1866 case WNil{}:
1867 {==}
1868 case WCon{True{}, w8}:
1869 match w8:
1870 case WNil{}:
1871 {==}
1872 case WCon{True{}, w7}:
1873 match w7:
1874 case WCon{False{}, w8}:
1875 match w8:
1876 case WNil{}:
1877 {==}
1878 case WCon{True{}, w8}:
1879 match w8:
1880 case WNil{}:
1881 {==}
1882 case WCon{True{}, w5}:
1883 match w5:
1884 case WCon{False{}, w6}:
1885 match w6:
1886 case WCon{False{}, w7}:
1887 match w7:
1888 case WCon{False{}, w8}:
1889 match w8:
1890 case WNil{}:
1891 {==}
1892 case WCon{True{}, w8}:
1893 match w8:
1894 case WNil{}:
1895 {==}
1896 case WCon{True{}, w7}:
1897 match w7:
1898 case WCon{False{}, w8}:
1899 match w8:
1900 case WNil{}:
1901 {==}
1902 case WCon{True{}, w8}:
1903 match w8:
1904 case WNil{}:
1905 {==}
1906 case WCon{True{}, w6}:
1907 match w6:
1908 case WCon{False{}, w7}:
1909 match w7:
1910 case WCon{False{}, w8}:
1911 match w8:
1912 case WNil{}:
1913 {==}
1914 case WCon{True{}, w8}:
1915 match w8:
1916 case WNil{}:
1917 {==}
1918 case WCon{True{}, w7}:
1919 match w7:
1920 case WCon{False{}, w8}:
1921 match w8:
1922 case WNil{}:
1923 {==}
1924 case WCon{True{}, w8}:
1925 match w8:
1926 case WNil{}:
1927 {==}
1928 case WCon{True{}, w3}:
1929 match w3:
1930 case WCon{False{}, w4}:
1931 match w4:
1932 case WCon{False{}, w5}:
1933 match w5:
1934 case WCon{False{}, w6}:
1935 match w6:
1936 case WCon{False{}, w7}:
1937 match w7:
1938 case WCon{False{}, w8}:
1939 match w8:
1940 case WNil{}:
1941 {==}
1942 case WCon{True{}, w8}:
1943 match w8:
1944 case WNil{}:
1945 {==}
1946 case WCon{True{}, w7}:
1947 match w7:
1948 case WCon{False{}, w8}:
1949 match w8:
1950 case WNil{}:
1951 {==}
1952 case WCon{True{}, w8}:
1953 match w8:
1954 case WNil{}:
1955 {==}
1956 case WCon{True{}, w6}:
1957 match w6:
1958 case WCon{False{}, w7}:
1959 match w7:
1960 case WCon{False{}, w8}:
1961 match w8:
1962 case WNil{}:
1963 {==}
1964 case WCon{True{}, w8}:
1965 match w8:
1966 case WNil{}:
1967 {==}
1968 case WCon{True{}, w7}:
1969 match w7:
1970 case WCon{False{}, w8}:
1971 match w8:
1972 case WNil{}:
1973 {==}
1974 case WCon{True{}, w8}:
1975 match w8:
1976 case WNil{}:
1977 {==}
1978 case WCon{True{}, w5}:
1979 match w5:
1980 case WCon{False{}, w6}:
1981 match w6:
1982 case WCon{False{}, w7}:
1983 match w7:
1984 case WCon{False{}, w8}:
1985 match w8:
1986 case WNil{}:
1987 {==}
1988 case WCon{True{}, w8}:
1989 match w8:
1990 case WNil{}:
1991 {==}
1992 case WCon{True{}, w7}:
1993 match w7:
1994 case WCon{False{}, w8}:
1995 match w8:
1996 case WNil{}:
1997 {==}
1998 case WCon{True{}, w8}:
1999 match w8:
2000 case WNil{}:
2001 {==}
2002 case WCon{True{}, w6}:
2003 match w6:
2004 case WCon{False{}, w7}:
2005 match w7:
2006 case WCon{False{}, w8}:
2007 match w8:
2008 case WNil{}:
2009 {==}
2010 case WCon{True{}, w8}:
2011 match w8:
2012 case WNil{}:
2013 {==}
2014 case WCon{True{}, w7}:
2015 match w7:
2016 case WCon{False{}, w8}:
2017 match w8:
2018 case WNil{}:
2019 {==}
2020 case WCon{True{}, w8}:
2021 match w8:
2022 case WNil{}:
2023 {==}
2024 case WCon{True{}, w4}:
2025 match w4:
2026 case WCon{False{}, w5}:
2027 match w5:
2028 case WCon{False{}, w6}:
2029 match w6:
2030 case WCon{False{}, w7}:
2031 match w7:
2032 case WCon{False{}, w8}:
2033 match w8:
2034 case WNil{}:
2035 {==}
2036 case WCon{True{}, w8}:
2037 match w8:
2038 case WNil{}:
2039 {==}
2040 case WCon{True{}, w7}:
2041 match w7:
2042 case WCon{False{}, w8}:
2043 match w8:
2044 case WNil{}:
2045 {==}
2046 case WCon{True{}, w8}:
2047 match w8:
2048 case WNil{}:
2049 {==}
2050 case WCon{True{}, w6}:
2051 match w6:
2052 case WCon{False{}, w7}:
2053 match w7:
2054 case WCon{False{}, w8}:
2055 match w8:
2056 case WNil{}:
2057 {==}
2058 case WCon{True{}, w8}:
2059 match w8:
2060 case WNil{}:
2061 {==}
2062 case WCon{True{}, w7}:
2063 match w7:
2064 case WCon{False{}, w8}:
2065 match w8:
2066 case WNil{}:
2067 {==}
2068 case WCon{True{}, w8}:
2069 match w8:
2070 case WNil{}:
2071 {==}
2072 case WCon{True{}, w5}:
2073 match w5:
2074 case WCon{False{}, w6}:
2075 match w6:
2076 case WCon{False{}, w7}:
2077 match w7:
2078 case WCon{False{}, w8}:
2079 match w8:
2080 case WNil{}:
2081 {==}
2082 case WCon{True{}, w8}:
2083 match w8:
2084 case WNil{}:
2085 {==}
2086 case WCon{True{}, w7}:
2087 match w7:
2088 case WCon{False{}, w8}:
2089 match w8:
2090 case WNil{}:
2091 {==}
2092 case WCon{True{}, w8}:
2093 match w8:
2094 case WNil{}:
2095 {==}
2096 case WCon{True{}, w6}:
2097 match w6:
2098 case WCon{False{}, w7}:
2099 match w7:
2100 case WCon{False{}, w8}:
2101 match w8:
2102 case WNil{}:
2103 {==}
2104 case WCon{True{}, w8}:
2105 match w8:
2106 case WNil{}:
2107 {==}
2108 case WCon{True{}, w7}:
2109 match w7:
2110 case WCon{False{}, w8}:
2111 match w8:
2112 case WNil{}:
2113 {==}
2114 case WCon{True{}, w8}:
2115 match w8:
2116 case WNil{}:
2117 {==}
2118 case WCon{True{}, w2}:
2119 match w2:
2120 case WCon{False{}, w3}:
2121 match w3:
2122 case WCon{False{}, w4}:
2123 match w4:
2124 case WCon{False{}, w5}:
2125 match w5:
2126 case WCon{False{}, w6}:
2127 match w6:
2128 case WCon{False{}, w7}:
2129 match w7:
2130 case WCon{False{}, w8}:
2131 match w8:
2132 case WNil{}:
2133 {==}
2134 case WCon{True{}, w8}:
2135 match w8:
2136 case WNil{}:
2137 {==}
2138 case WCon{True{}, w7}:
2139 match w7:
2140 case WCon{False{}, w8}:
2141 match w8:
2142 case WNil{}:
2143 {==}
2144 case WCon{True{}, w8}:
2145 match w8:
2146 case WNil{}:
2147 {==}
2148 case WCon{True{}, w6}:
2149 match w6:
2150 case WCon{False{}, w7}:
2151 match w7:
2152 case WCon{False{}, w8}:
2153 match w8:
2154 case WNil{}:
2155 {==}
2156 case WCon{True{}, w8}:
2157 match w8:
2158 case WNil{}:
2159 {==}
2160 case WCon{True{}, w7}:
2161 match w7:
2162 case WCon{False{}, w8}:
2163 match w8:
2164 case WNil{}:
2165 {==}
2166 case WCon{True{}, w8}:
2167 match w8:
2168 case WNil{}:
2169 {==}
2170 case WCon{True{}, w5}:
2171 match w5:
2172 case WCon{False{}, w6}:
2173 match w6:
2174 case WCon{False{}, w7}:
2175 match w7:
2176 case WCon{False{}, w8}:
2177 match w8:
2178 case WNil{}:
2179 {==}
2180 case WCon{True{}, w8}:
2181 match w8:
2182 case WNil{}:
2183 {==}
2184 case WCon{True{}, w7}:
2185 match w7:
2186 case WCon{False{}, w8}:
2187 match w8:
2188 case WNil{}:
2189 {==}
2190 case WCon{True{}, w8}:
2191 match w8:
2192 case WNil{}:
2193 {==}
2194 case WCon{True{}, w6}:
2195 match w6:
2196 case WCon{False{}, w7}:
2197 match w7:
2198 case WCon{False{}, w8}:
2199 match w8:
2200 case WNil{}:
2201 {==}
2202 case WCon{True{}, w8}:
2203 match w8:
2204 case WNil{}:
2205 {==}
2206 case WCon{True{}, w7}:
2207 match w7:
2208 case WCon{False{}, w8}:
2209 match w8:
2210 case WNil{}:
2211 {==}
2212 case WCon{True{}, w8}:
2213 match w8:
2214 case WNil{}:
2215 {==}
2216 case WCon{True{}, w4}:
2217 match w4:
2218 case WCon{False{}, w5}:
2219 match w5:
2220 case WCon{False{}, w6}:
2221 match w6:
2222 case WCon{False{}, w7}:
2223 match w7:
2224 case WCon{False{}, w8}:
2225 match w8:
2226 case WNil{}:
2227 {==}
2228 case WCon{True{}, w8}:
2229 match w8:
2230 case WNil{}:
2231 {==}
2232 case WCon{True{}, w7}:
2233 match w7:
2234 case WCon{False{}, w8}:
2235 match w8:
2236 case WNil{}:
2237 {==}
2238 case WCon{True{}, w8}:
2239 match w8:
2240 case WNil{}:
2241 {==}
2242 case WCon{True{}, w6}:
2243 match w6:
2244 case WCon{False{}, w7}:
2245 match w7:
2246 case WCon{False{}, w8}:
2247 match w8:
2248 case WNil{}:
2249 {==}
2250 case WCon{True{}, w8}:
2251 match w8:
2252 case WNil{}:
2253 {==}
2254 case WCon{True{}, w7}:
2255 match w7:
2256 case WCon{False{}, w8}:
2257 match w8:
2258 case WNil{}:
2259 {==}
2260 case WCon{True{}, w8}:
2261 match w8:
2262 case WNil{}:
2263 {==}
2264 case WCon{True{}, w5}:
2265 match w5:
2266 case WCon{False{}, w6}:
2267 match w6:
2268 case WCon{False{}, w7}:
2269 match w7:
2270 case WCon{False{}, w8}:
2271 match w8:
2272 case WNil{}:
2273 {==}
2274 case WCon{True{}, w8}:
2275 match w8:
2276 case WNil{}:
2277 {==}
2278 case WCon{True{}, w7}:
2279 match w7:
2280 case WCon{False{}, w8}:
2281 match w8:
2282 case WNil{}:
2283 {==}
2284 case WCon{True{}, w8}:
2285 match w8:
2286 case WNil{}:
2287 {==}
2288 case WCon{True{}, w6}:
2289 match w6:
2290 case WCon{False{}, w7}:
2291 match w7:
2292 case WCon{False{}, w8}:
2293 match w8:
2294 case WNil{}:
2295 {==}
2296 case WCon{True{}, w8}:
2297 match w8:
2298 case WNil{}:
2299 {==}
2300 case WCon{True{}, w7}:
2301 match w7:
2302 case WCon{False{}, w8}:
2303 match w8:
2304 case WNil{}:
2305 {==}
2306 case WCon{True{}, w8}:
2307 match w8:
2308 case WNil{}:
2309 {==}
2310 case WCon{True{}, w3}:
2311 match w3:
2312 case WCon{False{}, w4}:
2313 match w4:
2314 case WCon{False{}, w5}:
2315 match w5:
2316 case WCon{False{}, w6}:
2317 match w6:
2318 case WCon{False{}, w7}:
2319 match w7:
2320 case WCon{False{}, w8}:
2321 match w8:
2322 case WNil{}:
2323 {==}
2324 case WCon{True{}, w8}:
2325 match w8:
2326 case WNil{}:
2327 {==}
2328 case WCon{True{}, w7}:
2329 match w7:
2330 case WCon{False{}, w8}:
2331 match w8:
2332 case WNil{}:
2333 {==}
2334 case WCon{True{}, w8}:
2335 match w8:
2336 case WNil{}:
2337 {==}
2338 case WCon{True{}, w6}:
2339 match w6:
2340 case WCon{False{}, w7}:
2341 match w7:
2342 case WCon{False{}, w8}:
2343 match w8:
2344 case WNil{}:
2345 {==}
2346 case WCon{True{}, w8}:
2347 match w8:
2348 case WNil{}:
2349 {==}
2350 case WCon{True{}, w7}:
2351 match w7:
2352 case WCon{False{}, w8}:
2353 match w8:
2354 case WNil{}:
2355 {==}
2356 case WCon{True{}, w8}:
2357 match w8:
2358 case WNil{}:
2359 {==}
2360 case WCon{True{}, w5}:
2361 match w5:
2362 case WCon{False{}, w6}:
2363 match w6:
2364 case WCon{False{}, w7}:
2365 match w7:
2366 case WCon{False{}, w8}:
2367 match w8:
2368 case WNil{}:
2369 {==}
2370 case WCon{True{}, w8}:
2371 match w8:
2372 case WNil{}:
2373 {==}
2374 case WCon{True{}, w7}:
2375 match w7:
2376 case WCon{False{}, w8}:
2377 match w8:
2378 case WNil{}:
2379 {==}
2380 case WCon{True{}, w8}:
2381 match w8:
2382 case WNil{}:
2383 {==}
2384 case WCon{True{}, w6}:
2385 match w6:
2386 case WCon{False{}, w7}:
2387 match w7:
2388 case WCon{False{}, w8}:
2389 match w8:
2390 case WNil{}:
2391 {==}
2392 case WCon{True{}, w8}:
2393 match w8:
2394 case WNil{}:
2395 {==}
2396 case WCon{True{}, w7}:
2397 match w7:
2398 case WCon{False{}, w8}:
2399 match w8:
2400 case WNil{}:
2401 {==}
2402 case WCon{True{}, w8}:
2403 match w8:
2404 case WNil{}:
2405 {==}
2406 case WCon{True{}, w4}:
2407 match w4:
2408 case WCon{False{}, w5}:
2409 match w5:
2410 case WCon{False{}, w6}:
2411 match w6:
2412 case WCon{False{}, w7}:
2413 match w7:
2414 case WCon{False{}, w8}:
2415 match w8:
2416 case WNil{}:
2417 {==}
2418 case WCon{True{}, w8}:
2419 match w8:
2420 case WNil{}:
2421 {==}
2422 case WCon{True{}, w7}:
2423 match w7:
2424 case WCon{False{}, w8}:
2425 match w8:
2426 case WNil{}:
2427 {==}
2428 case WCon{True{}, w8}:
2429 match w8:
2430 case WNil{}:
2431 {==}
2432 case WCon{True{}, w6}:
2433 match w6:
2434 case WCon{False{}, w7}:
2435 match w7:
2436 case WCon{False{}, w8}:
2437 match w8:
2438 case WNil{}:
2439 {==}
2440 case WCon{True{}, w8}:
2441 match w8:
2442 case WNil{}:
2443 {==}
2444 case WCon{True{}, w7}:
2445 match w7:
2446 case WCon{False{}, w8}:
2447 match w8:
2448 case WNil{}:
2449 {==}
2450 case WCon{True{}, w8}:
2451 match w8:
2452 case WNil{}:
2453 {==}
2454 case WCon{True{}, w5}:
2455 match w5:
2456 case WCon{False{}, w6}:
2457 match w6:
2458 case WCon{False{}, w7}:
2459 match w7:
2460 case WCon{False{}, w8}:
2461 match w8:
2462 case WNil{}:
2463 {==}
2464 case WCon{True{}, w8}:
2465 match w8:
2466 case WNil{}:
2467 {==}
2468 case WCon{True{}, w7}:
2469 match w7:
2470 case WCon{False{}, w8}:
2471 match w8:
2472 case WNil{}:
2473 {==}
2474 case WCon{True{}, w8}:
2475 match w8:
2476 case WNil{}:
2477 {==}
2478 case WCon{True{}, w6}:
2479 match w6:
2480 case WCon{False{}, w7}:
2481 match w7:
2482 case WCon{False{}, w8}:
2483 match w8:
2484 case WNil{}:
2485 {==}
2486 case WCon{True{}, w8}:
2487 match w8:
2488 case WNil{}:
2489 {==}
2490 case WCon{True{}, w7}:
2491 match w7:
2492 case WCon{False{}, w8}:
2493 match w8:
2494 case WNil{}:
2495 {==}
2496 case WCon{True{}, w8}:
2497 match w8:
2498 case WNil{}:
2499 {==}
2500 case WCon{True{}, w1}:
2501 match w1:
2502 case WCon{False{}, w2}:
2503 match w2:
2504 case WCon{False{}, w3}:
2505 match w3:
2506 case WCon{False{}, w4}:
2507 match w4:
2508 case WCon{False{}, w5}:
2509 match w5:
2510 case WCon{False{}, w6}:
2511 match w6:
2512 case WCon{False{}, w7}:
2513 match w7:
2514 case WCon{False{}, w8}:
2515 match w8:
2516 case WNil{}:
2517 {==}
2518 case WCon{True{}, w8}:
2519 match w8:
2520 case WNil{}:
2521 {==}
2522 case WCon{True{}, w7}:
2523 match w7:
2524 case WCon{False{}, w8}:
2525 match w8:
2526 case WNil{}:
2527 {==}
2528 case WCon{True{}, w8}:
2529 match w8:
2530 case WNil{}:
2531 {==}
2532 case WCon{True{}, w6}:
2533 match w6:
2534 case WCon{False{}, w7}:
2535 match w7:
2536 case WCon{False{}, w8}:
2537 match w8:
2538 case WNil{}:
2539 {==}
2540 case WCon{True{}, w8}:
2541 match w8:
2542 case WNil{}:
2543 {==}
2544 case WCon{True{}, w7}:
2545 match w7:
2546 case WCon{False{}, w8}:
2547 match w8:
2548 case WNil{}:
2549 {==}
2550 case WCon{True{}, w8}:
2551 match w8:
2552 case WNil{}:
2553 {==}
2554 case WCon{True{}, w5}:
2555 match w5:
2556 case WCon{False{}, w6}:
2557 match w6:
2558 case WCon{False{}, w7}:
2559 match w7:
2560 case WCon{False{}, w8}:
2561 match w8:
2562 case WNil{}:
2563 {==}
2564 case WCon{True{}, w8}:
2565 match w8:
2566 case WNil{}:
2567 {==}
2568 case WCon{True{}, w7}:
2569 match w7:
2570 case WCon{False{}, w8}:
2571 match w8:
2572 case WNil{}:
2573 {==}
2574 case WCon{True{}, w8}:
2575 match w8:
2576 case WNil{}:
2577 {==}
2578 case WCon{True{}, w6}:
2579 match w6:
2580 case WCon{False{}, w7}:
2581 match w7:
2582 case WCon{False{}, w8}:
2583 match w8:
2584 case WNil{}:
2585 {==}
2586 case WCon{True{}, w8}:
2587 match w8:
2588 case WNil{}:
2589 {==}
2590 case WCon{True{}, w7}:
2591 match w7:
2592 case WCon{False{}, w8}:
2593 match w8:
2594 case WNil{}:
2595 {==}
2596 case WCon{True{}, w8}:
2597 match w8:
2598 case WNil{}:
2599 {==}
2600 case WCon{True{}, w4}:
2601 match w4:
2602 case WCon{False{}, w5}:
2603 match w5:
2604 case WCon{False{}, w6}:
2605 match w6:
2606 case WCon{False{}, w7}:
2607 match w7:
2608 case WCon{False{}, w8}:
2609 match w8:
2610 case WNil{}:
2611 {==}
2612 case WCon{True{}, w8}:
2613 match w8:
2614 case WNil{}:
2615 {==}
2616 case WCon{True{}, w7}:
2617 match w7:
2618 case WCon{False{}, w8}:
2619 match w8:
2620 case WNil{}:
2621 {==}
2622 case WCon{True{}, w8}:
2623 match w8:
2624 case WNil{}:
2625 {==}
2626 case WCon{True{}, w6}:
2627 match w6:
2628 case WCon{False{}, w7}:
2629 match w7:
2630 case WCon{False{}, w8}:
2631 match w8:
2632 case WNil{}:
2633 {==}
2634 case WCon{True{}, w8}:
2635 match w8:
2636 case WNil{}:
2637 {==}
2638 case WCon{True{}, w7}:
2639 match w7:
2640 case WCon{False{}, w8}:
2641 match w8:
2642 case WNil{}:
2643 {==}
2644 case WCon{True{}, w8}:
2645 match w8:
2646 case WNil{}:
2647 {==}
2648 case WCon{True{}, w5}:
2649 match w5:
2650 case WCon{False{}, w6}:
2651 match w6:
2652 case WCon{False{}, w7}:
2653 match w7:
2654 case WCon{False{}, w8}:
2655 match w8:
2656 case WNil{}:
2657 {==}
2658 case WCon{True{}, w8}:
2659 match w8:
2660 case WNil{}:
2661 {==}
2662 case WCon{True{}, w7}:
2663 match w7:
2664 case WCon{False{}, w8}:
2665 match w8:
2666 case WNil{}:
2667 {==}
2668 case WCon{True{}, w8}:
2669 match w8:
2670 case WNil{}:
2671 {==}
2672 case WCon{True{}, w6}:
2673 match w6:
2674 case WCon{False{}, w7}:
2675 match w7:
2676 case WCon{False{}, w8}:
2677 match w8:
2678 case WNil{}:
2679 {==}
2680 case WCon{True{}, w8}:
2681 match w8:
2682 case WNil{}:
2683 {==}
2684 case WCon{True{}, w7}:
2685 match w7:
2686 case WCon{False{}, w8}:
2687 match w8:
2688 case WNil{}:
2689 {==}
2690 case WCon{True{}, w8}:
2691 match w8:
2692 case WNil{}:
2693 {==}
2694 case WCon{True{}, w3}:
2695 match w3:
2696 case WCon{False{}, w4}:
2697 match w4:
2698 case WCon{False{}, w5}:
2699 match w5:
2700 case WCon{False{}, w6}:
2701 match w6:
2702 case WCon{False{}, w7}:
2703 match w7:
2704 case WCon{False{}, w8}:
2705 match w8:
2706 case WNil{}:
2707 {==}
2708 case WCon{True{}, w8}:
2709 match w8:
2710 case WNil{}:
2711 {==}
2712 case WCon{True{}, w7}:
2713 match w7:
2714 case WCon{False{}, w8}:
2715 match w8:
2716 case WNil{}:
2717 {==}
2718 case WCon{True{}, w8}:
2719 match w8:
2720 case WNil{}:
2721 {==}
2722 case WCon{True{}, w6}:
2723 match w6:
2724 case WCon{False{}, w7}:
2725 match w7:
2726 case WCon{False{}, w8}:
2727 match w8:
2728 case WNil{}:
2729 {==}
2730 case WCon{True{}, w8}:
2731 match w8:
2732 case WNil{}:
2733 {==}
2734 case WCon{True{}, w7}:
2735 match w7:
2736 case WCon{False{}, w8}:
2737 match w8:
2738 case WNil{}:
2739 {==}
2740 case WCon{True{}, w8}:
2741 match w8:
2742 case WNil{}:
2743 {==}
2744 case WCon{True{}, w5}:
2745 match w5:
2746 case WCon{False{}, w6}:
2747 match w6:
2748 case WCon{False{}, w7}:
2749 match w7:
2750 case WCon{False{}, w8}:
2751 match w8:
2752 case WNil{}:
2753 {==}
2754 case WCon{True{}, w8}:
2755 match w8:
2756 case WNil{}:
2757 {==}
2758 case WCon{True{}, w7}:
2759 match w7:
2760 case WCon{False{}, w8}:
2761 match w8:
2762 case WNil{}:
2763 {==}
2764 case WCon{True{}, w8}:
2765 match w8:
2766 case WNil{}:
2767 {==}
2768 case WCon{True{}, w6}:
2769 match w6:
2770 case WCon{False{}, w7}:
2771 match w7:
2772 case WCon{False{}, w8}:
2773 match w8:
2774 case WNil{}:
2775 {==}
2776 case WCon{True{}, w8}:
2777 match w8:
2778 case WNil{}:
2779 {==}
2780 case WCon{True{}, w7}:
2781 match w7:
2782 case WCon{False{}, w8}:
2783 match w8:
2784 case WNil{}:
2785 {==}
2786 case WCon{True{}, w8}:
2787 match w8:
2788 case WNil{}:
2789 {==}
2790 case WCon{True{}, w4}:
2791 match w4:
2792 case WCon{False{}, w5}:
2793 match w5:
2794 case WCon{False{}, w6}:
2795 match w6:
2796 case WCon{False{}, w7}:
2797 match w7:
2798 case WCon{False{}, w8}:
2799 match w8:
2800 case WNil{}:
2801 {==}
2802 case WCon{True{}, w8}:
2803 match w8:
2804 case WNil{}:
2805 {==}
2806 case WCon{True{}, w7}:
2807 match w7:
2808 case WCon{False{}, w8}:
2809 match w8:
2810 case WNil{}:
2811 {==}
2812 case WCon{True{}, w8}:
2813 match w8:
2814 case WNil{}:
2815 {==}
2816 case WCon{True{}, w6}:
2817 match w6:
2818 case WCon{False{}, w7}:
2819 match w7:
2820 case WCon{False{}, w8}:
2821 match w8:
2822 case WNil{}:
2823 {==}
2824 case WCon{True{}, w8}:
2825 match w8:
2826 case WNil{}:
2827 {==}
2828 case WCon{True{}, w7}:
2829 match w7:
2830 case WCon{False{}, w8}:
2831 match w8:
2832 case WNil{}:
2833 {==}
2834 case WCon{True{}, w8}:
2835 match w8:
2836 case WNil{}:
2837 {==}
2838 case WCon{True{}, w5}:
2839 match w5:
2840 case WCon{False{}, w6}:
2841 match w6:
2842 case WCon{False{}, w7}:
2843 match w7:
2844 case WCon{False{}, w8}:
2845 match w8:
2846 case WNil{}:
2847 {==}
2848 case WCon{True{}, w8}:
2849 match w8:
2850 case WNil{}:
2851 {==}
2852 case WCon{True{}, w7}:
2853 match w7:
2854 case WCon{False{}, w8}:
2855 match w8:
2856 case WNil{}:
2857 {==}
2858 case WCon{True{}, w8}:
2859 match w8:
2860 case WNil{}:
2861 {==}
2862 case WCon{True{}, w6}:
2863 match w6:
2864 case WCon{False{}, w7}:
2865 match w7:
2866 case WCon{False{}, w8}:
2867 match w8:
2868 case WNil{}:
2869 {==}
2870 case WCon{True{}, w8}:
2871 match w8:
2872 case WNil{}:
2873 {==}
2874 case WCon{True{}, w7}:
2875 match w7:
2876 case WCon{False{}, w8}:
2877 match w8:
2878 case WNil{}:
2879 {==}
2880 case WCon{True{}, w8}:
2881 match w8:
2882 case WNil{}:
2883 {==}
2884 case WCon{True{}, w2}:
2885 match w2:
2886 case WCon{False{}, w3}:
2887 match w3:
2888 case WCon{False{}, w4}:
2889 match w4:
2890 case WCon{False{}, w5}:
2891 match w5:
2892 case WCon{False{}, w6}:
2893 match w6:
2894 case WCon{False{}, w7}:
2895 match w7:
2896 case WCon{False{}, w8}:
2897 match w8:
2898 case WNil{}:
2899 {==}
2900 case WCon{True{}, w8}:
2901 match w8:
2902 case WNil{}:
2903 {==}
2904 case WCon{True{}, w7}:
2905 match w7:
2906 case WCon{False{}, w8}:
2907 match w8:
2908 case WNil{}:
2909 {==}
2910 case WCon{True{}, w8}:
2911 match w8:
2912 case WNil{}:
2913 {==}
2914 case WCon{True{}, w6}:
2915 match w6:
2916 case WCon{False{}, w7}:
2917 match w7:
2918 case WCon{False{}, w8}:
2919 match w8:
2920 case WNil{}:
2921 {==}
2922 case WCon{True{}, w8}:
2923 match w8:
2924 case WNil{}:
2925 {==}
2926 case WCon{True{}, w7}:
2927 match w7:
2928 case WCon{False{}, w8}:
2929 match w8:
2930 case WNil{}:
2931 {==}
2932 case WCon{True{}, w8}:
2933 match w8:
2934 case WNil{}:
2935 {==}
2936 case WCon{True{}, w5}:
2937 match w5:
2938 case WCon{False{}, w6}:
2939 match w6:
2940 case WCon{False{}, w7}:
2941 match w7:
2942 case WCon{False{}, w8}:
2943 match w8:
2944 case WNil{}:
2945 {==}
2946 case WCon{True{}, w8}:
2947 match w8:
2948 case WNil{}:
2949 {==}
2950 case WCon{True{}, w7}:
2951 match w7:
2952 case WCon{False{}, w8}:
2953 match w8:
2954 case WNil{}:
2955 {==}
2956 case WCon{True{}, w8}:
2957 match w8:
2958 case WNil{}:
2959 {==}
2960 case WCon{True{}, w6}:
2961 match w6:
2962 case WCon{False{}, w7}:
2963 match w7:
2964 case WCon{False{}, w8}:
2965 match w8:
2966 case WNil{}:
2967 {==}
2968 case WCon{True{}, w8}:
2969 match w8:
2970 case WNil{}:
2971 {==}
2972 case WCon{True{}, w7}:
2973 match w7:
2974 case WCon{False{}, w8}:
2975 match w8:
2976 case WNil{}:
2977 {==}
2978 case WCon{True{}, w8}:
2979 match w8:
2980 case WNil{}:
2981 {==}
2982 case WCon{True{}, w4}:
2983 match w4:
2984 case WCon{False{}, w5}:
2985 match w5:
2986 case WCon{False{}, w6}:
2987 match w6:
2988 case WCon{False{}, w7}:
2989 match w7:
2990 case WCon{False{}, w8}:
2991 match w8:
2992 case WNil{}:
2993 {==}
2994 case WCon{True{}, w8}:
2995 match w8:
2996 case WNil{}:
2997 {==}
2998 case WCon{True{}, w7}:
2999 match w7:
3000 case WCon{False{}, w8}:
3001 match w8:
3002 case WNil{}:
3003 {==}
3004 case WCon{True{}, w8}:
3005 match w8:
3006 case WNil{}:
3007 {==}
3008 case WCon{True{}, w6}:
3009 match w6:
3010 case WCon{False{}, w7}:
3011 match w7:
3012 case WCon{False{}, w8}:
3013 match w8:
3014 case WNil{}:
3015 {==}
3016 case WCon{True{}, w8}:
3017 match w8:
3018 case WNil{}:
3019 {==}
3020 case WCon{True{}, w7}:
3021 match w7:
3022 case WCon{False{}, w8}:
3023 match w8:
3024 case WNil{}:
3025 {==}
3026 case WCon{True{}, w8}:
3027 match w8:
3028 case WNil{}:
3029 {==}
3030 case WCon{True{}, w5}:
3031 match w5:
3032 case WCon{False{}, w6}:
3033 match w6:
3034 case WCon{False{}, w7}:
3035 match w7:
3036 case WCon{False{}, w8}:
3037 match w8:
3038 case WNil{}:
3039 {==}
3040 case WCon{True{}, w8}:
3041 match w8:
3042 case WNil{}:
3043 {==}
3044 case WCon{True{}, w7}:
3045 match w7:
3046 case WCon{False{}, w8}:
3047 match w8:
3048 case WNil{}:
3049 {==}
3050 case WCon{True{}, w8}:
3051 match w8:
3052 case WNil{}:
3053 {==}
3054 case WCon{True{}, w6}:
3055 match w6:
3056 case WCon{False{}, w7}:
3057 match w7:
3058 case WCon{False{}, w8}:
3059 match w8:
3060 case WNil{}:
3061 {==}
3062 case WCon{True{}, w8}:
3063 match w8:
3064 case WNil{}:
3065 {==}
3066 case WCon{True{}, w7}:
3067 match w7:
3068 case WCon{False{}, w8}:
3069 match w8:
3070 case WNil{}:
3071 {==}
3072 case WCon{True{}, w8}:
3073 match w8:
3074 case WNil{}:
3075 {==}
3076 case WCon{True{}, w3}:
3077 match w3:
3078 case WCon{False{}, w4}:
3079 match w4:
3080 case WCon{False{}, w5}:
3081 match w5:
3082 case WCon{False{}, w6}:
3083 match w6:
3084 case WCon{False{}, w7}:
3085 match w7:
3086 case WCon{False{}, w8}:
3087 match w8:
3088 case WNil{}:
3089 {==}
3090 case WCon{True{}, w8}:
3091 match w8:
3092 case WNil{}:
3093 {==}
3094 case WCon{True{}, w7}:
3095 match w7:
3096 case WCon{False{}, w8}:
3097 match w8:
3098 case WNil{}:
3099 {==}
3100 case WCon{True{}, w8}:
3101 match w8:
3102 case WNil{}:
3103 {==}
3104 case WCon{True{}, w6}:
3105 match w6:
3106 case WCon{False{}, w7}:
3107 match w7:
3108 case WCon{False{}, w8}:
3109 match w8:
3110 case WNil{}:
3111 {==}
3112 case WCon{True{}, w8}:
3113 match w8:
3114 case WNil{}:
3115 {==}
3116 case WCon{True{}, w7}:
3117 match w7:
3118 case WCon{False{}, w8}:
3119 match w8:
3120 case WNil{}:
3121 {==}
3122 case WCon{True{}, w8}:
3123 match w8:
3124 case WNil{}:
3125 {==}
3126 case WCon{True{}, w5}:
3127 match w5:
3128 case WCon{False{}, w6}:
3129 match w6:
3130 case WCon{False{}, w7}:
3131 match w7:
3132 case WCon{False{}, w8}:
3133 match w8:
3134 case WNil{}:
3135 {==}
3136 case WCon{True{}, w8}:
3137 match w8:
3138 case WNil{}:
3139 {==}
3140 case WCon{True{}, w7}:
3141 match w7:
3142 case WCon{False{}, w8}:
3143 match w8:
3144 case WNil{}:
3145 {==}
3146 case WCon{True{}, w8}:
3147 match w8:
3148 case WNil{}:
3149 {==}
3150 case WCon{True{}, w6}:
3151 match w6:
3152 case WCon{False{}, w7}:
3153 match w7:
3154 case WCon{False{}, w8}:
3155 match w8:
3156 case WNil{}:
3157 {==}
3158 case WCon{True{}, w8}:
3159 match w8:
3160 case WNil{}:
3161 {==}
3162 case WCon{True{}, w7}:
3163 match w7:
3164 case WCon{False{}, w8}:
3165 match w8:
3166 case WNil{}:
3167 {==}
3168 case WCon{True{}, w8}:
3169 match w8:
3170 case WNil{}:
3171 {==}
3172 case WCon{True{}, w4}:
3173 match w4:
3174 case WCon{False{}, w5}:
3175 match w5:
3176 case WCon{False{}, w6}:
3177 match w6:
3178 case WCon{False{}, w7}:
3179 match w7:
3180 case WCon{False{}, w8}:
3181 match w8:
3182 case WNil{}:
3183 {==}
3184 case WCon{True{}, w8}:
3185 match w8:
3186 case WNil{}:
3187 {==}
3188 case WCon{True{}, w7}:
3189 match w7:
3190 case WCon{False{}, w8}:
3191 match w8:
3192 case WNil{}:
3193 {==}
3194 case WCon{True{}, w8}:
3195 match w8:
3196 case WNil{}:
3197 {==}
3198 case WCon{True{}, w6}:
3199 match w6:
3200 case WCon{False{}, w7}:
3201 match w7:
3202 case WCon{False{}, w8}:
3203 match w8:
3204 case WNil{}:
3205 {==}
3206 case WCon{True{}, w8}:
3207 match w8:
3208 case WNil{}:
3209 {==}
3210 case WCon{True{}, w7}:
3211 match w7:
3212 case WCon{False{}, w8}:
3213 match w8:
3214 case WNil{}:
3215 {==}
3216 case WCon{True{}, w8}:
3217 match w8:
3218 case WNil{}:
3219 {==}
3220 case WCon{True{}, w5}:
3221 match w5:
3222 case WCon{False{}, w6}:
3223 match w6:
3224 case WCon{False{}, w7}:
3225 match w7:
3226 case WCon{False{}, w8}:
3227 match w8:
3228 case WNil{}:
3229 {==}
3230 case WCon{True{}, w8}:
3231 match w8:
3232 case WNil{}:
3233 {==}
3234 case WCon{True{}, w7}:
3235 match w7:
3236 case WCon{False{}, w8}:
3237 match w8:
3238 case WNil{}:
3239 {==}
3240 case WCon{True{}, w8}:
3241 match w8:
3242 case WNil{}:
3243 {==}
3244 case WCon{True{}, w6}:
3245 match w6:
3246 case WCon{False{}, w7}:
3247 match w7:
3248 case WCon{False{}, w8}:
3249 match w8:
3250 case WNil{}:
3251 {==}
3252 case WCon{True{}, w8}:
3253 match w8:
3254 case WNil{}:
3255 {==}
3256 case WCon{True{}, w7}:
3257 match w7:
3258 case WCon{False{}, w8}:
3259 match w8:
3260 case WNil{}:
3261 {==}
3262 case WCon{True{}, w8}:
3263 match w8:
3264 case WNil{}:
3265 {==}
3266
3267def aria_sb13(w0: Word(8n)) -> {w0 == A.aria.sb1(A.aria.sb3(w0)) : Word(8n)}:
3268 match w0:
3269 case WCon{False{}, w1}:
3270 match w1:
3271 case WCon{False{}, w2}:
3272 match w2:
3273 case WCon{False{}, w3}:
3274 match w3:
3275 case WCon{False{}, w4}:
3276 match w4:
3277 case WCon{False{}, w5}:
3278 match w5:
3279 case WCon{False{}, w6}:
3280 match w6:
3281 case WCon{False{}, w7}:
3282 match w7:
3283 case WCon{False{}, w8}:
3284 match w8:
3285 case WNil{}:
3286 {==}
3287 case WCon{True{}, w8}:
3288 match w8:
3289 case WNil{}:
3290 {==}
3291 case WCon{True{}, w7}:
3292 match w7:
3293 case WCon{False{}, w8}:
3294 match w8:
3295 case WNil{}:
3296 {==}
3297 case WCon{True{}, w8}:
3298 match w8:
3299 case WNil{}:
3300 {==}
3301 case WCon{True{}, w6}:
3302 match w6:
3303 case WCon{False{}, w7}:
3304 match w7:
3305 case WCon{False{}, w8}:
3306 match w8:
3307 case WNil{}:
3308 {==}
3309 case WCon{True{}, w8}:
3310 match w8:
3311 case WNil{}:
3312 {==}
3313 case WCon{True{}, w7}:
3314 match w7:
3315 case WCon{False{}, w8}:
3316 match w8:
3317 case WNil{}:
3318 {==}
3319 case WCon{True{}, w8}:
3320 match w8:
3321 case WNil{}:
3322 {==}
3323 case WCon{True{}, w5}:
3324 match w5:
3325 case WCon{False{}, w6}:
3326 match w6:
3327 case WCon{False{}, w7}:
3328 match w7:
3329 case WCon{False{}, w8}:
3330 match w8:
3331 case WNil{}:
3332 {==}
3333 case WCon{True{}, w8}:
3334 match w8:
3335 case WNil{}:
3336 {==}
3337 case WCon{True{}, w7}:
3338 match w7:
3339 case WCon{False{}, w8}:
3340 match w8:
3341 case WNil{}:
3342 {==}
3343 case WCon{True{}, w8}:
3344 match w8:
3345 case WNil{}:
3346 {==}
3347 case WCon{True{}, w6}:
3348 match w6:
3349 case WCon{False{}, w7}:
3350 match w7:
3351 case WCon{False{}, w8}:
3352 match w8:
3353 case WNil{}:
3354 {==}
3355 case WCon{True{}, w8}:
3356 match w8:
3357 case WNil{}:
3358 {==}
3359 case WCon{True{}, w7}:
3360 match w7:
3361 case WCon{False{}, w8}:
3362 match w8:
3363 case WNil{}:
3364 {==}
3365 case WCon{True{}, w8}:
3366 match w8:
3367 case WNil{}:
3368 {==}
3369 case WCon{True{}, w4}:
3370 match w4:
3371 case WCon{False{}, w5}:
3372 match w5:
3373 case WCon{False{}, w6}:
3374 match w6:
3375 case WCon{False{}, w7}:
3376 match w7:
3377 case WCon{False{}, w8}:
3378 match w8:
3379 case WNil{}:
3380 {==}
3381 case WCon{True{}, w8}:
3382 match w8:
3383 case WNil{}:
3384 {==}
3385 case WCon{True{}, w7}:
3386 match w7:
3387 case WCon{False{}, w8}:
3388 match w8:
3389 case WNil{}:
3390 {==}
3391 case WCon{True{}, w8}:
3392 match w8:
3393 case WNil{}:
3394 {==}
3395 case WCon{True{}, w6}:
3396 match w6:
3397 case WCon{False{}, w7}:
3398 match w7:
3399 case WCon{False{}, w8}:
3400 match w8:
3401 case WNil{}:
3402 {==}
3403 case WCon{True{}, w8}:
3404 match w8:
3405 case WNil{}:
3406 {==}
3407 case WCon{True{}, w7}:
3408 match w7:
3409 case WCon{False{}, w8}:
3410 match w8:
3411 case WNil{}:
3412 {==}
3413 case WCon{True{}, w8}:
3414 match w8:
3415 case WNil{}:
3416 {==}
3417 case WCon{True{}, w5}:
3418 match w5:
3419 case WCon{False{}, w6}:
3420 match w6:
3421 case WCon{False{}, w7}:
3422 match w7:
3423 case WCon{False{}, w8}:
3424 match w8:
3425 case WNil{}:
3426 {==}
3427 case WCon{True{}, w8}:
3428 match w8:
3429 case WNil{}:
3430 {==}
3431 case WCon{True{}, w7}:
3432 match w7:
3433 case WCon{False{}, w8}:
3434 match w8:
3435 case WNil{}:
3436 {==}
3437 case WCon{True{}, w8}:
3438 match w8:
3439 case WNil{}:
3440 {==}
3441 case WCon{True{}, w6}:
3442 match w6:
3443 case WCon{False{}, w7}:
3444 match w7:
3445 case WCon{False{}, w8}:
3446 match w8:
3447 case WNil{}:
3448 {==}
3449 case WCon{True{}, w8}:
3450 match w8:
3451 case WNil{}:
3452 {==}
3453 case WCon{True{}, w7}:
3454 match w7:
3455 case WCon{False{}, w8}:
3456 match w8:
3457 case WNil{}:
3458 {==}
3459 case WCon{True{}, w8}:
3460 match w8:
3461 case WNil{}:
3462 {==}
3463 case WCon{True{}, w3}:
3464 match w3:
3465 case WCon{False{}, w4}:
3466 match w4:
3467 case WCon{False{}, w5}:
3468 match w5:
3469 case WCon{False{}, w6}:
3470 match w6:
3471 case WCon{False{}, w7}:
3472 match w7:
3473 case WCon{False{}, w8}:
3474 match w8:
3475 case WNil{}:
3476 {==}
3477 case WCon{True{}, w8}:
3478 match w8:
3479 case WNil{}:
3480 {==}
3481 case WCon{True{}, w7}:
3482 match w7:
3483 case WCon{False{}, w8}:
3484 match w8:
3485 case WNil{}:
3486 {==}
3487 case WCon{True{}, w8}:
3488 match w8:
3489 case WNil{}:
3490 {==}
3491 case WCon{True{}, w6}:
3492 match w6:
3493 case WCon{False{}, w7}:
3494 match w7:
3495 case WCon{False{}, w8}:
3496 match w8:
3497 case WNil{}:
3498 {==}
3499 case WCon{True{}, w8}:
3500 match w8:
3501 case WNil{}:
3502 {==}
3503 case WCon{True{}, w7}:
3504 match w7:
3505 case WCon{False{}, w8}:
3506 match w8:
3507 case WNil{}:
3508 {==}
3509 case WCon{True{}, w8}:
3510 match w8:
3511 case WNil{}:
3512 {==}
3513 case WCon{True{}, w5}:
3514 match w5:
3515 case WCon{False{}, w6}:
3516 match w6:
3517 case WCon{False{}, w7}:
3518 match w7:
3519 case WCon{False{}, w8}:
3520 match w8:
3521 case WNil{}:
3522 {==}
3523 case WCon{True{}, w8}:
3524 match w8:
3525 case WNil{}:
3526 {==}
3527 case WCon{True{}, w7}:
3528 match w7:
3529 case WCon{False{}, w8}:
3530 match w8:
3531 case WNil{}:
3532 {==}
3533 case WCon{True{}, w8}:
3534 match w8:
3535 case WNil{}:
3536 {==}
3537 case WCon{True{}, w6}:
3538 match w6:
3539 case WCon{False{}, w7}:
3540 match w7:
3541 case WCon{False{}, w8}:
3542 match w8:
3543 case WNil{}:
3544 {==}
3545 case WCon{True{}, w8}:
3546 match w8:
3547 case WNil{}:
3548 {==}
3549 case WCon{True{}, w7}:
3550 match w7:
3551 case WCon{False{}, w8}:
3552 match w8:
3553 case WNil{}:
3554 {==}
3555 case WCon{True{}, w8}:
3556 match w8:
3557 case WNil{}:
3558 {==}
3559 case WCon{True{}, w4}:
3560 match w4:
3561 case WCon{False{}, w5}:
3562 match w5:
3563 case WCon{False{}, w6}:
3564 match w6:
3565 case WCon{False{}, w7}:
3566 match w7:
3567 case WCon{False{}, w8}:
3568 match w8:
3569 case WNil{}:
3570 {==}
3571 case WCon{True{}, w8}:
3572 match w8:
3573 case WNil{}:
3574 {==}
3575 case WCon{True{}, w7}:
3576 match w7:
3577 case WCon{False{}, w8}:
3578 match w8:
3579 case WNil{}:
3580 {==}
3581 case WCon{True{}, w8}:
3582 match w8:
3583 case WNil{}:
3584 {==}
3585 case WCon{True{}, w6}:
3586 match w6:
3587 case WCon{False{}, w7}:
3588 match w7:
3589 case WCon{False{}, w8}:
3590 match w8:
3591 case WNil{}:
3592 {==}
3593 case WCon{True{}, w8}:
3594 match w8:
3595 case WNil{}:
3596 {==}
3597 case WCon{True{}, w7}:
3598 match w7:
3599 case WCon{False{}, w8}:
3600 match w8:
3601 case WNil{}:
3602 {==}
3603 case WCon{True{}, w8}:
3604 match w8:
3605 case WNil{}:
3606 {==}
3607 case WCon{True{}, w5}:
3608 match w5:
3609 case WCon{False{}, w6}:
3610 match w6:
3611 case WCon{False{}, w7}:
3612 match w7:
3613 case WCon{False{}, w8}:
3614 match w8:
3615 case WNil{}:
3616 {==}
3617 case WCon{True{}, w8}:
3618 match w8:
3619 case WNil{}:
3620 {==}
3621 case WCon{True{}, w7}:
3622 match w7:
3623 case WCon{False{}, w8}:
3624 match w8:
3625 case WNil{}:
3626 {==}
3627 case WCon{True{}, w8}:
3628 match w8:
3629 case WNil{}:
3630 {==}
3631 case WCon{True{}, w6}:
3632 match w6:
3633 case WCon{False{}, w7}:
3634 match w7:
3635 case WCon{False{}, w8}:
3636 match w8:
3637 case WNil{}:
3638 {==}
3639 case WCon{True{}, w8}:
3640 match w8:
3641 case WNil{}:
3642 {==}
3643 case WCon{True{}, w7}:
3644 match w7:
3645 case WCon{False{}, w8}:
3646 match w8:
3647 case WNil{}:
3648 {==}
3649 case WCon{True{}, w8}:
3650 match w8:
3651 case WNil{}:
3652 {==}
3653 case WCon{True{}, w2}:
3654 match w2:
3655 case WCon{False{}, w3}:
3656 match w3:
3657 case WCon{False{}, w4}:
3658 match w4:
3659 case WCon{False{}, w5}:
3660 match w5:
3661 case WCon{False{}, w6}:
3662 match w6:
3663 case WCon{False{}, w7}:
3664 match w7:
3665 case WCon{False{}, w8}:
3666 match w8:
3667 case WNil{}:
3668 {==}
3669 case WCon{True{}, w8}:
3670 match w8:
3671 case WNil{}:
3672 {==}
3673 case WCon{True{}, w7}:
3674 match w7:
3675 case WCon{False{}, w8}:
3676 match w8:
3677 case WNil{}:
3678 {==}
3679 case WCon{True{}, w8}:
3680 match w8:
3681 case WNil{}:
3682 {==}
3683 case WCon{True{}, w6}:
3684 match w6:
3685 case WCon{False{}, w7}:
3686 match w7:
3687 case WCon{False{}, w8}:
3688 match w8:
3689 case WNil{}:
3690 {==}
3691 case WCon{True{}, w8}:
3692 match w8:
3693 case WNil{}:
3694 {==}
3695 case WCon{True{}, w7}:
3696 match w7:
3697 case WCon{False{}, w8}:
3698 match w8:
3699 case WNil{}:
3700 {==}
3701 case WCon{True{}, w8}:
3702 match w8:
3703 case WNil{}:
3704 {==}
3705 case WCon{True{}, w5}:
3706 match w5:
3707 case WCon{False{}, w6}:
3708 match w6:
3709 case WCon{False{}, w7}:
3710 match w7:
3711 case WCon{False{}, w8}:
3712 match w8:
3713 case WNil{}:
3714 {==}
3715 case WCon{True{}, w8}:
3716 match w8:
3717 case WNil{}:
3718 {==}
3719 case WCon{True{}, w7}:
3720 match w7:
3721 case WCon{False{}, w8}:
3722 match w8:
3723 case WNil{}:
3724 {==}
3725 case WCon{True{}, w8}:
3726 match w8:
3727 case WNil{}:
3728 {==}
3729 case WCon{True{}, w6}:
3730 match w6:
3731 case WCon{False{}, w7}:
3732 match w7:
3733 case WCon{False{}, w8}:
3734 match w8:
3735 case WNil{}:
3736 {==}
3737 case WCon{True{}, w8}:
3738 match w8:
3739 case WNil{}:
3740 {==}
3741 case WCon{True{}, w7}:
3742 match w7:
3743 case WCon{False{}, w8}:
3744 match w8:
3745 case WNil{}:
3746 {==}
3747 case WCon{True{}, w8}:
3748 match w8:
3749 case WNil{}:
3750 {==}
3751 case WCon{True{}, w4}:
3752 match w4:
3753 case WCon{False{}, w5}:
3754 match w5:
3755 case WCon{False{}, w6}:
3756 match w6:
3757 case WCon{False{}, w7}:
3758 match w7:
3759 case WCon{False{}, w8}:
3760 match w8:
3761 case WNil{}:
3762 {==}
3763 case WCon{True{}, w8}:
3764 match w8:
3765 case WNil{}:
3766 {==}
3767 case WCon{True{}, w7}:
3768 match w7:
3769 case WCon{False{}, w8}:
3770 match w8:
3771 case WNil{}:
3772 {==}
3773 case WCon{True{}, w8}:
3774 match w8:
3775 case WNil{}:
3776 {==}
3777 case WCon{True{}, w6}:
3778 match w6:
3779 case WCon{False{}, w7}:
3780 match w7:
3781 case WCon{False{}, w8}:
3782 match w8:
3783 case WNil{}:
3784 {==}
3785 case WCon{True{}, w8}:
3786 match w8:
3787 case WNil{}:
3788 {==}
3789 case WCon{True{}, w7}:
3790 match w7:
3791 case WCon{False{}, w8}:
3792 match w8:
3793 case WNil{}:
3794 {==}
3795 case WCon{True{}, w8}:
3796 match w8:
3797 case WNil{}:
3798 {==}
3799 case WCon{True{}, w5}:
3800 match w5:
3801 case WCon{False{}, w6}:
3802 match w6:
3803 case WCon{False{}, w7}:
3804 match w7:
3805 case WCon{False{}, w8}:
3806 match w8:
3807 case WNil{}:
3808 {==}
3809 case WCon{True{}, w8}:
3810 match w8:
3811 case WNil{}:
3812 {==}
3813 case WCon{True{}, w7}:
3814 match w7:
3815 case WCon{False{}, w8}:
3816 match w8:
3817 case WNil{}:
3818 {==}
3819 case WCon{True{}, w8}:
3820 match w8:
3821 case WNil{}:
3822 {==}
3823 case WCon{True{}, w6}:
3824 match w6:
3825 case WCon{False{}, w7}:
3826 match w7:
3827 case WCon{False{}, w8}:
3828 match w8:
3829 case WNil{}:
3830 {==}
3831 case WCon{True{}, w8}:
3832 match w8:
3833 case WNil{}:
3834 {==}
3835 case WCon{True{}, w7}:
3836 match w7:
3837 case WCon{False{}, w8}:
3838 match w8:
3839 case WNil{}:
3840 {==}
3841 case WCon{True{}, w8}:
3842 match w8:
3843 case WNil{}:
3844 {==}
3845 case WCon{True{}, w3}:
3846 match w3:
3847 case WCon{False{}, w4}:
3848 match w4:
3849 case WCon{False{}, w5}:
3850 match w5:
3851 case WCon{False{}, w6}:
3852 match w6:
3853 case WCon{False{}, w7}:
3854 match w7:
3855 case WCon{False{}, w8}:
3856 match w8:
3857 case WNil{}:
3858 {==}
3859 case WCon{True{}, w8}:
3860 match w8:
3861 case WNil{}:
3862 {==}
3863 case WCon{True{}, w7}:
3864 match w7:
3865 case WCon{False{}, w8}:
3866 match w8:
3867 case WNil{}:
3868 {==}
3869 case WCon{True{}, w8}:
3870 match w8:
3871 case WNil{}:
3872 {==}
3873 case WCon{True{}, w6}:
3874 match w6:
3875 case WCon{False{}, w7}:
3876 match w7:
3877 case WCon{False{}, w8}:
3878 match w8:
3879 case WNil{}:
3880 {==}
3881 case WCon{True{}, w8}:
3882 match w8:
3883 case WNil{}:
3884 {==}
3885 case WCon{True{}, w7}:
3886 match w7:
3887 case WCon{False{}, w8}:
3888 match w8:
3889 case WNil{}:
3890 {==}
3891 case WCon{True{}, w8}:
3892 match w8:
3893 case WNil{}:
3894 {==}
3895 case WCon{True{}, w5}:
3896 match w5:
3897 case WCon{False{}, w6}:
3898 match w6:
3899 case WCon{False{}, w7}:
3900 match w7:
3901 case WCon{False{}, w8}:
3902 match w8:
3903 case WNil{}:
3904 {==}
3905 case WCon{True{}, w8}:
3906 match w8:
3907 case WNil{}:
3908 {==}
3909 case WCon{True{}, w7}:
3910 match w7:
3911 case WCon{False{}, w8}:
3912 match w8:
3913 case WNil{}:
3914 {==}
3915 case WCon{True{}, w8}:
3916 match w8:
3917 case WNil{}:
3918 {==}
3919 case WCon{True{}, w6}:
3920 match w6:
3921 case WCon{False{}, w7}:
3922 match w7:
3923 case WCon{False{}, w8}:
3924 match w8:
3925 case WNil{}:
3926 {==}
3927 case WCon{True{}, w8}:
3928 match w8:
3929 case WNil{}:
3930 {==}
3931 case WCon{True{}, w7}:
3932 match w7:
3933 case WCon{False{}, w8}:
3934 match w8:
3935 case WNil{}:
3936 {==}
3937 case WCon{True{}, w8}:
3938 match w8:
3939 case WNil{}:
3940 {==}
3941 case WCon{True{}, w4}:
3942 match w4:
3943 case WCon{False{}, w5}:
3944 match w5:
3945 case WCon{False{}, w6}:
3946 match w6:
3947 case WCon{False{}, w7}:
3948 match w7:
3949 case WCon{False{}, w8}:
3950 match w8:
3951 case WNil{}:
3952 {==}
3953 case WCon{True{}, w8}:
3954 match w8:
3955 case WNil{}:
3956 {==}
3957 case WCon{True{}, w7}:
3958 match w7:
3959 case WCon{False{}, w8}:
3960 match w8:
3961 case WNil{}:
3962 {==}
3963 case WCon{True{}, w8}:
3964 match w8:
3965 case WNil{}:
3966 {==}
3967 case WCon{True{}, w6}:
3968 match w6:
3969 case WCon{False{}, w7}:
3970 match w7:
3971 case WCon{False{}, w8}:
3972 match w8:
3973 case WNil{}:
3974 {==}
3975 case WCon{True{}, w8}:
3976 match w8:
3977 case WNil{}:
3978 {==}
3979 case WCon{True{}, w7}:
3980 match w7:
3981 case WCon{False{}, w8}:
3982 match w8:
3983 case WNil{}:
3984 {==}
3985 case WCon{True{}, w8}:
3986 match w8:
3987 case WNil{}:
3988 {==}
3989 case WCon{True{}, w5}:
3990 match w5:
3991 case WCon{False{}, w6}:
3992 match w6:
3993 case WCon{False{}, w7}:
3994 match w7:
3995 case WCon{False{}, w8}:
3996 match w8:
3997 case WNil{}:
3998 {==}
3999 case WCon{True{}, w8}:
4000 match w8:
4001 case WNil{}:
4002 {==}
4003 case WCon{True{}, w7}:
4004 match w7:
4005 case WCon{False{}, w8}:
4006 match w8:
4007 case WNil{}:
4008 {==}
4009 case WCon{True{}, w8}:
4010 match w8:
4011 case WNil{}:
4012 {==}
4013 case WCon{True{}, w6}:
4014 match w6:
4015 case WCon{False{}, w7}:
4016 match w7:
4017 case WCon{False{}, w8}:
4018 match w8:
4019 case WNil{}:
4020 {==}
4021 case WCon{True{}, w8}:
4022 match w8:
4023 case WNil{}:
4024 {==}
4025 case WCon{True{}, w7}:
4026 match w7:
4027 case WCon{False{}, w8}:
4028 match w8:
4029 case WNil{}:
4030 {==}
4031 case WCon{True{}, w8}:
4032 match w8:
4033 case WNil{}:
4034 {==}
4035 case WCon{True{}, w1}:
4036 match w1:
4037 case WCon{False{}, w2}:
4038 match w2:
4039 case WCon{False{}, w3}:
4040 match w3:
4041 case WCon{False{}, w4}:
4042 match w4:
4043 case WCon{False{}, w5}:
4044 match w5:
4045 case WCon{False{}, w6}:
4046 match w6:
4047 case WCon{False{}, w7}:
4048 match w7:
4049 case WCon{False{}, w8}:
4050 match w8:
4051 case WNil{}:
4052 {==}
4053 case WCon{True{}, w8}:
4054 match w8:
4055 case WNil{}:
4056 {==}
4057 case WCon{True{}, w7}:
4058 match w7:
4059 case WCon{False{}, w8}:
4060 match w8:
4061 case WNil{}:
4062 {==}
4063 case WCon{True{}, w8}:
4064 match w8:
4065 case WNil{}:
4066 {==}
4067 case WCon{True{}, w6}:
4068 match w6:
4069 case WCon{False{}, w7}:
4070 match w7:
4071 case WCon{False{}, w8}:
4072 match w8:
4073 case WNil{}:
4074 {==}
4075 case WCon{True{}, w8}:
4076 match w8:
4077 case WNil{}:
4078 {==}
4079 case WCon{True{}, w7}:
4080 match w7:
4081 case WCon{False{}, w8}:
4082 match w8:
4083 case WNil{}:
4084 {==}
4085 case WCon{True{}, w8}:
4086 match w8:
4087 case WNil{}:
4088 {==}
4089 case WCon{True{}, w5}:
4090 match w5:
4091 case WCon{False{}, w6}:
4092 match w6:
4093 case WCon{False{}, w7}:
4094 match w7:
4095 case WCon{False{}, w8}:
4096 match w8:
4097 case WNil{}:
4098 {==}
4099 case WCon{True{}, w8}:
4100 match w8:
4101 case WNil{}:
4102 {==}
4103 case WCon{True{}, w7}:
4104 match w7:
4105 case WCon{False{}, w8}:
4106 match w8:
4107 case WNil{}:
4108 {==}
4109 case WCon{True{}, w8}:
4110 match w8:
4111 case WNil{}:
4112 {==}
4113 case WCon{True{}, w6}:
4114 match w6:
4115 case WCon{False{}, w7}:
4116 match w7:
4117 case WCon{False{}, w8}:
4118 match w8:
4119 case WNil{}:
4120 {==}
4121 case WCon{True{}, w8}:
4122 match w8:
4123 case WNil{}:
4124 {==}
4125 case WCon{True{}, w7}:
4126 match w7:
4127 case WCon{False{}, w8}:
4128 match w8:
4129 case WNil{}:
4130 {==}
4131 case WCon{True{}, w8}:
4132 match w8:
4133 case WNil{}:
4134 {==}
4135 case WCon{True{}, w4}:
4136 match w4:
4137 case WCon{False{}, w5}:
4138 match w5:
4139 case WCon{False{}, w6}:
4140 match w6:
4141 case WCon{False{}, w7}:
4142 match w7:
4143 case WCon{False{}, w8}:
4144 match w8:
4145 case WNil{}:
4146 {==}
4147 case WCon{True{}, w8}:
4148 match w8:
4149 case WNil{}:
4150 {==}
4151 case WCon{True{}, w7}:
4152 match w7:
4153 case WCon{False{}, w8}:
4154 match w8:
4155 case WNil{}:
4156 {==}
4157 case WCon{True{}, w8}:
4158 match w8:
4159 case WNil{}:
4160 {==}
4161 case WCon{True{}, w6}:
4162 match w6:
4163 case WCon{False{}, w7}:
4164 match w7:
4165 case WCon{False{}, w8}:
4166 match w8:
4167 case WNil{}:
4168 {==}
4169 case WCon{True{}, w8}:
4170 match w8:
4171 case WNil{}:
4172 {==}
4173 case WCon{True{}, w7}:
4174 match w7:
4175 case WCon{False{}, w8}:
4176 match w8:
4177 case WNil{}:
4178 {==}
4179 case WCon{True{}, w8}:
4180 match w8:
4181 case WNil{}:
4182 {==}
4183 case WCon{True{}, w5}:
4184 match w5:
4185 case WCon{False{}, w6}:
4186 match w6:
4187 case WCon{False{}, w7}:
4188 match w7:
4189 case WCon{False{}, w8}:
4190 match w8:
4191 case WNil{}:
4192 {==}
4193 case WCon{True{}, w8}:
4194 match w8:
4195 case WNil{}:
4196 {==}
4197 case WCon{True{}, w7}:
4198 match w7:
4199 case WCon{False{}, w8}:
4200 match w8:
4201 case WNil{}:
4202 {==}
4203 case WCon{True{}, w8}:
4204 match w8:
4205 case WNil{}:
4206 {==}
4207 case WCon{True{}, w6}:
4208 match w6:
4209 case WCon{False{}, w7}:
4210 match w7:
4211 case WCon{False{}, w8}:
4212 match w8:
4213 case WNil{}:
4214 {==}
4215 case WCon{True{}, w8}:
4216 match w8:
4217 case WNil{}:
4218 {==}
4219 case WCon{True{}, w7}:
4220 match w7:
4221 case WCon{False{}, w8}:
4222 match w8:
4223 case WNil{}:
4224 {==}
4225 case WCon{True{}, w8}:
4226 match w8:
4227 case WNil{}:
4228 {==}
4229 case WCon{True{}, w3}:
4230 match w3:
4231 case WCon{False{}, w4}:
4232 match w4:
4233 case WCon{False{}, w5}:
4234 match w5:
4235 case WCon{False{}, w6}:
4236 match w6:
4237 case WCon{False{}, w7}:
4238 match w7:
4239 case WCon{False{}, w8}:
4240 match w8:
4241 case WNil{}:
4242 {==}
4243 case WCon{True{}, w8}:
4244 match w8:
4245 case WNil{}:
4246 {==}
4247 case WCon{True{}, w7}:
4248 match w7:
4249 case WCon{False{}, w8}:
4250 match w8:
4251 case WNil{}:
4252 {==}
4253 case WCon{True{}, w8}:
4254 match w8:
4255 case WNil{}:
4256 {==}
4257 case WCon{True{}, w6}:
4258 match w6:
4259 case WCon{False{}, w7}:
4260 match w7:
4261 case WCon{False{}, w8}:
4262 match w8:
4263 case WNil{}:
4264 {==}
4265 case WCon{True{}, w8}:
4266 match w8:
4267 case WNil{}:
4268 {==}
4269 case WCon{True{}, w7}:
4270 match w7:
4271 case WCon{False{}, w8}:
4272 match w8:
4273 case WNil{}:
4274 {==}
4275 case WCon{True{}, w8}:
4276 match w8:
4277 case WNil{}:
4278 {==}
4279 case WCon{True{}, w5}:
4280 match w5:
4281 case WCon{False{}, w6}:
4282 match w6:
4283 case WCon{False{}, w7}:
4284 match w7:
4285 case WCon{False{}, w8}:
4286 match w8:
4287 case WNil{}:
4288 {==}
4289 case WCon{True{}, w8}:
4290 match w8:
4291 case WNil{}:
4292 {==}
4293 case WCon{True{}, w7}:
4294 match w7:
4295 case WCon{False{}, w8}:
4296 match w8:
4297 case WNil{}:
4298 {==}
4299 case WCon{True{}, w8}:
4300 match w8:
4301 case WNil{}:
4302 {==}
4303 case WCon{True{}, w6}:
4304 match w6:
4305 case WCon{False{}, w7}:
4306 match w7:
4307 case WCon{False{}, w8}:
4308 match w8:
4309 case WNil{}:
4310 {==}
4311 case WCon{True{}, w8}:
4312 match w8:
4313 case WNil{}:
4314 {==}
4315 case WCon{True{}, w7}:
4316 match w7:
4317 case WCon{False{}, w8}:
4318 match w8:
4319 case WNil{}:
4320 {==}
4321 case WCon{True{}, w8}:
4322 match w8:
4323 case WNil{}:
4324 {==}
4325 case WCon{True{}, w4}:
4326 match w4:
4327 case WCon{False{}, w5}:
4328 match w5:
4329 case WCon{False{}, w6}:
4330 match w6:
4331 case WCon{False{}, w7}:
4332 match w7:
4333 case WCon{False{}, w8}:
4334 match w8:
4335 case WNil{}:
4336 {==}
4337 case WCon{True{}, w8}:
4338 match w8:
4339 case WNil{}:
4340 {==}
4341 case WCon{True{}, w7}:
4342 match w7:
4343 case WCon{False{}, w8}:
4344 match w8:
4345 case WNil{}:
4346 {==}
4347 case WCon{True{}, w8}:
4348 match w8:
4349 case WNil{}:
4350 {==}
4351 case WCon{True{}, w6}:
4352 match w6:
4353 case WCon{False{}, w7}:
4354 match w7:
4355 case WCon{False{}, w8}:
4356 match w8:
4357 case WNil{}:
4358 {==}
4359 case WCon{True{}, w8}:
4360 match w8:
4361 case WNil{}:
4362 {==}
4363 case WCon{True{}, w7}:
4364 match w7:
4365 case WCon{False{}, w8}:
4366 match w8:
4367 case WNil{}:
4368 {==}
4369 case WCon{True{}, w8}:
4370 match w8:
4371 case WNil{}:
4372 {==}
4373 case WCon{True{}, w5}:
4374 match w5:
4375 case WCon{False{}, w6}:
4376 match w6:
4377 case WCon{False{}, w7}:
4378 match w7:
4379 case WCon{False{}, w8}:
4380 match w8:
4381 case WNil{}:
4382 {==}
4383 case WCon{True{}, w8}:
4384 match w8:
4385 case WNil{}:
4386 {==}
4387 case WCon{True{}, w7}:
4388 match w7:
4389 case WCon{False{}, w8}:
4390 match w8:
4391 case WNil{}:
4392 {==}
4393 case WCon{True{}, w8}:
4394 match w8:
4395 case WNil{}:
4396 {==}
4397 case WCon{True{}, w6}:
4398 match w6:
4399 case WCon{False{}, w7}:
4400 match w7:
4401 case WCon{False{}, w8}:
4402 match w8:
4403 case WNil{}:
4404 {==}
4405 case WCon{True{}, w8}:
4406 match w8:
4407 case WNil{}:
4408 {==}
4409 case WCon{True{}, w7}:
4410 match w7:
4411 case WCon{False{}, w8}:
4412 match w8:
4413 case WNil{}:
4414 {==}
4415 case WCon{True{}, w8}:
4416 match w8:
4417 case WNil{}:
4418 {==}
4419 case WCon{True{}, w2}:
4420 match w2:
4421 case WCon{False{}, w3}:
4422 match w3:
4423 case WCon{False{}, w4}:
4424 match w4:
4425 case WCon{False{}, w5}:
4426 match w5:
4427 case WCon{False{}, w6}:
4428 match w6:
4429 case WCon{False{}, w7}:
4430 match w7:
4431 case WCon{False{}, w8}:
4432 match w8:
4433 case WNil{}:
4434 {==}
4435 case WCon{True{}, w8}:
4436 match w8:
4437 case WNil{}:
4438 {==}
4439 case WCon{True{}, w7}:
4440 match w7:
4441 case WCon{False{}, w8}:
4442 match w8:
4443 case WNil{}:
4444 {==}
4445 case WCon{True{}, w8}:
4446 match w8:
4447 case WNil{}:
4448 {==}
4449 case WCon{True{}, w6}:
4450 match w6:
4451 case WCon{False{}, w7}:
4452 match w7:
4453 case WCon{False{}, w8}:
4454 match w8:
4455 case WNil{}:
4456 {==}
4457 case WCon{True{}, w8}:
4458 match w8:
4459 case WNil{}:
4460 {==}
4461 case WCon{True{}, w7}:
4462 match w7:
4463 case WCon{False{}, w8}:
4464 match w8:
4465 case WNil{}:
4466 {==}
4467 case WCon{True{}, w8}:
4468 match w8:
4469 case WNil{}:
4470 {==}
4471 case WCon{True{}, w5}:
4472 match w5:
4473 case WCon{False{}, w6}:
4474 match w6:
4475 case WCon{False{}, w7}:
4476 match w7:
4477 case WCon{False{}, w8}:
4478 match w8:
4479 case WNil{}:
4480 {==}
4481 case WCon{True{}, w8}:
4482 match w8:
4483 case WNil{}:
4484 {==}
4485 case WCon{True{}, w7}:
4486 match w7:
4487 case WCon{False{}, w8}:
4488 match w8:
4489 case WNil{}:
4490 {==}
4491 case WCon{True{}, w8}:
4492 match w8:
4493 case WNil{}:
4494 {==}
4495 case WCon{True{}, w6}:
4496 match w6:
4497 case WCon{False{}, w7}:
4498 match w7:
4499 case WCon{False{}, w8}:
4500 match w8:
4501 case WNil{}:
4502 {==}
4503 case WCon{True{}, w8}:
4504 match w8:
4505 case WNil{}:
4506 {==}
4507 case WCon{True{}, w7}:
4508 match w7:
4509 case WCon{False{}, w8}:
4510 match w8:
4511 case WNil{}:
4512 {==}
4513 case WCon{True{}, w8}:
4514 match w8:
4515 case WNil{}:
4516 {==}
4517 case WCon{True{}, w4}:
4518 match w4:
4519 case WCon{False{}, w5}:
4520 match w5:
4521 case WCon{False{}, w6}:
4522 match w6:
4523 case WCon{False{}, w7}:
4524 match w7:
4525 case WCon{False{}, w8}:
4526 match w8:
4527 case WNil{}:
4528 {==}
4529 case WCon{True{}, w8}:
4530 match w8:
4531 case WNil{}:
4532 {==}
4533 case WCon{True{}, w7}:
4534 match w7:
4535 case WCon{False{}, w8}:
4536 match w8:
4537 case WNil{}:
4538 {==}
4539 case WCon{True{}, w8}:
4540 match w8:
4541 case WNil{}:
4542 {==}
4543 case WCon{True{}, w6}:
4544 match w6:
4545 case WCon{False{}, w7}:
4546 match w7:
4547 case WCon{False{}, w8}:
4548 match w8:
4549 case WNil{}:
4550 {==}
4551 case WCon{True{}, w8}:
4552 match w8:
4553 case WNil{}:
4554 {==}
4555 case WCon{True{}, w7}:
4556 match w7:
4557 case WCon{False{}, w8}:
4558 match w8:
4559 case WNil{}:
4560 {==}
4561 case WCon{True{}, w8}:
4562 match w8:
4563 case WNil{}:
4564 {==}
4565 case WCon{True{}, w5}:
4566 match w5:
4567 case WCon{False{}, w6}:
4568 match w6:
4569 case WCon{False{}, w7}:
4570 match w7:
4571 case WCon{False{}, w8}:
4572 match w8:
4573 case WNil{}:
4574 {==}
4575 case WCon{True{}, w8}:
4576 match w8:
4577 case WNil{}:
4578 {==}
4579 case WCon{True{}, w7}:
4580 match w7:
4581 case WCon{False{}, w8}:
4582 match w8:
4583 case WNil{}:
4584 {==}
4585 case WCon{True{}, w8}:
4586 match w8:
4587 case WNil{}:
4588 {==}
4589 case WCon{True{}, w6}:
4590 match w6:
4591 case WCon{False{}, w7}:
4592 match w7:
4593 case WCon{False{}, w8}:
4594 match w8:
4595 case WNil{}:
4596 {==}
4597 case WCon{True{}, w8}:
4598 match w8:
4599 case WNil{}:
4600 {==}
4601 case WCon{True{}, w7}:
4602 match w7:
4603 case WCon{False{}, w8}:
4604 match w8:
4605 case WNil{}:
4606 {==}
4607 case WCon{True{}, w8}:
4608 match w8:
4609 case WNil{}:
4610 {==}
4611 case WCon{True{}, w3}:
4612 match w3:
4613 case WCon{False{}, w4}:
4614 match w4:
4615 case WCon{False{}, w5}:
4616 match w5:
4617 case WCon{False{}, w6}:
4618 match w6:
4619 case WCon{False{}, w7}:
4620 match w7:
4621 case WCon{False{}, w8}:
4622 match w8:
4623 case WNil{}:
4624 {==}
4625 case WCon{True{}, w8}:
4626 match w8:
4627 case WNil{}:
4628 {==}
4629 case WCon{True{}, w7}:
4630 match w7:
4631 case WCon{False{}, w8}:
4632 match w8:
4633 case WNil{}:
4634 {==}
4635 case WCon{True{}, w8}:
4636 match w8:
4637 case WNil{}:
4638 {==}
4639 case WCon{True{}, w6}:
4640 match w6:
4641 case WCon{False{}, w7}:
4642 match w7:
4643 case WCon{False{}, w8}:
4644 match w8:
4645 case WNil{}:
4646 {==}
4647 case WCon{True{}, w8}:
4648 match w8:
4649 case WNil{}:
4650 {==}
4651 case WCon{True{}, w7}:
4652 match w7:
4653 case WCon{False{}, w8}:
4654 match w8:
4655 case WNil{}:
4656 {==}
4657 case WCon{True{}, w8}:
4658 match w8:
4659 case WNil{}:
4660 {==}
4661 case WCon{True{}, w5}:
4662 match w5:
4663 case WCon{False{}, w6}:
4664 match w6:
4665 case WCon{False{}, w7}:
4666 match w7:
4667 case WCon{False{}, w8}:
4668 match w8:
4669 case WNil{}:
4670 {==}
4671 case WCon{True{}, w8}:
4672 match w8:
4673 case WNil{}:
4674 {==}
4675 case WCon{True{}, w7}:
4676 match w7:
4677 case WCon{False{}, w8}:
4678 match w8:
4679 case WNil{}:
4680 {==}
4681 case WCon{True{}, w8}:
4682 match w8:
4683 case WNil{}:
4684 {==}
4685 case WCon{True{}, w6}:
4686 match w6:
4687 case WCon{False{}, w7}:
4688 match w7:
4689 case WCon{False{}, w8}:
4690 match w8:
4691 case WNil{}:
4692 {==}
4693 case WCon{True{}, w8}:
4694 match w8:
4695 case WNil{}:
4696 {==}
4697 case WCon{True{}, w7}:
4698 match w7:
4699 case WCon{False{}, w8}:
4700 match w8:
4701 case WNil{}:
4702 {==}
4703 case WCon{True{}, w8}:
4704 match w8:
4705 case WNil{}:
4706 {==}
4707 case WCon{True{}, w4}:
4708 match w4:
4709 case WCon{False{}, w5}:
4710 match w5:
4711 case WCon{False{}, w6}:
4712 match w6:
4713 case WCon{False{}, w7}:
4714 match w7:
4715 case WCon{False{}, w8}:
4716 match w8:
4717 case WNil{}:
4718 {==}
4719 case WCon{True{}, w8}:
4720 match w8:
4721 case WNil{}:
4722 {==}
4723 case WCon{True{}, w7}:
4724 match w7:
4725 case WCon{False{}, w8}:
4726 match w8:
4727 case WNil{}:
4728 {==}
4729 case WCon{True{}, w8}:
4730 match w8:
4731 case WNil{}:
4732 {==}
4733 case WCon{True{}, w6}:
4734 match w6:
4735 case WCon{False{}, w7}:
4736 match w7:
4737 case WCon{False{}, w8}:
4738 match w8:
4739 case WNil{}:
4740 {==}
4741 case WCon{True{}, w8}:
4742 match w8:
4743 case WNil{}:
4744 {==}
4745 case WCon{True{}, w7}:
4746 match w7:
4747 case WCon{False{}, w8}:
4748 match w8:
4749 case WNil{}:
4750 {==}
4751 case WCon{True{}, w8}:
4752 match w8:
4753 case WNil{}:
4754 {==}
4755 case WCon{True{}, w5}:
4756 match w5:
4757 case WCon{False{}, w6}:
4758 match w6:
4759 case WCon{False{}, w7}:
4760 match w7:
4761 case WCon{False{}, w8}:
4762 match w8:
4763 case WNil{}:
4764 {==}
4765 case WCon{True{}, w8}:
4766 match w8:
4767 case WNil{}:
4768 {==}
4769 case WCon{True{}, w7}:
4770 match w7:
4771 case WCon{False{}, w8}:
4772 match w8:
4773 case WNil{}:
4774 {==}
4775 case WCon{True{}, w8}:
4776 match w8:
4777 case WNil{}:
4778 {==}
4779 case WCon{True{}, w6}:
4780 match w6:
4781 case WCon{False{}, w7}:
4782 match w7:
4783 case WCon{False{}, w8}:
4784 match w8:
4785 case WNil{}:
4786 {==}
4787 case WCon{True{}, w8}:
4788 match w8:
4789 case WNil{}:
4790 {==}
4791 case WCon{True{}, w7}:
4792 match w7:
4793 case WCon{False{}, w8}:
4794 match w8:
4795 case WNil{}:
4796 {==}
4797 case WCon{True{}, w8}:
4798 match w8:
4799 case WNil{}:
4800 {==}
4801
4802def aria_sb42(w0: Word(8n)) -> {w0 == A.aria.sb4(A.aria.sb2(w0)) : Word(8n)}:
4803 match w0:
4804 case WCon{False{}, w1}:
4805 match w1:
4806 case WCon{False{}, w2}:
4807 match w2:
4808 case WCon{False{}, w3}:
4809 match w3:
4810 case WCon{False{}, w4}:
4811 match w4:
4812 case WCon{False{}, w5}:
4813 match w5:
4814 case WCon{False{}, w6}:
4815 match w6:
4816 case WCon{False{}, w7}:
4817 match w7:
4818 case WCon{False{}, w8}:
4819 match w8:
4820 case WNil{}:
4821 {==}
4822 case WCon{True{}, w8}:
4823 match w8:
4824 case WNil{}:
4825 {==}
4826 case WCon{True{}, w7}:
4827 match w7:
4828 case WCon{False{}, w8}:
4829 match w8:
4830 case WNil{}:
4831 {==}
4832 case WCon{True{}, w8}:
4833 match w8:
4834 case WNil{}:
4835 {==}
4836 case WCon{True{}, w6}:
4837 match w6:
4838 case WCon{False{}, w7}:
4839 match w7:
4840 case WCon{False{}, w8}:
4841 match w8:
4842 case WNil{}:
4843 {==}
4844 case WCon{True{}, w8}:
4845 match w8:
4846 case WNil{}:
4847 {==}
4848 case WCon{True{}, w7}:
4849 match w7:
4850 case WCon{False{}, w8}:
4851 match w8:
4852 case WNil{}:
4853 {==}
4854 case WCon{True{}, w8}:
4855 match w8:
4856 case WNil{}:
4857 {==}
4858 case WCon{True{}, w5}:
4859 match w5:
4860 case WCon{False{}, w6}:
4861 match w6:
4862 case WCon{False{}, w7}:
4863 match w7:
4864 case WCon{False{}, w8}:
4865 match w8:
4866 case WNil{}:
4867 {==}
4868 case WCon{True{}, w8}:
4869 match w8:
4870 case WNil{}:
4871 {==}
4872 case WCon{True{}, w7}:
4873 match w7:
4874 case WCon{False{}, w8}:
4875 match w8:
4876 case WNil{}:
4877 {==}
4878 case WCon{True{}, w8}:
4879 match w8:
4880 case WNil{}:
4881 {==}
4882 case WCon{True{}, w6}:
4883 match w6:
4884 case WCon{False{}, w7}:
4885 match w7:
4886 case WCon{False{}, w8}:
4887 match w8:
4888 case WNil{}:
4889 {==}
4890 case WCon{True{}, w8}:
4891 match w8:
4892 case WNil{}:
4893 {==}
4894 case WCon{True{}, w7}:
4895 match w7:
4896 case WCon{False{}, w8}:
4897 match w8:
4898 case WNil{}:
4899 {==}
4900 case WCon{True{}, w8}:
4901 match w8:
4902 case WNil{}:
4903 {==}
4904 case WCon{True{}, w4}:
4905 match w4:
4906 case WCon{False{}, w5}:
4907 match w5:
4908 case WCon{False{}, w6}:
4909 match w6:
4910 case WCon{False{}, w7}:
4911 match w7:
4912 case WCon{False{}, w8}:
4913 match w8:
4914 case WNil{}:
4915 {==}
4916 case WCon{True{}, w8}:
4917 match w8:
4918 case WNil{}:
4919 {==}
4920 case WCon{True{}, w7}:
4921 match w7:
4922 case WCon{False{}, w8}:
4923 match w8:
4924 case WNil{}:
4925 {==}
4926 case WCon{True{}, w8}:
4927 match w8:
4928 case WNil{}:
4929 {==}
4930 case WCon{True{}, w6}:
4931 match w6:
4932 case WCon{False{}, w7}:
4933 match w7:
4934 case WCon{False{}, w8}:
4935 match w8:
4936 case WNil{}:
4937 {==}
4938 case WCon{True{}, w8}:
4939 match w8:
4940 case WNil{}:
4941 {==}
4942 case WCon{True{}, w7}:
4943 match w7:
4944 case WCon{False{}, w8}:
4945 match w8:
4946 case WNil{}:
4947 {==}
4948 case WCon{True{}, w8}:
4949 match w8:
4950 case WNil{}:
4951 {==}
4952 case WCon{True{}, w5}:
4953 match w5:
4954 case WCon{False{}, w6}:
4955 match w6:
4956 case WCon{False{}, w7}:
4957 match w7:
4958 case WCon{False{}, w8}:
4959 match w8:
4960 case WNil{}:
4961 {==}
4962 case WCon{True{}, w8}:
4963 match w8:
4964 case WNil{}:
4965 {==}
4966 case WCon{True{}, w7}:
4967 match w7:
4968 case WCon{False{}, w8}:
4969 match w8:
4970 case WNil{}:
4971 {==}
4972 case WCon{True{}, w8}:
4973 match w8:
4974 case WNil{}:
4975 {==}
4976 case WCon{True{}, w6}:
4977 match w6:
4978 case WCon{False{}, w7}:
4979 match w7:
4980 case WCon{False{}, w8}:
4981 match w8:
4982 case WNil{}:
4983 {==}
4984 case WCon{True{}, w8}:
4985 match w8:
4986 case WNil{}:
4987 {==}
4988 case WCon{True{}, w7}:
4989 match w7:
4990 case WCon{False{}, w8}:
4991 match w8:
4992 case WNil{}:
4993 {==}
4994 case WCon{True{}, w8}:
4995 match w8:
4996 case WNil{}:
4997 {==}
4998 case WCon{True{}, w3}:
4999 match w3:
5000 case WCon{False{}, w4}:
5001 match w4:
5002 case WCon{False{}, w5}:
5003 match w5:
5004 case WCon{False{}, w6}:
5005 match w6:
5006 case WCon{False{}, w7}:
5007 match w7:
5008 case WCon{False{}, w8}:
5009 match w8:
5010 case WNil{}:
5011 {==}
5012 case WCon{True{}, w8}:
5013 match w8:
5014 case WNil{}:
5015 {==}
5016 case WCon{True{}, w7}:
5017 match w7:
5018 case WCon{False{}, w8}:
5019 match w8:
5020 case WNil{}:
5021 {==}
5022 case WCon{True{}, w8}:
5023 match w8:
5024 case WNil{}:
5025 {==}
5026 case WCon{True{}, w6}:
5027 match w6:
5028 case WCon{False{}, w7}:
5029 match w7:
5030 case WCon{False{}, w8}:
5031 match w8:
5032 case WNil{}:
5033 {==}
5034 case WCon{True{}, w8}:
5035 match w8:
5036 case WNil{}:
5037 {==}
5038 case WCon{True{}, w7}:
5039 match w7:
5040 case WCon{False{}, w8}:
5041 match w8:
5042 case WNil{}:
5043 {==}
5044 case WCon{True{}, w8}:
5045 match w8:
5046 case WNil{}:
5047 {==}
5048 case WCon{True{}, w5}:
5049 match w5:
5050 case WCon{False{}, w6}:
5051 match w6:
5052 case WCon{False{}, w7}:
5053 match w7:
5054 case WCon{False{}, w8}:
5055 match w8:
5056 case WNil{}:
5057 {==}
5058 case WCon{True{}, w8}:
5059 match w8:
5060 case WNil{}:
5061 {==}
5062 case WCon{True{}, w7}:
5063 match w7:
5064 case WCon{False{}, w8}:
5065 match w8:
5066 case WNil{}:
5067 {==}
5068 case WCon{True{}, w8}:
5069 match w8:
5070 case WNil{}:
5071 {==}
5072 case WCon{True{}, w6}:
5073 match w6:
5074 case WCon{False{}, w7}:
5075 match w7:
5076 case WCon{False{}, w8}:
5077 match w8:
5078 case WNil{}:
5079 {==}
5080 case WCon{True{}, w8}:
5081 match w8:
5082 case WNil{}:
5083 {==}
5084 case WCon{True{}, w7}:
5085 match w7:
5086 case WCon{False{}, w8}:
5087 match w8:
5088 case WNil{}:
5089 {==}
5090 case WCon{True{}, w8}:
5091 match w8:
5092 case WNil{}:
5093 {==}
5094 case WCon{True{}, w4}:
5095 match w4:
5096 case WCon{False{}, w5}:
5097 match w5:
5098 case WCon{False{}, w6}:
5099 match w6:
5100 case WCon{False{}, w7}:
5101 match w7:
5102 case WCon{False{}, w8}:
5103 match w8:
5104 case WNil{}:
5105 {==}
5106 case WCon{True{}, w8}:
5107 match w8:
5108 case WNil{}:
5109 {==}
5110 case WCon{True{}, w7}:
5111 match w7:
5112 case WCon{False{}, w8}:
5113 match w8:
5114 case WNil{}:
5115 {==}
5116 case WCon{True{}, w8}:
5117 match w8:
5118 case WNil{}:
5119 {==}
5120 case WCon{True{}, w6}:
5121 match w6:
5122 case WCon{False{}, w7}:
5123 match w7:
5124 case WCon{False{}, w8}:
5125 match w8:
5126 case WNil{}:
5127 {==}
5128 case WCon{True{}, w8}:
5129 match w8:
5130 case WNil{}:
5131 {==}
5132 case WCon{True{}, w7}:
5133 match w7:
5134 case WCon{False{}, w8}:
5135 match w8:
5136 case WNil{}:
5137 {==}
5138 case WCon{True{}, w8}:
5139 match w8:
5140 case WNil{}:
5141 {==}
5142 case WCon{True{}, w5}:
5143 match w5:
5144 case WCon{False{}, w6}:
5145 match w6:
5146 case WCon{False{}, w7}:
5147 match w7:
5148 case WCon{False{}, w8}:
5149 match w8:
5150 case WNil{}:
5151 {==}
5152 case WCon{True{}, w8}:
5153 match w8:
5154 case WNil{}:
5155 {==}
5156 case WCon{True{}, w7}:
5157 match w7:
5158 case WCon{False{}, w8}:
5159 match w8:
5160 case WNil{}:
5161 {==}
5162 case WCon{True{}, w8}:
5163 match w8:
5164 case WNil{}:
5165 {==}
5166 case WCon{True{}, w6}:
5167 match w6:
5168 case WCon{False{}, w7}:
5169 match w7:
5170 case WCon{False{}, w8}:
5171 match w8:
5172 case WNil{}:
5173 {==}
5174 case WCon{True{}, w8}:
5175 match w8:
5176 case WNil{}:
5177 {==}
5178 case WCon{True{}, w7}:
5179 match w7:
5180 case WCon{False{}, w8}:
5181 match w8:
5182 case WNil{}:
5183 {==}
5184 case WCon{True{}, w8}:
5185 match w8:
5186 case WNil{}:
5187 {==}
5188 case WCon{True{}, w2}:
5189 match w2:
5190 case WCon{False{}, w3}:
5191 match w3:
5192 case WCon{False{}, w4}:
5193 match w4:
5194 case WCon{False{}, w5}:
5195 match w5:
5196 case WCon{False{}, w6}:
5197 match w6:
5198 case WCon{False{}, w7}:
5199 match w7:
5200 case WCon{False{}, w8}:
5201 match w8:
5202 case WNil{}:
5203 {==}
5204 case WCon{True{}, w8}:
5205 match w8:
5206 case WNil{}:
5207 {==}
5208 case WCon{True{}, w7}:
5209 match w7:
5210 case WCon{False{}, w8}:
5211 match w8:
5212 case WNil{}:
5213 {==}
5214 case WCon{True{}, w8}:
5215 match w8:
5216 case WNil{}:
5217 {==}
5218 case WCon{True{}, w6}:
5219 match w6:
5220 case WCon{False{}, w7}:
5221 match w7:
5222 case WCon{False{}, w8}:
5223 match w8:
5224 case WNil{}:
5225 {==}
5226 case WCon{True{}, w8}:
5227 match w8:
5228 case WNil{}:
5229 {==}
5230 case WCon{True{}, w7}:
5231 match w7:
5232 case WCon{False{}, w8}:
5233 match w8:
5234 case WNil{}:
5235 {==}
5236 case WCon{True{}, w8}:
5237 match w8:
5238 case WNil{}:
5239 {==}
5240 case WCon{True{}, w5}:
5241 match w5:
5242 case WCon{False{}, w6}:
5243 match w6:
5244 case WCon{False{}, w7}:
5245 match w7:
5246 case WCon{False{}, w8}:
5247 match w8:
5248 case WNil{}:
5249 {==}
5250 case WCon{True{}, w8}:
5251 match w8:
5252 case WNil{}:
5253 {==}
5254 case WCon{True{}, w7}:
5255 match w7:
5256 case WCon{False{}, w8}:
5257 match w8:
5258 case WNil{}:
5259 {==}
5260 case WCon{True{}, w8}:
5261 match w8:
5262 case WNil{}:
5263 {==}
5264 case WCon{True{}, w6}:
5265 match w6:
5266 case WCon{False{}, w7}:
5267 match w7:
5268 case WCon{False{}, w8}:
5269 match w8:
5270 case WNil{}:
5271 {==}
5272 case WCon{True{}, w8}:
5273 match w8:
5274 case WNil{}:
5275 {==}
5276 case WCon{True{}, w7}:
5277 match w7:
5278 case WCon{False{}, w8}:
5279 match w8:
5280 case WNil{}:
5281 {==}
5282 case WCon{True{}, w8}:
5283 match w8:
5284 case WNil{}:
5285 {==}
5286 case WCon{True{}, w4}:
5287 match w4:
5288 case WCon{False{}, w5}:
5289 match w5:
5290 case WCon{False{}, w6}:
5291 match w6:
5292 case WCon{False{}, w7}:
5293 match w7:
5294 case WCon{False{}, w8}:
5295 match w8:
5296 case WNil{}:
5297 {==}
5298 case WCon{True{}, w8}:
5299 match w8:
5300 case WNil{}:
5301 {==}
5302 case WCon{True{}, w7}:
5303 match w7:
5304 case WCon{False{}, w8}:
5305 match w8:
5306 case WNil{}:
5307 {==}
5308 case WCon{True{}, w8}:
5309 match w8:
5310 case WNil{}:
5311 {==}
5312 case WCon{True{}, w6}:
5313 match w6:
5314 case WCon{False{}, w7}:
5315 match w7:
5316 case WCon{False{}, w8}:
5317 match w8:
5318 case WNil{}:
5319 {==}
5320 case WCon{True{}, w8}:
5321 match w8:
5322 case WNil{}:
5323 {==}
5324 case WCon{True{}, w7}:
5325 match w7:
5326 case WCon{False{}, w8}:
5327 match w8:
5328 case WNil{}:
5329 {==}
5330 case WCon{True{}, w8}:
5331 match w8:
5332 case WNil{}:
5333 {==}
5334 case WCon{True{}, w5}:
5335 match w5:
5336 case WCon{False{}, w6}:
5337 match w6:
5338 case WCon{False{}, w7}:
5339 match w7:
5340 case WCon{False{}, w8}:
5341 match w8:
5342 case WNil{}:
5343 {==}
5344 case WCon{True{}, w8}:
5345 match w8:
5346 case WNil{}:
5347 {==}
5348 case WCon{True{}, w7}:
5349 match w7:
5350 case WCon{False{}, w8}:
5351 match w8:
5352 case WNil{}:
5353 {==}
5354 case WCon{True{}, w8}:
5355 match w8:
5356 case WNil{}:
5357 {==}
5358 case WCon{True{}, w6}:
5359 match w6:
5360 case WCon{False{}, w7}:
5361 match w7:
5362 case WCon{False{}, w8}:
5363 match w8:
5364 case WNil{}:
5365 {==}
5366 case WCon{True{}, w8}:
5367 match w8:
5368 case WNil{}:
5369 {==}
5370 case WCon{True{}, w7}:
5371 match w7:
5372 case WCon{False{}, w8}:
5373 match w8:
5374 case WNil{}:
5375 {==}
5376 case WCon{True{}, w8}:
5377 match w8:
5378 case WNil{}:
5379 {==}
5380 case WCon{True{}, w3}:
5381 match w3:
5382 case WCon{False{}, w4}:
5383 match w4:
5384 case WCon{False{}, w5}:
5385 match w5:
5386 case WCon{False{}, w6}:
5387 match w6:
5388 case WCon{False{}, w7}:
5389 match w7:
5390 case WCon{False{}, w8}:
5391 match w8:
5392 case WNil{}:
5393 {==}
5394 case WCon{True{}, w8}:
5395 match w8:
5396 case WNil{}:
5397 {==}
5398 case WCon{True{}, w7}:
5399 match w7:
5400 case WCon{False{}, w8}:
5401 match w8:
5402 case WNil{}:
5403 {==}
5404 case WCon{True{}, w8}:
5405 match w8:
5406 case WNil{}:
5407 {==}
5408 case WCon{True{}, w6}:
5409 match w6:
5410 case WCon{False{}, w7}:
5411 match w7:
5412 case WCon{False{}, w8}:
5413 match w8:
5414 case WNil{}:
5415 {==}
5416 case WCon{True{}, w8}:
5417 match w8:
5418 case WNil{}:
5419 {==}
5420 case WCon{True{}, w7}:
5421 match w7:
5422 case WCon{False{}, w8}:
5423 match w8:
5424 case WNil{}:
5425 {==}
5426 case WCon{True{}, w8}:
5427 match w8:
5428 case WNil{}:
5429 {==}
5430 case WCon{True{}, w5}:
5431 match w5:
5432 case WCon{False{}, w6}:
5433 match w6:
5434 case WCon{False{}, w7}:
5435 match w7:
5436 case WCon{False{}, w8}:
5437 match w8:
5438 case WNil{}:
5439 {==}
5440 case WCon{True{}, w8}:
5441 match w8:
5442 case WNil{}:
5443 {==}
5444 case WCon{True{}, w7}:
5445 match w7:
5446 case WCon{False{}, w8}:
5447 match w8:
5448 case WNil{}:
5449 {==}
5450 case WCon{True{}, w8}:
5451 match w8:
5452 case WNil{}:
5453 {==}
5454 case WCon{True{}, w6}:
5455 match w6:
5456 case WCon{False{}, w7}:
5457 match w7:
5458 case WCon{False{}, w8}:
5459 match w8:
5460 case WNil{}:
5461 {==}
5462 case WCon{True{}, w8}:
5463 match w8:
5464 case WNil{}:
5465 {==}
5466 case WCon{True{}, w7}:
5467 match w7:
5468 case WCon{False{}, w8}:
5469 match w8:
5470 case WNil{}:
5471 {==}
5472 case WCon{True{}, w8}:
5473 match w8:
5474 case WNil{}:
5475 {==}
5476 case WCon{True{}, w4}:
5477 match w4:
5478 case WCon{False{}, w5}:
5479 match w5:
5480 case WCon{False{}, w6}:
5481 match w6:
5482 case WCon{False{}, w7}:
5483 match w7:
5484 case WCon{False{}, w8}:
5485 match w8:
5486 case WNil{}:
5487 {==}
5488 case WCon{True{}, w8}:
5489 match w8:
5490 case WNil{}:
5491 {==}
5492 case WCon{True{}, w7}:
5493 match w7:
5494 case WCon{False{}, w8}:
5495 match w8:
5496 case WNil{}:
5497 {==}
5498 case WCon{True{}, w8}:
5499 match w8:
5500 case WNil{}:
5501 {==}
5502 case WCon{True{}, w6}:
5503 match w6:
5504 case WCon{False{}, w7}:
5505 match w7:
5506 case WCon{False{}, w8}:
5507 match w8:
5508 case WNil{}:
5509 {==}
5510 case WCon{True{}, w8}:
5511 match w8:
5512 case WNil{}:
5513 {==}
5514 case WCon{True{}, w7}:
5515 match w7:
5516 case WCon{False{}, w8}:
5517 match w8:
5518 case WNil{}:
5519 {==}
5520 case WCon{True{}, w8}:
5521 match w8:
5522 case WNil{}:
5523 {==}
5524 case WCon{True{}, w5}:
5525 match w5:
5526 case WCon{False{}, w6}:
5527 match w6:
5528 case WCon{False{}, w7}:
5529 match w7:
5530 case WCon{False{}, w8}:
5531 match w8:
5532 case WNil{}:
5533 {==}
5534 case WCon{True{}, w8}:
5535 match w8:
5536 case WNil{}:
5537 {==}
5538 case WCon{True{}, w7}:
5539 match w7:
5540 case WCon{False{}, w8}:
5541 match w8:
5542 case WNil{}:
5543 {==}
5544 case WCon{True{}, w8}:
5545 match w8:
5546 case WNil{}:
5547 {==}
5548 case WCon{True{}, w6}:
5549 match w6:
5550 case WCon{False{}, w7}:
5551 match w7:
5552 case WCon{False{}, w8}:
5553 match w8:
5554 case WNil{}:
5555 {==}
5556 case WCon{True{}, w8}:
5557 match w8:
5558 case WNil{}:
5559 {==}
5560 case WCon{True{}, w7}:
5561 match w7:
5562 case WCon{False{}, w8}:
5563 match w8:
5564 case WNil{}:
5565 {==}
5566 case WCon{True{}, w8}:
5567 match w8:
5568 case WNil{}:
5569 {==}
5570 case WCon{True{}, w1}:
5571 match w1:
5572 case WCon{False{}, w2}:
5573 match w2:
5574 case WCon{False{}, w3}:
5575 match w3:
5576 case WCon{False{}, w4}:
5577 match w4:
5578 case WCon{False{}, w5}:
5579 match w5:
5580 case WCon{False{}, w6}:
5581 match w6:
5582 case WCon{False{}, w7}:
5583 match w7:
5584 case WCon{False{}, w8}:
5585 match w8:
5586 case WNil{}:
5587 {==}
5588 case WCon{True{}, w8}:
5589 match w8:
5590 case WNil{}:
5591 {==}
5592 case WCon{True{}, w7}:
5593 match w7:
5594 case WCon{False{}, w8}:
5595 match w8:
5596 case WNil{}:
5597 {==}
5598 case WCon{True{}, w8}:
5599 match w8:
5600 case WNil{}:
5601 {==}
5602 case WCon{True{}, w6}:
5603 match w6:
5604 case WCon{False{}, w7}:
5605 match w7:
5606 case WCon{False{}, w8}:
5607 match w8:
5608 case WNil{}:
5609 {==}
5610 case WCon{True{}, w8}:
5611 match w8:
5612 case WNil{}:
5613 {==}
5614 case WCon{True{}, w7}:
5615 match w7:
5616 case WCon{False{}, w8}:
5617 match w8:
5618 case WNil{}:
5619 {==}
5620 case WCon{True{}, w8}:
5621 match w8:
5622 case WNil{}:
5623 {==}
5624 case WCon{True{}, w5}:
5625 match w5:
5626 case WCon{False{}, w6}:
5627 match w6:
5628 case WCon{False{}, w7}:
5629 match w7:
5630 case WCon{False{}, w8}:
5631 match w8:
5632 case WNil{}:
5633 {==}
5634 case WCon{True{}, w8}:
5635 match w8:
5636 case WNil{}:
5637 {==}
5638 case WCon{True{}, w7}:
5639 match w7:
5640 case WCon{False{}, w8}:
5641 match w8:
5642 case WNil{}:
5643 {==}
5644 case WCon{True{}, w8}:
5645 match w8:
5646 case WNil{}:
5647 {==}
5648 case WCon{True{}, w6}:
5649 match w6:
5650 case WCon{False{}, w7}:
5651 match w7:
5652 case WCon{False{}, w8}:
5653 match w8:
5654 case WNil{}:
5655 {==}
5656 case WCon{True{}, w8}:
5657 match w8:
5658 case WNil{}:
5659 {==}
5660 case WCon{True{}, w7}:
5661 match w7:
5662 case WCon{False{}, w8}:
5663 match w8:
5664 case WNil{}:
5665 {==}
5666 case WCon{True{}, w8}:
5667 match w8:
5668 case WNil{}:
5669 {==}
5670 case WCon{True{}, w4}:
5671 match w4:
5672 case WCon{False{}, w5}:
5673 match w5:
5674 case WCon{False{}, w6}:
5675 match w6:
5676 case WCon{False{}, w7}:
5677 match w7:
5678 case WCon{False{}, w8}:
5679 match w8:
5680 case WNil{}:
5681 {==}
5682 case WCon{True{}, w8}:
5683 match w8:
5684 case WNil{}:
5685 {==}
5686 case WCon{True{}, w7}:
5687 match w7:
5688 case WCon{False{}, w8}:
5689 match w8:
5690 case WNil{}:
5691 {==}
5692 case WCon{True{}, w8}:
5693 match w8:
5694 case WNil{}:
5695 {==}
5696 case WCon{True{}, w6}:
5697 match w6:
5698 case WCon{False{}, w7}:
5699 match w7:
5700 case WCon{False{}, w8}:
5701 match w8:
5702 case WNil{}:
5703 {==}
5704 case WCon{True{}, w8}:
5705 match w8:
5706 case WNil{}:
5707 {==}
5708 case WCon{True{}, w7}:
5709 match w7:
5710 case WCon{False{}, w8}:
5711 match w8:
5712 case WNil{}:
5713 {==}
5714 case WCon{True{}, w8}:
5715 match w8:
5716 case WNil{}:
5717 {==}
5718 case WCon{True{}, w5}:
5719 match w5:
5720 case WCon{False{}, w6}:
5721 match w6:
5722 case WCon{False{}, w7}:
5723 match w7:
5724 case WCon{False{}, w8}:
5725 match w8:
5726 case WNil{}:
5727 {==}
5728 case WCon{True{}, w8}:
5729 match w8:
5730 case WNil{}:
5731 {==}
5732 case WCon{True{}, w7}:
5733 match w7:
5734 case WCon{False{}, w8}:
5735 match w8:
5736 case WNil{}:
5737 {==}
5738 case WCon{True{}, w8}:
5739 match w8:
5740 case WNil{}:
5741 {==}
5742 case WCon{True{}, w6}:
5743 match w6:
5744 case WCon{False{}, w7}:
5745 match w7:
5746 case WCon{False{}, w8}:
5747 match w8:
5748 case WNil{}:
5749 {==}
5750 case WCon{True{}, w8}:
5751 match w8:
5752 case WNil{}:
5753 {==}
5754 case WCon{True{}, w7}:
5755 match w7:
5756 case WCon{False{}, w8}:
5757 match w8:
5758 case WNil{}:
5759 {==}
5760 case WCon{True{}, w8}:
5761 match w8:
5762 case WNil{}:
5763 {==}
5764 case WCon{True{}, w3}:
5765 match w3:
5766 case WCon{False{}, w4}:
5767 match w4:
5768 case WCon{False{}, w5}:
5769 match w5:
5770 case WCon{False{}, w6}:
5771 match w6:
5772 case WCon{False{}, w7}:
5773 match w7:
5774 case WCon{False{}, w8}:
5775 match w8:
5776 case WNil{}:
5777 {==}
5778 case WCon{True{}, w8}:
5779 match w8:
5780 case WNil{}:
5781 {==}
5782 case WCon{True{}, w7}:
5783 match w7:
5784 case WCon{False{}, w8}:
5785 match w8:
5786 case WNil{}:
5787 {==}
5788 case WCon{True{}, w8}:
5789 match w8:
5790 case WNil{}:
5791 {==}
5792 case WCon{True{}, w6}:
5793 match w6:
5794 case WCon{False{}, w7}:
5795 match w7:
5796 case WCon{False{}, w8}:
5797 match w8:
5798 case WNil{}:
5799 {==}
5800 case WCon{True{}, w8}:
5801 match w8:
5802 case WNil{}:
5803 {==}
5804 case WCon{True{}, w7}:
5805 match w7:
5806 case WCon{False{}, w8}:
5807 match w8:
5808 case WNil{}:
5809 {==}
5810 case WCon{True{}, w8}:
5811 match w8:
5812 case WNil{}:
5813 {==}
5814 case WCon{True{}, w5}:
5815 match w5:
5816 case WCon{False{}, w6}:
5817 match w6:
5818 case WCon{False{}, w7}:
5819 match w7:
5820 case WCon{False{}, w8}:
5821 match w8:
5822 case WNil{}:
5823 {==}
5824 case WCon{True{}, w8}:
5825 match w8:
5826 case WNil{}:
5827 {==}
5828 case WCon{True{}, w7}:
5829 match w7:
5830 case WCon{False{}, w8}:
5831 match w8:
5832 case WNil{}:
5833 {==}
5834 case WCon{True{}, w8}:
5835 match w8:
5836 case WNil{}:
5837 {==}
5838 case WCon{True{}, w6}:
5839 match w6:
5840 case WCon{False{}, w7}:
5841 match w7:
5842 case WCon{False{}, w8}:
5843 match w8:
5844 case WNil{}:
5845 {==}
5846 case WCon{True{}, w8}:
5847 match w8:
5848 case WNil{}:
5849 {==}
5850 case WCon{True{}, w7}:
5851 match w7:
5852 case WCon{False{}, w8}:
5853 match w8:
5854 case WNil{}:
5855 {==}
5856 case WCon{True{}, w8}:
5857 match w8:
5858 case WNil{}:
5859 {==}
5860 case WCon{True{}, w4}:
5861 match w4:
5862 case WCon{False{}, w5}:
5863 match w5:
5864 case WCon{False{}, w6}:
5865 match w6:
5866 case WCon{False{}, w7}:
5867 match w7:
5868 case WCon{False{}, w8}:
5869 match w8:
5870 case WNil{}:
5871 {==}
5872 case WCon{True{}, w8}:
5873 match w8:
5874 case WNil{}:
5875 {==}
5876 case WCon{True{}, w7}:
5877 match w7:
5878 case WCon{False{}, w8}:
5879 match w8:
5880 case WNil{}:
5881 {==}
5882 case WCon{True{}, w8}:
5883 match w8:
5884 case WNil{}:
5885 {==}
5886 case WCon{True{}, w6}:
5887 match w6:
5888 case WCon{False{}, w7}:
5889 match w7:
5890 case WCon{False{}, w8}:
5891 match w8:
5892 case WNil{}:
5893 {==}
5894 case WCon{True{}, w8}:
5895 match w8:
5896 case WNil{}:
5897 {==}
5898 case WCon{True{}, w7}:
5899 match w7:
5900 case WCon{False{}, w8}:
5901 match w8:
5902 case WNil{}:
5903 {==}
5904 case WCon{True{}, w8}:
5905 match w8:
5906 case WNil{}:
5907 {==}
5908 case WCon{True{}, w5}:
5909 match w5:
5910 case WCon{False{}, w6}:
5911 match w6:
5912 case WCon{False{}, w7}:
5913 match w7:
5914 case WCon{False{}, w8}:
5915 match w8:
5916 case WNil{}:
5917 {==}
5918 case WCon{True{}, w8}:
5919 match w8:
5920 case WNil{}:
5921 {==}
5922 case WCon{True{}, w7}:
5923 match w7:
5924 case WCon{False{}, w8}:
5925 match w8:
5926 case WNil{}:
5927 {==}
5928 case WCon{True{}, w8}:
5929 match w8:
5930 case WNil{}:
5931 {==}
5932 case WCon{True{}, w6}:
5933 match w6:
5934 case WCon{False{}, w7}:
5935 match w7:
5936 case WCon{False{}, w8}:
5937 match w8:
5938 case WNil{}:
5939 {==}
5940 case WCon{True{}, w8}:
5941 match w8:
5942 case WNil{}:
5943 {==}
5944 case WCon{True{}, w7}:
5945 match w7:
5946 case WCon{False{}, w8}:
5947 match w8:
5948 case WNil{}:
5949 {==}
5950 case WCon{True{}, w8}:
5951 match w8:
5952 case WNil{}:
5953 {==}
5954 case WCon{True{}, w2}:
5955 match w2:
5956 case WCon{False{}, w3}:
5957 match w3:
5958 case WCon{False{}, w4}:
5959 match w4:
5960 case WCon{False{}, w5}:
5961 match w5:
5962 case WCon{False{}, w6}:
5963 match w6:
5964 case WCon{False{}, w7}:
5965 match w7:
5966 case WCon{False{}, w8}:
5967 match w8:
5968 case WNil{}:
5969 {==}
5970 case WCon{True{}, w8}:
5971 match w8:
5972 case WNil{}:
5973 {==}
5974 case WCon{True{}, w7}:
5975 match w7:
5976 case WCon{False{}, w8}:
5977 match w8:
5978 case WNil{}:
5979 {==}
5980 case WCon{True{}, w8}:
5981 match w8:
5982 case WNil{}:
5983 {==}
5984 case WCon{True{}, w6}:
5985 match w6:
5986 case WCon{False{}, w7}:
5987 match w7:
5988 case WCon{False{}, w8}:
5989 match w8:
5990 case WNil{}:
5991 {==}
5992 case WCon{True{}, w8}:
5993 match w8:
5994 case WNil{}:
5995 {==}
5996 case WCon{True{}, w7}:
5997 match w7:
5998 case WCon{False{}, w8}:
5999 match w8:
6000 case WNil{}:
6001 {==}
6002 case WCon{True{}, w8}:
6003 match w8:
6004 case WNil{}:
6005 {==}
6006 case WCon{True{}, w5}:
6007 match w5:
6008 case WCon{False{}, w6}:
6009 match w6:
6010 case WCon{False{}, w7}:
6011 match w7:
6012 case WCon{False{}, w8}:
6013 match w8:
6014 case WNil{}:
6015 {==}
6016 case WCon{True{}, w8}:
6017 match w8:
6018 case WNil{}:
6019 {==}
6020 case WCon{True{}, w7}:
6021 match w7:
6022 case WCon{False{}, w8}:
6023 match w8:
6024 case WNil{}:
6025 {==}
6026 case WCon{True{}, w8}:
6027 match w8:
6028 case WNil{}:
6029 {==}
6030 case WCon{True{}, w6}:
6031 match w6:
6032 case WCon{False{}, w7}:
6033 match w7:
6034 case WCon{False{}, w8}:
6035 match w8:
6036 case WNil{}:
6037 {==}
6038 case WCon{True{}, w8}:
6039 match w8:
6040 case WNil{}:
6041 {==}
6042 case WCon{True{}, w7}:
6043 match w7:
6044 case WCon{False{}, w8}:
6045 match w8:
6046 case WNil{}:
6047 {==}
6048 case WCon{True{}, w8}:
6049 match w8:
6050 case WNil{}:
6051 {==}
6052 case WCon{True{}, w4}:
6053 match w4:
6054 case WCon{False{}, w5}:
6055 match w5:
6056 case WCon{False{}, w6}:
6057 match w6:
6058 case WCon{False{}, w7}:
6059 match w7:
6060 case WCon{False{}, w8}:
6061 match w8:
6062 case WNil{}:
6063 {==}
6064 case WCon{True{}, w8}:
6065 match w8:
6066 case WNil{}:
6067 {==}
6068 case WCon{True{}, w7}:
6069 match w7:
6070 case WCon{False{}, w8}:
6071 match w8:
6072 case WNil{}:
6073 {==}
6074 case WCon{True{}, w8}:
6075 match w8:
6076 case WNil{}:
6077 {==}
6078 case WCon{True{}, w6}:
6079 match w6:
6080 case WCon{False{}, w7}:
6081 match w7:
6082 case WCon{False{}, w8}:
6083 match w8:
6084 case WNil{}:
6085 {==}
6086 case WCon{True{}, w8}:
6087 match w8:
6088 case WNil{}:
6089 {==}
6090 case WCon{True{}, w7}:
6091 match w7:
6092 case WCon{False{}, w8}:
6093 match w8:
6094 case WNil{}:
6095 {==}
6096 case WCon{True{}, w8}:
6097 match w8:
6098 case WNil{}:
6099 {==}
6100 case WCon{True{}, w5}:
6101 match w5:
6102 case WCon{False{}, w6}:
6103 match w6:
6104 case WCon{False{}, w7}:
6105 match w7:
6106 case WCon{False{}, w8}:
6107 match w8:
6108 case WNil{}:
6109 {==}
6110 case WCon{True{}, w8}:
6111 match w8:
6112 case WNil{}:
6113 {==}
6114 case WCon{True{}, w7}:
6115 match w7:
6116 case WCon{False{}, w8}:
6117 match w8:
6118 case WNil{}:
6119 {==}
6120 case WCon{True{}, w8}:
6121 match w8:
6122 case WNil{}:
6123 {==}
6124 case WCon{True{}, w6}:
6125 match w6:
6126 case WCon{False{}, w7}:
6127 match w7:
6128 case WCon{False{}, w8}:
6129 match w8:
6130 case WNil{}:
6131 {==}
6132 case WCon{True{}, w8}:
6133 match w8:
6134 case WNil{}:
6135 {==}
6136 case WCon{True{}, w7}:
6137 match w7:
6138 case WCon{False{}, w8}:
6139 match w8:
6140 case WNil{}:
6141 {==}
6142 case WCon{True{}, w8}:
6143 match w8:
6144 case WNil{}:
6145 {==}
6146 case WCon{True{}, w3}:
6147 match w3:
6148 case WCon{False{}, w4}:
6149 match w4:
6150 case WCon{False{}, w5}:
6151 match w5:
6152 case WCon{False{}, w6}:
6153 match w6:
6154 case WCon{False{}, w7}:
6155 match w7:
6156 case WCon{False{}, w8}:
6157 match w8:
6158 case WNil{}:
6159 {==}
6160 case WCon{True{}, w8}:
6161 match w8:
6162 case WNil{}:
6163 {==}
6164 case WCon{True{}, w7}:
6165 match w7:
6166 case WCon{False{}, w8}:
6167 match w8:
6168 case WNil{}:
6169 {==}
6170 case WCon{True{}, w8}:
6171 match w8:
6172 case WNil{}:
6173 {==}
6174 case WCon{True{}, w6}:
6175 match w6:
6176 case WCon{False{}, w7}:
6177 match w7:
6178 case WCon{False{}, w8}:
6179 match w8:
6180 case WNil{}:
6181 {==}
6182 case WCon{True{}, w8}:
6183 match w8:
6184 case WNil{}:
6185 {==}
6186 case WCon{True{}, w7}:
6187 match w7:
6188 case WCon{False{}, w8}:
6189 match w8:
6190 case WNil{}:
6191 {==}
6192 case WCon{True{}, w8}:
6193 match w8:
6194 case WNil{}:
6195 {==}
6196 case WCon{True{}, w5}:
6197 match w5:
6198 case WCon{False{}, w6}:
6199 match w6:
6200 case WCon{False{}, w7}:
6201 match w7:
6202 case WCon{False{}, w8}:
6203 match w8:
6204 case WNil{}:
6205 {==}
6206 case WCon{True{}, w8}:
6207 match w8:
6208 case WNil{}:
6209 {==}
6210 case WCon{True{}, w7}:
6211 match w7:
6212 case WCon{False{}, w8}:
6213 match w8:
6214 case WNil{}:
6215 {==}
6216 case WCon{True{}, w8}:
6217 match w8:
6218 case WNil{}:
6219 {==}
6220 case WCon{True{}, w6}:
6221 match w6:
6222 case WCon{False{}, w7}:
6223 match w7:
6224 case WCon{False{}, w8}:
6225 match w8:
6226 case WNil{}:
6227 {==}
6228 case WCon{True{}, w8}:
6229 match w8:
6230 case WNil{}:
6231 {==}
6232 case WCon{True{}, w7}:
6233 match w7:
6234 case WCon{False{}, w8}:
6235 match w8:
6236 case WNil{}:
6237 {==}
6238 case WCon{True{}, w8}:
6239 match w8:
6240 case WNil{}:
6241 {==}
6242 case WCon{True{}, w4}:
6243 match w4:
6244 case WCon{False{}, w5}:
6245 match w5:
6246 case WCon{False{}, w6}:
6247 match w6:
6248 case WCon{False{}, w7}:
6249 match w7:
6250 case WCon{False{}, w8}:
6251 match w8:
6252 case WNil{}:
6253 {==}
6254 case WCon{True{}, w8}:
6255 match w8:
6256 case WNil{}:
6257 {==}
6258 case WCon{True{}, w7}:
6259 match w7:
6260 case WCon{False{}, w8}:
6261 match w8:
6262 case WNil{}:
6263 {==}
6264 case WCon{True{}, w8}:
6265 match w8:
6266 case WNil{}:
6267 {==}
6268 case WCon{True{}, w6}:
6269 match w6:
6270 case WCon{False{}, w7}:
6271 match w7:
6272 case WCon{False{}, w8}:
6273 match w8:
6274 case WNil{}:
6275 {==}
6276 case WCon{True{}, w8}:
6277 match w8:
6278 case WNil{}:
6279 {==}
6280 case WCon{True{}, w7}:
6281 match w7:
6282 case WCon{False{}, w8}:
6283 match w8:
6284 case WNil{}:
6285 {==}
6286 case WCon{True{}, w8}:
6287 match w8:
6288 case WNil{}:
6289 {==}
6290 case WCon{True{}, w5}:
6291 match w5:
6292 case WCon{False{}, w6}:
6293 match w6:
6294 case WCon{False{}, w7}:
6295 match w7:
6296 case WCon{False{}, w8}:
6297 match w8:
6298 case WNil{}:
6299 {==}
6300 case WCon{True{}, w8}:
6301 match w8:
6302 case WNil{}:
6303 {==}
6304 case WCon{True{}, w7}:
6305 match w7:
6306 case WCon{False{}, w8}:
6307 match w8:
6308 case WNil{}:
6309 {==}
6310 case WCon{True{}, w8}:
6311 match w8:
6312 case WNil{}:
6313 {==}
6314 case WCon{True{}, w6}:
6315 match w6:
6316 case WCon{False{}, w7}:
6317 match w7:
6318 case WCon{False{}, w8}:
6319 match w8:
6320 case WNil{}:
6321 {==}
6322 case WCon{True{}, w8}:
6323 match w8:
6324 case WNil{}:
6325 {==}
6326 case WCon{True{}, w7}:
6327 match w7:
6328 case WCon{False{}, w8}:
6329 match w8:
6330 case WNil{}:
6331 {==}
6332 case WCon{True{}, w8}:
6333 match w8:
6334 case WNil{}:
6335 {==}
6336
6337def aria_sb24(w0: Word(8n)) -> {w0 == A.aria.sb2(A.aria.sb4(w0)) : Word(8n)}:
6338 match w0:
6339 case WCon{False{}, w1}:
6340 match w1:
6341 case WCon{False{}, w2}:
6342 match w2:
6343 case WCon{False{}, w3}:
6344 match w3:
6345 case WCon{False{}, w4}:
6346 match w4:
6347 case WCon{False{}, w5}:
6348 match w5:
6349 case WCon{False{}, w6}:
6350 match w6:
6351 case WCon{False{}, w7}:
6352 match w7:
6353 case WCon{False{}, w8}:
6354 match w8:
6355 case WNil{}:
6356 {==}
6357 case WCon{True{}, w8}:
6358 match w8:
6359 case WNil{}:
6360 {==}
6361 case WCon{True{}, w7}:
6362 match w7:
6363 case WCon{False{}, w8}:
6364 match w8:
6365 case WNil{}:
6366 {==}
6367 case WCon{True{}, w8}:
6368 match w8:
6369 case WNil{}:
6370 {==}
6371 case WCon{True{}, w6}:
6372 match w6:
6373 case WCon{False{}, w7}:
6374 match w7:
6375 case WCon{False{}, w8}:
6376 match w8:
6377 case WNil{}:
6378 {==}
6379 case WCon{True{}, w8}:
6380 match w8:
6381 case WNil{}:
6382 {==}
6383 case WCon{True{}, w7}:
6384 match w7:
6385 case WCon{False{}, w8}:
6386 match w8:
6387 case WNil{}:
6388 {==}
6389 case WCon{True{}, w8}:
6390 match w8:
6391 case WNil{}:
6392 {==}
6393 case WCon{True{}, w5}:
6394 match w5:
6395 case WCon{False{}, w6}:
6396 match w6:
6397 case WCon{False{}, w7}:
6398 match w7:
6399 case WCon{False{}, w8}:
6400 match w8:
6401 case WNil{}:
6402 {==}
6403 case WCon{True{}, w8}:
6404 match w8:
6405 case WNil{}:
6406 {==}
6407 case WCon{True{}, w7}:
6408 match w7:
6409 case WCon{False{}, w8}:
6410 match w8:
6411 case WNil{}:
6412 {==}
6413 case WCon{True{}, w8}:
6414 match w8:
6415 case WNil{}:
6416 {==}
6417 case WCon{True{}, w6}:
6418 match w6:
6419 case WCon{False{}, w7}:
6420 match w7:
6421 case WCon{False{}, w8}:
6422 match w8:
6423 case WNil{}:
6424 {==}
6425 case WCon{True{}, w8}:
6426 match w8:
6427 case WNil{}:
6428 {==}
6429 case WCon{True{}, w7}:
6430 match w7:
6431 case WCon{False{}, w8}:
6432 match w8:
6433 case WNil{}:
6434 {==}
6435 case WCon{True{}, w8}:
6436 match w8:
6437 case WNil{}:
6438 {==}
6439 case WCon{True{}, w4}:
6440 match w4:
6441 case WCon{False{}, w5}:
6442 match w5:
6443 case WCon{False{}, w6}:
6444 match w6:
6445 case WCon{False{}, w7}:
6446 match w7:
6447 case WCon{False{}, w8}:
6448 match w8:
6449 case WNil{}:
6450 {==}
6451 case WCon{True{}, w8}:
6452 match w8:
6453 case WNil{}:
6454 {==}
6455 case WCon{True{}, w7}:
6456 match w7:
6457 case WCon{False{}, w8}:
6458 match w8:
6459 case WNil{}:
6460 {==}
6461 case WCon{True{}, w8}:
6462 match w8:
6463 case WNil{}:
6464 {==}
6465 case WCon{True{}, w6}:
6466 match w6:
6467 case WCon{False{}, w7}:
6468 match w7:
6469 case WCon{False{}, w8}:
6470 match w8:
6471 case WNil{}:
6472 {==}
6473 case WCon{True{}, w8}:
6474 match w8:
6475 case WNil{}:
6476 {==}
6477 case WCon{True{}, w7}:
6478 match w7:
6479 case WCon{False{}, w8}:
6480 match w8:
6481 case WNil{}:
6482 {==}
6483 case WCon{True{}, w8}:
6484 match w8:
6485 case WNil{}:
6486 {==}
6487 case WCon{True{}, w5}:
6488 match w5:
6489 case WCon{False{}, w6}:
6490 match w6:
6491 case WCon{False{}, w7}:
6492 match w7:
6493 case WCon{False{}, w8}:
6494 match w8:
6495 case WNil{}:
6496 {==}
6497 case WCon{True{}, w8}:
6498 match w8:
6499 case WNil{}:
6500 {==}
6501 case WCon{True{}, w7}:
6502 match w7:
6503 case WCon{False{}, w8}:
6504 match w8:
6505 case WNil{}:
6506 {==}
6507 case WCon{True{}, w8}:
6508 match w8:
6509 case WNil{}:
6510 {==}
6511 case WCon{True{}, w6}:
6512 match w6:
6513 case WCon{False{}, w7}:
6514 match w7:
6515 case WCon{False{}, w8}:
6516 match w8:
6517 case WNil{}:
6518 {==}
6519 case WCon{True{}, w8}:
6520 match w8:
6521 case WNil{}:
6522 {==}
6523 case WCon{True{}, w7}:
6524 match w7:
6525 case WCon{False{}, w8}:
6526 match w8:
6527 case WNil{}:
6528 {==}
6529 case WCon{True{}, w8}:
6530 match w8:
6531 case WNil{}:
6532 {==}
6533 case WCon{True{}, w3}:
6534 match w3:
6535 case WCon{False{}, w4}:
6536 match w4:
6537 case WCon{False{}, w5}:
6538 match w5:
6539 case WCon{False{}, w6}:
6540 match w6:
6541 case WCon{False{}, w7}:
6542 match w7:
6543 case WCon{False{}, w8}:
6544 match w8:
6545 case WNil{}:
6546 {==}
6547 case WCon{True{}, w8}:
6548 match w8:
6549 case WNil{}:
6550 {==}
6551 case WCon{True{}, w7}:
6552 match w7:
6553 case WCon{False{}, w8}:
6554 match w8:
6555 case WNil{}:
6556 {==}
6557 case WCon{True{}, w8}:
6558 match w8:
6559 case WNil{}:
6560 {==}
6561 case WCon{True{}, w6}:
6562 match w6:
6563 case WCon{False{}, w7}:
6564 match w7:
6565 case WCon{False{}, w8}:
6566 match w8:
6567 case WNil{}:
6568 {==}
6569 case WCon{True{}, w8}:
6570 match w8:
6571 case WNil{}:
6572 {==}
6573 case WCon{True{}, w7}:
6574 match w7:
6575 case WCon{False{}, w8}:
6576 match w8:
6577 case WNil{}:
6578 {==}
6579 case WCon{True{}, w8}:
6580 match w8:
6581 case WNil{}:
6582 {==}
6583 case WCon{True{}, w5}:
6584 match w5:
6585 case WCon{False{}, w6}:
6586 match w6:
6587 case WCon{False{}, w7}:
6588 match w7:
6589 case WCon{False{}, w8}:
6590 match w8:
6591 case WNil{}:
6592 {==}
6593 case WCon{True{}, w8}:
6594 match w8:
6595 case WNil{}:
6596 {==}
6597 case WCon{True{}, w7}:
6598 match w7:
6599 case WCon{False{}, w8}:
6600 match w8:
6601 case WNil{}:
6602 {==}
6603 case WCon{True{}, w8}:
6604 match w8:
6605 case WNil{}:
6606 {==}
6607 case WCon{True{}, w6}:
6608 match w6:
6609 case WCon{False{}, w7}:
6610 match w7:
6611 case WCon{False{}, w8}:
6612 match w8:
6613 case WNil{}:
6614 {==}
6615 case WCon{True{}, w8}:
6616 match w8:
6617 case WNil{}:
6618 {==}
6619 case WCon{True{}, w7}:
6620 match w7:
6621 case WCon{False{}, w8}:
6622 match w8:
6623 case WNil{}:
6624 {==}
6625 case WCon{True{}, w8}:
6626 match w8:
6627 case WNil{}:
6628 {==}
6629 case WCon{True{}, w4}:
6630 match w4:
6631 case WCon{False{}, w5}:
6632 match w5:
6633 case WCon{False{}, w6}:
6634 match w6:
6635 case WCon{False{}, w7}:
6636 match w7:
6637 case WCon{False{}, w8}:
6638 match w8:
6639 case WNil{}:
6640 {==}
6641 case WCon{True{}, w8}:
6642 match w8:
6643 case WNil{}:
6644 {==}
6645 case WCon{True{}, w7}:
6646 match w7:
6647 case WCon{False{}, w8}:
6648 match w8:
6649 case WNil{}:
6650 {==}
6651 case WCon{True{}, w8}:
6652 match w8:
6653 case WNil{}:
6654 {==}
6655 case WCon{True{}, w6}:
6656 match w6:
6657 case WCon{False{}, w7}:
6658 match w7:
6659 case WCon{False{}, w8}:
6660 match w8:
6661 case WNil{}:
6662 {==}
6663 case WCon{True{}, w8}:
6664 match w8:
6665 case WNil{}:
6666 {==}
6667 case WCon{True{}, w7}:
6668 match w7:
6669 case WCon{False{}, w8}:
6670 match w8:
6671 case WNil{}:
6672 {==}
6673 case WCon{True{}, w8}:
6674 match w8:
6675 case WNil{}:
6676 {==}
6677 case WCon{True{}, w5}:
6678 match w5:
6679 case WCon{False{}, w6}:
6680 match w6:
6681 case WCon{False{}, w7}:
6682 match w7:
6683 case WCon{False{}, w8}:
6684 match w8:
6685 case WNil{}:
6686 {==}
6687 case WCon{True{}, w8}:
6688 match w8:
6689 case WNil{}:
6690 {==}
6691 case WCon{True{}, w7}:
6692 match w7:
6693 case WCon{False{}, w8}:
6694 match w8:
6695 case WNil{}:
6696 {==}
6697 case WCon{True{}, w8}:
6698 match w8:
6699 case WNil{}:
6700 {==}
6701 case WCon{True{}, w6}:
6702 match w6:
6703 case WCon{False{}, w7}:
6704 match w7:
6705 case WCon{False{}, w8}:
6706 match w8:
6707 case WNil{}:
6708 {==}
6709 case WCon{True{}, w8}:
6710 match w8:
6711 case WNil{}:
6712 {==}
6713 case WCon{True{}, w7}:
6714 match w7:
6715 case WCon{False{}, w8}:
6716 match w8:
6717 case WNil{}:
6718 {==}
6719 case WCon{True{}, w8}:
6720 match w8:
6721 case WNil{}:
6722 {==}
6723 case WCon{True{}, w2}:
6724 match w2:
6725 case WCon{False{}, w3}:
6726 match w3:
6727 case WCon{False{}, w4}:
6728 match w4:
6729 case WCon{False{}, w5}:
6730 match w5:
6731 case WCon{False{}, w6}:
6732 match w6:
6733 case WCon{False{}, w7}:
6734 match w7:
6735 case WCon{False{}, w8}:
6736 match w8:
6737 case WNil{}:
6738 {==}
6739 case WCon{True{}, w8}:
6740 match w8:
6741 case WNil{}:
6742 {==}
6743 case WCon{True{}, w7}:
6744 match w7:
6745 case WCon{False{}, w8}:
6746 match w8:
6747 case WNil{}:
6748 {==}
6749 case WCon{True{}, w8}:
6750 match w8:
6751 case WNil{}:
6752 {==}
6753 case WCon{True{}, w6}:
6754 match w6:
6755 case WCon{False{}, w7}:
6756 match w7:
6757 case WCon{False{}, w8}:
6758 match w8:
6759 case WNil{}:
6760 {==}
6761 case WCon{True{}, w8}:
6762 match w8:
6763 case WNil{}:
6764 {==}
6765 case WCon{True{}, w7}:
6766 match w7:
6767 case WCon{False{}, w8}:
6768 match w8:
6769 case WNil{}:
6770 {==}
6771 case WCon{True{}, w8}:
6772 match w8:
6773 case WNil{}:
6774 {==}
6775 case WCon{True{}, w5}:
6776 match w5:
6777 case WCon{False{}, w6}:
6778 match w6:
6779 case WCon{False{}, w7}:
6780 match w7:
6781 case WCon{False{}, w8}:
6782 match w8:
6783 case WNil{}:
6784 {==}
6785 case WCon{True{}, w8}:
6786 match w8:
6787 case WNil{}:
6788 {==}
6789 case WCon{True{}, w7}:
6790 match w7:
6791 case WCon{False{}, w8}:
6792 match w8:
6793 case WNil{}:
6794 {==}
6795 case WCon{True{}, w8}:
6796 match w8:
6797 case WNil{}:
6798 {==}
6799 case WCon{True{}, w6}:
6800 match w6:
6801 case WCon{False{}, w7}:
6802 match w7:
6803 case WCon{False{}, w8}:
6804 match w8:
6805 case WNil{}:
6806 {==}
6807 case WCon{True{}, w8}:
6808 match w8:
6809 case WNil{}:
6810 {==}
6811 case WCon{True{}, w7}:
6812 match w7:
6813 case WCon{False{}, w8}:
6814 match w8:
6815 case WNil{}:
6816 {==}
6817 case WCon{True{}, w8}:
6818 match w8:
6819 case WNil{}:
6820 {==}
6821 case WCon{True{}, w4}:
6822 match w4:
6823 case WCon{False{}, w5}:
6824 match w5:
6825 case WCon{False{}, w6}:
6826 match w6:
6827 case WCon{False{}, w7}:
6828 match w7:
6829 case WCon{False{}, w8}:
6830 match w8:
6831 case WNil{}:
6832 {==}
6833 case WCon{True{}, w8}:
6834 match w8:
6835 case WNil{}:
6836 {==}
6837 case WCon{True{}, w7}:
6838 match w7:
6839 case WCon{False{}, w8}:
6840 match w8:
6841 case WNil{}:
6842 {==}
6843 case WCon{True{}, w8}:
6844 match w8:
6845 case WNil{}:
6846 {==}
6847 case WCon{True{}, w6}:
6848 match w6:
6849 case WCon{False{}, w7}:
6850 match w7:
6851 case WCon{False{}, w8}:
6852 match w8:
6853 case WNil{}:
6854 {==}
6855 case WCon{True{}, w8}:
6856 match w8:
6857 case WNil{}:
6858 {==}
6859 case WCon{True{}, w7}:
6860 match w7:
6861 case WCon{False{}, w8}:
6862 match w8:
6863 case WNil{}:
6864 {==}
6865 case WCon{True{}, w8}:
6866 match w8:
6867 case WNil{}:
6868 {==}
6869 case WCon{True{}, w5}:
6870 match w5:
6871 case WCon{False{}, w6}:
6872 match w6:
6873 case WCon{False{}, w7}:
6874 match w7:
6875 case WCon{False{}, w8}:
6876 match w8:
6877 case WNil{}:
6878 {==}
6879 case WCon{True{}, w8}:
6880 match w8:
6881 case WNil{}:
6882 {==}
6883 case WCon{True{}, w7}:
6884 match w7:
6885 case WCon{False{}, w8}:
6886 match w8:
6887 case WNil{}:
6888 {==}
6889 case WCon{True{}, w8}:
6890 match w8:
6891 case WNil{}:
6892 {==}
6893 case WCon{True{}, w6}:
6894 match w6:
6895 case WCon{False{}, w7}:
6896 match w7:
6897 case WCon{False{}, w8}:
6898 match w8:
6899 case WNil{}:
6900 {==}
6901 case WCon{True{}, w8}:
6902 match w8:
6903 case WNil{}:
6904 {==}
6905 case WCon{True{}, w7}:
6906 match w7:
6907 case WCon{False{}, w8}:
6908 match w8:
6909 case WNil{}:
6910 {==}
6911 case WCon{True{}, w8}:
6912 match w8:
6913 case WNil{}:
6914 {==}
6915 case WCon{True{}, w3}:
6916 match w3:
6917 case WCon{False{}, w4}:
6918 match w4:
6919 case WCon{False{}, w5}:
6920 match w5:
6921 case WCon{False{}, w6}:
6922 match w6:
6923 case WCon{False{}, w7}:
6924 match w7:
6925 case WCon{False{}, w8}:
6926 match w8:
6927 case WNil{}:
6928 {==}
6929 case WCon{True{}, w8}:
6930 match w8:
6931 case WNil{}:
6932 {==}
6933 case WCon{True{}, w7}:
6934 match w7:
6935 case WCon{False{}, w8}:
6936 match w8:
6937 case WNil{}:
6938 {==}
6939 case WCon{True{}, w8}:
6940 match w8:
6941 case WNil{}:
6942 {==}
6943 case WCon{True{}, w6}:
6944 match w6:
6945 case WCon{False{}, w7}:
6946 match w7:
6947 case WCon{False{}, w8}:
6948 match w8:
6949 case WNil{}:
6950 {==}
6951 case WCon{True{}, w8}:
6952 match w8:
6953 case WNil{}:
6954 {==}
6955 case WCon{True{}, w7}:
6956 match w7:
6957 case WCon{False{}, w8}:
6958 match w8:
6959 case WNil{}:
6960 {==}
6961 case WCon{True{}, w8}:
6962 match w8:
6963 case WNil{}:
6964 {==}
6965 case WCon{True{}, w5}:
6966 match w5:
6967 case WCon{False{}, w6}:
6968 match w6:
6969 case WCon{False{}, w7}:
6970 match w7:
6971 case WCon{False{}, w8}:
6972 match w8:
6973 case WNil{}:
6974 {==}
6975 case WCon{True{}, w8}:
6976 match w8:
6977 case WNil{}:
6978 {==}
6979 case WCon{True{}, w7}:
6980 match w7:
6981 case WCon{False{}, w8}:
6982 match w8:
6983 case WNil{}:
6984 {==}
6985 case WCon{True{}, w8}:
6986 match w8:
6987 case WNil{}:
6988 {==}
6989 case WCon{True{}, w6}:
6990 match w6:
6991 case WCon{False{}, w7}:
6992 match w7:
6993 case WCon{False{}, w8}:
6994 match w8:
6995 case WNil{}:
6996 {==}
6997 case WCon{True{}, w8}:
6998 match w8:
6999 case WNil{}:
7000 {==}
7001 case WCon{True{}, w7}:
7002 match w7:
7003 case WCon{False{}, w8}:
7004 match w8:
7005 case WNil{}:
7006 {==}
7007 case WCon{True{}, w8}:
7008 match w8:
7009 case WNil{}:
7010 {==}
7011 case WCon{True{}, w4}:
7012 match w4:
7013 case WCon{False{}, w5}:
7014 match w5:
7015 case WCon{False{}, w6}:
7016 match w6:
7017 case WCon{False{}, w7}:
7018 match w7:
7019 case WCon{False{}, w8}:
7020 match w8:
7021 case WNil{}:
7022 {==}
7023 case WCon{True{}, w8}:
7024 match w8:
7025 case WNil{}:
7026 {==}
7027 case WCon{True{}, w7}:
7028 match w7:
7029 case WCon{False{}, w8}:
7030 match w8:
7031 case WNil{}:
7032 {==}
7033 case WCon{True{}, w8}:
7034 match w8:
7035 case WNil{}:
7036 {==}
7037 case WCon{True{}, w6}:
7038 match w6:
7039 case WCon{False{}, w7}:
7040 match w7:
7041 case WCon{False{}, w8}:
7042 match w8:
7043 case WNil{}:
7044 {==}
7045 case WCon{True{}, w8}:
7046 match w8:
7047 case WNil{}:
7048 {==}
7049 case WCon{True{}, w7}:
7050 match w7:
7051 case WCon{False{}, w8}:
7052 match w8:
7053 case WNil{}:
7054 {==}
7055 case WCon{True{}, w8}:
7056 match w8:
7057 case WNil{}:
7058 {==}
7059 case WCon{True{}, w5}:
7060 match w5:
7061 case WCon{False{}, w6}:
7062 match w6:
7063 case WCon{False{}, w7}:
7064 match w7:
7065 case WCon{False{}, w8}:
7066 match w8:
7067 case WNil{}:
7068 {==}
7069 case WCon{True{}, w8}:
7070 match w8:
7071 case WNil{}:
7072 {==}
7073 case WCon{True{}, w7}:
7074 match w7:
7075 case WCon{False{}, w8}:
7076 match w8:
7077 case WNil{}:
7078 {==}
7079 case WCon{True{}, w8}:
7080 match w8:
7081 case WNil{}:
7082 {==}
7083 case WCon{True{}, w6}:
7084 match w6:
7085 case WCon{False{}, w7}:
7086 match w7:
7087 case WCon{False{}, w8}:
7088 match w8:
7089 case WNil{}:
7090 {==}
7091 case WCon{True{}, w8}:
7092 match w8:
7093 case WNil{}:
7094 {==}
7095 case WCon{True{}, w7}:
7096 match w7:
7097 case WCon{False{}, w8}:
7098 match w8:
7099 case WNil{}:
7100 {==}
7101 case WCon{True{}, w8}:
7102 match w8:
7103 case WNil{}:
7104 {==}
7105 case WCon{True{}, w1}:
7106 match w1:
7107 case WCon{False{}, w2}:
7108 match w2:
7109 case WCon{False{}, w3}:
7110 match w3:
7111 case WCon{False{}, w4}:
7112 match w4:
7113 case WCon{False{}, w5}:
7114 match w5:
7115 case WCon{False{}, w6}:
7116 match w6:
7117 case WCon{False{}, w7}:
7118 match w7:
7119 case WCon{False{}, w8}:
7120 match w8:
7121 case WNil{}:
7122 {==}
7123 case WCon{True{}, w8}:
7124 match w8:
7125 case WNil{}:
7126 {==}
7127 case WCon{True{}, w7}:
7128 match w7:
7129 case WCon{False{}, w8}:
7130 match w8:
7131 case WNil{}:
7132 {==}
7133 case WCon{True{}, w8}:
7134 match w8:
7135 case WNil{}:
7136 {==}
7137 case WCon{True{}, w6}:
7138 match w6:
7139 case WCon{False{}, w7}:
7140 match w7:
7141 case WCon{False{}, w8}:
7142 match w8:
7143 case WNil{}:
7144 {==}
7145 case WCon{True{}, w8}:
7146 match w8:
7147 case WNil{}:
7148 {==}
7149 case WCon{True{}, w7}:
7150 match w7:
7151 case WCon{False{}, w8}:
7152 match w8:
7153 case WNil{}:
7154 {==}
7155 case WCon{True{}, w8}:
7156 match w8:
7157 case WNil{}:
7158 {==}
7159 case WCon{True{}, w5}:
7160 match w5:
7161 case WCon{False{}, w6}:
7162 match w6:
7163 case WCon{False{}, w7}:
7164 match w7:
7165 case WCon{False{}, w8}:
7166 match w8:
7167 case WNil{}:
7168 {==}
7169 case WCon{True{}, w8}:
7170 match w8:
7171 case WNil{}:
7172 {==}
7173 case WCon{True{}, w7}:
7174 match w7:
7175 case WCon{False{}, w8}:
7176 match w8:
7177 case WNil{}:
7178 {==}
7179 case WCon{True{}, w8}:
7180 match w8:
7181 case WNil{}:
7182 {==}
7183 case WCon{True{}, w6}:
7184 match w6:
7185 case WCon{False{}, w7}:
7186 match w7:
7187 case WCon{False{}, w8}:
7188 match w8:
7189 case WNil{}:
7190 {==}
7191 case WCon{True{}, w8}:
7192 match w8:
7193 case WNil{}:
7194 {==}
7195 case WCon{True{}, w7}:
7196 match w7:
7197 case WCon{False{}, w8}:
7198 match w8:
7199 case WNil{}:
7200 {==}
7201 case WCon{True{}, w8}:
7202 match w8:
7203 case WNil{}:
7204 {==}
7205 case WCon{True{}, w4}:
7206 match w4:
7207 case WCon{False{}, w5}:
7208 match w5:
7209 case WCon{False{}, w6}:
7210 match w6:
7211 case WCon{False{}, w7}:
7212 match w7:
7213 case WCon{False{}, w8}:
7214 match w8:
7215 case WNil{}:
7216 {==}
7217 case WCon{True{}, w8}:
7218 match w8:
7219 case WNil{}:
7220 {==}
7221 case WCon{True{}, w7}:
7222 match w7:
7223 case WCon{False{}, w8}:
7224 match w8:
7225 case WNil{}:
7226 {==}
7227 case WCon{True{}, w8}:
7228 match w8:
7229 case WNil{}:
7230 {==}
7231 case WCon{True{}, w6}:
7232 match w6:
7233 case WCon{False{}, w7}:
7234 match w7:
7235 case WCon{False{}, w8}:
7236 match w8:
7237 case WNil{}:
7238 {==}
7239 case WCon{True{}, w8}:
7240 match w8:
7241 case WNil{}:
7242 {==}
7243 case WCon{True{}, w7}:
7244 match w7:
7245 case WCon{False{}, w8}:
7246 match w8:
7247 case WNil{}:
7248 {==}
7249 case WCon{True{}, w8}:
7250 match w8:
7251 case WNil{}:
7252 {==}
7253 case WCon{True{}, w5}:
7254 match w5:
7255 case WCon{False{}, w6}:
7256 match w6:
7257 case WCon{False{}, w7}:
7258 match w7:
7259 case WCon{False{}, w8}:
7260 match w8:
7261 case WNil{}:
7262 {==}
7263 case WCon{True{}, w8}:
7264 match w8:
7265 case WNil{}:
7266 {==}
7267 case WCon{True{}, w7}:
7268 match w7:
7269 case WCon{False{}, w8}:
7270 match w8:
7271 case WNil{}:
7272 {==}
7273 case WCon{True{}, w8}:
7274 match w8:
7275 case WNil{}:
7276 {==}
7277 case WCon{True{}, w6}:
7278 match w6:
7279 case WCon{False{}, w7}:
7280 match w7:
7281 case WCon{False{}, w8}:
7282 match w8:
7283 case WNil{}:
7284 {==}
7285 case WCon{True{}, w8}:
7286 match w8:
7287 case WNil{}:
7288 {==}
7289 case WCon{True{}, w7}:
7290 match w7:
7291 case WCon{False{}, w8}:
7292 match w8:
7293 case WNil{}:
7294 {==}
7295 case WCon{True{}, w8}:
7296 match w8:
7297 case WNil{}:
7298 {==}
7299 case WCon{True{}, w3}:
7300 match w3:
7301 case WCon{False{}, w4}:
7302 match w4:
7303 case WCon{False{}, w5}:
7304 match w5:
7305 case WCon{False{}, w6}:
7306 match w6:
7307 case WCon{False{}, w7}:
7308 match w7:
7309 case WCon{False{}, w8}:
7310 match w8:
7311 case WNil{}:
7312 {==}
7313 case WCon{True{}, w8}:
7314 match w8:
7315 case WNil{}:
7316 {==}
7317 case WCon{True{}, w7}:
7318 match w7:
7319 case WCon{False{}, w8}:
7320 match w8:
7321 case WNil{}:
7322 {==}
7323 case WCon{True{}, w8}:
7324 match w8:
7325 case WNil{}:
7326 {==}
7327 case WCon{True{}, w6}:
7328 match w6:
7329 case WCon{False{}, w7}:
7330 match w7:
7331 case WCon{False{}, w8}:
7332 match w8:
7333 case WNil{}:
7334 {==}
7335 case WCon{True{}, w8}:
7336 match w8:
7337 case WNil{}:
7338 {==}
7339 case WCon{True{}, w7}:
7340 match w7:
7341 case WCon{False{}, w8}:
7342 match w8:
7343 case WNil{}:
7344 {==}
7345 case WCon{True{}, w8}:
7346 match w8:
7347 case WNil{}:
7348 {==}
7349 case WCon{True{}, w5}:
7350 match w5:
7351 case WCon{False{}, w6}:
7352 match w6:
7353 case WCon{False{}, w7}:
7354 match w7:
7355 case WCon{False{}, w8}:
7356 match w8:
7357 case WNil{}:
7358 {==}
7359 case WCon{True{}, w8}:
7360 match w8:
7361 case WNil{}:
7362 {==}
7363 case WCon{True{}, w7}:
7364 match w7:
7365 case WCon{False{}, w8}:
7366 match w8:
7367 case WNil{}:
7368 {==}
7369 case WCon{True{}, w8}:
7370 match w8:
7371 case WNil{}:
7372 {==}
7373 case WCon{True{}, w6}:
7374 match w6:
7375 case WCon{False{}, w7}:
7376 match w7:
7377 case WCon{False{}, w8}:
7378 match w8:
7379 case WNil{}:
7380 {==}
7381 case WCon{True{}, w8}:
7382 match w8:
7383 case WNil{}:
7384 {==}
7385 case WCon{True{}, w7}:
7386 match w7:
7387 case WCon{False{}, w8}:
7388 match w8:
7389 case WNil{}:
7390 {==}
7391 case WCon{True{}, w8}:
7392 match w8:
7393 case WNil{}:
7394 {==}
7395 case WCon{True{}, w4}:
7396 match w4:
7397 case WCon{False{}, w5}:
7398 match w5:
7399 case WCon{False{}, w6}:
7400 match w6:
7401 case WCon{False{}, w7}:
7402 match w7:
7403 case WCon{False{}, w8}:
7404 match w8:
7405 case WNil{}:
7406 {==}
7407 case WCon{True{}, w8}:
7408 match w8:
7409 case WNil{}:
7410 {==}
7411 case WCon{True{}, w7}:
7412 match w7:
7413 case WCon{False{}, w8}:
7414 match w8:
7415 case WNil{}:
7416 {==}
7417 case WCon{True{}, w8}:
7418 match w8:
7419 case WNil{}:
7420 {==}
7421 case WCon{True{}, w6}:
7422 match w6:
7423 case WCon{False{}, w7}:
7424 match w7:
7425 case WCon{False{}, w8}:
7426 match w8:
7427 case WNil{}:
7428 {==}
7429 case WCon{True{}, w8}:
7430 match w8:
7431 case WNil{}:
7432 {==}
7433 case WCon{True{}, w7}:
7434 match w7:
7435 case WCon{False{}, w8}:
7436 match w8:
7437 case WNil{}:
7438 {==}
7439 case WCon{True{}, w8}:
7440 match w8:
7441 case WNil{}:
7442 {==}
7443 case WCon{True{}, w5}:
7444 match w5:
7445 case WCon{False{}, w6}:
7446 match w6:
7447 case WCon{False{}, w7}:
7448 match w7:
7449 case WCon{False{}, w8}:
7450 match w8:
7451 case WNil{}:
7452 {==}
7453 case WCon{True{}, w8}:
7454 match w8:
7455 case WNil{}:
7456 {==}
7457 case WCon{True{}, w7}:
7458 match w7:
7459 case WCon{False{}, w8}:
7460 match w8:
7461 case WNil{}:
7462 {==}
7463 case WCon{True{}, w8}:
7464 match w8:
7465 case WNil{}:
7466 {==}
7467 case WCon{True{}, w6}:
7468 match w6:
7469 case WCon{False{}, w7}:
7470 match w7:
7471 case WCon{False{}, w8}:
7472 match w8:
7473 case WNil{}:
7474 {==}
7475 case WCon{True{}, w8}:
7476 match w8:
7477 case WNil{}:
7478 {==}
7479 case WCon{True{}, w7}:
7480 match w7:
7481 case WCon{False{}, w8}:
7482 match w8:
7483 case WNil{}:
7484 {==}
7485 case WCon{True{}, w8}:
7486 match w8:
7487 case WNil{}:
7488 {==}
7489 case WCon{True{}, w2}:
7490 match w2:
7491 case WCon{False{}, w3}:
7492 match w3:
7493 case WCon{False{}, w4}:
7494 match w4:
7495 case WCon{False{}, w5}:
7496 match w5:
7497 case WCon{False{}, w6}:
7498 match w6:
7499 case WCon{False{}, w7}:
7500 match w7:
7501 case WCon{False{}, w8}:
7502 match w8:
7503 case WNil{}:
7504 {==}
7505 case WCon{True{}, w8}:
7506 match w8:
7507 case WNil{}:
7508 {==}
7509 case WCon{True{}, w7}:
7510 match w7:
7511 case WCon{False{}, w8}:
7512 match w8:
7513 case WNil{}:
7514 {==}
7515 case WCon{True{}, w8}:
7516 match w8:
7517 case WNil{}:
7518 {==}
7519 case WCon{True{}, w6}:
7520 match w6:
7521 case WCon{False{}, w7}:
7522 match w7:
7523 case WCon{False{}, w8}:
7524 match w8:
7525 case WNil{}:
7526 {==}
7527 case WCon{True{}, w8}:
7528 match w8:
7529 case WNil{}:
7530 {==}
7531 case WCon{True{}, w7}:
7532 match w7:
7533 case WCon{False{}, w8}:
7534 match w8:
7535 case WNil{}:
7536 {==}
7537 case WCon{True{}, w8}:
7538 match w8:
7539 case WNil{}:
7540 {==}
7541 case WCon{True{}, w5}:
7542 match w5:
7543 case WCon{False{}, w6}:
7544 match w6:
7545 case WCon{False{}, w7}:
7546 match w7:
7547 case WCon{False{}, w8}:
7548 match w8:
7549 case WNil{}:
7550 {==}
7551 case WCon{True{}, w8}:
7552 match w8:
7553 case WNil{}:
7554 {==}
7555 case WCon{True{}, w7}:
7556 match w7:
7557 case WCon{False{}, w8}:
7558 match w8:
7559 case WNil{}:
7560 {==}
7561 case WCon{True{}, w8}:
7562 match w8:
7563 case WNil{}:
7564 {==}
7565 case WCon{True{}, w6}:
7566 match w6:
7567 case WCon{False{}, w7}:
7568 match w7:
7569 case WCon{False{}, w8}:
7570 match w8:
7571 case WNil{}:
7572 {==}
7573 case WCon{True{}, w8}:
7574 match w8:
7575 case WNil{}:
7576 {==}
7577 case WCon{True{}, w7}:
7578 match w7:
7579 case WCon{False{}, w8}:
7580 match w8:
7581 case WNil{}:
7582 {==}
7583 case WCon{True{}, w8}:
7584 match w8:
7585 case WNil{}:
7586 {==}
7587 case WCon{True{}, w4}:
7588 match w4:
7589 case WCon{False{}, w5}:
7590 match w5:
7591 case WCon{False{}, w6}:
7592 match w6:
7593 case WCon{False{}, w7}:
7594 match w7:
7595 case WCon{False{}, w8}:
7596 match w8:
7597 case WNil{}:
7598 {==}
7599 case WCon{True{}, w8}:
7600 match w8:
7601 case WNil{}:
7602 {==}
7603 case WCon{True{}, w7}:
7604 match w7:
7605 case WCon{False{}, w8}:
7606 match w8:
7607 case WNil{}:
7608 {==}
7609 case WCon{True{}, w8}:
7610 match w8:
7611 case WNil{}:
7612 {==}
7613 case WCon{True{}, w6}:
7614 match w6:
7615 case WCon{False{}, w7}:
7616 match w7:
7617 case WCon{False{}, w8}:
7618 match w8:
7619 case WNil{}:
7620 {==}
7621 case WCon{True{}, w8}:
7622 match w8:
7623 case WNil{}:
7624 {==}
7625 case WCon{True{}, w7}:
7626 match w7:
7627 case WCon{False{}, w8}:
7628 match w8:
7629 case WNil{}:
7630 {==}
7631 case WCon{True{}, w8}:
7632 match w8:
7633 case WNil{}:
7634 {==}
7635 case WCon{True{}, w5}:
7636 match w5:
7637 case WCon{False{}, w6}:
7638 match w6:
7639 case WCon{False{}, w7}:
7640 match w7:
7641 case WCon{False{}, w8}:
7642 match w8:
7643 case WNil{}:
7644 {==}
7645 case WCon{True{}, w8}:
7646 match w8:
7647 case WNil{}:
7648 {==}
7649 case WCon{True{}, w7}:
7650 match w7:
7651 case WCon{False{}, w8}:
7652 match w8:
7653 case WNil{}:
7654 {==}
7655 case WCon{True{}, w8}:
7656 match w8:
7657 case WNil{}:
7658 {==}
7659 case WCon{True{}, w6}:
7660 match w6:
7661 case WCon{False{}, w7}:
7662 match w7:
7663 case WCon{False{}, w8}:
7664 match w8:
7665 case WNil{}:
7666 {==}
7667 case WCon{True{}, w8}:
7668 match w8:
7669 case WNil{}:
7670 {==}
7671 case WCon{True{}, w7}:
7672 match w7:
7673 case WCon{False{}, w8}:
7674 match w8:
7675 case WNil{}:
7676 {==}
7677 case WCon{True{}, w8}:
7678 match w8:
7679 case WNil{}:
7680 {==}
7681 case WCon{True{}, w3}:
7682 match w3:
7683 case WCon{False{}, w4}:
7684 match w4:
7685 case WCon{False{}, w5}:
7686 match w5:
7687 case WCon{False{}, w6}:
7688 match w6:
7689 case WCon{False{}, w7}:
7690 match w7:
7691 case WCon{False{}, w8}:
7692 match w8:
7693 case WNil{}:
7694 {==}
7695 case WCon{True{}, w8}:
7696 match w8:
7697 case WNil{}:
7698 {==}
7699 case WCon{True{}, w7}:
7700 match w7:
7701 case WCon{False{}, w8}:
7702 match w8:
7703 case WNil{}:
7704 {==}
7705 case WCon{True{}, w8}:
7706 match w8:
7707 case WNil{}:
7708 {==}
7709 case WCon{True{}, w6}:
7710 match w6:
7711 case WCon{False{}, w7}:
7712 match w7:
7713 case WCon{False{}, w8}:
7714 match w8:
7715 case WNil{}:
7716 {==}
7717 case WCon{True{}, w8}:
7718 match w8:
7719 case WNil{}:
7720 {==}
7721 case WCon{True{}, w7}:
7722 match w7:
7723 case WCon{False{}, w8}:
7724 match w8:
7725 case WNil{}:
7726 {==}
7727 case WCon{True{}, w8}:
7728 match w8:
7729 case WNil{}:
7730 {==}
7731 case WCon{True{}, w5}:
7732 match w5:
7733 case WCon{False{}, w6}:
7734 match w6:
7735 case WCon{False{}, w7}:
7736 match w7:
7737 case WCon{False{}, w8}:
7738 match w8:
7739 case WNil{}:
7740 {==}
7741 case WCon{True{}, w8}:
7742 match w8:
7743 case WNil{}:
7744 {==}
7745 case WCon{True{}, w7}:
7746 match w7:
7747 case WCon{False{}, w8}:
7748 match w8:
7749 case WNil{}:
7750 {==}
7751 case WCon{True{}, w8}:
7752 match w8:
7753 case WNil{}:
7754 {==}
7755 case WCon{True{}, w6}:
7756 match w6:
7757 case WCon{False{}, w7}:
7758 match w7:
7759 case WCon{False{}, w8}:
7760 match w8:
7761 case WNil{}:
7762 {==}
7763 case WCon{True{}, w8}:
7764 match w8:
7765 case WNil{}:
7766 {==}
7767 case WCon{True{}, w7}:
7768 match w7:
7769 case WCon{False{}, w8}:
7770 match w8:
7771 case WNil{}:
7772 {==}
7773 case WCon{True{}, w8}:
7774 match w8:
7775 case WNil{}:
7776 {==}
7777 case WCon{True{}, w4}:
7778 match w4:
7779 case WCon{False{}, w5}:
7780 match w5:
7781 case WCon{False{}, w6}:
7782 match w6:
7783 case WCon{False{}, w7}:
7784 match w7:
7785 case WCon{False{}, w8}:
7786 match w8:
7787 case WNil{}:
7788 {==}
7789 case WCon{True{}, w8}:
7790 match w8:
7791 case WNil{}:
7792 {==}
7793 case WCon{True{}, w7}:
7794 match w7:
7795 case WCon{False{}, w8}:
7796 match w8:
7797 case WNil{}:
7798 {==}
7799 case WCon{True{}, w8}:
7800 match w8:
7801 case WNil{}:
7802 {==}
7803 case WCon{True{}, w6}:
7804 match w6:
7805 case WCon{False{}, w7}:
7806 match w7:
7807 case WCon{False{}, w8}:
7808 match w8:
7809 case WNil{}:
7810 {==}
7811 case WCon{True{}, w8}:
7812 match w8:
7813 case WNil{}:
7814 {==}
7815 case WCon{True{}, w7}:
7816 match w7:
7817 case WCon{False{}, w8}:
7818 match w8:
7819 case WNil{}:
7820 {==}
7821 case WCon{True{}, w8}:
7822 match w8:
7823 case WNil{}:
7824 {==}
7825 case WCon{True{}, w5}:
7826 match w5:
7827 case WCon{False{}, w6}:
7828 match w6:
7829 case WCon{False{}, w7}:
7830 match w7:
7831 case WCon{False{}, w8}:
7832 match w8:
7833 case WNil{}:
7834 {==}
7835 case WCon{True{}, w8}:
7836 match w8:
7837 case WNil{}:
7838 {==}
7839 case WCon{True{}, w7}:
7840 match w7:
7841 case WCon{False{}, w8}:
7842 match w8:
7843 case WNil{}:
7844 {==}
7845 case WCon{True{}, w8}:
7846 match w8:
7847 case WNil{}:
7848 {==}
7849 case WCon{True{}, w6}:
7850 match w6:
7851 case WCon{False{}, w7}:
7852 match w7:
7853 case WCon{False{}, w8}:
7854 match w8:
7855 case WNil{}:
7856 {==}
7857 case WCon{True{}, w8}:
7858 match w8:
7859 case WNil{}:
7860 {==}
7861 case WCon{True{}, w7}:
7862 match w7:
7863 case WCon{False{}, w8}:
7864 match w8:
7865 case WNil{}:
7866 {==}
7867 case WCon{True{}, w8}:
7868 match w8:
7869 case WNil{}:
7870 {==}
7871
7872
7873def aria_sl21(s: A.LcAriaSt) -> {s == A.aria.sl2(A.aria.sl1(s)) : A.LcAriaSt}:
7874 match s:
7875 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
7876 %aria_sb31(x0) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, A.aria.sb4(A.aria.sb2(x1)), A.aria.sb1(A.aria.sb3(x2)), A.aria.sb2(A.aria.sb4(x3)), A.aria.sb3(A.aria.sb1(x4)), A.aria.sb4(A.aria.sb2(x5)), A.aria.sb1(A.aria.sb3(x6)), A.aria.sb2(A.aria.sb4(x7)), A.aria.sb3(A.aria.sb1(x8)), A.aria.sb4(A.aria.sb2(x9)), A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7877 %aria_sb42(x1) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, _, A.aria.sb1(A.aria.sb3(x2)), A.aria.sb2(A.aria.sb4(x3)), A.aria.sb3(A.aria.sb1(x4)), A.aria.sb4(A.aria.sb2(x5)), A.aria.sb1(A.aria.sb3(x6)), A.aria.sb2(A.aria.sb4(x7)), A.aria.sb3(A.aria.sb1(x8)), A.aria.sb4(A.aria.sb2(x9)), A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7878 %aria_sb13(x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, _, A.aria.sb2(A.aria.sb4(x3)), A.aria.sb3(A.aria.sb1(x4)), A.aria.sb4(A.aria.sb2(x5)), A.aria.sb1(A.aria.sb3(x6)), A.aria.sb2(A.aria.sb4(x7)), A.aria.sb3(A.aria.sb1(x8)), A.aria.sb4(A.aria.sb2(x9)), A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7879 %aria_sb24(x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, _, A.aria.sb3(A.aria.sb1(x4)), A.aria.sb4(A.aria.sb2(x5)), A.aria.sb1(A.aria.sb3(x6)), A.aria.sb2(A.aria.sb4(x7)), A.aria.sb3(A.aria.sb1(x8)), A.aria.sb4(A.aria.sb2(x9)), A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7880 %aria_sb31(x4) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, _, A.aria.sb4(A.aria.sb2(x5)), A.aria.sb1(A.aria.sb3(x6)), A.aria.sb2(A.aria.sb4(x7)), A.aria.sb3(A.aria.sb1(x8)), A.aria.sb4(A.aria.sb2(x9)), A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7881 %aria_sb42(x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, _, A.aria.sb1(A.aria.sb3(x6)), A.aria.sb2(A.aria.sb4(x7)), A.aria.sb3(A.aria.sb1(x8)), A.aria.sb4(A.aria.sb2(x9)), A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7882 %aria_sb13(x6) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, _, A.aria.sb2(A.aria.sb4(x7)), A.aria.sb3(A.aria.sb1(x8)), A.aria.sb4(A.aria.sb2(x9)), A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7883 %aria_sb24(x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, _, A.aria.sb3(A.aria.sb1(x8)), A.aria.sb4(A.aria.sb2(x9)), A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7884 %aria_sb31(x8) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, _, A.aria.sb4(A.aria.sb2(x9)), A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7885 %aria_sb42(x9) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, _, A.aria.sb1(A.aria.sb3(x10)), A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7886 %aria_sb13(x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, _, A.aria.sb2(A.aria.sb4(x11)), A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7887 %aria_sb24(x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, _, A.aria.sb3(A.aria.sb1(x12)), A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7888 %aria_sb31(x12) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, _, A.aria.sb4(A.aria.sb2(x13)), A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7889 %aria_sb42(x13) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, _, A.aria.sb1(A.aria.sb3(x14)), A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7890 %aria_sb13(x14) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, _, A.aria.sb2(A.aria.sb4(x15))} : A.LcAriaSt}
7891 %aria_sb24(x15) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, _} : A.LcAriaSt}
7892 {==}
7893
7894def aria_sl12(s: A.LcAriaSt) -> {s == A.aria.sl1(A.aria.sl2(s)) : A.LcAriaSt}:
7895 match s:
7896 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
7897 %aria_sb13(x0) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, A.aria.sb2(A.aria.sb4(x1)), A.aria.sb3(A.aria.sb1(x2)), A.aria.sb4(A.aria.sb2(x3)), A.aria.sb1(A.aria.sb3(x4)), A.aria.sb2(A.aria.sb4(x5)), A.aria.sb3(A.aria.sb1(x6)), A.aria.sb4(A.aria.sb2(x7)), A.aria.sb1(A.aria.sb3(x8)), A.aria.sb2(A.aria.sb4(x9)), A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7898 %aria_sb24(x1) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, _, A.aria.sb3(A.aria.sb1(x2)), A.aria.sb4(A.aria.sb2(x3)), A.aria.sb1(A.aria.sb3(x4)), A.aria.sb2(A.aria.sb4(x5)), A.aria.sb3(A.aria.sb1(x6)), A.aria.sb4(A.aria.sb2(x7)), A.aria.sb1(A.aria.sb3(x8)), A.aria.sb2(A.aria.sb4(x9)), A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7899 %aria_sb31(x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, _, A.aria.sb4(A.aria.sb2(x3)), A.aria.sb1(A.aria.sb3(x4)), A.aria.sb2(A.aria.sb4(x5)), A.aria.sb3(A.aria.sb1(x6)), A.aria.sb4(A.aria.sb2(x7)), A.aria.sb1(A.aria.sb3(x8)), A.aria.sb2(A.aria.sb4(x9)), A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7900 %aria_sb42(x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, _, A.aria.sb1(A.aria.sb3(x4)), A.aria.sb2(A.aria.sb4(x5)), A.aria.sb3(A.aria.sb1(x6)), A.aria.sb4(A.aria.sb2(x7)), A.aria.sb1(A.aria.sb3(x8)), A.aria.sb2(A.aria.sb4(x9)), A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7901 %aria_sb13(x4) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, _, A.aria.sb2(A.aria.sb4(x5)), A.aria.sb3(A.aria.sb1(x6)), A.aria.sb4(A.aria.sb2(x7)), A.aria.sb1(A.aria.sb3(x8)), A.aria.sb2(A.aria.sb4(x9)), A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7902 %aria_sb24(x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, _, A.aria.sb3(A.aria.sb1(x6)), A.aria.sb4(A.aria.sb2(x7)), A.aria.sb1(A.aria.sb3(x8)), A.aria.sb2(A.aria.sb4(x9)), A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7903 %aria_sb31(x6) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, _, A.aria.sb4(A.aria.sb2(x7)), A.aria.sb1(A.aria.sb3(x8)), A.aria.sb2(A.aria.sb4(x9)), A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7904 %aria_sb42(x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, _, A.aria.sb1(A.aria.sb3(x8)), A.aria.sb2(A.aria.sb4(x9)), A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7905 %aria_sb13(x8) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, _, A.aria.sb2(A.aria.sb4(x9)), A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7906 %aria_sb24(x9) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, _, A.aria.sb3(A.aria.sb1(x10)), A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7907 %aria_sb31(x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, _, A.aria.sb4(A.aria.sb2(x11)), A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7908 %aria_sb42(x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, _, A.aria.sb1(A.aria.sb3(x12)), A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7909 %aria_sb13(x12) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, _, A.aria.sb2(A.aria.sb4(x13)), A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7910 %aria_sb24(x13) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, _, A.aria.sb3(A.aria.sb1(x14)), A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7911 %aria_sb31(x14) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, _, A.aria.sb4(A.aria.sb2(x15))} : A.LcAriaSt}
7912 %aria_sb42(x15) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, _} : A.LcAriaSt}
7913 {==}
7914
7915
7916def aria_xor2(s: A.LcAriaSt, k: M.CmBlock) -> {s == A.aria.xor(A.aria.xor(s, k), k) : A.LcAriaSt}:
7917 match s k:
7918 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15} M.CmBlock{U32{+k0}, U32{+k1}, U32{+k2}, U32{+k3}}:
7919 %word_xx(8n, x0, A.aria.byte0(k0)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, Word.xor(8n, Word.xor(8n, x1, A.aria.byte1(k0)), A.aria.byte1(k0)), Word.xor(8n, Word.xor(8n, x2, A.aria.byte2(k0)), A.aria.byte2(k0)), Word.xor(8n, Word.xor(8n, x3, A.aria.byte3(k0)), A.aria.byte3(k0)), Word.xor(8n, Word.xor(8n, x4, A.aria.byte0(k1)), A.aria.byte0(k1)), Word.xor(8n, Word.xor(8n, x5, A.aria.byte1(k1)), A.aria.byte1(k1)), Word.xor(8n, Word.xor(8n, x6, A.aria.byte2(k1)), A.aria.byte2(k1)), Word.xor(8n, Word.xor(8n, x7, A.aria.byte3(k1)), A.aria.byte3(k1)), Word.xor(8n, Word.xor(8n, x8, A.aria.byte0(k2)), A.aria.byte0(k2)), Word.xor(8n, Word.xor(8n, x9, A.aria.byte1(k2)), A.aria.byte1(k2)), Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7920 %word_xx(8n, x1, A.aria.byte1(k0)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, _, Word.xor(8n, Word.xor(8n, x2, A.aria.byte2(k0)), A.aria.byte2(k0)), Word.xor(8n, Word.xor(8n, x3, A.aria.byte3(k0)), A.aria.byte3(k0)), Word.xor(8n, Word.xor(8n, x4, A.aria.byte0(k1)), A.aria.byte0(k1)), Word.xor(8n, Word.xor(8n, x5, A.aria.byte1(k1)), A.aria.byte1(k1)), Word.xor(8n, Word.xor(8n, x6, A.aria.byte2(k1)), A.aria.byte2(k1)), Word.xor(8n, Word.xor(8n, x7, A.aria.byte3(k1)), A.aria.byte3(k1)), Word.xor(8n, Word.xor(8n, x8, A.aria.byte0(k2)), A.aria.byte0(k2)), Word.xor(8n, Word.xor(8n, x9, A.aria.byte1(k2)), A.aria.byte1(k2)), Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7921 %word_xx(8n, x2, A.aria.byte2(k0)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, _, Word.xor(8n, Word.xor(8n, x3, A.aria.byte3(k0)), A.aria.byte3(k0)), Word.xor(8n, Word.xor(8n, x4, A.aria.byte0(k1)), A.aria.byte0(k1)), Word.xor(8n, Word.xor(8n, x5, A.aria.byte1(k1)), A.aria.byte1(k1)), Word.xor(8n, Word.xor(8n, x6, A.aria.byte2(k1)), A.aria.byte2(k1)), Word.xor(8n, Word.xor(8n, x7, A.aria.byte3(k1)), A.aria.byte3(k1)), Word.xor(8n, Word.xor(8n, x8, A.aria.byte0(k2)), A.aria.byte0(k2)), Word.xor(8n, Word.xor(8n, x9, A.aria.byte1(k2)), A.aria.byte1(k2)), Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7922 %word_xx(8n, x3, A.aria.byte3(k0)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, _, Word.xor(8n, Word.xor(8n, x4, A.aria.byte0(k1)), A.aria.byte0(k1)), Word.xor(8n, Word.xor(8n, x5, A.aria.byte1(k1)), A.aria.byte1(k1)), Word.xor(8n, Word.xor(8n, x6, A.aria.byte2(k1)), A.aria.byte2(k1)), Word.xor(8n, Word.xor(8n, x7, A.aria.byte3(k1)), A.aria.byte3(k1)), Word.xor(8n, Word.xor(8n, x8, A.aria.byte0(k2)), A.aria.byte0(k2)), Word.xor(8n, Word.xor(8n, x9, A.aria.byte1(k2)), A.aria.byte1(k2)), Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7923 %word_xx(8n, x4, A.aria.byte0(k1)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, _, Word.xor(8n, Word.xor(8n, x5, A.aria.byte1(k1)), A.aria.byte1(k1)), Word.xor(8n, Word.xor(8n, x6, A.aria.byte2(k1)), A.aria.byte2(k1)), Word.xor(8n, Word.xor(8n, x7, A.aria.byte3(k1)), A.aria.byte3(k1)), Word.xor(8n, Word.xor(8n, x8, A.aria.byte0(k2)), A.aria.byte0(k2)), Word.xor(8n, Word.xor(8n, x9, A.aria.byte1(k2)), A.aria.byte1(k2)), Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7924 %word_xx(8n, x5, A.aria.byte1(k1)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, _, Word.xor(8n, Word.xor(8n, x6, A.aria.byte2(k1)), A.aria.byte2(k1)), Word.xor(8n, Word.xor(8n, x7, A.aria.byte3(k1)), A.aria.byte3(k1)), Word.xor(8n, Word.xor(8n, x8, A.aria.byte0(k2)), A.aria.byte0(k2)), Word.xor(8n, Word.xor(8n, x9, A.aria.byte1(k2)), A.aria.byte1(k2)), Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7925 %word_xx(8n, x6, A.aria.byte2(k1)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, _, Word.xor(8n, Word.xor(8n, x7, A.aria.byte3(k1)), A.aria.byte3(k1)), Word.xor(8n, Word.xor(8n, x8, A.aria.byte0(k2)), A.aria.byte0(k2)), Word.xor(8n, Word.xor(8n, x9, A.aria.byte1(k2)), A.aria.byte1(k2)), Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7926 %word_xx(8n, x7, A.aria.byte3(k1)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, _, Word.xor(8n, Word.xor(8n, x8, A.aria.byte0(k2)), A.aria.byte0(k2)), Word.xor(8n, Word.xor(8n, x9, A.aria.byte1(k2)), A.aria.byte1(k2)), Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7927 %word_xx(8n, x8, A.aria.byte0(k2)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, _, Word.xor(8n, Word.xor(8n, x9, A.aria.byte1(k2)), A.aria.byte1(k2)), Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7928 %word_xx(8n, x9, A.aria.byte1(k2)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, _, Word.xor(8n, Word.xor(8n, x10, A.aria.byte2(k2)), A.aria.byte2(k2)), Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7929 %word_xx(8n, x10, A.aria.byte2(k2)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, _, Word.xor(8n, Word.xor(8n, x11, A.aria.byte3(k2)), A.aria.byte3(k2)), Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7930 %word_xx(8n, x11, A.aria.byte3(k2)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, _, Word.xor(8n, Word.xor(8n, x12, A.aria.byte0(k3)), A.aria.byte0(k3)), Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7931 %word_xx(8n, x12, A.aria.byte0(k3)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, _, Word.xor(8n, Word.xor(8n, x13, A.aria.byte1(k3)), A.aria.byte1(k3)), Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7932 %word_xx(8n, x13, A.aria.byte1(k3)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, _, Word.xor(8n, Word.xor(8n, x14, A.aria.byte2(k3)), A.aria.byte2(k3)), Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7933 %word_xx(8n, x14, A.aria.byte2(k3)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, _, Word.xor(8n, Word.xor(8n, x15, A.aria.byte3(k3)), A.aria.byte3(k3))} : A.LcAriaSt}
7934 %word_xx(8n, x15, A.aria.byte3(k3)) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, _} : A.LcAriaSt}
7935 {==}
7936
7937
7938def aria_e0(s: A.LcAriaSt) -> {s == A.aria.e0(A.aria.e0(s)) : A.LcAriaSt}:
7939 match s:
7940 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
7941 %word_xx(8n, x10, x15) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x15), x15), Word.xor(8n, Word.xor(8n, x2, x15), x15), x3, Word.xor(8n, Word.xor(8n, x4, x15), x15), Word.xor(8n, Word.xor(8n, x5, x15), x15), x6, x7, Word.xor(8n, Word.xor(8n, x8, x15), x15), x9, _, x11, x12, x13, x14, x15} : A.LcAriaSt}
7942 %word_xx(8n, x8, x15) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x15), x15), Word.xor(8n, Word.xor(8n, x2, x15), x15), x3, Word.xor(8n, Word.xor(8n, x4, x15), x15), Word.xor(8n, Word.xor(8n, x5, x15), x15), x6, x7, _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7943 %word_xx(8n, x5, x15) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x15), x15), Word.xor(8n, Word.xor(8n, x2, x15), x15), x3, Word.xor(8n, Word.xor(8n, x4, x15), x15), _, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7944 %word_xx(8n, x4, x15) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x15), x15), Word.xor(8n, Word.xor(8n, x2, x15), x15), x3, _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7945 %word_xx(8n, x2, x15) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x15), x15), _, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7946 %word_xx(8n, x1, x15) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7947 {==}
7948
7949def aria_e1(s: A.LcAriaSt) -> {s == A.aria.e1(A.aria.e1(s)) : A.LcAriaSt}:
7950 match s:
7951 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
7952 %word_xx(8n, x11, x14) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x14), x14), x1, x2, Word.xor(8n, Word.xor(8n, x3, x14), x14), Word.xor(8n, Word.xor(8n, x4, x14), x14), Word.xor(8n, Word.xor(8n, x5, x14), x14), x6, x7, x8, Word.xor(8n, Word.xor(8n, x9, x14), x14), x10, _, x12, x13, x14, x15} : A.LcAriaSt}
7953 %word_xx(8n, x9, x14) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x14), x14), x1, x2, Word.xor(8n, Word.xor(8n, x3, x14), x14), Word.xor(8n, Word.xor(8n, x4, x14), x14), Word.xor(8n, Word.xor(8n, x5, x14), x14), x6, x7, x8, _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7954 %word_xx(8n, x5, x14) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x14), x14), x1, x2, Word.xor(8n, Word.xor(8n, x3, x14), x14), Word.xor(8n, Word.xor(8n, x4, x14), x14), _, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7955 %word_xx(8n, x4, x14) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x14), x14), x1, x2, Word.xor(8n, Word.xor(8n, x3, x14), x14), _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7956 %word_xx(8n, x3, x14) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x14), x14), x1, x2, _, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7957 %word_xx(8n, x0, x14) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7958 {==}
7959
7960def aria_e2(s: A.LcAriaSt) -> {s == A.aria.e2(A.aria.e2(s)) : A.LcAriaSt}:
7961 match s:
7962 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
7963 %word_xx(8n, x10, x13) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x13), x13), x1, x2, Word.xor(8n, Word.xor(8n, x3, x13), x13), x4, x5, Word.xor(8n, Word.xor(8n, x6, x13), x13), Word.xor(8n, Word.xor(8n, x7, x13), x13), Word.xor(8n, Word.xor(8n, x8, x13), x13), x9, _, x11, x12, x13, x14, x15} : A.LcAriaSt}
7964 %word_xx(8n, x8, x13) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x13), x13), x1, x2, Word.xor(8n, Word.xor(8n, x3, x13), x13), x4, x5, Word.xor(8n, Word.xor(8n, x6, x13), x13), Word.xor(8n, Word.xor(8n, x7, x13), x13), _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7965 %word_xx(8n, x7, x13) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x13), x13), x1, x2, Word.xor(8n, Word.xor(8n, x3, x13), x13), x4, x5, Word.xor(8n, Word.xor(8n, x6, x13), x13), _, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7966 %word_xx(8n, x6, x13) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x13), x13), x1, x2, Word.xor(8n, Word.xor(8n, x3, x13), x13), x4, x5, _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7967 %word_xx(8n, x3, x13) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x13), x13), x1, x2, _, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7968 %word_xx(8n, x0, x13) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7969 {==}
7970
7971def aria_e3(s: A.LcAriaSt) -> {s == A.aria.e3(A.aria.e3(s)) : A.LcAriaSt}:
7972 match s:
7973 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
7974 %word_xx(8n, x11, x12) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x12), x12), Word.xor(8n, Word.xor(8n, x2, x12), x12), x3, x4, x5, Word.xor(8n, Word.xor(8n, x6, x12), x12), Word.xor(8n, Word.xor(8n, x7, x12), x12), x8, Word.xor(8n, Word.xor(8n, x9, x12), x12), x10, _, x12, x13, x14, x15} : A.LcAriaSt}
7975 %word_xx(8n, x9, x12) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x12), x12), Word.xor(8n, Word.xor(8n, x2, x12), x12), x3, x4, x5, Word.xor(8n, Word.xor(8n, x6, x12), x12), Word.xor(8n, Word.xor(8n, x7, x12), x12), x8, _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7976 %word_xx(8n, x7, x12) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x12), x12), Word.xor(8n, Word.xor(8n, x2, x12), x12), x3, x4, x5, Word.xor(8n, Word.xor(8n, x6, x12), x12), _, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7977 %word_xx(8n, x6, x12) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x12), x12), Word.xor(8n, Word.xor(8n, x2, x12), x12), x3, x4, x5, _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7978 %word_xx(8n, x2, x12) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x12), x12), _, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7979 %word_xx(8n, x1, x12) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7980 {==}
7981
7982def aria_e4(s: A.LcAriaSt) -> {s == A.aria.e4(A.aria.e4(s)) : A.LcAriaSt}:
7983 match s:
7984 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
7985 %word_xx(8n, x9, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x11), x11), Word.xor(8n, Word.xor(8n, x1, x11), x11), Word.xor(8n, Word.xor(8n, x2, x11), x11), Word.xor(8n, Word.xor(8n, x3, x11), x11), Word.xor(8n, Word.xor(8n, x4, x11), x11), Word.xor(8n, Word.xor(8n, x5, x11), x11), Word.xor(8n, Word.xor(8n, x6, x11), x11), Word.xor(8n, Word.xor(8n, x7, x11), x11), x8, _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7986 %word_xx(8n, x7, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x11), x11), Word.xor(8n, Word.xor(8n, x1, x11), x11), Word.xor(8n, Word.xor(8n, x2, x11), x11), Word.xor(8n, Word.xor(8n, x3, x11), x11), Word.xor(8n, Word.xor(8n, x4, x11), x11), Word.xor(8n, Word.xor(8n, x5, x11), x11), Word.xor(8n, Word.xor(8n, x6, x11), x11), _, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7987 %word_xx(8n, x6, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x11), x11), Word.xor(8n, Word.xor(8n, x1, x11), x11), Word.xor(8n, Word.xor(8n, x2, x11), x11), Word.xor(8n, Word.xor(8n, x3, x11), x11), Word.xor(8n, Word.xor(8n, x4, x11), x11), Word.xor(8n, Word.xor(8n, x5, x11), x11), _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7988 %word_xx(8n, x5, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x11), x11), Word.xor(8n, Word.xor(8n, x1, x11), x11), Word.xor(8n, Word.xor(8n, x2, x11), x11), Word.xor(8n, Word.xor(8n, x3, x11), x11), Word.xor(8n, Word.xor(8n, x4, x11), x11), _, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7989 %word_xx(8n, x4, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x11), x11), Word.xor(8n, Word.xor(8n, x1, x11), x11), Word.xor(8n, Word.xor(8n, x2, x11), x11), Word.xor(8n, Word.xor(8n, x3, x11), x11), _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7990 %word_xx(8n, x3, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x11), x11), Word.xor(8n, Word.xor(8n, x1, x11), x11), Word.xor(8n, Word.xor(8n, x2, x11), x11), _, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7991 %word_xx(8n, x2, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x11), x11), Word.xor(8n, Word.xor(8n, x1, x11), x11), _, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7992 %word_xx(8n, x1, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x11), x11), _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7993 %word_xx(8n, x0, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
7994 {==}
7995
7996def aria_e5(s: A.LcAriaSt) -> {s == A.aria.e5(A.aria.e5(s)) : A.LcAriaSt}:
7997 match s:
7998 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
7999 %word_xx(8n, x8, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x10), x10), Word.xor(8n, Word.xor(8n, x1, x10), x10), Word.xor(8n, Word.xor(8n, x2, x10), x10), Word.xor(8n, Word.xor(8n, x3, x10), x10), Word.xor(8n, Word.xor(8n, x4, x10), x10), Word.xor(8n, Word.xor(8n, x5, x10), x10), Word.xor(8n, Word.xor(8n, x6, x10), x10), Word.xor(8n, Word.xor(8n, x7, x10), x10), _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8000 %word_xx(8n, x7, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x10), x10), Word.xor(8n, Word.xor(8n, x1, x10), x10), Word.xor(8n, Word.xor(8n, x2, x10), x10), Word.xor(8n, Word.xor(8n, x3, x10), x10), Word.xor(8n, Word.xor(8n, x4, x10), x10), Word.xor(8n, Word.xor(8n, x5, x10), x10), Word.xor(8n, Word.xor(8n, x6, x10), x10), _, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8001 %word_xx(8n, x6, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x10), x10), Word.xor(8n, Word.xor(8n, x1, x10), x10), Word.xor(8n, Word.xor(8n, x2, x10), x10), Word.xor(8n, Word.xor(8n, x3, x10), x10), Word.xor(8n, Word.xor(8n, x4, x10), x10), Word.xor(8n, Word.xor(8n, x5, x10), x10), _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8002 %word_xx(8n, x5, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x10), x10), Word.xor(8n, Word.xor(8n, x1, x10), x10), Word.xor(8n, Word.xor(8n, x2, x10), x10), Word.xor(8n, Word.xor(8n, x3, x10), x10), Word.xor(8n, Word.xor(8n, x4, x10), x10), _, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8003 %word_xx(8n, x4, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x10), x10), Word.xor(8n, Word.xor(8n, x1, x10), x10), Word.xor(8n, Word.xor(8n, x2, x10), x10), Word.xor(8n, Word.xor(8n, x3, x10), x10), _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8004 %word_xx(8n, x3, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x10), x10), Word.xor(8n, Word.xor(8n, x1, x10), x10), Word.xor(8n, Word.xor(8n, x2, x10), x10), _, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8005 %word_xx(8n, x2, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x10), x10), Word.xor(8n, Word.xor(8n, x1, x10), x10), _, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8006 %word_xx(8n, x1, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x10), x10), _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8007 %word_xx(8n, x0, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8008 {==}
8009
8010def aria_e6(s: A.LcAriaSt) -> {s == A.aria.e6(A.aria.e6(s)) : A.LcAriaSt}:
8011 match s:
8012 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8013 %word_xx(8n, x14, x9) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x9), x9), Word.xor(8n, Word.xor(8n, x1, x9), x9), x2, x3, x4, Word.xor(8n, Word.xor(8n, x5, x9), x9), Word.xor(8n, Word.xor(8n, x6, x9), x9), x7, x8, x9, x10, Word.xor(8n, Word.xor(8n, x11, x9), x9), Word.xor(8n, Word.xor(8n, x12, x9), x9), x13, _, x15} : A.LcAriaSt}
8014 %word_xx(8n, x12, x9) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x9), x9), Word.xor(8n, Word.xor(8n, x1, x9), x9), x2, x3, x4, Word.xor(8n, Word.xor(8n, x5, x9), x9), Word.xor(8n, Word.xor(8n, x6, x9), x9), x7, x8, x9, x10, Word.xor(8n, Word.xor(8n, x11, x9), x9), _, x13, x14, x15} : A.LcAriaSt}
8015 %word_xx(8n, x11, x9) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x9), x9), Word.xor(8n, Word.xor(8n, x1, x9), x9), x2, x3, x4, Word.xor(8n, Word.xor(8n, x5, x9), x9), Word.xor(8n, Word.xor(8n, x6, x9), x9), x7, x8, x9, x10, _, x12, x13, x14, x15} : A.LcAriaSt}
8016 %word_xx(8n, x6, x9) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x9), x9), Word.xor(8n, Word.xor(8n, x1, x9), x9), x2, x3, x4, Word.xor(8n, Word.xor(8n, x5, x9), x9), _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8017 %word_xx(8n, x5, x9) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x9), x9), Word.xor(8n, Word.xor(8n, x1, x9), x9), x2, x3, x4, _, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8018 %word_xx(8n, x1, x9) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x9), x9), _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8019 %word_xx(8n, x0, x9) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8020 {==}
8021
8022def aria_e7(s: A.LcAriaSt) -> {s == A.aria.e7(A.aria.e7(s)) : A.LcAriaSt}:
8023 match s:
8024 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8025 %word_xx(8n, x9, x11) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8026 {==}
8027
8028def aria_e8(s: A.LcAriaSt) -> {s == A.aria.e8(A.aria.e8(s)) : A.LcAriaSt}:
8029 match s:
8030 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8031 %word_xx(8n, x15, x8) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x8), x8), Word.xor(8n, Word.xor(8n, x1, x8), x8), x2, x3, Word.xor(8n, Word.xor(8n, x4, x8), x8), x5, x6, Word.xor(8n, Word.xor(8n, x7, x8), x8), x8, x9, Word.xor(8n, Word.xor(8n, x10, x8), x8), x11, x12, Word.xor(8n, Word.xor(8n, x13, x8), x8), x14, _} : A.LcAriaSt}
8032 %word_xx(8n, x13, x8) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x8), x8), Word.xor(8n, Word.xor(8n, x1, x8), x8), x2, x3, Word.xor(8n, Word.xor(8n, x4, x8), x8), x5, x6, Word.xor(8n, Word.xor(8n, x7, x8), x8), x8, x9, Word.xor(8n, Word.xor(8n, x10, x8), x8), x11, x12, _, x14, x15} : A.LcAriaSt}
8033 %word_xx(8n, x10, x8) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x8), x8), Word.xor(8n, Word.xor(8n, x1, x8), x8), x2, x3, Word.xor(8n, Word.xor(8n, x4, x8), x8), x5, x6, Word.xor(8n, Word.xor(8n, x7, x8), x8), x8, x9, _, x11, x12, x13, x14, x15} : A.LcAriaSt}
8034 %word_xx(8n, x7, x8) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x8), x8), Word.xor(8n, Word.xor(8n, x1, x8), x8), x2, x3, Word.xor(8n, Word.xor(8n, x4, x8), x8), x5, x6, _, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8035 %word_xx(8n, x4, x8) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x8), x8), Word.xor(8n, Word.xor(8n, x1, x8), x8), x2, x3, _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8036 %word_xx(8n, x1, x8) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x8), x8), _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8037 %word_xx(8n, x0, x8) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8038 {==}
8039
8040def aria_e9(s: A.LcAriaSt) -> {s == A.aria.e9(A.aria.e9(s)) : A.LcAriaSt}:
8041 match s:
8042 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8043 %word_xx(8n, x8, x10) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8044 {==}
8045
8046def aria_e10(s: A.LcAriaSt) -> {s == A.aria.e10(A.aria.e10(s)) : A.LcAriaSt}:
8047 match s:
8048 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8049 %word_xx(8n, x11, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x7), x7), Word.xor(8n, Word.xor(8n, x1, x7), x7), Word.xor(8n, Word.xor(8n, x2, x7), x7), Word.xor(8n, Word.xor(8n, x3, x7), x7), x4, x5, Word.xor(8n, Word.xor(8n, x6, x7), x7), x7, Word.xor(8n, Word.xor(8n, x8, x7), x7), Word.xor(8n, Word.xor(8n, x9, x7), x7), Word.xor(8n, Word.xor(8n, x10, x7), x7), _, x12, x13, x14, x15} : A.LcAriaSt}
8050 %word_xx(8n, x10, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x7), x7), Word.xor(8n, Word.xor(8n, x1, x7), x7), Word.xor(8n, Word.xor(8n, x2, x7), x7), Word.xor(8n, Word.xor(8n, x3, x7), x7), x4, x5, Word.xor(8n, Word.xor(8n, x6, x7), x7), x7, Word.xor(8n, Word.xor(8n, x8, x7), x7), Word.xor(8n, Word.xor(8n, x9, x7), x7), _, x11, x12, x13, x14, x15} : A.LcAriaSt}
8051 %word_xx(8n, x9, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x7), x7), Word.xor(8n, Word.xor(8n, x1, x7), x7), Word.xor(8n, Word.xor(8n, x2, x7), x7), Word.xor(8n, Word.xor(8n, x3, x7), x7), x4, x5, Word.xor(8n, Word.xor(8n, x6, x7), x7), x7, Word.xor(8n, Word.xor(8n, x8, x7), x7), _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8052 %word_xx(8n, x8, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x7), x7), Word.xor(8n, Word.xor(8n, x1, x7), x7), Word.xor(8n, Word.xor(8n, x2, x7), x7), Word.xor(8n, Word.xor(8n, x3, x7), x7), x4, x5, Word.xor(8n, Word.xor(8n, x6, x7), x7), x7, _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8053 %word_xx(8n, x6, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x7), x7), Word.xor(8n, Word.xor(8n, x1, x7), x7), Word.xor(8n, Word.xor(8n, x2, x7), x7), Word.xor(8n, Word.xor(8n, x3, x7), x7), x4, x5, _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8054 %word_xx(8n, x3, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x7), x7), Word.xor(8n, Word.xor(8n, x1, x7), x7), Word.xor(8n, Word.xor(8n, x2, x7), x7), _, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8055 %word_xx(8n, x2, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x7), x7), Word.xor(8n, Word.xor(8n, x1, x7), x7), _, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8056 %word_xx(8n, x1, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x7), x7), _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8057 %word_xx(8n, x0, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8058 {==}
8059
8060def aria_e11(s: A.LcAriaSt) -> {s == A.aria.e11(A.aria.e11(s)) : A.LcAriaSt}:
8061 match s:
8062 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8063 %word_xx(8n, x15, x6) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x6), x6), x2, Word.xor(8n, Word.xor(8n, x3, x6), x6), x4, x5, x6, Word.xor(8n, Word.xor(8n, x7, x6), x6), Word.xor(8n, Word.xor(8n, x8, x6), x6), x9, x10, Word.xor(8n, Word.xor(8n, x11, x6), x6), x12, x13, Word.xor(8n, Word.xor(8n, x14, x6), x6), _} : A.LcAriaSt}
8064 %word_xx(8n, x14, x6) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x6), x6), x2, Word.xor(8n, Word.xor(8n, x3, x6), x6), x4, x5, x6, Word.xor(8n, Word.xor(8n, x7, x6), x6), Word.xor(8n, Word.xor(8n, x8, x6), x6), x9, x10, Word.xor(8n, Word.xor(8n, x11, x6), x6), x12, x13, _, x15} : A.LcAriaSt}
8065 %word_xx(8n, x11, x6) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x6), x6), x2, Word.xor(8n, Word.xor(8n, x3, x6), x6), x4, x5, x6, Word.xor(8n, Word.xor(8n, x7, x6), x6), Word.xor(8n, Word.xor(8n, x8, x6), x6), x9, x10, _, x12, x13, x14, x15} : A.LcAriaSt}
8066 %word_xx(8n, x8, x6) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x6), x6), x2, Word.xor(8n, Word.xor(8n, x3, x6), x6), x4, x5, x6, Word.xor(8n, Word.xor(8n, x7, x6), x6), _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8067 %word_xx(8n, x7, x6) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x6), x6), x2, Word.xor(8n, Word.xor(8n, x3, x6), x6), x4, x5, x6, _, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8068 %word_xx(8n, x3, x6) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x6), x6), x2, _, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8069 %word_xx(8n, x1, x6) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8070 {==}
8071
8072def aria_e12(s: A.LcAriaSt) -> {s == A.aria.e12(A.aria.e12(s)) : A.LcAriaSt}:
8073 match s:
8074 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8075 %word_xx(8n, x6, x7) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, x4, x5, _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8076 {==}
8077
8078def aria_e13(s: A.LcAriaSt) -> {s == A.aria.e13(A.aria.e13(s)) : A.LcAriaSt}:
8079 match s:
8080 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8081 %word_xx(8n, x11, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x5), x5), Word.xor(8n, Word.xor(8n, x1, x5), x5), Word.xor(8n, Word.xor(8n, x2, x5), x5), Word.xor(8n, Word.xor(8n, x3, x5), x5), Word.xor(8n, Word.xor(8n, x4, x5), x5), x5, x6, x7, Word.xor(8n, Word.xor(8n, x8, x5), x5), Word.xor(8n, Word.xor(8n, x9, x5), x5), Word.xor(8n, Word.xor(8n, x10, x5), x5), _, x12, x13, x14, x15} : A.LcAriaSt}
8082 %word_xx(8n, x10, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x5), x5), Word.xor(8n, Word.xor(8n, x1, x5), x5), Word.xor(8n, Word.xor(8n, x2, x5), x5), Word.xor(8n, Word.xor(8n, x3, x5), x5), Word.xor(8n, Word.xor(8n, x4, x5), x5), x5, x6, x7, Word.xor(8n, Word.xor(8n, x8, x5), x5), Word.xor(8n, Word.xor(8n, x9, x5), x5), _, x11, x12, x13, x14, x15} : A.LcAriaSt}
8083 %word_xx(8n, x9, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x5), x5), Word.xor(8n, Word.xor(8n, x1, x5), x5), Word.xor(8n, Word.xor(8n, x2, x5), x5), Word.xor(8n, Word.xor(8n, x3, x5), x5), Word.xor(8n, Word.xor(8n, x4, x5), x5), x5, x6, x7, Word.xor(8n, Word.xor(8n, x8, x5), x5), _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8084 %word_xx(8n, x8, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x5), x5), Word.xor(8n, Word.xor(8n, x1, x5), x5), Word.xor(8n, Word.xor(8n, x2, x5), x5), Word.xor(8n, Word.xor(8n, x3, x5), x5), Word.xor(8n, Word.xor(8n, x4, x5), x5), x5, x6, x7, _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8085 %word_xx(8n, x4, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x5), x5), Word.xor(8n, Word.xor(8n, x1, x5), x5), Word.xor(8n, Word.xor(8n, x2, x5), x5), Word.xor(8n, Word.xor(8n, x3, x5), x5), _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8086 %word_xx(8n, x3, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x5), x5), Word.xor(8n, Word.xor(8n, x1, x5), x5), Word.xor(8n, Word.xor(8n, x2, x5), x5), _, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8087 %word_xx(8n, x2, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x5), x5), Word.xor(8n, Word.xor(8n, x1, x5), x5), _, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8088 %word_xx(8n, x1, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x5), x5), _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8089 %word_xx(8n, x0, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8090 {==}
8091
8092def aria_e14(s: A.LcAriaSt) -> {s == A.aria.e14(A.aria.e14(s)) : A.LcAriaSt}:
8093 match s:
8094 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8095 %word_xx(8n, x13, x4) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x4), x4), x2, Word.xor(8n, Word.xor(8n, x3, x4), x4), x4, Word.xor(8n, Word.xor(8n, x5, x4), x4), x6, x7, x8, Word.xor(8n, Word.xor(8n, x9, x4), x4), Word.xor(8n, Word.xor(8n, x10, x4), x4), x11, Word.xor(8n, Word.xor(8n, x12, x4), x4), _, x14, x15} : A.LcAriaSt}
8096 %word_xx(8n, x12, x4) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x4), x4), x2, Word.xor(8n, Word.xor(8n, x3, x4), x4), x4, Word.xor(8n, Word.xor(8n, x5, x4), x4), x6, x7, x8, Word.xor(8n, Word.xor(8n, x9, x4), x4), Word.xor(8n, Word.xor(8n, x10, x4), x4), x11, _, x13, x14, x15} : A.LcAriaSt}
8097 %word_xx(8n, x10, x4) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x4), x4), x2, Word.xor(8n, Word.xor(8n, x3, x4), x4), x4, Word.xor(8n, Word.xor(8n, x5, x4), x4), x6, x7, x8, Word.xor(8n, Word.xor(8n, x9, x4), x4), _, x11, x12, x13, x14, x15} : A.LcAriaSt}
8098 %word_xx(8n, x9, x4) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x4), x4), x2, Word.xor(8n, Word.xor(8n, x3, x4), x4), x4, Word.xor(8n, Word.xor(8n, x5, x4), x4), x6, x7, x8, _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8099 %word_xx(8n, x5, x4) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x4), x4), x2, Word.xor(8n, Word.xor(8n, x3, x4), x4), x4, _, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8100 %word_xx(8n, x3, x4) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x4), x4), x2, _, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8101 %word_xx(8n, x1, x4) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8102 {==}
8103
8104def aria_e15(s: A.LcAriaSt) -> {s == A.aria.e15(A.aria.e15(s)) : A.LcAriaSt}:
8105 match s:
8106 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8107 %word_xx(8n, x4, x5) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, x3, _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8108 {==}
8109
8110def aria_e16(s: A.LcAriaSt) -> {s == A.aria.e16(A.aria.e16(s)) : A.LcAriaSt}:
8111 match s:
8112 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8113 %word_xx(8n, x11, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x3), x3), x1, x2, x3, Word.xor(8n, Word.xor(8n, x4, x3), x3), Word.xor(8n, Word.xor(8n, x5, x3), x3), Word.xor(8n, Word.xor(8n, x6, x3), x3), Word.xor(8n, Word.xor(8n, x7, x3), x3), Word.xor(8n, Word.xor(8n, x8, x3), x3), Word.xor(8n, Word.xor(8n, x9, x3), x3), Word.xor(8n, Word.xor(8n, x10, x3), x3), _, x12, x13, x14, x15} : A.LcAriaSt}
8114 %word_xx(8n, x10, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x3), x3), x1, x2, x3, Word.xor(8n, Word.xor(8n, x4, x3), x3), Word.xor(8n, Word.xor(8n, x5, x3), x3), Word.xor(8n, Word.xor(8n, x6, x3), x3), Word.xor(8n, Word.xor(8n, x7, x3), x3), Word.xor(8n, Word.xor(8n, x8, x3), x3), Word.xor(8n, Word.xor(8n, x9, x3), x3), _, x11, x12, x13, x14, x15} : A.LcAriaSt}
8115 %word_xx(8n, x9, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x3), x3), x1, x2, x3, Word.xor(8n, Word.xor(8n, x4, x3), x3), Word.xor(8n, Word.xor(8n, x5, x3), x3), Word.xor(8n, Word.xor(8n, x6, x3), x3), Word.xor(8n, Word.xor(8n, x7, x3), x3), Word.xor(8n, Word.xor(8n, x8, x3), x3), _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8116 %word_xx(8n, x8, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x3), x3), x1, x2, x3, Word.xor(8n, Word.xor(8n, x4, x3), x3), Word.xor(8n, Word.xor(8n, x5, x3), x3), Word.xor(8n, Word.xor(8n, x6, x3), x3), Word.xor(8n, Word.xor(8n, x7, x3), x3), _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8117 %word_xx(8n, x7, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x3), x3), x1, x2, x3, Word.xor(8n, Word.xor(8n, x4, x3), x3), Word.xor(8n, Word.xor(8n, x5, x3), x3), Word.xor(8n, Word.xor(8n, x6, x3), x3), _, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8118 %word_xx(8n, x6, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x3), x3), x1, x2, x3, Word.xor(8n, Word.xor(8n, x4, x3), x3), Word.xor(8n, Word.xor(8n, x5, x3), x3), _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8119 %word_xx(8n, x5, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x3), x3), x1, x2, x3, Word.xor(8n, Word.xor(8n, x4, x3), x3), _, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8120 %word_xx(8n, x4, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{Word.xor(8n, Word.xor(8n, x0, x3), x3), x1, x2, x3, _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8121 %word_xx(8n, x0, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8122 {==}
8123
8124def aria_e17(s: A.LcAriaSt) -> {s == A.aria.e17(A.aria.e17(s)) : A.LcAriaSt}:
8125 match s:
8126 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8127 %word_xx(8n, x11, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x2), x2), x2, x3, Word.xor(8n, Word.xor(8n, x4, x2), x2), Word.xor(8n, Word.xor(8n, x5, x2), x2), Word.xor(8n, Word.xor(8n, x6, x2), x2), Word.xor(8n, Word.xor(8n, x7, x2), x2), Word.xor(8n, Word.xor(8n, x8, x2), x2), Word.xor(8n, Word.xor(8n, x9, x2), x2), Word.xor(8n, Word.xor(8n, x10, x2), x2), _, x12, x13, x14, x15} : A.LcAriaSt}
8128 %word_xx(8n, x10, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x2), x2), x2, x3, Word.xor(8n, Word.xor(8n, x4, x2), x2), Word.xor(8n, Word.xor(8n, x5, x2), x2), Word.xor(8n, Word.xor(8n, x6, x2), x2), Word.xor(8n, Word.xor(8n, x7, x2), x2), Word.xor(8n, Word.xor(8n, x8, x2), x2), Word.xor(8n, Word.xor(8n, x9, x2), x2), _, x11, x12, x13, x14, x15} : A.LcAriaSt}
8129 %word_xx(8n, x9, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x2), x2), x2, x3, Word.xor(8n, Word.xor(8n, x4, x2), x2), Word.xor(8n, Word.xor(8n, x5, x2), x2), Word.xor(8n, Word.xor(8n, x6, x2), x2), Word.xor(8n, Word.xor(8n, x7, x2), x2), Word.xor(8n, Word.xor(8n, x8, x2), x2), _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8130 %word_xx(8n, x8, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x2), x2), x2, x3, Word.xor(8n, Word.xor(8n, x4, x2), x2), Word.xor(8n, Word.xor(8n, x5, x2), x2), Word.xor(8n, Word.xor(8n, x6, x2), x2), Word.xor(8n, Word.xor(8n, x7, x2), x2), _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8131 %word_xx(8n, x7, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x2), x2), x2, x3, Word.xor(8n, Word.xor(8n, x4, x2), x2), Word.xor(8n, Word.xor(8n, x5, x2), x2), Word.xor(8n, Word.xor(8n, x6, x2), x2), _, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8132 %word_xx(8n, x6, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x2), x2), x2, x3, Word.xor(8n, Word.xor(8n, x4, x2), x2), Word.xor(8n, Word.xor(8n, x5, x2), x2), _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8133 %word_xx(8n, x5, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x2), x2), x2, x3, Word.xor(8n, Word.xor(8n, x4, x2), x2), _, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8134 %word_xx(8n, x4, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, Word.xor(8n, Word.xor(8n, x1, x2), x2), x2, x3, _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8135 %word_xx(8n, x1, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8136 {==}
8137
8138def aria_e18(s: A.LcAriaSt) -> {s == A.aria.e18(A.aria.e18(s)) : A.LcAriaSt}:
8139 match s:
8140 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8141 %word_xx(8n, x15, x1) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, Word.xor(8n, Word.xor(8n, x2, x1), x1), x3, x4, Word.xor(8n, Word.xor(8n, x5, x1), x1), x6, Word.xor(8n, Word.xor(8n, x7, x1), x1), Word.xor(8n, Word.xor(8n, x8, x1), x1), Word.xor(8n, Word.xor(8n, x9, x1), x1), x10, x11, Word.xor(8n, Word.xor(8n, x12, x1), x1), x13, x14, _} : A.LcAriaSt}
8142 %word_xx(8n, x12, x1) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, Word.xor(8n, Word.xor(8n, x2, x1), x1), x3, x4, Word.xor(8n, Word.xor(8n, x5, x1), x1), x6, Word.xor(8n, Word.xor(8n, x7, x1), x1), Word.xor(8n, Word.xor(8n, x8, x1), x1), Word.xor(8n, Word.xor(8n, x9, x1), x1), x10, x11, _, x13, x14, x15} : A.LcAriaSt}
8143 %word_xx(8n, x9, x1) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, Word.xor(8n, Word.xor(8n, x2, x1), x1), x3, x4, Word.xor(8n, Word.xor(8n, x5, x1), x1), x6, Word.xor(8n, Word.xor(8n, x7, x1), x1), Word.xor(8n, Word.xor(8n, x8, x1), x1), _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8144 %word_xx(8n, x8, x1) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, Word.xor(8n, Word.xor(8n, x2, x1), x1), x3, x4, Word.xor(8n, Word.xor(8n, x5, x1), x1), x6, Word.xor(8n, Word.xor(8n, x7, x1), x1), _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8145 %word_xx(8n, x7, x1) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, Word.xor(8n, Word.xor(8n, x2, x1), x1), x3, x4, Word.xor(8n, Word.xor(8n, x5, x1), x1), x6, _, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8146 %word_xx(8n, x5, x1) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, Word.xor(8n, Word.xor(8n, x2, x1), x1), x3, x4, _, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8147 %word_xx(8n, x2, x1) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, _, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8148 {==}
8149
8150def aria_e19(s: A.LcAriaSt) -> {s == A.aria.e19(A.aria.e19(s)) : A.LcAriaSt}:
8151 match s:
8152 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8153 %word_xx(8n, x1, x2) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, _, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8154 {==}
8155
8156def aria_e20(s: A.LcAriaSt) -> {s == A.aria.e20(A.aria.e20(s)) : A.LcAriaSt}:
8157 match s:
8158 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8159 %word_xx(8n, x14, x0) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, Word.xor(8n, Word.xor(8n, x3, x0), x0), Word.xor(8n, Word.xor(8n, x4, x0), x0), x5, Word.xor(8n, Word.xor(8n, x6, x0), x0), x7, Word.xor(8n, Word.xor(8n, x8, x0), x0), Word.xor(8n, Word.xor(8n, x9, x0), x0), x10, x11, x12, Word.xor(8n, Word.xor(8n, x13, x0), x0), _, x15} : A.LcAriaSt}
8160 %word_xx(8n, x13, x0) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, Word.xor(8n, Word.xor(8n, x3, x0), x0), Word.xor(8n, Word.xor(8n, x4, x0), x0), x5, Word.xor(8n, Word.xor(8n, x6, x0), x0), x7, Word.xor(8n, Word.xor(8n, x8, x0), x0), Word.xor(8n, Word.xor(8n, x9, x0), x0), x10, x11, x12, _, x14, x15} : A.LcAriaSt}
8161 %word_xx(8n, x9, x0) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, Word.xor(8n, Word.xor(8n, x3, x0), x0), Word.xor(8n, Word.xor(8n, x4, x0), x0), x5, Word.xor(8n, Word.xor(8n, x6, x0), x0), x7, Word.xor(8n, Word.xor(8n, x8, x0), x0), _, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8162 %word_xx(8n, x8, x0) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, Word.xor(8n, Word.xor(8n, x3, x0), x0), Word.xor(8n, Word.xor(8n, x4, x0), x0), x5, Word.xor(8n, Word.xor(8n, x6, x0), x0), x7, _, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8163 %word_xx(8n, x6, x0) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, Word.xor(8n, Word.xor(8n, x3, x0), x0), Word.xor(8n, Word.xor(8n, x4, x0), x0), x5, _, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8164 %word_xx(8n, x4, x0) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, Word.xor(8n, Word.xor(8n, x3, x0), x0), _, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8165 %word_xx(8n, x3, x0) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{x0, x1, x2, _, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8166 {==}
8167
8168def aria_e21(s: A.LcAriaSt) -> {s == A.aria.e21(A.aria.e21(s)) : A.LcAriaSt}:
8169 match s:
8170 case A.LcAriaSt{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15}:
8171 %word_xx(8n, x0, x3) : {A.LcAriaSt{x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} == A.LcAriaSt{_, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15} : A.LcAriaSt}
8172 {==}
8173
8174
8175def aria_d0(s: A.LcAriaSt) -> {s == A.aria.u0(A.aria.d0(s)) : A.LcAriaSt}:
8176 {==}
8177
8178def aria_dd0(s: A.LcAriaSt) -> {s == A.aria.d0(A.aria.u0(s)) : A.LcAriaSt}:
8179 {==}
8180
8181def aria_d1(+s: A.LcAriaSt) -> {s == A.aria.u1(A.aria.d1(s)) : A.LcAriaSt}:
8182 %aria_e0(A.aria.d0(s)) : {s == A.aria.u0(_) : A.LcAriaSt}
8183 aria_d0(s)
8184
8185def aria_dd1(+s: A.LcAriaSt) -> {s == A.aria.d1(A.aria.u1(s)) : A.LcAriaSt}:
8186 %aria_dd0(A.aria.e0(s)) : {s == A.aria.e0(_) : A.LcAriaSt}
8187 aria_e0(s)
8188
8189def aria_d2(+s: A.LcAriaSt) -> {s == A.aria.u2(A.aria.d2(s)) : A.LcAriaSt}:
8190 %aria_e1(A.aria.d1(s)) : {s == A.aria.u1(_) : A.LcAriaSt}
8191 aria_d1(s)
8192
8193def aria_dd2(+s: A.LcAriaSt) -> {s == A.aria.d2(A.aria.u2(s)) : A.LcAriaSt}:
8194 %aria_dd1(A.aria.e1(s)) : {s == A.aria.e1(_) : A.LcAriaSt}
8195 aria_e1(s)
8196
8197def aria_d3(+s: A.LcAriaSt) -> {s == A.aria.u3(A.aria.d3(s)) : A.LcAriaSt}:
8198 %aria_e2(A.aria.d2(s)) : {s == A.aria.u2(_) : A.LcAriaSt}
8199 aria_d2(s)
8200
8201def aria_dd3(+s: A.LcAriaSt) -> {s == A.aria.d3(A.aria.u3(s)) : A.LcAriaSt}:
8202 %aria_dd2(A.aria.e2(s)) : {s == A.aria.e2(_) : A.LcAriaSt}
8203 aria_e2(s)
8204
8205def aria_d4(+s: A.LcAriaSt) -> {s == A.aria.u4(A.aria.d4(s)) : A.LcAriaSt}:
8206 %aria_e3(A.aria.d3(s)) : {s == A.aria.u3(_) : A.LcAriaSt}
8207 aria_d3(s)
8208
8209def aria_dd4(+s: A.LcAriaSt) -> {s == A.aria.d4(A.aria.u4(s)) : A.LcAriaSt}:
8210 %aria_dd3(A.aria.e3(s)) : {s == A.aria.e3(_) : A.LcAriaSt}
8211 aria_e3(s)
8212
8213def aria_d5(+s: A.LcAriaSt) -> {s == A.aria.u5(A.aria.d5(s)) : A.LcAriaSt}:
8214 %aria_e4(A.aria.d4(s)) : {s == A.aria.u4(_) : A.LcAriaSt}
8215 aria_d4(s)
8216
8217def aria_dd5(+s: A.LcAriaSt) -> {s == A.aria.d5(A.aria.u5(s)) : A.LcAriaSt}:
8218 %aria_dd4(A.aria.e4(s)) : {s == A.aria.e4(_) : A.LcAriaSt}
8219 aria_e4(s)
8220
8221def aria_d6(+s: A.LcAriaSt) -> {s == A.aria.u6(A.aria.d6(s)) : A.LcAriaSt}:
8222 %aria_e5(A.aria.d5(s)) : {s == A.aria.u5(_) : A.LcAriaSt}
8223 aria_d5(s)
8224
8225def aria_dd6(+s: A.LcAriaSt) -> {s == A.aria.d6(A.aria.u6(s)) : A.LcAriaSt}:
8226 %aria_dd5(A.aria.e5(s)) : {s == A.aria.e5(_) : A.LcAriaSt}
8227 aria_e5(s)
8228
8229def aria_d7(+s: A.LcAriaSt) -> {s == A.aria.u7(A.aria.d7(s)) : A.LcAriaSt}:
8230 %aria_e6(A.aria.d6(s)) : {s == A.aria.u6(_) : A.LcAriaSt}
8231 aria_d6(s)
8232
8233def aria_dd7(+s: A.LcAriaSt) -> {s == A.aria.d7(A.aria.u7(s)) : A.LcAriaSt}:
8234 %aria_dd6(A.aria.e6(s)) : {s == A.aria.e6(_) : A.LcAriaSt}
8235 aria_e6(s)
8236
8237def aria_d8(+s: A.LcAriaSt) -> {s == A.aria.u8(A.aria.d8(s)) : A.LcAriaSt}:
8238 %aria_e7(A.aria.d7(s)) : {s == A.aria.u7(_) : A.LcAriaSt}
8239 aria_d7(s)
8240
8241def aria_dd8(+s: A.LcAriaSt) -> {s == A.aria.d8(A.aria.u8(s)) : A.LcAriaSt}:
8242 %aria_dd7(A.aria.e7(s)) : {s == A.aria.e7(_) : A.LcAriaSt}
8243 aria_e7(s)
8244
8245def aria_d9(+s: A.LcAriaSt) -> {s == A.aria.u9(A.aria.d9(s)) : A.LcAriaSt}:
8246 %aria_e8(A.aria.d8(s)) : {s == A.aria.u8(_) : A.LcAriaSt}
8247 aria_d8(s)
8248
8249def aria_dd9(+s: A.LcAriaSt) -> {s == A.aria.d9(A.aria.u9(s)) : A.LcAriaSt}:
8250 %aria_dd8(A.aria.e8(s)) : {s == A.aria.e8(_) : A.LcAriaSt}
8251 aria_e8(s)
8252
8253def aria_d10(+s: A.LcAriaSt) -> {s == A.aria.u10(A.aria.d10(s)) : A.LcAriaSt}:
8254 %aria_e9(A.aria.d9(s)) : {s == A.aria.u9(_) : A.LcAriaSt}
8255 aria_d9(s)
8256
8257def aria_dd10(+s: A.LcAriaSt) -> {s == A.aria.d10(A.aria.u10(s)) : A.LcAriaSt}:
8258 %aria_dd9(A.aria.e9(s)) : {s == A.aria.e9(_) : A.LcAriaSt}
8259 aria_e9(s)
8260
8261def aria_d11(+s: A.LcAriaSt) -> {s == A.aria.u11(A.aria.d11(s)) : A.LcAriaSt}:
8262 %aria_e10(A.aria.d10(s)) : {s == A.aria.u10(_) : A.LcAriaSt}
8263 aria_d10(s)
8264
8265def aria_dd11(+s: A.LcAriaSt) -> {s == A.aria.d11(A.aria.u11(s)) : A.LcAriaSt}:
8266 %aria_dd10(A.aria.e10(s)) : {s == A.aria.e10(_) : A.LcAriaSt}
8267 aria_e10(s)
8268
8269def aria_d12(+s: A.LcAriaSt) -> {s == A.aria.u12(A.aria.d12(s)) : A.LcAriaSt}:
8270 %aria_e11(A.aria.d11(s)) : {s == A.aria.u11(_) : A.LcAriaSt}
8271 aria_d11(s)
8272
8273def aria_dd12(+s: A.LcAriaSt) -> {s == A.aria.d12(A.aria.u12(s)) : A.LcAriaSt}:
8274 %aria_dd11(A.aria.e11(s)) : {s == A.aria.e11(_) : A.LcAriaSt}
8275 aria_e11(s)
8276
8277def aria_d13(+s: A.LcAriaSt) -> {s == A.aria.u13(A.aria.d13(s)) : A.LcAriaSt}:
8278 %aria_e12(A.aria.d12(s)) : {s == A.aria.u12(_) : A.LcAriaSt}
8279 aria_d12(s)
8280
8281def aria_dd13(+s: A.LcAriaSt) -> {s == A.aria.d13(A.aria.u13(s)) : A.LcAriaSt}:
8282 %aria_dd12(A.aria.e12(s)) : {s == A.aria.e12(_) : A.LcAriaSt}
8283 aria_e12(s)
8284
8285def aria_d14(+s: A.LcAriaSt) -> {s == A.aria.u14(A.aria.d14(s)) : A.LcAriaSt}:
8286 %aria_e13(A.aria.d13(s)) : {s == A.aria.u13(_) : A.LcAriaSt}
8287 aria_d13(s)
8288
8289def aria_dd14(+s: A.LcAriaSt) -> {s == A.aria.d14(A.aria.u14(s)) : A.LcAriaSt}:
8290 %aria_dd13(A.aria.e13(s)) : {s == A.aria.e13(_) : A.LcAriaSt}
8291 aria_e13(s)
8292
8293def aria_d15(+s: A.LcAriaSt) -> {s == A.aria.u15(A.aria.d15(s)) : A.LcAriaSt}:
8294 %aria_e14(A.aria.d14(s)) : {s == A.aria.u14(_) : A.LcAriaSt}
8295 aria_d14(s)
8296
8297def aria_dd15(+s: A.LcAriaSt) -> {s == A.aria.d15(A.aria.u15(s)) : A.LcAriaSt}:
8298 %aria_dd14(A.aria.e14(s)) : {s == A.aria.e14(_) : A.LcAriaSt}
8299 aria_e14(s)
8300
8301def aria_d16(+s: A.LcAriaSt) -> {s == A.aria.u16(A.aria.d16(s)) : A.LcAriaSt}:
8302 %aria_e15(A.aria.d15(s)) : {s == A.aria.u15(_) : A.LcAriaSt}
8303 aria_d15(s)
8304
8305def aria_dd16(+s: A.LcAriaSt) -> {s == A.aria.d16(A.aria.u16(s)) : A.LcAriaSt}:
8306 %aria_dd15(A.aria.e15(s)) : {s == A.aria.e15(_) : A.LcAriaSt}
8307 aria_e15(s)
8308
8309def aria_d17(+s: A.LcAriaSt) -> {s == A.aria.u17(A.aria.d17(s)) : A.LcAriaSt}:
8310 %aria_e16(A.aria.d16(s)) : {s == A.aria.u16(_) : A.LcAriaSt}
8311 aria_d16(s)
8312
8313def aria_dd17(+s: A.LcAriaSt) -> {s == A.aria.d17(A.aria.u17(s)) : A.LcAriaSt}:
8314 %aria_dd16(A.aria.e16(s)) : {s == A.aria.e16(_) : A.LcAriaSt}
8315 aria_e16(s)
8316
8317def aria_d18(+s: A.LcAriaSt) -> {s == A.aria.u18(A.aria.d18(s)) : A.LcAriaSt}:
8318 %aria_e17(A.aria.d17(s)) : {s == A.aria.u17(_) : A.LcAriaSt}
8319 aria_d17(s)
8320
8321def aria_dd18(+s: A.LcAriaSt) -> {s == A.aria.d18(A.aria.u18(s)) : A.LcAriaSt}:
8322 %aria_dd17(A.aria.e17(s)) : {s == A.aria.e17(_) : A.LcAriaSt}
8323 aria_e17(s)
8324
8325def aria_d19(+s: A.LcAriaSt) -> {s == A.aria.u19(A.aria.d19(s)) : A.LcAriaSt}:
8326 %aria_e18(A.aria.d18(s)) : {s == A.aria.u18(_) : A.LcAriaSt}
8327 aria_d18(s)
8328
8329def aria_dd19(+s: A.LcAriaSt) -> {s == A.aria.d19(A.aria.u19(s)) : A.LcAriaSt}:
8330 %aria_dd18(A.aria.e18(s)) : {s == A.aria.e18(_) : A.LcAriaSt}
8331 aria_e18(s)
8332
8333def aria_d20(+s: A.LcAriaSt) -> {s == A.aria.u20(A.aria.d20(s)) : A.LcAriaSt}:
8334 %aria_e19(A.aria.d19(s)) : {s == A.aria.u19(_) : A.LcAriaSt}
8335 aria_d19(s)
8336
8337def aria_dd20(+s: A.LcAriaSt) -> {s == A.aria.d20(A.aria.u20(s)) : A.LcAriaSt}:
8338 %aria_dd19(A.aria.e19(s)) : {s == A.aria.e19(_) : A.LcAriaSt}
8339 aria_e19(s)
8340
8341def aria_d21(+s: A.LcAriaSt) -> {s == A.aria.u21(A.aria.d21(s)) : A.LcAriaSt}:
8342 %aria_e20(A.aria.d20(s)) : {s == A.aria.u20(_) : A.LcAriaSt}
8343 aria_d20(s)
8344
8345def aria_dd21(+s: A.LcAriaSt) -> {s == A.aria.d21(A.aria.u21(s)) : A.LcAriaSt}:
8346 %aria_dd20(A.aria.e20(s)) : {s == A.aria.e20(_) : A.LcAriaSt}
8347 aria_e20(s)
8348
8349def aria_d22(+s: A.LcAriaSt) -> {s == A.aria.u22(A.aria.d22(s)) : A.LcAriaSt}:
8350 %aria_e21(A.aria.d21(s)) : {s == A.aria.u21(_) : A.LcAriaSt}
8351 aria_d21(s)
8352
8353def aria_dd22(+s: A.LcAriaSt) -> {s == A.aria.d22(A.aria.u22(s)) : A.LcAriaSt}:
8354 %aria_dd21(A.aria.e21(s)) : {s == A.aria.e21(_) : A.LcAriaSt}
8355 aria_e21(s)
8356
8357def aria_diff(s: A.LcAriaSt) -> {s == A.aria.undiffuse(A.aria.diffuse(s)) : A.LcAriaSt}:
8358 aria_d22(s)
8359
8360def aria_diffd(s: A.LcAriaSt) -> {s == A.aria.diffuse(A.aria.undiffuse(s)) : A.LcAriaSt}:
8361 aria_dd22(s)
8362
8363
8364def aria_blk(b: M.CmBlock) -> {b == A.aria.to_block(A.aria.of_block(b)) : M.CmBlock}:
8365 match b:
8366 case M.CmBlock{U32{WCon{a0_0, WCon{a0_1, WCon{a0_2, WCon{a0_3, WCon{a0_4, WCon{a0_5, WCon{a0_6, WCon{a0_7, WCon{a0_8, WCon{a0_9, WCon{a0_10, WCon{a0_11, WCon{a0_12, WCon{a0_13, WCon{a0_14, WCon{a0_15, WCon{a0_16, WCon{a0_17, WCon{a0_18, WCon{a0_19, WCon{a0_20, WCon{a0_21, WCon{a0_22, WCon{a0_23, WCon{a0_24, WCon{a0_25, WCon{a0_26, WCon{a0_27, WCon{a0_28, WCon{a0_29, WCon{a0_30, WCon{a0_31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, U32{WCon{a1_0, WCon{a1_1, WCon{a1_2, WCon{a1_3, WCon{a1_4, WCon{a1_5, WCon{a1_6, WCon{a1_7, WCon{a1_8, WCon{a1_9, WCon{a1_10, WCon{a1_11, WCon{a1_12, WCon{a1_13, WCon{a1_14, WCon{a1_15, WCon{a1_16, WCon{a1_17, WCon{a1_18, WCon{a1_19, WCon{a1_20, WCon{a1_21, WCon{a1_22, WCon{a1_23, WCon{a1_24, WCon{a1_25, WCon{a1_26, WCon{a1_27, WCon{a1_28, WCon{a1_29, WCon{a1_30, WCon{a1_31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, U32{WCon{a2_0, WCon{a2_1, WCon{a2_2, WCon{a2_3, WCon{a2_4, WCon{a2_5, WCon{a2_6, WCon{a2_7, WCon{a2_8, WCon{a2_9, WCon{a2_10, WCon{a2_11, WCon{a2_12, WCon{a2_13, WCon{a2_14, WCon{a2_15, WCon{a2_16, WCon{a2_17, WCon{a2_18, WCon{a2_19, WCon{a2_20, WCon{a2_21, WCon{a2_22, WCon{a2_23, WCon{a2_24, WCon{a2_25, WCon{a2_26, WCon{a2_27, WCon{a2_28, WCon{a2_29, WCon{a2_30, WCon{a2_31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, U32{WCon{a3_0, WCon{a3_1, WCon{a3_2, WCon{a3_3, WCon{a3_4, WCon{a3_5, WCon{a3_6, WCon{a3_7, WCon{a3_8, WCon{a3_9, WCon{a3_10, WCon{a3_11, WCon{a3_12, WCon{a3_13, WCon{a3_14, WCon{a3_15, WCon{a3_16, WCon{a3_17, WCon{a3_18, WCon{a3_19, WCon{a3_20, WCon{a3_21, WCon{a3_22, WCon{a3_23, WCon{a3_24, WCon{a3_25, WCon{a3_26, WCon{a3_27, WCon{a3_28, WCon{a3_29, WCon{a3_30, WCon{a3_31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}:
8367 {==}
8368
8369def aria_st(s: A.LcAriaSt) -> {s == A.aria.of_block(A.aria.to_block(s)) : A.LcAriaSt}:
8370 match s:
8371 case A.LcAriaSt{WCon{b0_0, WCon{b0_1, WCon{b0_2, WCon{b0_3, WCon{b0_4, WCon{b0_5, WCon{b0_6, WCon{b0_7, WNil{}}}}}}}}}, WCon{b1_0, WCon{b1_1, WCon{b1_2, WCon{b1_3, WCon{b1_4, WCon{b1_5, WCon{b1_6, WCon{b1_7, WNil{}}}}}}}}}, WCon{b2_0, WCon{b2_1, WCon{b2_2, WCon{b2_3, WCon{b2_4, WCon{b2_5, WCon{b2_6, WCon{b2_7, WNil{}}}}}}}}}, WCon{b3_0, WCon{b3_1, WCon{b3_2, WCon{b3_3, WCon{b3_4, WCon{b3_5, WCon{b3_6, WCon{b3_7, WNil{}}}}}}}}}, WCon{b4_0, WCon{b4_1, WCon{b4_2, WCon{b4_3, WCon{b4_4, WCon{b4_5, WCon{b4_6, WCon{b4_7, WNil{}}}}}}}}}, WCon{b5_0, WCon{b5_1, WCon{b5_2, WCon{b5_3, WCon{b5_4, WCon{b5_5, WCon{b5_6, WCon{b5_7, WNil{}}}}}}}}}, WCon{b6_0, WCon{b6_1, WCon{b6_2, WCon{b6_3, WCon{b6_4, WCon{b6_5, WCon{b6_6, WCon{b6_7, WNil{}}}}}}}}}, WCon{b7_0, WCon{b7_1, WCon{b7_2, WCon{b7_3, WCon{b7_4, WCon{b7_5, WCon{b7_6, WCon{b7_7, WNil{}}}}}}}}}, WCon{b8_0, WCon{b8_1, WCon{b8_2, WCon{b8_3, WCon{b8_4, WCon{b8_5, WCon{b8_6, WCon{b8_7, WNil{}}}}}}}}}, WCon{b9_0, WCon{b9_1, WCon{b9_2, WCon{b9_3, WCon{b9_4, WCon{b9_5, WCon{b9_6, WCon{b9_7, WNil{}}}}}}}}}, WCon{b10_0, WCon{b10_1, WCon{b10_2, WCon{b10_3, WCon{b10_4, WCon{b10_5, WCon{b10_6, WCon{b10_7, WNil{}}}}}}}}}, WCon{b11_0, WCon{b11_1, WCon{b11_2, WCon{b11_3, WCon{b11_4, WCon{b11_5, WCon{b11_6, WCon{b11_7, WNil{}}}}}}}}}, WCon{b12_0, WCon{b12_1, WCon{b12_2, WCon{b12_3, WCon{b12_4, WCon{b12_5, WCon{b12_6, WCon{b12_7, WNil{}}}}}}}}}, WCon{b13_0, WCon{b13_1, WCon{b13_2, WCon{b13_3, WCon{b13_4, WCon{b13_5, WCon{b13_6, WCon{b13_7, WNil{}}}}}}}}}, WCon{b14_0, WCon{b14_1, WCon{b14_2, WCon{b14_3, WCon{b14_4, WCon{b14_5, WCon{b14_6, WCon{b14_7, WNil{}}}}}}}}}, WCon{b15_0, WCon{b15_1, WCon{b15_2, WCon{b15_3, WCon{b15_4, WCon{b15_5, WCon{b15_6, WCon{b15_7, WNil{}}}}}}}}}}:
8372 {==}
8373
8374
8375def aria_unop_op(o: A.LcAriaOp, +s: A.LcAriaSt) -> {s == A.aria.unop(o, A.aria.op(o, s)) : A.LcAriaSt}:
8376 match o:
8377 case A.LcAriaRk{+k}:
8378 aria_xor2(s, k)
8379 case A.LcAriaSl1{}:
8380 aria_sl21(s)
8381 case A.LcAriaSl2{}:
8382 aria_sl12(s)
8383 case A.LcAriaDiff{}:
8384 aria_diff(s)
8385
8386def aria_op_unop(o: A.LcAriaOp, +s: A.LcAriaSt) -> {s == A.aria.op(o, A.aria.unop(o, s)) : A.LcAriaSt}:
8387 match o:
8388 case A.LcAriaRk{+k}:
8389 aria_xor2(s, k)
8390 case A.LcAriaSl1{}:
8391 aria_sl12(s)
8392 case A.LcAriaSl2{}:
8393 aria_sl21(s)
8394 case A.LcAriaDiff{}:
8395 aria_diffd(s)
8396
8397def aria_unrun_run(os: List<&2, A.LcAriaOp>, +s: A.LcAriaSt) -> {s == A.aria.unrun(os, A.aria.run(os, s)) : A.LcAriaSt}:
8398 match os:
8399 case Nil{}:
8400 {==}
8401 case Con{+o, +t}:
8402 %aria_unrun_run(t, A.aria.op(o, s)) : {s == A.aria.unop(o, _) : A.LcAriaSt}
8403 aria_unop_op(o, s)
8404
8405def aria_run_unrun(os: List<&2, A.LcAriaOp>, +s: A.LcAriaSt) -> {s == A.aria.run(os, A.aria.unrun(os, s)) : A.LcAriaSt}:
8406 match os:
8407 case Nil{}:
8408 {==}
8409 case Con{+o, +t}:
8410 %aria_op_unop(o, A.aria.unrun(t, s)) : {s == A.aria.run(t, _) : A.LcAriaSt}
8411 aria_run_unrun(t, s)
8412
8413def Laws.aria_round_trip(k, b):
8414 match k:
8415 case A.LcAriaKey{+ops}:
8416 %aria_st(A.aria.run(ops, A.aria.of_block(b))) : {A.aria.to_block(A.aria.unrun(ops, _)) == b : M.CmBlock}
8417 %aria_unrun_run(ops, A.aria.of_block(b)) : {A.aria.to_block(_) == b : M.CmBlock}
8418 Equal.sym(M.CmBlock, b, A.aria.to_block(A.aria.of_block(b)), aria_blk(b))
8419
8420def Laws.aria_round_trip_dual(k, b):
8421 match k:
8422 case A.LcAriaKey{+ops}:
8423 %aria_st(A.aria.unrun(ops, A.aria.of_block(b))) : {A.aria.to_block(A.aria.run(ops, _)) == b : M.CmBlock}
8424 %aria_run_unrun(ops, A.aria.of_block(b)) : {A.aria.to_block(_) == b : M.CmBlock}
8425 Equal.sym(M.CmBlock, b, A.aria.to_block(A.aria.of_block(b)), aria_blk(b))
8426
8427
8428
8429
8430
8431
8432def rc4_go_ref(xs: List<&2, U32>, +st: R.LcRc4State, +acc: List<&2, U32>) -> {R.rc4.go(xs, st, acc) == R.LcRc4Run{R.rc4.after(xs, st), R.rc4.rev_onto(acc, R.rc4.xs(xs, st))} : R.LcRc4Run}:
8433 match xs:
8434 case Nil{}:
8435 {==}
8436 case Con{x, t}:
8437 rc4_go_ref(t, R.rc4.step.st(R.rc4.next(st)), Con{B.byte(U32.xor(x, R.rc4.step.k(R.rc4.next(st)))), acc})
8438
8439def rc4_update_ref(+st: R.LcRc4State, +m: B.Octets) -> {R.LcRc4Out{R.rc4.after(B.Octets.to_list(m), st), B.Octets.of_list(R.rc4.xs(B.Octets.to_list(m), st))} == R.LcRc4.update(st, m) : R.LcRc4Out}:
8440 %Equal.sym(R.LcRc4Run, R.rc4.go(B.Octets.to_list(m), st, Nil{}), R.LcRc4Run{R.rc4.after(B.Octets.to_list(m), st), R.rc4.rev_onto(Nil{}, R.rc4.xs(B.Octets.to_list(m), st))}, rc4_go_ref(B.Octets.to_list(m), st, Nil{})) : {R.LcRc4Out{R.rc4.after(B.Octets.to_list(m), st), B.Octets.of_list(R.rc4.xs(B.Octets.to_list(m), st))} == R.rc4.out(_) : R.LcRc4Out}
8441 {==}
8442
8443def byte_xx(+h: U32, +k: U32) -> {B.byte(h) == B.byte(U32.xor(B.byte(U32.xor(h, k)), k)) : U32}:
8444 %byte_xor_byte(U32.xor(h, k), k) : {B.byte(h) == _ : U32}
8445 %u32_xx(h, k) : {B.byte(h) == B.byte(_) : U32}
8446 {==}
8447
8448def rc4_mask_xs(ys: List<&2, U32>, +st: R.LcRc4State) -> {R.rc4.xs(ys, st) == R.rc4.xs(B.mask(ys), st) : List<&2, U32>}:
8449 match ys:
8450 case Nil{}:
8451 {==}
8452 case Con{+h, +t}:
8453 %byte_xor_byte(h, R.rc4.step.k(R.rc4.next(st))) : {Con{B.byte(U32.xor(h, R.rc4.step.k(R.rc4.next(st)))), R.rc4.xs(t, R.rc4.step.st(R.rc4.next(st)))} == Con{_, R.rc4.xs(B.mask(t), R.rc4.step.st(R.rc4.next(st)))} : List<&2, U32>}
8454 %rc4_mask_xs(t, R.rc4.step.st(R.rc4.next(st))) : {Con{B.byte(U32.xor(h, R.rc4.step.k(R.rc4.next(st)))), R.rc4.xs(t, R.rc4.step.st(R.rc4.next(st)))} == Con{B.byte(U32.xor(h, R.rc4.step.k(R.rc4.next(st)))), _} : List<&2, U32>}
8455 {==}
8456
8457def rc4_xs_xs(ys: List<&2, U32>, +st: R.LcRc4State) -> {B.mask(ys) == R.rc4.xs(R.rc4.xs(ys, st), st) : List<&2, U32>}:
8458 match ys:
8459 case Nil{}:
8460 {==}
8461 case Con{+h, +t}:
8462 %byte_xx(h, R.rc4.step.k(R.rc4.next(st))) : {Con{B.byte(h), B.mask(t)} == Con{_, R.rc4.xs(R.rc4.xs(t, R.rc4.step.st(R.rc4.next(st))), R.rc4.step.st(R.rc4.next(st)))} : List<&2, U32>}
8463 %rc4_xs_xs(t, R.rc4.step.st(R.rc4.next(st))) : {Con{B.byte(h), B.mask(t)} == Con{B.byte(h), _} : List<&2, U32>}
8464 {==}
8465
8466def Laws.rc4_involution(st, m):
8467 %rc4_update_ref(st, m) : {R.LcRc4.out_data(R.LcRc4.update(st, R.LcRc4.out_data(_))) == m : B.Octets}
8468 %rc4_update_ref(st, B.Octets.of_list(R.rc4.xs(B.Octets.to_list(m), st))) : {R.LcRc4.out_data(_) == m : B.Octets}
8469 %Equal.sym(List<&2, U32>, B.Octets.to_list(B.Octets.of_list(R.rc4.xs(B.Octets.to_list(m), st))), B.mask(R.rc4.xs(B.Octets.to_list(m), st)), BL.octets_to_of(R.rc4.xs(B.Octets.to_list(m), st))) : {B.Octets.of_list(R.rc4.xs(_, st)) == m : B.Octets}
8470 %rc4_mask_xs(R.rc4.xs(B.Octets.to_list(m), st), st) : {B.Octets.of_list(_) == m : B.Octets}
8471 %rc4_xs_xs(B.Octets.to_list(m), st) : {B.Octets.of_list(_) == m : B.Octets}
8472 %BL.octets_to_of(B.Octets.to_list(m)) : {B.Octets.of_list(_) == m : B.Octets}
8473 %Equal.sym(B.Octets, B.Octets.of_list(B.Octets.to_list(B.Octets.of_list(B.Octets.to_list(m)))), B.Octets.of_list(B.Octets.to_list(m)), BL.octets_of_list_idempotent(B.Octets.to_list(m))) : {_ == m : B.Octets}
8474 BL.octets_of_to(m)
8475
8476def rc4_after_append(xs: List<&2, U32>, +ys: List<&2, U32>, +st: R.LcRc4State) -> {R.rc4.after(B.append(xs, ys), st) == R.rc4.after(ys, R.rc4.after(xs, st)) : R.LcRc4State}:
8477 match xs:
8478 case Nil{}:
8479 {==}
8480 case Con{x, t}:
8481 rc4_after_append(t, ys, R.rc4.step.st(R.rc4.next(st)))
8482
8483def rc4_xs_append(xs: List<&2, U32>, +ys: List<&2, U32>, +st: R.LcRc4State) -> {R.rc4.xs(B.append(xs, ys), st) == B.append(R.rc4.xs(xs, st), R.rc4.xs(ys, R.rc4.after(xs, st))) : List<&2, U32>}:
8484 match xs:
8485 case Nil{}:
8486 {==}
8487 case Con{+x, +t}:
8488 %rc4_xs_append(t, ys, R.rc4.step.st(R.rc4.next(st))) : {Con{B.byte(U32.xor(x, R.rc4.step.k(R.rc4.next(st)))), R.rc4.xs(B.append(t, ys), R.rc4.step.st(R.rc4.next(st)))} == Con{B.byte(U32.xor(x, R.rc4.step.k(R.rc4.next(st)))), _} : List<&2, U32>}
8489 {==}
8490
8491def mask_append(p: List<&2, U32>, +q: List<&2, U32>) -> {B.mask(B.append(p, q)) == B.append(B.mask(p), B.mask(q)) : List<&2, U32>}:
8492 match p:
8493 case Nil{}:
8494 {==}
8495 case Con{+h, +t}:
8496 %mask_append(t, q) : {Con{B.byte(h), B.mask(B.append(t, q))} == Con{B.byte(h), _} : List<&2, U32>}
8497 {==}
8498
8499
8500def octets_of_append(+p: List<&2, U32>, +q: List<&2, U32>) -> {B.Octets.of_list(B.append(p, q)) == B.Octets.append(B.Octets.of_list(p), B.Octets.of_list(q)) : B.Octets}:
8501 %BL.octets_of_to(B.Octets.append(B.Octets.of_list(p), B.Octets.of_list(q))) : {B.Octets.of_list(B.append(p, q)) == _ : B.Octets}
8502 %Equal.sym(List<&2, U32>, B.Octets.to_list(B.Octets.append(B.Octets.of_list(p), B.Octets.of_list(q))), B.append(B.Octets.to_list(B.Octets.of_list(p)), B.Octets.to_list(B.Octets.of_list(q))), BL.octets_append_list(B.Octets.of_list(p), B.Octets.of_list(q))) : {B.Octets.of_list(B.append(p, q)) == B.Octets.of_list(_) : B.Octets}
8503 %Equal.sym(List<&2, U32>, B.Octets.to_list(B.Octets.of_list(p)), B.mask(p), BL.octets_to_of(p)) : {B.Octets.of_list(B.append(p, q)) == B.Octets.of_list(B.append(_, B.Octets.to_list(B.Octets.of_list(q)))) : B.Octets}
8504 %Equal.sym(List<&2, U32>, B.Octets.to_list(B.Octets.of_list(q)), B.mask(q), BL.octets_to_of(q)) : {B.Octets.of_list(B.append(p, q)) == B.Octets.of_list(B.append(B.mask(p), _)) : B.Octets}
8505 %mask_append(p, q) : {B.Octets.of_list(B.append(p, q)) == B.Octets.of_list(_) : B.Octets}
8506 %BL.octets_to_of(B.append(p, q)) : {B.Octets.of_list(B.append(p, q)) == B.Octets.of_list(_) : B.Octets}
8507 %Equal.sym(B.Octets, B.Octets.of_list(B.Octets.to_list(B.Octets.of_list(B.append(p, q)))), B.Octets.of_list(B.append(p, q)), BL.octets_of_list_idempotent(B.append(p, q))) : {B.Octets.of_list(B.append(p, q)) == _ : B.Octets}
8508 {==}
8509
8510def Laws.rc4_streaming_state(st, a, b):
8511 %rc4_update_ref(st, a) : {R.LcRc4.out_state(R.LcRc4.update(st, B.Octets.append(a, b))) == R.LcRc4.out_state(R.LcRc4.update(R.LcRc4.out_state(_), b)) : R.LcRc4State}
8512 %rc4_update_ref(R.rc4.after(B.Octets.to_list(a), st), b) : {R.LcRc4.out_state(R.LcRc4.update(st, B.Octets.append(a, b))) == R.LcRc4.out_state(_) : R.LcRc4State}
8513 %rc4_update_ref(st, B.Octets.append(a, b)) : {R.LcRc4.out_state(_) == R.rc4.after(B.Octets.to_list(b), R.rc4.after(B.Octets.to_list(a), st)) : R.LcRc4State}
8514 %Equal.sym(List<&2, U32>, B.Octets.to_list(B.Octets.append(a, b)), B.append(B.Octets.to_list(a), B.Octets.to_list(b)), BL.octets_append_list(a, b)) : {R.rc4.after(_, st) == R.rc4.after(B.Octets.to_list(b), R.rc4.after(B.Octets.to_list(a), st)) : R.LcRc4State}
8515 rc4_after_append(B.Octets.to_list(a), B.Octets.to_list(b), st)
8516
8517def Laws.rc4_streaming_data(st, a, b):
8518 %rc4_update_ref(st, a) : {R.LcRc4.out_data(R.LcRc4.update(st, B.Octets.append(a, b))) == B.Octets.append(R.LcRc4.out_data(_), R.LcRc4.out_data(R.LcRc4.update(R.LcRc4.out_state(_), b))) : B.Octets}
8519 %rc4_update_ref(R.rc4.after(B.Octets.to_list(a), st), b) : {R.LcRc4.out_data(R.LcRc4.update(st, B.Octets.append(a, b))) == B.Octets.append(B.Octets.of_list(R.rc4.xs(B.Octets.to_list(a), st)), R.LcRc4.out_data(_)) : B.Octets}
8520 %rc4_update_ref(st, B.Octets.append(a, b)) : {R.LcRc4.out_data(_) == B.Octets.append(B.Octets.of_list(R.rc4.xs(B.Octets.to_list(a), st)), B.Octets.of_list(R.rc4.xs(B.Octets.to_list(b), R.rc4.after(B.Octets.to_list(a), st)))) : B.Octets}
8521 %Equal.sym(List<&2, U32>, B.Octets.to_list(B.Octets.append(a, b)), B.append(B.Octets.to_list(a), B.Octets.to_list(b)), BL.octets_append_list(a, b)) : {B.Octets.of_list(R.rc4.xs(_, st)) == B.Octets.append(B.Octets.of_list(R.rc4.xs(B.Octets.to_list(a), st)), B.Octets.of_list(R.rc4.xs(B.Octets.to_list(b), R.rc4.after(B.Octets.to_list(a), st)))) : B.Octets}
8522 %Equal.sym(List<&2, U32>, R.rc4.xs(B.append(B.Octets.to_list(a), B.Octets.to_list(b)), st), B.append(R.rc4.xs(B.Octets.to_list(a), st), R.rc4.xs(B.Octets.to_list(b), R.rc4.after(B.Octets.to_list(a), st))), rc4_xs_append(B.Octets.to_list(a), B.Octets.to_list(b), st)) : {B.Octets.of_list(_) == B.Octets.append(B.Octets.of_list(R.rc4.xs(B.Octets.to_list(a), st)), B.Octets.of_list(R.rc4.xs(B.Octets.to_list(b), R.rc4.after(B.Octets.to_list(a), st)))) : B.Octets}
8523 octets_of_append(R.rc4.xs(B.Octets.to_list(a), st), R.rc4.xs(B.Octets.to_list(b), R.rc4.after(B.Octets.to_list(a), st)))
8524
8525
8526
8527def Laws.block64_octets_round_trip(b):
8528 %Equal.sym(List<&2, U32>, B.Octets.to_list(B.Octets.of_list(L.lc.block_bytes(b, Nil{}))), B.mask(L.lc.block_bytes(b, Nil{})), BL.octets_to_of(L.lc.block_bytes(b, Nil{}))) : {L.lc.block_of(_) == Some{b} : Maybe<&2, L.LcBlock64>}
8529 blk_bytes(b)
8530
8531
8532def m64_joins(bs: List<&2, L.LcBlock64>, ys: List<&2, U32>) -> List<&2, U32>:
8533 match bs:
8534 case Nil{}:
8535 ys
8536 case Con{b, t}:
8537 L.lc.block_bytes(b, m64_joins(t, ys))
8538
8539def m64_join_rev(bs: List<&2, L.LcBlock64>, +zs: List<&2, L.LcBlock64>, +ys: List<&2, U32>) -> {X.m64.join(zs, m64_joins(bs, ys)) == X.m64.join(X.m64.rev_onto(bs, zs), ys) : List<&2, U32>}:
8540 match bs:
8541 case Nil{}:
8542 {==}
8543 case Con{b, t}:
8544 m64_join_rev(t, Con{b, zs}, ys)
8545
8546def m64_split_joins(bs: List<&2, L.LcBlock64>, +acc: List<&2, L.LcBlock64>) -> {X.m64.split(B.mask(m64_joins(bs, Nil{})), acc) == Some{X.m64.rev_onto(acc, bs)} : Maybe<&2, List<&2, L.LcBlock64>>}:
8547 match bs:
8548 case Nil{}:
8549 {==}
8550 case Con{L.LcBlock64{+hi, +lo}, +t}:
8551 %blk8(hi, lo) : {X.m64.split(B.mask(m64_joins(t, Nil{})), Con{_, acc}) == Some{X.m64.rev_onto(acc, Con{L.LcBlock64{hi, lo}, t})} : Maybe<&2, List<&2, L.LcBlock64>>}
8552 m64_split_joins(t, Con{L.LcBlock64{hi, lo}, acc})
8553
8554def Laws.blocks64_octets_round_trip(bs):
8555 %Equal.sym(List<&2, U32>, B.Octets.to_list(B.Octets.of_list(X.m64.join(X.m64.rev_onto(bs, Nil{}), Nil{}))), B.mask(X.m64.join(X.m64.rev_onto(bs, Nil{}), Nil{})), BL.octets_to_of(X.m64.join(X.m64.rev_onto(bs, Nil{}), Nil{}))) : {X.m64.blocks(B.Octets.len(X.Lc64.octets_of(bs)), X.m64.split(_, Nil{})) == Done{bs} : Result<&2, &2, L.LcError, List<&2, L.LcBlock64>>}
8556 %m64_join_rev(bs, Nil{}, Nil{}) : {X.m64.blocks(B.Octets.len(X.Lc64.octets_of(bs)), X.m64.split(B.mask(_), Nil{})) == Done{bs} : Result<&2, &2, L.LcError, List<&2, L.LcBlock64>>}
8557 %Equal.sym(Maybe<&2, List<&2, L.LcBlock64>>, X.m64.split(B.mask(m64_joins(bs, Nil{})), Nil{}), Some{X.m64.rev_onto(Nil{}, bs)}, m64_split_joins(bs, Nil{})) : {X.m64.blocks(B.Octets.len(X.Lc64.octets_of(bs)), _) == Done{bs} : Result<&2, &2, L.LcError, List<&2, L.LcBlock64>>}
8558 {==}
8559
8560
8561
8562
8563
8564def bool_xx2(a: Bool, b: Bool) -> {b == Bool.xor(a, Bool.xor(a, b)) : Bool}:
8565 match a b:
8566 case True{} True{}:
8567 {==}
8568 case True{} False{}:
8569 {==}
8570 case False{} True{}:
8571 {==}
8572 case False{} False{}:
8573 {==}
8574
8575def word_xx2(n: Nat, a: Word(n), b: Word(n)) -> {b == Word.xor(n, a, Word.xor(n, a, b)) : Word(n)}:
8576 match n:
8577 case 0n:
8578 match a b:
8579 case WNil{} WNil{}:
8580 {==}
8581 case 1n+p:
8582 match a b:
8583 case WCon{ah, at} WCon{bh, bt}:
8584 %bool_xx2(ah, bh) : {WCon{bh, bt} == WCon{_, Word.xor(p, at, Word.xor(p, at, bt))} : Word(1n+p)}
8585 %word_xx2(p, at, bt) : {WCon{bh, bt} == WCon{bh, _} : Word(1n+p)}
8586 {==}
8587
8588def u32_xx2(a: U32, b: U32) -> {b == U32.xor(a, U32.xor(a, b)) : U32}:
8589 match a b:
8590 case U32{x} U32{y}:
8591 %word_xx2(32n, x, y) : {U32{y} == U32{_} : U32}
8592 {==}
8593
8594def b64_xx2(a: L.LcBlock64, b: L.LcBlock64) -> {b == L.LcBlock64.xor(a, L.LcBlock64.xor(a, b)) : L.LcBlock64}:
8595 match a b:
8596 case L.LcBlock64{+a0, +a1} L.LcBlock64{+b0, +b1}:
8597 %u32_xx2(a0, b0) : {L.LcBlock64{b0, b1} == L.LcBlock64{_, U32.xor(a1, U32.xor(a1, b1))} : L.LcBlock64}
8598 %u32_xx2(a1, b1) : {L.LcBlock64{b0, b1} == L.LcBlock64{b0, _} : L.LcBlock64}
8599 {==}
8600
8601def ecb_ref(~K: Data, ~f: K -> L.LcBlock64 -> L.LcBlock64, +k: K, bs: List<&2, L.LcBlock64>, +acc: List<&2, L.LcBlock64>) -> {X.m64.ecb.go(~K, ~f, k, bs, acc) == X.m64.rev_onto(acc, X.m64.ecb(~K, ~f, k, bs)) : List<&2, L.LcBlock64>}:
8602 match bs:
8603 case Nil{}:
8604 {==}
8605 case Con{b, t}:
8606 ecb_ref(~K, ~f, k, t, Con{f(k, b), acc})
8607
8608def cbc_enc_ref(~K: Data, ~enc: K -> L.LcBlock64 -> L.LcBlock64, +k: K, bs: List<&2, L.LcBlock64>, +iv: L.LcBlock64, +acc: List<&2, L.LcBlock64>) -> {X.m64.cbc.enc.go(~K, ~enc, k, bs, iv, acc) == X.m64.rev_onto(acc, X.m64.cbc.enc(~K, ~enc, k, bs, iv)) : List<&2, L.LcBlock64>}:
8609 match bs:
8610 case Nil{}:
8611 {==}
8612 case Con{+p, t}:
8613 cbc_enc_ref(~K, ~enc, k, t, enc(k, L.LcBlock64.xor(iv, p)), Con{enc(k, L.LcBlock64.xor(iv, p)), acc})
8614
8615def cbc_dec_ref(~K: Data, ~dec: K -> L.LcBlock64 -> L.LcBlock64, +k: K, bs: List<&2, L.LcBlock64>, +iv: L.LcBlock64, +acc: List<&2, L.LcBlock64>) -> {X.m64.cbc.dec.go(~K, ~dec, k, bs, iv, acc) == X.m64.rev_onto(acc, X.m64.cbc.dec(~K, ~dec, k, bs, iv)) : List<&2, L.LcBlock64>}:
8616 match bs:
8617 case Nil{}:
8618 {==}
8619 case Con{+c, t}:
8620 cbc_dec_ref(~K, ~dec, k, t, c, Con{L.LcBlock64.xor(iv, dec(k, c)), acc})
8621
8622def tdes_rt(k: T.LcTdesKey, +b: L.LcBlock64) -> {b == T.LcTdes.decrypt(k, T.LcTdes.encrypt(k, b)) : L.LcBlock64}:
8623 Equal.sym(L.LcBlock64, T.LcTdes.decrypt(k, T.LcTdes.encrypt(k, b)), b, Laws.tdes_round_trip(k, b))
8624
8625def ecb_rt_des(+k: D.LcDesKey, bs: List<&2, L.LcBlock64>) -> {bs == X.m64.ecb(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.ecb(~D.LcDesKey, ~D.LcDes.encrypt, k, bs)) : List<&2, L.LcBlock64>}:
8626 match bs:
8627 case Nil{}:
8628 {==}
8629 case Con{+b, +t}:
8630 %des_rt(k, b) : {Con{b, t} == Con{_, X.m64.ecb(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.ecb(~D.LcDesKey, ~D.LcDes.encrypt, k, t))} : List<&2, L.LcBlock64>}
8631 %ecb_rt_des(k, t) : {Con{b, t} == Con{b, _} : List<&2, L.LcBlock64>}
8632 {==}
8633
8634def cbc_rt_des(+k: D.LcDesKey, bs: List<&2, L.LcBlock64>, +iv: L.LcBlock64) -> {bs == X.m64.cbc.dec(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.cbc.enc(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, iv), iv) : List<&2, L.LcBlock64>}:
8635 match bs:
8636 case Nil{}:
8637 {==}
8638 case Con{+p, +t}:
8639 %des_rt(k, L.LcBlock64.xor(iv, p)) : {Con{p, t} == Con{L.LcBlock64.xor(iv, _), X.m64.cbc.dec(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.cbc.enc(~D.LcDesKey, ~D.LcDes.encrypt, k, t, D.LcDes.encrypt(k, L.LcBlock64.xor(iv, p))), D.LcDes.encrypt(k, L.LcBlock64.xor(iv, p)))} : List<&2, L.LcBlock64>}
8640 %b64_xx2(iv, p) : {Con{p, t} == Con{_, X.m64.cbc.dec(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.cbc.enc(~D.LcDesKey, ~D.LcDes.encrypt, k, t, D.LcDes.encrypt(k, L.LcBlock64.xor(iv, p))), D.LcDes.encrypt(k, L.LcBlock64.xor(iv, p)))} : List<&2, L.LcBlock64>}
8641 %cbc_rt_des(k, t, D.LcDes.encrypt(k, L.LcBlock64.xor(iv, p))) : {Con{p, t} == Con{p, _} : List<&2, L.LcBlock64>}
8642 {==}
8643
8644
8645def ecb_blocks_rt_des(+k: D.LcDesKey, +bs: List<&2, L.LcBlock64>) -> {X.Lc64.ecb_decrypt_blocks(~D.LcDesKey, ~D.LcDes.decrypt, k, X.Lc64.ecb_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, bs)) == bs : List<&2, L.LcBlock64>}:
8646 %Equal.sym(List<&2, L.LcBlock64>, X.m64.ecb.go(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, Nil{}), X.m64.rev_onto(Nil{}, X.m64.ecb(~D.LcDesKey, ~D.LcDes.encrypt, k, bs)), ecb_ref(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, Nil{})) : {X.m64.ecb.go(~D.LcDesKey, ~D.LcDes.decrypt, k, _, Nil{}) == bs : List<&2, L.LcBlock64>}
8647 %Equal.sym(List<&2, L.LcBlock64>, X.m64.ecb.go(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.ecb(~D.LcDesKey, ~D.LcDes.encrypt, k, bs), Nil{}), X.m64.rev_onto(Nil{}, X.m64.ecb(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.ecb(~D.LcDesKey, ~D.LcDes.encrypt, k, bs))), ecb_ref(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.ecb(~D.LcDesKey, ~D.LcDes.encrypt, k, bs), Nil{})) : {_ == bs : List<&2, L.LcBlock64>}
8648 Equal.sym(List<&2, L.LcBlock64>, bs, X.m64.ecb(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.ecb(~D.LcDesKey, ~D.LcDes.encrypt, k, bs)), ecb_rt_des(k, bs))
8649
8650def cbc_blocks_rt_des(+k: D.LcDesKey, +iv: L.LcBlock64, +bs: List<&2, L.LcBlock64>) -> {X.Lc64.cbc_decrypt_blocks(~D.LcDesKey, ~D.LcDes.decrypt, k, iv, X.Lc64.cbc_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, iv, bs)) == bs : List<&2, L.LcBlock64>}:
8651 %Equal.sym(List<&2, L.LcBlock64>, X.m64.cbc.enc.go(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, iv, Nil{}), X.m64.rev_onto(Nil{}, X.m64.cbc.enc(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, iv)), cbc_enc_ref(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, iv, Nil{})) : {X.m64.cbc.dec.go(~D.LcDesKey, ~D.LcDes.decrypt, k, _, iv, Nil{}) == bs : List<&2, L.LcBlock64>}
8652 %Equal.sym(List<&2, L.LcBlock64>, X.m64.cbc.dec.go(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.cbc.enc(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, iv), iv, Nil{}), X.m64.rev_onto(Nil{}, X.m64.cbc.dec(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.cbc.enc(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, iv), iv)), cbc_dec_ref(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.cbc.enc(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, iv), iv, Nil{})) : {_ == bs : List<&2, L.LcBlock64>}
8653 Equal.sym(List<&2, L.LcBlock64>, bs, X.m64.cbc.dec(~D.LcDesKey, ~D.LcDes.decrypt, k, X.m64.cbc.enc(~D.LcDesKey, ~D.LcDes.encrypt, k, bs, iv), iv), cbc_rt_des(k, bs, iv))
8654
8655def ecb_rt_tdes(+k: T.LcTdesKey, bs: List<&2, L.LcBlock64>) -> {bs == X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs)) : List<&2, L.LcBlock64>}:
8656 match bs:
8657 case Nil{}:
8658 {==}
8659 case Con{+b, +t}:
8660 %tdes_rt(k, b) : {Con{b, t} == Con{_, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.encrypt, k, t))} : List<&2, L.LcBlock64>}
8661 %ecb_rt_tdes(k, t) : {Con{b, t} == Con{b, _} : List<&2, L.LcBlock64>}
8662 {==}
8663
8664def cbc_rt_tdes(+k: T.LcTdesKey, bs: List<&2, L.LcBlock64>, +iv: L.LcBlock64) -> {bs == X.m64.cbc.dec(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.cbc.enc(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, iv), iv) : List<&2, L.LcBlock64>}:
8665 match bs:
8666 case Nil{}:
8667 {==}
8668 case Con{+p, +t}:
8669 %tdes_rt(k, L.LcBlock64.xor(iv, p)) : {Con{p, t} == Con{L.LcBlock64.xor(iv, _), X.m64.cbc.dec(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.cbc.enc(~T.LcTdesKey, ~T.LcTdes.encrypt, k, t, T.LcTdes.encrypt(k, L.LcBlock64.xor(iv, p))), T.LcTdes.encrypt(k, L.LcBlock64.xor(iv, p)))} : List<&2, L.LcBlock64>}
8670 %b64_xx2(iv, p) : {Con{p, t} == Con{_, X.m64.cbc.dec(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.cbc.enc(~T.LcTdesKey, ~T.LcTdes.encrypt, k, t, T.LcTdes.encrypt(k, L.LcBlock64.xor(iv, p))), T.LcTdes.encrypt(k, L.LcBlock64.xor(iv, p)))} : List<&2, L.LcBlock64>}
8671 %cbc_rt_tdes(k, t, T.LcTdes.encrypt(k, L.LcBlock64.xor(iv, p))) : {Con{p, t} == Con{p, _} : List<&2, L.LcBlock64>}
8672 {==}
8673
8674
8675def ecb_blocks_rt_tdes(+k: T.LcTdesKey, +bs: List<&2, L.LcBlock64>) -> {X.Lc64.ecb_decrypt_blocks(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.Lc64.ecb_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs)) == bs : List<&2, L.LcBlock64>}:
8676 %Equal.sym(List<&2, L.LcBlock64>, X.m64.ecb.go(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, Nil{}), X.m64.rev_onto(Nil{}, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs)), ecb_ref(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, Nil{})) : {X.m64.ecb.go(~T.LcTdesKey, ~T.LcTdes.decrypt, k, _, Nil{}) == bs : List<&2, L.LcBlock64>}
8677 %Equal.sym(List<&2, L.LcBlock64>, X.m64.ecb.go(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs), Nil{}), X.m64.rev_onto(Nil{}, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs))), ecb_ref(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs), Nil{})) : {_ == bs : List<&2, L.LcBlock64>}
8678 Equal.sym(List<&2, L.LcBlock64>, bs, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.ecb(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs)), ecb_rt_tdes(k, bs))
8679
8680def cbc_blocks_rt_tdes(+k: T.LcTdesKey, +iv: L.LcBlock64, +bs: List<&2, L.LcBlock64>) -> {X.Lc64.cbc_decrypt_blocks(~T.LcTdesKey, ~T.LcTdes.decrypt, k, iv, X.Lc64.cbc_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, iv, bs)) == bs : List<&2, L.LcBlock64>}:
8681 %Equal.sym(List<&2, L.LcBlock64>, X.m64.cbc.enc.go(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, iv, Nil{}), X.m64.rev_onto(Nil{}, X.m64.cbc.enc(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, iv)), cbc_enc_ref(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, iv, Nil{})) : {X.m64.cbc.dec.go(~T.LcTdesKey, ~T.LcTdes.decrypt, k, _, iv, Nil{}) == bs : List<&2, L.LcBlock64>}
8682 %Equal.sym(List<&2, L.LcBlock64>, X.m64.cbc.dec.go(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.cbc.enc(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, iv), iv, Nil{}), X.m64.rev_onto(Nil{}, X.m64.cbc.dec(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.cbc.enc(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, iv), iv)), cbc_dec_ref(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.cbc.enc(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, iv), iv, Nil{})) : {_ == bs : List<&2, L.LcBlock64>}
8683 Equal.sym(List<&2, L.LcBlock64>, bs, X.m64.cbc.dec(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.m64.cbc.enc(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs, iv), iv), cbc_rt_tdes(k, bs, iv))
8684
8685def Laws.des_ecb_round_trip(k, bs):
8686 ecb_blocks_rt_des(k, bs)
8687
8688def Laws.des_cbc_round_trip(k, iv, bs):
8689 cbc_blocks_rt_des(k, iv, bs)
8690
8691def Laws.tdes_ecb_round_trip(k, bs):
8692 ecb_blocks_rt_tdes(k, bs)
8693
8694def Laws.tdes_cbc_round_trip(k, iv, bs):
8695 cbc_blocks_rt_tdes(k, iv, bs)
8696
8697
8698
8699def cbc_enc_ok(~K: Data, ~enc: K -> L.LcBlock64 -> L.LcBlock64, +k: K, +iv: L.LcBlock64, +bs: List<&2, L.LcBlock64>) -> {X.Lc64.cbc_encrypt(~K, ~enc, k, L.LcBlock64.to_octets(iv), X.Lc64.octets_of(bs)) == Done{X.Lc64.octets_of(X.Lc64.cbc_encrypt_blocks(~K, ~enc, k, iv, bs))} : Result<&2, &2, L.LcError, B.Octets>}:
8700 %Equal.sym(Maybe<&2, L.LcBlock64>, L.LcBlock64.of_octets(L.LcBlock64.to_octets(iv)), Some{iv}, Laws.block64_octets_round_trip(iv)) : {X.m64.cbc.e1(~K, ~enc, k, X.m64.iv(_, B.Octets.len(L.LcBlock64.to_octets(iv))), X.Lc64.octets_of(bs)) == Done{X.Lc64.octets_of(X.Lc64.cbc_encrypt_blocks(~K, ~enc, k, iv, bs))} : Result<&2, &2, L.LcError, B.Octets>}
8701 %Equal.sym(Result<&2, &2, L.LcError, List<&2, L.LcBlock64>>, X.Lc64.blocks_of(X.Lc64.octets_of(bs)), Done{bs}, Laws.blocks64_octets_round_trip(bs)) : {X.m64.cbc.e2(~K, ~enc, k, iv, _) == Done{X.Lc64.octets_of(X.Lc64.cbc_encrypt_blocks(~K, ~enc, k, iv, bs))} : Result<&2, &2, L.LcError, B.Octets>}
8702 {==}
8703
8704def cbc_dec_ok(~K: Data, ~dec: K -> L.LcBlock64 -> L.LcBlock64, +k: K, +iv: L.LcBlock64, +bs: List<&2, L.LcBlock64>) -> {X.Lc64.cbc_decrypt(~K, ~dec, k, L.LcBlock64.to_octets(iv), X.Lc64.octets_of(bs)) == Done{X.Lc64.octets_of(X.Lc64.cbc_decrypt_blocks(~K, ~dec, k, iv, bs))} : Result<&2, &2, L.LcError, B.Octets>}:
8705 %Equal.sym(Maybe<&2, L.LcBlock64>, L.LcBlock64.of_octets(L.LcBlock64.to_octets(iv)), Some{iv}, Laws.block64_octets_round_trip(iv)) : {X.m64.cbc.d1(~K, ~dec, k, X.m64.iv(_, B.Octets.len(L.LcBlock64.to_octets(iv))), X.Lc64.octets_of(bs)) == Done{X.Lc64.octets_of(X.Lc64.cbc_decrypt_blocks(~K, ~dec, k, iv, bs))} : Result<&2, &2, L.LcError, B.Octets>}
8706 %Equal.sym(Result<&2, &2, L.LcError, List<&2, L.LcBlock64>>, X.Lc64.blocks_of(X.Lc64.octets_of(bs)), Done{bs}, Laws.blocks64_octets_round_trip(bs)) : {X.m64.cbc.d2(~K, ~dec, k, iv, _) == Done{X.Lc64.octets_of(X.Lc64.cbc_decrypt_blocks(~K, ~dec, k, iv, bs))} : Result<&2, &2, L.LcError, B.Octets>}
8707 {==}
8708
8709def ecb_enc_ok(~K: Data, ~f: K -> L.LcBlock64 -> L.LcBlock64, +k: K, +bs: List<&2, L.LcBlock64>) -> {Result.map(&2, &2, L.LcError, List<&2, L.LcBlock64>, B.Octets, xs => X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~K, ~f, k, xs)), X.Lc64.blocks_of(X.Lc64.octets_of(bs))) == Done{X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~K, ~f, k, bs))} : Result<&2, &2, L.LcError, B.Octets>}:
8710 %Equal.sym(Result<&2, &2, L.LcError, List<&2, L.LcBlock64>>, X.Lc64.blocks_of(X.Lc64.octets_of(bs)), Done{bs}, Laws.blocks64_octets_round_trip(bs)) : {Result.map(&2, &2, L.LcError, List<&2, L.LcBlock64>, B.Octets, xs => X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~K, ~f, k, xs)), _) == Done{X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~K, ~f, k, bs))} : Result<&2, &2, L.LcError, B.Octets>}
8711 {==}
8712
8713def ecb_dec_ok(~K: Data, ~f: K -> L.LcBlock64 -> L.LcBlock64, +k: K, +bs: List<&2, L.LcBlock64>) -> {Result.map(&2, &2, L.LcError, List<&2, L.LcBlock64>, B.Octets, xs => X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~K, ~f, k, xs)), X.Lc64.blocks_of(X.Lc64.octets_of(bs))) == Done{X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~K, ~f, k, bs))} : Result<&2, &2, L.LcError, B.Octets>}:
8714 %Equal.sym(Result<&2, &2, L.LcError, List<&2, L.LcBlock64>>, X.Lc64.blocks_of(X.Lc64.octets_of(bs)), Done{bs}, Laws.blocks64_octets_round_trip(bs)) : {Result.map(&2, &2, L.LcError, List<&2, L.LcBlock64>, B.Octets, xs => X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~K, ~f, k, xs)), _) == Done{X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~K, ~f, k, bs))} : Result<&2, &2, L.LcError, B.Octets>}
8715 {==}
8716
8717def Laws.des_cbc_octets_round_trip(k, iv, bs):
8718 %Equal.sym(Result<&2, &2, L.LcError, B.Octets>, X.Lc64.cbc_encrypt(~D.LcDesKey, ~D.LcDes.encrypt, k, L.LcBlock64.to_octets(iv), X.Lc64.octets_of(bs)), Done{X.Lc64.octets_of(X.Lc64.cbc_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, iv, bs))}, cbc_enc_ok(~D.LcDesKey, ~D.LcDes.encrypt, k, iv, bs)) : {Result.bind(&2, &2, L.LcError, B.Octets, B.Octets, _, c => X.Lc64.cbc_decrypt(~D.LcDesKey, ~D.LcDes.decrypt, k, L.LcBlock64.to_octets(iv), c)) == Done{X.Lc64.octets_of(bs)} : Result<&2, &2, L.LcError, B.Octets>}
8719 %Equal.sym(Result<&2, &2, L.LcError, B.Octets>, X.Lc64.cbc_decrypt(~D.LcDesKey, ~D.LcDes.decrypt, k, L.LcBlock64.to_octets(iv), X.Lc64.octets_of(X.Lc64.cbc_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, iv, bs))), Done{X.Lc64.octets_of(X.Lc64.cbc_decrypt_blocks(~D.LcDesKey, ~D.LcDes.decrypt, k, iv, X.Lc64.cbc_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, iv, bs)))}, cbc_dec_ok(~D.LcDesKey, ~D.LcDes.decrypt, k, iv, X.Lc64.cbc_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, iv, bs))) : {_ == Done{X.Lc64.octets_of(bs)} : Result<&2, &2, L.LcError, B.Octets>}
8720 %Laws.des_cbc_round_trip(k, iv, bs) : {Done{X.Lc64.octets_of(X.Lc64.cbc_decrypt_blocks(~D.LcDesKey, ~D.LcDes.decrypt, k, iv, X.Lc64.cbc_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, iv, bs)))} == Done{X.Lc64.octets_of(_)} : Result<&2, &2, L.LcError, B.Octets>}
8721 {==}
8722
8723def Laws.tdes_cbc_octets_round_trip(k, iv, bs):
8724 %Equal.sym(Result<&2, &2, L.LcError, B.Octets>, X.Lc64.cbc_encrypt(~T.LcTdesKey, ~T.LcTdes.encrypt, k, L.LcBlock64.to_octets(iv), X.Lc64.octets_of(bs)), Done{X.Lc64.octets_of(X.Lc64.cbc_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, iv, bs))}, cbc_enc_ok(~T.LcTdesKey, ~T.LcTdes.encrypt, k, iv, bs)) : {Result.bind(&2, &2, L.LcError, B.Octets, B.Octets, _, c => X.Lc64.cbc_decrypt(~T.LcTdesKey, ~T.LcTdes.decrypt, k, L.LcBlock64.to_octets(iv), c)) == Done{X.Lc64.octets_of(bs)} : Result<&2, &2, L.LcError, B.Octets>}
8725 %Equal.sym(Result<&2, &2, L.LcError, B.Octets>, X.Lc64.cbc_decrypt(~T.LcTdesKey, ~T.LcTdes.decrypt, k, L.LcBlock64.to_octets(iv), X.Lc64.octets_of(X.Lc64.cbc_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, iv, bs))), Done{X.Lc64.octets_of(X.Lc64.cbc_decrypt_blocks(~T.LcTdesKey, ~T.LcTdes.decrypt, k, iv, X.Lc64.cbc_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, iv, bs)))}, cbc_dec_ok(~T.LcTdesKey, ~T.LcTdes.decrypt, k, iv, X.Lc64.cbc_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, iv, bs))) : {_ == Done{X.Lc64.octets_of(bs)} : Result<&2, &2, L.LcError, B.Octets>}
8726 %Laws.tdes_cbc_round_trip(k, iv, bs) : {Done{X.Lc64.octets_of(X.Lc64.cbc_decrypt_blocks(~T.LcTdesKey, ~T.LcTdes.decrypt, k, iv, X.Lc64.cbc_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, iv, bs)))} == Done{X.Lc64.octets_of(_)} : Result<&2, &2, L.LcError, B.Octets>}
8727 {==}
8728
8729def Laws.des_ecb_octets_round_trip(k, bs):
8730 %Equal.sym(Result<&2, &2, L.LcError, B.Octets>, Result.map(&2, &2, L.LcError, List<&2, L.LcBlock64>, B.Octets, xs => X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, xs)), X.Lc64.blocks_of(X.Lc64.octets_of(bs))), Done{X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, bs))}, ecb_enc_ok(~D.LcDesKey, ~D.LcDes.encrypt, k, bs)) : {Result.bind(&2, &2, L.LcError, B.Octets, B.Octets, _, c => X.Lc64.ecb_decrypt(~D.LcDesKey, ~D.LcDes.decrypt, k, c)) == Done{X.Lc64.octets_of(bs)} : Result<&2, &2, L.LcError, B.Octets>}
8731 %Equal.sym(Result<&2, &2, L.LcError, B.Octets>, Result.map(&2, &2, L.LcError, List<&2, L.LcBlock64>, B.Octets, xs => X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~D.LcDesKey, ~D.LcDes.decrypt, k, xs)), X.Lc64.blocks_of(X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, bs)))), Done{X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~D.LcDesKey, ~D.LcDes.decrypt, k, X.Lc64.ecb_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, bs)))}, ecb_dec_ok(~D.LcDesKey, ~D.LcDes.decrypt, k, X.Lc64.ecb_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, bs))) : {_ == Done{X.Lc64.octets_of(bs)} : Result<&2, &2, L.LcError, B.Octets>}
8732 %Laws.des_ecb_round_trip(k, bs) : {Done{X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~D.LcDesKey, ~D.LcDes.decrypt, k, X.Lc64.ecb_encrypt_blocks(~D.LcDesKey, ~D.LcDes.encrypt, k, bs)))} == Done{X.Lc64.octets_of(_)} : Result<&2, &2, L.LcError, B.Octets>}
8733 {==}
8734
8735def Laws.tdes_ecb_octets_round_trip(k, bs):
8736 %Equal.sym(Result<&2, &2, L.LcError, B.Octets>, Result.map(&2, &2, L.LcError, List<&2, L.LcBlock64>, B.Octets, xs => X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, xs)), X.Lc64.blocks_of(X.Lc64.octets_of(bs))), Done{X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs))}, ecb_enc_ok(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs)) : {Result.bind(&2, &2, L.LcError, B.Octets, B.Octets, _, c => X.Lc64.ecb_decrypt(~T.LcTdesKey, ~T.LcTdes.decrypt, k, c)) == Done{X.Lc64.octets_of(bs)} : Result<&2, &2, L.LcError, B.Octets>}
8737 %Equal.sym(Result<&2, &2, L.LcError, B.Octets>, Result.map(&2, &2, L.LcError, List<&2, L.LcBlock64>, B.Octets, xs => X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~T.LcTdesKey, ~T.LcTdes.decrypt, k, xs)), X.Lc64.blocks_of(X.Lc64.octets_of(X.Lc64.ecb_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs)))), Done{X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.Lc64.ecb_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs)))}, ecb_dec_ok(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.Lc64.ecb_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs))) : {_ == Done{X.Lc64.octets_of(bs)} : Result<&2, &2, L.LcError, B.Octets>}
8738 %Laws.tdes_ecb_round_trip(k, bs) : {Done{X.Lc64.octets_of(X.Lc64.ecb_decrypt_blocks(~T.LcTdesKey, ~T.LcTdes.decrypt, k, X.Lc64.ecb_encrypt_blocks(~T.LcTdesKey, ~T.LcTdes.encrypt, k, bs)))} == Done{X.Lc64.octets_of(_)} : Result<&2, &2, L.LcError, B.Octets>}
8739 {==}
8740
8741
8742
8743def Laws.sm4_gbt32907():
8744 {==}
8745
8746def Laws.camellia_rfc3713():
8747 {==}
8748
8749def Laws.serpent_nessie():
8750 {==}
8751
8752def Laws.des_bad_key_length():
8753 {==}
8754
8755def Laws.tdes_bad_key_length():
8756 {==}
8757
8758def Laws.camellia_bad_key_length():
8759 {==}
8760
8761def Laws.serpent_bad_key_length():
8762 {==}
8763
8764def Laws.aria_rfc5794():
8765 {==}
8766
8767def Laws.cast5_rfc2144():
8768 {==}
8769
8770def Laws.fcrypt_spec():
8771 {==}
8772
8773def Laws.aria_bad_key_length():
8774 {==}
8775
8776def Laws.cast6_bad_key_length():
8777 {==}
8778
8779def Laws.blowfish_bad_key_length():
8780 {==}
8781
8782def Laws.cast5_bad_key_length():
8783 {==}
8784
8785def Laws.tea_bad_key_length():
8786 {==}
8787
8788def Laws.xtea_bad_key_length():
8789 {==}
8790
8791def Laws.fcrypt_bad_key_length():
8792 {==}
8793
8794def Laws.rc4_empty_key():
8795 {==}
8796
8797def Laws.modes64_not_whole_blocks():
8798 {==}
8799