module vector-sort where open import level open import bool open import nat open import product open import vector insert𝕍 : βˆ€{β„“}{A : Set β„“}{n : β„•} β†’ (_<_ : A β†’ A β†’ 𝔹) β†’ (_β‰…_ : A β†’ A β†’ 𝔹) β†’ A β†’ 𝕍 A n β†’ Ξ£i β„• (Ξ» m β†’ 𝕍 A (suc m)) insert𝕍 _<_ _β‰…_ x [] = , [ x ]𝕍 insert𝕍 _<_ _β‰…_ x (y :: ys) with x < y ... | tt = , x :: y :: ys ... | ff with x β‰… y ... | tt = , y :: ys ... | ff with (insert𝕍 _<_ _β‰…_ x ys) ... | , r = , y :: r insertion-sort𝕍 : βˆ€{β„“}{A : Set β„“}{n : β„•} β†’ (_<_ : A β†’ A β†’ 𝔹) β†’ (_β‰…_ : A β†’ A β†’ 𝔹) β†’ 𝕍 A (suc n) β†’ Ξ£i β„• (Ξ» m β†’ 𝕍 A (suc m)) insertion-sort𝕍 _ _ (x :: []) = , [ x ]𝕍 insertion-sort𝕍 _<_ _β‰…_ (x :: (y :: ys)) with insertion-sort𝕍 _<_ _β‰…_ (y :: ys) ... | , (z :: zs) = insert𝕍 _<_ _β‰…_ x (z :: zs) test-insertion-sort𝕍 = insertion-sort𝕍 _<_ _=β„•_ (3 :: 5 :: 2 :: 7 :: 1 :: 2 :: 3 :: 9 :: [])