Source code on Github
{-# OPTIONS --safe #-}
module Prelude.Lists.Sublists where

open import Prelude.Init; open SetAsType

module L-Sublists where
  open import Data.List.Relation.Binary.Sublist.Propositional public
  open import Data.List.Relation.Binary.Sublist.Propositional.Properties public

open L-Sublists using ([]) renaming
  ( _⊆_ to _⊑_
  ; _⊈_ to _⋢_
  ; _⊇_ to _⊒_
  ; _⊉_ to _⋣_
  ; _∷ʳ_ to keep⊑
  ; _∷_  to drop⊑
  ) public
pattern drop≡ x p = drop⊑ {x} refl p

map⊑ : ∀ {X : Type ℓ} {xs ys : List X} → Op₁ X → ys ⊑ xs → List X
map⊑ f = λ where
  []          → []
  (keep⊑ x p) → f x ∷ map⊑ f p
  (drop≡ x p) → x   ∷ map⊑ f p

remove⊑ : ∀ {X : Type ℓ} {xs ys : List X} → Op₁ X → ys ⊑ xs → List X
remove⊑ f = λ where
  []          → []
  (keep⊑ _ p) → remove⊑ f p
  (drop≡ x p) → x ∷ remove⊑ f p