def sc_drop_take

bend-collections-laws-math@1.0.0.0 · proofs/lib/list.bend:368

import bend-collections-laws-math@1.0.0.0/proofs/lib/list.bend as List
import Base
import bend-collections-laws-math@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.