def drop_append_left

bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/blake/blake3/lists.bend:47

import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/blake/blake3/lists.bend as Lists
import Base
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/logic.bend as L
import bend-collections-laws-crypto@1.0.0.0/spec/lib/common.bend as SC

47def drop_append_left(-A: Data, +xs: List<&2,A>, +ys: List<&2,A>, +k: Nat, +h: {Nat.is_le(k,SC.length(A,xs)) == True{} : Bool}) -> {SC.drop(A,SC.append(A,xs,ys),k) == SC.append(A,SC.drop(A,xs,k),ys) : List<&2,A>}:
48  match xs k:
49    case Nil{} 0n: drop_zero(A,ys)
50    case Nil{} 1n+j: Empty.absurd({SC.drop(A,ys,1n+j) == ys : List<&2,A>},L.false_true(h))
51    case Con{+a,+t} 0n: {==}
52    case Con{+a,+t} 1n+j: drop_append_left(A,t,ys,j,h)

Uses (10)

Used by (1)