def word_and_comm

qasim-bend-kit@0.1.0.2 · proof/AES_MaskedXorProof.bend:95

import qasim-bend-kit@0.1.0.2/proof/AES_MaskedXorProof.bend as AESMaskedXorProof
import Base

95def word_and_comm(+n: Nat, +x: Word(n), +y: Word(n)) ->
96    {Word.and(n, x, y) == Word.and(n, y, x) : Word(n)}:
97    match n x y:
98        case 0n WNil{} WNil{}: {==}
99        case 1n+p WCon{xb, xt} WCon{yb, yt}:
100            head = bool_and_comm(xb, yb)
101            tail = word_and_comm(p, xt, yt)
102            Equal.trans(Word(1n+p),
103                Word.and(1n+p, WCon{xb, xt}, WCon{yb, yt}),
104                WCon{Bool.and(xb, yb), Word.and(p, xt, yt)},
105                Word.and(1n+p, WCon{yb, yt}, WCon{xb, xt}),
106                {==},
107                Equal.trans(Word(1n+p),
108                    WCon{Bool.and(xb, yb), Word.and(p, xt, yt)},
109                    WCon{Bool.and(yb, xb), Word.and(p, xt, yt)},
110                    WCon{Bool.and(yb, xb), Word.and(p, yt, xt)},
111                    Equal.cong(Bool, Word(1n+p),
112                        bit => WCon{bit, Word.and(p, xt, yt)},
113                        Bool.and(xb, yb), Bool.and(yb, xb), head),
114                    Equal.cong(Word(p), Word(1n+p),
115                        bits => WCon{Bool.and(yb, xb), bits},
116                        Word.and(p, xt, yt), Word.and(p, yt, xt), tail)))

Uses (10)

Used by (1)