Sorted tuples

Content created by Louis Wasserman.

Created on 2025-05-14.
Last modified on 2025-05-14.

module lists.sorted-tuples where
Imports
open import elementary-number-theory.natural-numbers

open import finite-group-theory.permutations-standard-finite-types

open import foundation.coproduct-types
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.function-types
open import foundation.propositions
open import foundation.unit-type
open import foundation.universe-levels

open import lists.equivalence-tuples-finite-sequences
open import lists.finite-sequences
open import lists.permutation-tuples
open import lists.tuples

open import order-theory.decidable-total-orders

open import univalent-combinatorics.standard-finite-types

Idea

We define a sorted tuple to be a tuple such that for every pair of consecutive elements x and y, the inequality x ≤ y holds.

Definitions

The proposition that a tuple is sorted

module _
  {l1 l2 : Level} (X : Decidable-Total-Order l1 l2)
  where

  is-sorted-tuple-Prop :
    {n : }  tuple (type-Decidable-Total-Order X) n  Prop l2
  is-sorted-tuple-Prop {0} v = raise-unit-Prop l2
  is-sorted-tuple-Prop {1} v = raise-unit-Prop l2
  is-sorted-tuple-Prop {succ-ℕ (succ-ℕ n)} (x  y  v) =
    product-Prop
      ( leq-Decidable-Total-Order-Prop X x y)
      ( is-sorted-tuple-Prop (y  v))

  is-sorted-tuple :
    {n : }  tuple (type-Decidable-Total-Order X) n  UU l2
  is-sorted-tuple l = type-Prop (is-sorted-tuple-Prop l)

The proposition that an element is less than or equal to every element in a tuple

  is-least-element-tuple-Prop :
    {n : }  type-Decidable-Total-Order X 
    tuple (type-Decidable-Total-Order X) n  Prop l2
  is-least-element-tuple-Prop {0} x v = raise-unit-Prop l2
  is-least-element-tuple-Prop {succ-ℕ n} x (y  v) =
    product-Prop
      ( leq-Decidable-Total-Order-Prop X x y)
      ( is-least-element-tuple-Prop x v)

  is-least-element-tuple :
    {n : }  type-Decidable-Total-Order X 
    tuple (type-Decidable-Total-Order X) n  UU l2
  is-least-element-tuple x v = type-Prop (is-least-element-tuple-Prop x v)

Properties

If a tuple is sorted, then its tail is also sorted

  is-sorted-tail-is-sorted-tuple :
    {n : } 
    (v : tuple (type-Decidable-Total-Order X) (succ-ℕ n)) 
    is-sorted-tuple v  is-sorted-tuple (tail-tuple v)
  is-sorted-tail-is-sorted-tuple {zero-ℕ} (x  empty-tuple) s = raise-star
  is-sorted-tail-is-sorted-tuple {succ-ℕ n} (x  y  v) s = pr2 s

  is-leq-head-head-tail-is-sorted-tuple :
    {n : }  (v : tuple (type-Decidable-Total-Order X) (succ-ℕ (succ-ℕ n))) 
    is-sorted-tuple v 
    leq-Decidable-Total-Order X (head-tuple v) (head-tuple (tail-tuple v))
  is-leq-head-head-tail-is-sorted-tuple (x  y  v) s = pr1 s

If a tuple v' = y ∷ v is sorted then for all elements x less than or equal to y, x is less than or equal to every element in the tuple

  is-least-element-tuple-is-leq-head-sorted-tuple :
    {n : }
    (x : type-Decidable-Total-Order X)
    (v : tuple (type-Decidable-Total-Order X) (succ-ℕ n)) 
    is-sorted-tuple v  leq-Decidable-Total-Order X x (head-tuple v) 
    is-least-element-tuple x v
  is-least-element-tuple-is-leq-head-sorted-tuple {zero-ℕ} x (y  v) s p =
    p , raise-star
  is-least-element-tuple-is-leq-head-sorted-tuple {succ-ℕ n} x (y  v) s p =
    p ,
    ( is-least-element-tuple-is-leq-head-sorted-tuple
      ( x)
      ( v)
      ( is-sorted-tail-is-sorted-tuple (y  v) s)
      ( transitive-leq-Decidable-Total-Order
        ( X)
        ( x)
        ( y)
        ( head-tuple v)
        ( is-leq-head-head-tail-is-sorted-tuple (y  v) s)
        ( p)))

