AESMaskedXorProof.word_and_comm: def of qasim-bend-kit@0.1.0.2 Import: import qasim-bend-kit@0.1.0.2/proof/AES_MaskedXorProof.bend as AESMaskedXorProof Lines 95-116 of qasim-bend-kit@0.1.0.2/proof/AES_MaskedXorProof.bend: https://jend.leeeet.dev/read.txt?path=qasim-bend-kit@0.1.0.2/proof/AES_MaskedXorProof.bend&start_line=95&end_line=116 import Base def word_and_comm(+n: Nat, +x: Word(n), +y: Word(n)) -> {Word.and(n, x, y) == Word.and(n, y, x) : Word(n)}: match n x y: case 0n WNil{} WNil{}: {==} case 1n+p WCon{xb, xt} WCon{yb, yt}: head = bool_and_comm(xb, yb) tail = word_and_comm(p, xt, yt) Equal.trans(Word(1n+p), Word.and(1n+p, WCon{xb, xt}, WCon{yb, yt}), WCon{Bool.and(xb, yb), Word.and(p, xt, yt)}, Word.and(1n+p, WCon{yb, yt}, WCon{xb, xt}), {==}, Equal.trans(Word(1n+p), WCon{Bool.and(xb, yb), Word.and(p, xt, yt)}, WCon{Bool.and(yb, xb), Word.and(p, xt, yt)}, WCon{Bool.and(yb, xb), Word.and(p, yt, xt)}, Equal.cong(Bool, Word(1n+p), bit => WCon{bit, Word.and(p, xt, yt)}, Bool.and(xb, yb), Bool.and(yb, xb), head), Equal.cong(Word(p), Word(1n+p), bits => WCon{Bool.and(yb, xb), bits}, Word.and(p, xt, yt), Word.and(p, yt, xt), tail))) Uses (10): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool.and https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.cong https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.trans https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.Con https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.Nil https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.and https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/proof/AES_MaskedXorProof.bend&name=bool_and_comm