@@ -10,18 +10,19 @@ module Data.List.Relation.Binary.Subset.Setoid.Properties where
1010
1111open import Data.Bool.Base using (Bool; true; false)
1212open import Data.List.Base hiding (_∷ʳ_; find)
13+ import Data.List.Properties as List
1314open import Data.List.Relation.Unary.Any as Any using (Any; here; there)
1415open import Data.List.Relation.Unary.All as All using (All)
1516import Data.List.Membership.Setoid as Membership
16- open import Data.List.Membership.Setoid.Properties
17+ import Data.List.Membership.Setoid.Properties as Membershipₚ
1718open import Data.Nat.Base using (ℕ; s≤s; _≤_)
1819import Data.List.Relation.Binary.Subset.Setoid as Subset
1920import Data.List.Relation.Binary.Sublist.Setoid as Sublist
2021import Data.List.Relation.Binary.Equality.Setoid as Equality
2122import Data.List.Relation.Binary.Permutation.Setoid as Permutation
2223import Data.List.Relation.Binary.Permutation.Setoid.Properties as Permutationₚ
2324open import Data.Product.Base using (_,_)
24- open import Function.Base using (_∘_; _∘₂_)
25+ open import Function.Base using (_∘_; _∘₂_; _$_ )
2526open import Level using (Level)
2627open import Relation.Nullary using (¬_; does; yes; no)
2728open import Relation.Nullary.Negation using (contradiction)
@@ -49,6 +50,7 @@ module _ (S : Setoid a ℓ) where
4950 open Subset S
5051 open Equality S
5152 open Membership S
53+ open Membershipₚ
5254
5355 ⊆-reflexive : _≋_ ⇒ _⊆_
5456 ⊆-reflexive xs≋ys = ∈-resp-≋ S xs≋ys
@@ -167,6 +169,7 @@ module _ (S : Setoid a ℓ) where
167169 open Setoid S
168170 open Subset S
169171 open Membership S
172+ open Membershipₚ
170173
171174 xs⊆x∷xs : ∀ xs x → xs ⊆ x ∷ xs
172175 xs⊆x∷xs xs x = there
@@ -186,6 +189,7 @@ module _ (S : Setoid a ℓ) where
186189
187190 open Subset S
188191 open Membership S
192+ open Membershipₚ
189193
190194 xs⊆xs++ys : ∀ xs ys → xs ⊆ xs ++ ys
191195 xs⊆xs++ys xs ys = ∈-++⁺ˡ S
@@ -206,13 +210,47 @@ module _ (S : Setoid a ℓ) where
206210 ++⁺ : ∀ {ws xs ys zs} → ws ⊆ xs → ys ⊆ zs → ws ++ ys ⊆ xs ++ zs
207211 ++⁺ ws⊆xs ys⊆zs = ⊆-trans S (++⁺ˡ _ ws⊆xs) (++⁺ʳ _ ys⊆zs)
208212
213+ ------------------------------------------------------------------------
214+ -- reverse
215+
216+ module _ (S : Setoid a ℓ) where
217+
218+ open Setoid S renaming (Carrier to A)
219+ open Subset S
220+
221+ reverse-selfAdjoint : ∀ {as bs} → as ⊆ reverse bs → reverse as ⊆ bs
222+ reverse-selfAdjoint rs = reverse⁻ ∘ rs ∘ reverse⁻
223+ where reverse⁻ = Membershipₚ.reverse⁻ S
224+
225+ -- NB. the unit and counit of this adjunction are given by:
226+ -- reverse-η : ∀ {xs} → xs ⊆ reverse xs
227+ -- reverse-η = Membershipₚ.reverse⁺ S
228+ -- reverse-ε : ∀ {xs} → reverse xs ⊆ xs
229+ -- reverse-ε = Membershipₚ.reverse⁻ S
230+
231+ reverse⁺ : ∀ {as bs} → as ⊆ bs → reverse as ⊆ reverse bs
232+ reverse⁺ {as} {bs} rs = reverse-selfAdjoint $ begin
233+ as ⊆⟨ rs ⟩
234+ bs ≡⟨ List.reverse-involutive bs ⟨
235+ reverse (reverse bs) ∎
236+ where open ⊆-Reasoning S
237+
238+ reverse⁻ : ∀ {as bs} → reverse as ⊆ reverse bs → as ⊆ bs
239+ reverse⁻ {as} {bs} rs = begin
240+ as ≡⟨ List.reverse-involutive as ⟨
241+ reverse (reverse as) ⊆⟨ reverse-selfAdjoint rs ⟩
242+ bs ∎
243+ where open ⊆-Reasoning S
244+
245+
209246------------------------------------------------------------------------
210247-- filter
211248
212249module _ (S : Setoid a ℓ) where
213250
214251 open Setoid S renaming (Carrier to A)
215252 open Subset S
253+ open Membershipₚ
216254
217255 filter-⊆ : ∀ {P : Pred A p} (P? : Decidable P) →
218256 ∀ xs → filter P? xs ⊆ xs
0 commit comments