An equivalent definition of being sorted

  is-sorted-least-element-tuple-Prop :
    {n : }  tuple (type-Decidable-Total-Order X) n  Prop l2
  is-sorted-least-element-tuple-Prop {0} v = raise-unit-Prop l2
  is-sorted-least-element-tuple-Prop {1} v = raise-unit-Prop l2
  is-sorted-least-element-tuple-Prop {succ-ℕ (succ-ℕ n)} (x  v) =
    product-Prop
      ( is-least-element-tuple-Prop x v)
      ( is-sorted-least-element-tuple-Prop v)

  is-sorted-least-element-tuple :
    {n : }  tuple (type-Decidable-Total-Order X) n  UU l2
  is-sorted-least-element-tuple v =
    type-Prop (is-sorted-least-element-tuple-Prop v)

  is-sorted-least-element-tuple-is-sorted-tuple :
    {n : }
    (v : tuple (type-Decidable-Total-Order X) n) 
    is-sorted-tuple v  is-sorted-least-element-tuple v
  is-sorted-least-element-tuple-is-sorted-tuple {0} v x = raise-star
  is-sorted-least-element-tuple-is-sorted-tuple {1} v x = raise-star
  is-sorted-least-element-tuple-is-sorted-tuple
    {succ-ℕ (succ-ℕ n)}
    ( x  y  v)
    ( p , q) =
    is-least-element-tuple-is-leq-head-sorted-tuple x (y  v) q p ,
    is-sorted-least-element-tuple-is-sorted-tuple (y  v) q

  is-sorted-tuple-is-sorted-least-element-tuple :
    {n : }
    (v : tuple (type-Decidable-Total-Order X) n) 
    is-sorted-least-element-tuple v 
    is-sorted-tuple v
  is-sorted-tuple-is-sorted-least-element-tuple {0} v x = raise-star
  is-sorted-tuple-is-sorted-least-element-tuple {1} v x = raise-star
  is-sorted-tuple-is-sorted-least-element-tuple
    {succ-ℕ (succ-ℕ n)}
    (x  y  v)
    (p , q) =
    ( pr1 p) ,
    ( is-sorted-tuple-is-sorted-least-element-tuple (y  v) q)

If the tail of a tuple v is sorted and x ≤ head-tuple v, then v is sorted

  is-sorted-tuple-is-sorted-tail-is-leq-head-tuple :
    {n : }
    (v : tuple (type-Decidable-Total-Order X) (succ-ℕ (succ-ℕ n))) 
    is-sorted-tuple (tail-tuple v) 
    (leq-Decidable-Total-Order X (head-tuple v) (head-tuple (tail-tuple v))) 
    is-sorted-tuple v
  is-sorted-tuple-is-sorted-tail-is-leq-head-tuple (x  y  v) s p = p , s

If an element x is less than or equal to every element of a tuple v, then it is less than or equal to every element of every permutation of v

  is-least-element-fin-sequence-Prop :
    (n : )
    (x : type-Decidable-Total-Order X)
    (fv : fin-sequence (type-Decidable-Total-Order X) n) 
    Prop l2
  is-least-element-fin-sequence-Prop n x fv =
    Π-Prop (Fin n)  k  leq-Decidable-Total-Order-Prop X x (fv k))

  is-least-element-fin-sequence :
    (n : )
    (x : type-Decidable-Total-Order X)
    (fv : fin-sequence (type-Decidable-Total-Order X) n) 
    UU l2
  is-least-element-fin-sequence n x fv =
    type-Prop (is-least-element-fin-sequence-Prop n x fv)

  is-least-element-permute-fin-sequence :
    (n : )
    (x : type-Decidable-Total-Order X)
    (fv : fin-sequence (type-Decidable-Total-Order X) n)
    (a : Permutation n) 
    is-least-element-fin-sequence n x fv 
    is-least-element-fin-sequence n x (fv  map-equiv a)
  is-least-element-permute-fin-sequence n x fv a p k =
    p (map-equiv a k)

  is-least-element-tuple-is-least-element-fin-sequence :
    (n : )
    (x : type-Decidable-Total-Order X)
    (fv : fin-sequence (type-Decidable-Total-Order X) n) 
    is-least-element-fin-sequence n x fv 
    is-least-element-tuple x (tuple-fin-sequence n fv)
  is-least-element-tuple-is-least-element-fin-sequence 0 x fv p = raise-star
  is-least-element-tuple-is-least-element-fin-sequence (succ-ℕ n) x fv p =
    (p (inr star)) ,
    ( is-least-element-tuple-is-least-element-fin-sequence
      ( n)
      ( x)
      ( tail-fin-sequence n fv)
      ( p  inl))

  is-least-element-fin-sequence-is-least-element-tuple :
    (n : )
    (x : type-Decidable-Total-Order X)
    (v : tuple (type-Decidable-Total-Order X) n) 
    is-least-element-tuple x v 
    is-least-element-fin-sequence n x (fin-sequence-tuple n v)
  is-least-element-fin-sequence-is-least-element-tuple
    ( succ-ℕ n)
    ( x)
    ( y  v)
    ( p , q)
    ( inl k) =
    is-least-element-fin-sequence-is-least-element-tuple n x v q k
  is-least-element-fin-sequence-is-least-element-tuple
    ( succ-ℕ n)
    ( x)
    ( y  v)
    ( p , q)
    ( inr star) =
    p

  is-least-element-permute-tuple :
    {n : }
    (x : type-Decidable-Total-Order X)
    (v : tuple (type-Decidable-Total-Order X) n)
    (a : Permutation n) 
    is-least-element-tuple x v 
    is-least-element-tuple x (permute-tuple n v a)
  is-least-element-permute-tuple {n} x v a p =
    is-least-element-tuple-is-least-element-fin-sequence
      ( n)
      ( x)
      ( fin-sequence-tuple n v  map-equiv a)
      ( is-least-element-permute-fin-sequence
        ( n)
        ( x)
        ( fin-sequence-tuple n v)
        ( a)
        ( is-least-element-fin-sequence-is-least-element-tuple n x v p))

Recent changes