{-# OPTIONS --safe --warning=error --without-K #-} open import LogicalFormulae open import Numbers.Naturals.Naturals -- for length open import Lists.Lists open import Orders open import Functions open import Agda.Primitive using (Level; lzero; lsuc; _⊔_) open import Groups.FinitePermutations module Lists.SortList where isSorted : {a b : _} {A : Set a} (ord : TotalOrder {a} {b} A) (l : List A) → Set (a ⊔ b) isSorted ord [] = True' isSorted ord (x :: []) = True' isSorted ord (x :: (y :: l)) = (TotalOrder._≤_ ord x y) && (isSorted ord (y :: l)) sortedTailIsSorted : {a b : _} {A : Set a} (ord : TotalOrder {a} {b} A) → (x : A) → (l : List A) → (isSorted ord (x :: l)) → isSorted ord l sortedTailIsSorted ord x [] pr = record {} sortedTailIsSorted ord x (y :: l) (fst ,, snd) = snd insert : {a b : _} {A : Set a} (ord : TotalOrder {a} {b} A) → (l : List A) → (isSorted ord l) → (x : A) → List A insert ord [] pr x = [ x ] insert ord (y :: l) pr x with TotalOrder.totality ord x y insert ord (y :: l) pr x | inl (inl x