open import Level
open import Data.Bool hiding (_≤_ ; _<_ ; _≤?_)
open import Data.Bool.Properties
open import Data.Nat
open import Data.Nat.Properties
open import Data.Nat.Induction
open import Data.Sum
open import Data.Unit
open import Data.Empty
open import Relation.Binary
open import Relation.Binary.Definitions
open import Relation.Binary.PropositionalEquality hiding (J)
open import Relation.Nullary
open import Data.Product
open import Relation.Binary.Structures
open import Data.Fin hiding (_+_ ; _<_ ; _≤_)
open import Function
open import Relation.Binary.Reasoning.Syntax
open import Data.Fin.Properties using (fromℕ<-toℕ ; toℕ-fromℕ< ; toℕ-injective)
open ≡-Reasoning renaming (begin_ to ≡begin_ ; _∎ to _≡∎)
open import Eser.Card
open import Eser.Signature.Definitions
open import Eser.Signature.MainTheorem
open import Eser.Signature.JumpEnum
open import Eser.Signature.Properties
open import Eser.Equivalences
module Eser.Signature.EnumOrderingProperties
{μ' ζ' : ℕ∞}
(S : Signature (suc∞ μ') (suc∞ ζ'))
where
import Eser.Signature.Recursion
open EquivShorthandsForEnumSet (infTermAlgEnum {μ'} {ζ'} S)
private
OT : ℕ → ℕ → Set
OT = OpenTerms {suc∞ μ'} {suc∞ ζ'} S
open Eser.Signature.MainTheorem.MainTheoremProof {μ'} {ζ'} S
smallerWeightSmallerIdx
: {wₐ wₓ : ℕ}
→ (a : C wₐ)
→ (x : C wₓ)
→ wₐ < wₓ
→ (φ (wₐ , a)) < (φ (wₓ , x))
giveArgBigger
: {wₐ wₜ : ℕ}
→ (a : C wₐ)
→ (t : OT wₜ 1)
→ (φ (wₐ , a)) < (φ (wₐ + wₜ , giveArg t a))
smallerWeightSmallerIdx {wₐ} {wₓ} a x wₐ<wₓ = ans
where
α : (Σ[ w ∈ ℕ ] C w) → (Σ[ i ∈ ℕ ] C (j i))
α = ≃-to $ jumpOver⊥s C J ¬C0 a₀
β : (Σ[ i ∈ ℕ ] C (j i)) → (Σ[ i ∈ ℕ ] (Fin $ ℕ.suc $ z i))
β = ≃-to $ rewr-≃-rightOf-Σ $ Cw-to-Finz
γ : (Σ[ i ∈ ℕ ] (Fin $ ℕ.suc $ z i)) → ℕ
γ = ≃-to $ Σfin-inf-inhabited z
check : φ ≡ γ ∘ β ∘ α
check = refl
iₐ : ℕ
iₐ = proj₁ $ α (wₐ , a)
iₓ : ℕ
iₓ = proj₁ $ α (wₓ , x)
H₁ : iₐ < iₓ
H₁ = jumpOver⊥s-mono C J ¬C0 a₀ {wₐ} {wₓ} a x wₐ<wₓ
iₐ' : ℕ
iₐ' = proj₁ $ β $ α (wₐ , a)
H₂ : iₐ ≡ iₐ'
H₂ = refl
iₓ' : ℕ
iₓ' = proj₁ $ β $ α (wₓ , x)
H₃ : iₓ ≡ iₓ'
H₃ = refl
H₄ : iₐ' < iₓ'
H₄ = H₁
ans : φ (wₐ , a) < φ (wₓ , x)
ans = Σfin-inf-inhabited-mono z H₁ (proj₂ $ β $ α (wₐ , a))
(proj₂ $ β $ α $ (wₓ , x))
giveArgBigger {wₐ} {wₜ} a t = smallerWeightSmallerIdx a x wₐ<wₓ
where
wₓ : ℕ
wₓ = wₐ + wₜ
x : C wₓ
x = giveArg t a
wₐ<wₓ : wₐ < wₐ + wₜ
wₐ<wₓ = Data.Nat.Properties.m<m+n wₐ $ allTermsNonzeroWeight S t