{-# OPTIONS --warning=error --safe --without-K #-} open import LogicalFormulae open import Orders open import Maybe open import Agda.Primitive using (Level; lzero; lsuc; _⊔_) open import Vectors open import Numbers.Naturals.Naturals open import Numbers.Naturals.Order module KeyValue where record ReducedMap {a b c : _} (keys : Set a) (values : Set b) (keyOrder : TotalOrder {_} {c} keys) (min : keys) : Set (a ⊔ b ⊔ c) record ReducedMap {a} {b} {c} keys values keyOrder min where inductive field firstEntry : values next : Maybe (Sg keys (λ nextKey → (ReducedMap keys values keyOrder nextKey) && (TotalOrder._<_ keyOrder min nextKey))) addReducedMap : {a b c : _} → {keys : Set a} → {values : Set b} → {keyOrder : TotalOrder {_} {c} keys} → {min : keys} → (k : keys) → (v : values) → (m : ReducedMap {a} {b} keys values keyOrder min) → ReducedMap keys values keyOrder (TotalOrder.min keyOrder min k) addReducedMap {keyOrder = keyOrder} {min} k v m with TotalOrder.totality keyOrder min k addReducedMap {keyOrder = keyOrder} {min} k v record { firstEntry = firstEntry ; next = no } | inl (inl min