def sc_drop_take
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/list.bend as Listimport Base
import bend-collections-laws-crypto@1.0.0.0/spec/lib/common.bend as SC
368# drop l (take n xs) == take (n - l) (drop l xs)
369def sc_drop_take(-A: Data, +xs: List<&2, A>, +n: Nat, +l: Nat) -> {SC.drop(A, SC.take(A, xs, n), l) == SC.take(A, SC.drop(A, xs, l), Nat.sub(n, l)) : List<&2, A>}:
370 match xs n l:
371 case Nil{} _ _:
372 {==}
373 case Con{a, t} 0n 0n:
374 {==}
375 case Con{a, t} 0n 1n+k:
376 Equal.sym(List<&2, A>, SC.take(A, SC.drop(A, t, k), 0n), Nil{}, sc_take_zero(A, SC.drop(A, t, k)))
377 case Con{a, t} 1n+m 0n:
378 {==}
379 case Con{a, t} 1n+m 1n+k:
380 sc_drop_take(A, t, m, k)
Uses (7)
Used by (0)
No other definition uses this definition.