{-# OPTIONS --cubical --exact-split #-}
module OnLengthOrder where
open import Agda.Primitive
open import Cubical.Relation.Nullary
open import Cubical.Foundations.Everything
open import Cubical.Data.Nat.Order
open import Cubical.Induction.WellFounded
open import Cubical.HITs.FiniteMultiset
open import FMSetUniv
open import Cubical.Data.Sum.Base
import Cubical.Data.Empty as ⊥
private
variable
ℓ : Level
A : Type ℓ
private
variable
a b c d e : Level
B : Set b
C : Set c
D : Set d
E : Set e
infixl 1 _on_
_on_ : (B → B → C) → (D → B) → (D → D → C)
_*_ on f = \x y -> f x * f y
module _ (f : B → D) where
accessible : ∀ {∼ : Rel D ℓ} {x} → Acc ∼ (f x) → Acc (∼ on f) x
accessible (acc rs) = acc (λ y fy<fx → accessible (rs (f y) fy<fx))
wellFounded : {∼ : Rel D ℓ} → WellFounded ∼ → WellFounded (∼ on f)
wellFounded wf x = accessible (wf (f x))
module _ {A : Type ℓ} where
open Length {A = A}
_<l_ : FMSet A → FMSet A → Type
_<l_ = _<_ on length
<l-wellfounded : WellFounded _<l_
<l-wellfounded = wellFounded length <-wellfounded