def valid_eq
bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/ed25519/proof.bend:110
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/ed25519/proof.bend as Proof
import Base
import bend-collections-laws-crypto@1.0.0.0/spec/crypto/curve25519/field.bend as FS
import bend-collections-laws-crypto@1.0.0.0/src/crypto/curve25519/x25519.bend as X
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/u32.bend as U
110def valid_eq(+n: Nat, +xs: List<&2, U32>) -> {X.valid_bytes(n, xs) == FS.bytes_ok(n, xs) : Bool}:
111 match n xs:
112 case 0n Nil{}:
113 {==}
114 case 0n Con{y, yt}:
115 {==}
116 case 1n+m Nil{}:
117 {==}
118 case 1n+ +m Con{+y, +yt}:
119 +e1 = U.is_lt_nat(y, 256)
120 +e2 = valid_eq(m, yt)
121 Equal.trans(Bool, Bool.and(U32.is_lt(y, 256), X.valid_bytes(m, yt)), Bool.and(Nat.is_lt(v(y), 256n), X.valid_bytes(m, yt)), Bool.and(Nat.is_lt(v(y), 256n), FS.bytes_ok(m, yt)), Equal.cong(Bool, Bool, z => Bool.and(z, X.valid_bytes(m, yt)), U32.is_lt(y, 256), Nat.is_lt(v(y), 256n), e1), Equal.cong(Bool, Bool, z => Bool.and(Nat.is_lt(v(y), 256n), z), X.valid_bytes(m, yt), FS.bytes_ok(m, yt), e2))