Tom de Jong, Nicolai Kraus, Fredrik Nordvall Forsberg, Chuangjie Xu.
April 2025.

We implement Robin Grayson's variant of the decreasing list construction of
exponentials, and a proof that it is not, in general, an ordinal, as this would
imply excluded middle.

Grayson's construction is published as [1] which is essentially Chapter IX of
Grayson's PhD thesis [2].

The "concrete" list-based exponentiation that we consider in
Ordinals.Exponentiation.DecreasingList is essentially Grayson's construction,
except that Grayson does not require the base ordinal α to have a trichotomous
least element. In fact, he does not even require α to have a least element and
consequently restricts to those elements x of α for which there exists an a ≺ x.
We shall refer to this condition as "positively non-minimal" as it is a positive
reformulation of non-minimality.

Unfortunately, Grayson's construction does not always yield an ordinal
constructively as we show by a suitable reduction to excluded middle.

However, if α has a trichotomous least element ⊥, then it is straightforward to
show that x : α is positively non-minimal if and only if ⊥ ≺ x, so that
Grayson's construction coincides with our concrete construction (and hence is
always an ordinal).

Grayson moreover claims that his construction satisfies the recursive equation:
   α ^ₒ β = sup (α ^ₒ (β ↓ b) ×ₒ α) ∨ 𝟙ₒ
which we used to define abstract exponentiation in
Ordinals.Exponentiation.Supremum.
Since this recursive equation uniquely specifies the operation ^ₒ, this implies
that Grayson's construction satisfies the equation precisely when it coincides
with abstract exponentiation.
Now, Grayson's construction is easily to seen have a trichotomous least element,
namely the empty list. But given an ordinal α with a least elements, we show in
Ordinals.Exponentiation.Supremum that if the least element of abstract
exponentiation of α by 𝟙ₒ is trichotomous, then the least element of α must be
too. Hence, the recursive equation cannot hold for Grayson's construction (even
in the very simple case where β = 𝟙ₒ) unless α has a trichotomous least
element, in which case the equation holds indeed, as proved in
Ordinals.Exponentiation.RelatingConstructions.

[1] Robin J. Grayson
    Constructive Well-Orderings
    Mathematical Logic Quarterly
    Volume 28, Issue 33-38
    1982
    Pages 495-504
    https://doi.org/10.1002/malq.19820283304

[2] Robin John Grayson
    Intuitionistic Set Theory
    PhD thesis
    University of Oxford
    1978
    https://doi.org/10.5287/ora-azgxayaor

\begin{code}

{-# OPTIONS --safe --without-K --exact-split --lossy-unification #-}

open import UF.Univalence
open import UF.PropTrunc

module Ordinals.Exponentiation.Grayson
       (ua : Univalence)
       (pt : propositional-truncations-exist)
       where

open import UF.ClassicalLogic
open import UF.FunExt
open import UF.UA-FunExt
open import UF.Subsingletons

private
 fe : FunExt
 fe = Univalence-gives-FunExt ua

 fe' : Fun-Ext
 fe' {𝓤} {𝓥} = fe 𝓤 𝓥

 pe : Prop-Ext
 pe = Univalence-gives-Prop-Ext ua

open import MLTT.List
open import MLTT.List-Properties
open import MLTT.Plus-Properties
open import MLTT.Spartan

open import UF.Base
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.Sets
open import UF.Sets-Properties
open import UF.Subsingletons-FunExt

open import Ordinals.Arithmetic fe
open import Ordinals.AdditionProperties ua
open import Ordinals.Equivalence
open import Ordinals.Notions
open import Ordinals.OrdinalOfOrdinals ua renaming (_≼_ to _≼OO_)
open import Ordinals.Propositions ua
open import Ordinals.Type
open import Ordinals.Underlying
open import Ordinals.WellOrderArithmetic
open import Ordinals.WellOrderTransport

open import Ordinals.Exponentiation.TrichotomousLeastElement ua pt
open import Ordinals.Exponentiation.DecreasingList ua pt

open PropositionalTruncation pt

\end{code}

\begin{code}

is-positively-non-minimal : {A : 𝓤 ̇  } (R : A  A  𝓥 ̇  )  A  𝓤  𝓥 ̇
is-positively-non-minimal {A = A} R x =  a  A ,  R a x

Positively-non-minimal : {A : 𝓤 ̇  } (R : A  A  𝓥 ̇  )  𝓤  𝓥 ̇
Positively-non-minimal R = Σ (is-positively-non-minimal R)

Positively-non-minimal-is-set : {A : 𝓤 ̇  } (R : A  A  𝓥 ̇  )
                               is-set A
                               is-set (Positively-non-minimal R)
Positively-non-minimal-is-set {A = A} R s
 = subsets-of-sets-are-sets A (is-positively-non-minimal R) s ∃-is-prop

Positively-non-minimal-order : {A : 𝓤 ̇  } (R : A  A  𝓥 ̇  )
                              Positively-non-minimal R
                              Positively-non-minimal R
                              𝓥 ̇
Positively-non-minimal-order R (a , _) (a' , _) = R a a'

\end{code}

In an ordinal with a trichotomous least element ⊥, an element x is positively
non-minimal if and only if ⊥ ≺ x.

\begin{code}

is-positively-non-minimal-iff-positive
 : (α : Ordinal 𝓤)
  (( , τ) : has-trichotomous-least-element α)
  (x :  α )  is-positively-non-minimal (underlying-order α) x   ≺⟨ α  x
is-positively-non-minimal-iff-positive α ( , τ) x =
 (∥∥-rec (Prop-valuedness α  x) I) ,  l    , l )
 where
   I : (Σ a   α  , a ≺⟨ α  x)
       ≺⟨ α  x
   I (a , l) = I' (τ a)
    where
     I' : (  a) + ( ≺⟨ α  a)   ≺⟨ α  x
     I' (inl refl) = l
     I' (inr k) = Transitivity α  a x k l

\end{code}

The type of Grayson lists on ordinals α and β is the type of lists over α ×ₒ β
such that the list is (strictly) decreasing in the second component and such
that all the elements in the first component are positively non-minimal.
That is, an element looks like
   (a₀ , b₀) , (a₁ , b₁) , ... , (aₙ , bₙ)
with bₙ ≺ ... ≺ b₁ ≺ b₀ and each aᵢ is positively non-minimal.

We define it a bit more generally below: instead of two ordinals, we just assume
two types and a binary relations on each of them, imposing additional
assumptions only as we need them.

\begin{code}

module _ {A B : 𝓤 ̇  } (R : A  A  𝓥 ̇  ) (R' : B  B  𝓥 ̇  ) where

 is-grayson : List (A × B)  𝓤  𝓥 ̇
 is-grayson l = is-decreasing R' (map pr₂ l)
              × All (is-positively-non-minimal R) (map pr₁ l)

 is-grayson-is-prop : is-prop-valued R'
                     is-prop-valued-family is-grayson
 is-grayson-is-prop p' l =
  ×-is-prop (is-decreasing-is-prop R' p' (map pr₂ l))
            (All-is-prop _  x  ∃-is-prop) (map pr₁ l))

 GraysonList : 𝓤  𝓥 ̇
 GraysonList = Σ l  List (A × B) , is-grayson l

 GraysonList-list : GraysonList  List (A × B)
 GraysonList-list = pr₁

 to-GraysonList-= : is-prop-valued R'
                    {l l' : GraysonList}
                    GraysonList-list l  GraysonList-list l'  l  l'
 to-GraysonList-= p' = to-subtype-= (is-grayson-is-prop p')

 Grayson-order : GraysonList  GraysonList  𝓤  𝓥 ̇
 Grayson-order (l , _) (l' , _) = lex (times.order R R') l l'

 private
  irr : is-irreflexive R
       is-irreflexive R'
       is-irreflexive (times.order R R')
  irr i i' (a , b) (inl q) = i' b q
  irr i i' (a , b) (inr (r , q)) = i a q

 Grayson-order-is-irreflexive : is-irreflexive R
                               is-irreflexive R'
                               is-irreflexive Grayson-order
 Grayson-order-is-irreflexive i i' (l , _) =
  lex-irreflexive (times.order R R') (irr i i') l

 Grayson-order-is-prop : is-set A
                        is-set B
                        is-prop-valued R
                        is-prop-valued R'
                        is-irreflexive R
                        is-irreflexive R'
                        is-prop-valued Grayson-order
 Grayson-order-is-prop s s' p p' i i' (l , _) (l' , _) =
  lex-prop-valued (times.order R R')
                  (×-is-set s s')
                  (times.prop-valued _ _ s' p p' i')
                  (irr i i')
                  l
                  l'

 GraysonList-⊥ : GraysonList
 GraysonList-⊥ = [] , ([]-decr , [])

\end{code}

For comparison with Ordinals.Exponentiation.DecreasingList, it is
convenient to reformulate the type of Grayson lists slightly in an
equivalent way:

\begin{code}

 GraysonList' : 𝓤  𝓥 ̇
 GraysonList' =
  Σ l  List (Positively-non-minimal R × B) , is-decreasing R' (map pr₂ l)

 GraysonList'-list : GraysonList'  List (Positively-non-minimal R × B)
 GraysonList'-list = pr₁

 to-GraysonList'-= : is-prop-valued R'
                    {l l' : GraysonList'}
                    GraysonList'-list l  GraysonList'-list l'  l  l'
 to-GraysonList'-= p' =
  to-subtype-=  l  is-decreasing-is-prop R' p' (map pr₂ l))

 Grayson'-order : GraysonList'  GraysonList'  𝓤  𝓥 ̇
 Grayson'-order (l , _) (l' , _) =
  lex (times.order (Positively-non-minimal-order R) R') l l'

 Grayson'-order-is-prop : is-set A
                         is-set B
                         is-prop-valued R
                         is-prop-valued R'
                         is-irreflexive R
                         is-irreflexive R'
                         is-prop-valued Grayson'-order
 Grayson'-order-is-prop s s' p p' i i' (l , _) (l' , _) =
  lex-prop-valued (times.order (Positively-non-minimal-order R) R')
                  (×-is-set (Positively-non-minimal-is-set R s) s')
                  (times.prop-valued _ _ s'  (x , _) (x' , _)  p x x') p' i')
                  irr'
                  l
                  l'
   where
    irr' : is-irreflexive (times.order (Positively-non-minimal-order R) R')
    irr' (a , b) (inl q) = i' b q
    irr' ((a , _) , b) (inr (r , q)) = i a q

 GraysonLists-agree : is-prop-valued R'  GraysonList  GraysonList'
 GraysonLists-agree R'-is-prop = f , qinvs-are-equivs f (g , η , ε)
   where
    f₀ : (l : List (A × B))(g : is-grayson l)
        List ((Positively-non-minimal R) × B)
    f₀ [] p = []
    f₀ (a , b  l) (δ , (p  ps)) =
     ((a , p) , b)  f₀ l (tail-is-decreasing R' δ , ps)

    f : GraysonList  GraysonList'
    f (l , g) = f₀ l g , f₀-decreasing l g
     where
      f₀-decreasing : (l : List (A × B))(g : is-grayson l)
                     is-decreasing R' (map pr₂ (f₀ l g))
      f₀-decreasing [] g = []-decr
      f₀-decreasing (a , b  []) (δ , (p  ps)) = sing-decr
      f₀-decreasing (a , b  (a' , b')  l) (many-decr q δ , (p  p'  ps)) =
       many-decr q (f₀-decreasing ((a' , b')  l) (δ , (p'  ps)))

    g₀ : (l : List ((Positively-non-minimal R) × B))  List (A × B)
    g₀ [] = []
    g₀ (((a , _) , b)  l) = (a , b)  g₀ l

    g₀-decreasing : (l : List ((Positively-non-minimal R) × B))
                   is-decreasing R' (map pr₂ l)
                   is-decreasing R' (map pr₂ (g₀ l))
    g₀-decreasing [] δ = δ
    g₀-decreasing ((a , p) , b  []) δ = sing-decr
    g₀-decreasing ((a , p) , b  (a' , p') , b'  l) (many-decr q δ) =
     many-decr q (g₀-decreasing ((a' , p') , b'  l) δ)

    g₀-pos-non-minimal : (l : List ((Positively-non-minimal R) × B))
                        All (is-positively-non-minimal R) (map pr₁ (g₀ l))
    g₀-pos-non-minimal [] = []
    g₀-pos-non-minimal ((a , p) , b  []) = (p  [])
    g₀-pos-non-minimal ((a , p) , b  (a' , p') , b'  l) =
     p  (g₀-pos-non-minimal ((a' , p') , b'  l))

    g : GraysonList'  GraysonList
    g (l , δ) = (g₀ l , g₀-decreasing l δ , g₀-pos-non-minimal l)

    η : g   f  id
    η (l , g) = to-GraysonList-= R'-is-prop (η' l g)
     where
      η' : (l : List (A × B))(g : is-grayson l)  g₀ (f₀ l g)  l
      η' [] g = refl
      η' (x  []) (δ , (p  [])) = refl
      η' (x  x'  l) (many-decr q δ , (p  p'  ps)) =
       ap (x ∷_) (η' (x'  l) (δ , (p'  ps)))

    ε : f  g  id
    ε (l , δ) = to-GraysonList'-= R'-is-prop (ε' l δ)
     where
      ε' : (l : List (Positively-non-minimal R × B))
          (δ : is-decreasing R' (map pr₂ l))
          f₀ (g₀ l) (g₀-decreasing l δ , g₀-pos-non-minimal l)  l
      ε' [] δ = refl
      ε' (x  []) δ = refl
      ε' (x  x'  l) (many-decr q δ) = ap (x ∷_) (ε' (x'  l) δ)

 Grayson-orders-agree
  : (p : is-prop-valued R') (l l' : GraysonList)
   Grayson-order l l'
   Grayson'-order ( GraysonLists-agree p  l) ( GraysonLists-agree p  l')
 Grayson-orders-agree p l l' = (I l l' , II l l')
  where
   I : (l l' : GraysonList)
      Grayson-order l l'
      Grayson'-order ( GraysonLists-agree p  l) ( GraysonLists-agree p  l')
   I ([] , _) ((x  l') , (δ , (p  ps))) []-lex = []-lex
   I ((x  l) , (δ , (p  ps))) ((x'  l') , (δ' , (p'  ps'))) (head-lex q) =
    head-lex q
   I ((x  l) , (δ , (p  ps))) ((x  l') , (δ' , (p'  ps'))) (tail-lex refl q) =
    tail-lex (to-×-= (to-subtype-=  _  ∃-is-prop) refl) refl)
             (I (l , tail-is-decreasing R' δ , ps)
                (l' , tail-is-decreasing R' δ' , ps') q)

   II : (l l' : GraysonList)
       Grayson'-order ( GraysonLists-agree p  l) ( GraysonLists-agree p  l')
       Grayson-order l l'
   II ([] , _) ((x  l') , (δ , (p  ps))) []-lex = []-lex
   II ((x  l) , (δ , (p  ps))) ((x'  l') , (δ' , (p'  ps'))) (head-lex q) =
    head-lex q
   II ((x  l) , (δ , (p  ps))) ((x  l') , (δ' , (p'  ps'))) (tail-lex refl q) =
    tail-lex refl
             (II (l , (tail-is-decreasing R' δ , ps))
                 (l' , tail-is-decreasing R' δ' , ps') q)

\end{code}

We defined is-trichotomous-least for ordinals only, so we inline that definition
in the following.

\begin{code}

 GraysonList-has-trichotomous-least-element
  : is-prop-valued R'
   (l : GraysonList)  (GraysonList-⊥  l) + (Grayson-order GraysonList-⊥ l)
 GraysonList-has-trichotomous-least-element p ([] , g) =
  inl (to-GraysonList-= p refl)
 GraysonList-has-trichotomous-least-element p ((_  l) , g) = inr []-lex

\end{code}

We now fix B = 𝟙ₒ, in order to derive properties on the positively
non-minimal elements of A from properties on GraysonList A B.

\begin{code}

module _ {A : 𝓤 ̇  } (R : A  A  𝓥 ̇  ) where

 GList : 𝓤  𝓥 ̇
 GList = GraysonList {B = 𝟙} R  _ _  𝟘)

 A⁺ = Σ a  A , is-positively-non-minimal R a

 R⁺ : A⁺  A⁺  𝓥 ̇
 R⁺ (a , _) (a' , _) = R a a'

 sing : 𝟙 {𝓤 = 𝓤} + A⁺  GList
 sing (inl ) = ([] , []-decr , [])
 sing (inr (a , p)) = ([ (a , ) ] , sing-decr , (p  []))

 sing⁻¹ : GList  𝟙 {𝓤 = 𝓤} + A⁺
 sing⁻¹ ([] , _) = inl 
 sing⁻¹ (((a , )  _) , (q , (p  _))) = inr (a , p)

 sing-retraction : sing⁻¹  sing  id
 sing-retraction (inl ) = refl
 sing-retraction (inr (a , p)) = refl

 sing-section : sing  sing⁻¹  id
 sing-section ([] , []-decr , []) = refl
 sing-section ((a ,   []) , sing-decr , (p  [])) = refl
 sing-section ((a ,   a' ,   l) , many-decr r q , (p  ps)) = 𝟘-elim r

 sing-is-equiv : is-equiv sing
 sing-is-equiv = qinvs-are-equivs sing (sing⁻¹ , sing-retraction , sing-section)

 _≺_ : GList  GList   𝓤  𝓥 ̇
 _≺_ = Grayson-order {B = 𝟙} R  _ _  𝟘)

 sing⁺ : (x y : A⁺)  R⁺ x y  sing (inr x)  sing (inr y)
 sing⁺ x y p = head-lex (inr (refl , p))

\end{code}

Assuming that the order on Grayson lists is a well-order, so is the order on A⁺.

\begin{code}

 R⁺-propvalued : is-prop-valued _≺_  is-prop-valued R⁺
 R⁺-propvalued prop x y p q = ap pr₂ II
  where
   I : head-lex (inr (refl , p))  head-lex (inr (refl , q))
   I = prop (sing (inr x)) (sing (inr y)) (sing⁺ x y p) (sing⁺ x y q)

   II : (refl , p)  (refl , q)
   II = inr-lc (head-lex-lc _ _ _ I)

 R⁺-wellfounded : is-well-founded _≺_  is-well-founded R⁺
 R⁺-wellfounded wf x = I x (wf (sing (inr x)))
  where
   I : (x : A⁺)  is-accessible _≺_ (sing (inr x))  is-accessible R⁺ x
   I x (acc f) = acc  y p  I y (f (sing (inr y)) (sing⁺ y x p)))

 R⁺-extensional : is-extensional _≺_  is-extensional R⁺
 R⁺-extensional ext x y p q = inr-lc III
  where
   I : (x y : A⁺)
      ((z : A⁺)  R⁺ z x  R⁺ z y)
      (l : GList)  l  sing (inr x)  l  sing (inr y)
   I x y e l []-lex = []-lex
   I x y e ((a ,   l') , _ , (q  _)) (head-lex (inr (_ , r))) =
    head-lex (inr (refl , e (a , q) r))

   II : sing (inr x)  sing (inr y)
   II = ext (sing (inr x)) (sing (inr y)) (I x y p) (I y x q)

   III = inr x =⟨ sing-retraction (inr x) ⁻¹ 
         sing⁻¹ (sing (inr x)) =⟨ ap sing⁻¹ II 
         sing⁻¹ (sing (inr y)) =⟨ sing-retraction (inr y) 
         inr y 

 R⁺-transitive : is-transitive _≺_  is-transitive R⁺
 R⁺-transitive trans a₀ a₁ a₂ p q = II I
  where
   I : sing (inr a₀)  sing (inr a₂)
   I = trans (sing (inr a₀)) (sing (inr a₁)) (sing (inr a₂))
             (sing⁺ a₀ a₁ p) (sing⁺ a₁ a₂ q)

   II : sing (inr a₀)  sing (inr a₂)  R⁺ a₀ a₂
   II (head-lex (inr (_ , r))) = r

 R⁺-wellorder : is-well-order _≺_  is-well-order R⁺
 R⁺-wellorder (p , w , e , t) =
  R⁺-propvalued p , R⁺-wellfounded w , R⁺-extensional e , R⁺-transitive t

\end{code}

However, it is a constructive taboo that the subtype of positively non-minimal
elements is always an ordinal, with essentially the same proof as for
subtype-of-positive-elements-an-ordinal-implies-EM in
Ordinals.Exponentiation.Taboos.
Note that we can even restrict to ordinals with a least element.

\begin{code}

subtype-of-positively-non-minimal-elements-an-ordinal-implies-EM
 : ((α : Ordinal (𝓤 ⁺⁺))
    has-least α
    is-well-order
      (subtype-order α (is-positively-non-minimal (underlying-order α))))
  EM 𝓤
subtype-of-positively-non-minimal-elements-an-ordinal-implies-EM {𝓤} hyp = III
 where
  open import Ordinals.OrdinalOfTruthValues fe 𝓤 pe
  open import UF.DiscreteAndSeparated
  open import UF.SubtypeClassifier

  _<_ = subtype-order (OO (𝓤 )) (is-positively-non-minimal _⊲_)

  <-is-prop-valued : is-prop-valued _<_
  <-is-prop-valued =
   subtype-order-is-prop-valued (OO (𝓤 )) (is-positively-non-minimal _⊲_)

  hyp' : is-extensional' _<_
  hyp' = extensional-gives-extensional' _<_
          (extensionality _<_ (hyp (OO (𝓤 )) (𝟘ₒ , 𝟘ₒ-least)))

  Ord⁺ = Σ α  Ordinal (𝓤 ) , is-positively-non-minimal _⊲_ α

  Ωₚ : Ord⁺
  Ωₚ = Ωₒ ,  𝟘ₒ ,  , eqtoidₒ (ua (𝓤 )) fe' 𝟘ₒ (Ωₒ  )
                               (≃ₒ-trans 𝟘ₒ 𝟘ₒ (Ωₒ  ) II I) 
   where
    I : 𝟘ₒ ≃ₒ Ωₒ  
    I = ≃ₒ-sym (Ωₒ  ) 𝟘ₒ (Ωₒ↓-is-id ua )

    II : 𝟘ₒ {𝓤 } ≃ₒ 𝟘ₒ {𝓤}
    II = only-one-𝟘ₒ

  𝟚ₚ : Ord⁺
  𝟚ₚ = 𝟚ₒ ,  𝟘ₒ , inl  , (prop-ordinal-↓ 𝟙-is-prop  ⁻¹  +ₒ-↓-left ) 

  I : (γ : Ord⁺)  (γ < Ωₚ  γ < 𝟚ₚ)
  I (γ , p) = ∥∥-rec (↔-is-prop fe' fe' (<-is-prop-valued (γ , p) Ωₚ)
                                        (<-is-prop-valued (γ , p) 𝟚ₚ)) I' p
   where
    I' : Σ  a  a  γ)  ((γ , p) < Ωₚ)  ((γ , p) < 𝟚ₚ)
    I' (.(γ  c') , (c' , refl)) = I₁ , I₂
     where
      I₁ : ((γ , p) < Ωₚ)  ((γ , p) < 𝟚ₚ)
      I₁ (P , refl) =
       (inr  , eqtoidₒ (ua (𝓤 )) fe' _ _ (≃ₒ-trans (Ωₒ  P) Pₒ (𝟚ₒ  inr ) e₁ e₂))
        where
         Pₒ = prop-ordinal (P holds) (holds-is-prop P)

         e₁ : (Ωₒ  P) ≃ₒ Pₒ
         e₁ = Ωₒ↓-is-id ua P

         e₂ : Pₒ ≃ₒ 𝟚ₒ  inr 
         e₂ = transport⁻¹ (Pₒ ≃ₒ_) (successor-lemma-right 𝟙ₒ)
                          ((prop-ordinal-≃ₒ (holds-is-prop P) 𝟙-is-prop
                                             _  )
                                             _  ≃ₒ-to-fun (Ωₒ  P) Pₒ e₁ c')))

      I₂ : ((γ , p) < 𝟚ₚ)  ((γ , p) < Ωₚ)
      I₂ l = ⊲-⊴-gives-⊲ γ 𝟚ₒ Ωₒ l (𝟚ₒ-leq-Ωₒ ua)

  II : Ω 𝓤   𝟚ₒ 
  II = ap (⟨_⟩  pr₁) (hyp' Ωₚ 𝟚ₚ I)

  III : EM 𝓤
  III = Ω-discrete-gives-EM fe' pe
         (equiv-to-discrete
           (idtoeq (𝟙 + 𝟙) (Ω 𝓤) (II ⁻¹))
           (+-is-discrete 𝟙-is-discrete 𝟙-is-discrete))

\end{code}

Hence, putting everything together, it is also a constructive taboo
that GraysonList α β is an ordinal whenever α and β are.

\begin{code}

GraysonList-always-ordinal-implies-EM
 : ((α β : Ordinal (𝓤 ⁺⁺))
    has-least α
    is-well-order (Grayson-order (underlying-order α) (underlying-order β)))
  EM 𝓤
GraysonList-always-ordinal-implies-EM {𝓤} hyp = II
 where
  I : (α : Ordinal (𝓤 ⁺⁺))
     has-least α
     is-well-order
       (subtype-order α (is-positively-non-minimal (underlying-order α)))
  I α h = R⁺-wellorder (underlying-order α) (hyp α 𝟙ₒ h)

  II : EM 𝓤
  II = subtype-of-positively-non-minimal-elements-an-ordinal-implies-EM I

\end{code}

Conversely, under the assumption of excluded middle, GraysonList α β
is always an ordinal, because excluded middle implies either α = 𝟘₀,
or α has a least trichotomous element. And if α has a least
trichotomous element, then the notions of being positive and being
positively non-minimal collapses, hence in this case the type of
Grayson lists and our notion of concrete exponentiation coincide.

\begin{code}

trichotomous-least-implies-positive-and-pos-non-minimal-coincide
 : (α : Ordinal 𝓤) (h : has-trichotomous-least-element α)
  Positively-non-minimal (underlying-order α)   α ⁺[ h ] 
trichotomous-least-implies-positive-and-pos-non-minimal-coincide α ( , τ)
 = Σ-cong III
  where
   I : (x :  α )   a   α  , a ≺⟨ α  x   ≺⟨ α  x
   I x = lr-implication (is-positively-non-minimal-iff-positive α ( , τ) x)

   II : (x :  α )   ≺⟨ α  x   a   α  , a ≺⟨ α  x
   II x = rl-implication (is-positively-non-minimal-iff-positive α ( , τ) x)

   III : (x :  α )  ( a   α  , a ≺⟨ α  x)   ≺⟨ α  x
   III x = logically-equivalent-props-are-equivalent ∃-is-prop
                                                     (Prop-valuedness α  x)
                                                     (I x)
                                                     (II x)

GraysonList'-is-concrete-exp-for-trichotomous-least-base
 : (α β : Ordinal 𝓤) (h : has-trichotomous-least-element α)
  GraysonList' (underlying-order α) (underlying-order β)
     exponentiationᴸ α h β 
GraysonList'-is-concrete-exp-for-trichotomous-least-base α β h
 = Σ-bicong  l  is-decreasing _≺β_ (map pr₂ l))
             l  is-decreasing _≺β_ (map pr₂ l))
            (map  𝕗  ,  map-equiv (⌜⌝-is-equiv 𝕗))
            𝕘
 where
  _≺β_ = (underlying-order β)
  αₚ = Positively-non-minimal (underlying-order α)

  𝕗 : αₚ ×  β    α ⁺[ h ]  ×  β 
  𝕗 = ×-cong
       (trichotomous-least-implies-positive-and-pos-non-minimal-coincide α h)
       (≃-refl  β )

  𝕘 : (l : List (αₚ ×  β  ))
     is-decreasing _≺β_ (map pr₂ l)  is-decreasing _≺β_ (map pr₂ (map  𝕗  l))
  𝕘 l = transport⁻¹  -  is-decreasing _≺β_ (map pr₂ l)  is-decreasing _≺β_ -)
                    ((map-∘  𝕗  pr₂ l) ⁻¹)
                    (≃-refl _)

GraysonList-is-exponentiationᴸ-for-trichotomous-least-base
 : (α β : Ordinal 𝓤) (h : has-trichotomous-least-element α)
  GraysonList (underlying-order α) (underlying-order β)
     exponentiationᴸ α h β 
GraysonList-is-exponentiationᴸ-for-trichotomous-least-base α β h =
 GraysonLists-agree (underlying-order α) (underlying-order β) (Prop-valuedness β)
  GraysonList'-is-concrete-exp-for-trichotomous-least-base α β h

GraysonList'-order-is-exponentiationᴸ-order-for-trichotomous-least-base
 : (α β : Ordinal 𝓤) (h : has-trichotomous-least-element α)
  (let f =  GraysonList'-is-concrete-exp-for-trichotomous-least-base α β h )
  (l l' : GraysonList' (underlying-order α) (underlying-order β))
  Grayson'-order _ _ l l'  (f l ≺⟨ exponentiationᴸ α h β  f l')
GraysonList'-order-is-exponentiationᴸ-order-for-trichotomous-least-base
 α β h l l' = I l l' , II l l'
  where
   f =  GraysonList'-is-concrete-exp-for-trichotomous-least-base α β h 

   I : (l l' : GraysonList' (underlying-order α) (underlying-order β))
      (Grayson'-order _ _ l l')
      underlying-order (exponentiationᴸ α h β) (f l) (f l')
   I (l , p) (l' , p') []-lex = []-lex
   I (l , p) (l' , p') (head-lex q) = head-lex q
   I ((x  l) , p) ((x'  l') , p') (tail-lex refl q) =
    tail-lex refl
             (I (l , tail-is-decreasing _ p) (l' , tail-is-decreasing _ p') q)

   II : (l l' : GraysonList' (underlying-order α) (underlying-order β))
       underlying-order (exponentiationᴸ α h β) (f l) (f l')
       (Grayson'-order _ _ l l')
   II ([] , p) ((x  l') , p') q = []-lex
   II ((x  l) , p) ((x'  l') , p') (head-lex q) = head-lex q
   II ((x  l) , p) ((x'  l') , p') (tail-lex r q) =
    tail-lex (equivs-are-lc _ (⌜⌝-is-equiv _) r )
             (II (l , tail-is-decreasing _ p) (l' , tail-is-decreasing _ p') q)

GraysonList-order-is-exponentiationᴸ-order-for-trichotomous-least-base
 : (α β : Ordinal 𝓤) (h : has-trichotomous-least-element α)
  (let f =  GraysonList-is-exponentiationᴸ-for-trichotomous-least-base α β h )
  (l l' : GraysonList (underlying-order α) (underlying-order β))
  (Grayson-order _ _ l l')  (f l ≺⟨ exponentiationᴸ α h β  f l')
GraysonList-order-is-exponentiationᴸ-order-for-trichotomous-least-base α β h l l' =
 logically-equivalent-props-are-equivalent I II
  (lr-implication III) (rl-implication III)
  where
   f =  GraysonList-is-exponentiationᴸ-for-trichotomous-least-base α β h 
   _≺α_ = underlying-order α
   _≺β_ = underlying-order β
   _≺exp_ = underlying-order (exponentiationᴸ α h β)

   I : is-prop (Grayson-order _≺α_ _≺β_ l l')
   I = Grayson-order-is-prop _≺α_ _≺β_
                             (underlying-type-is-set fe α)
                             (underlying-type-is-set fe β)
                             (Prop-valuedness α)
                             (Prop-valuedness β)
                             (Irreflexivity α)
                             (Irreflexivity β)
                             l l'

   II : is-prop (f l ≺exp f l')
   II = Prop-valuedness (exponentiationᴸ α h β) (f l) (f l')

   III : Grayson-order _≺α_ _≺β_ l l'  (f l ≺exp f l')
   III =
    ↔-trans
     (Grayson-orders-agree _≺α_ _≺β_ (Prop-valuedness β) l l')
     (GraysonList'-order-is-exponentiationᴸ-order-for-trichotomous-least-base
       α β h _ _)

GraysonList-is-ordinal-if-base-has-trichotomous-least
 : (α β : Ordinal 𝓤)
  has-trichotomous-least-element α
  is-well-order (Grayson-order (underlying-order α) (underlying-order β))
GraysonList-is-ordinal-if-base-has-trichotomous-least α β h =
 order-transfer-lemma₄.well-order← fe
  (GraysonList _ _)  exponentiationᴸ α h β 
  (Grayson-order _ _) (underlying-order (exponentiationᴸ α h β))
  (GraysonList-is-exponentiationᴸ-for-trichotomous-least-base α β h)
  (GraysonList-order-is-exponentiationᴸ-order-for-trichotomous-least-base α β h)
  (is-well-ordered (exponentiationᴸ α h β))

\end{code}

Since GraysonList 𝟘ₒ β = 𝟙, we do have that GraysonList 𝟘ₒ β is
always an ordinal.

\begin{code}

GraysonList-is-𝟙-if-base-zero
 : (β : Ordinal 𝓤)
  GraysonList (underlying-order 𝟘ₒ) (underlying-order β)  𝟙 {𝓤}
GraysonList-is-𝟙-if-base-zero β = f , qinvs-are-equivs f (g , η , ε)
 where
  f : GraysonList (underlying-order 𝟘ₒ) (underlying-order β)  𝟙
  f _ = 

  g : 𝟙  GraysonList (underlying-order 𝟘ₒ) (underlying-order β)
  g _ = GraysonList-⊥ _ _

  η : g  f  id
  η ([] , ([]-decr , [])) = refl
  η (((a , b)  l) , _) = 𝟘-elim a

  ε : f  g  id
  ε x = refl

GraysonOrder-is-𝟘-if-base-zero
 : (β : Ordinal 𝓤)
   (l l' : GraysonList (underlying-order 𝟘ₒ) (underlying-order β))
  Grayson-order (underlying-order 𝟘ₒ) (underlying-order β) l l'  𝟘 {𝓤}
GraysonOrder-is-𝟘-if-base-zero β l l' =
 empty-≃-𝟘
  (is-irreflexive'-if-irreflexive
    (Grayson-order _ _)
    (Grayson-order-is-irreflexive _ _ (Irreflexivity 𝟘ₒ) (Irreflexivity β))
    (equiv-to-prop (GraysonList-is-𝟙-if-base-zero β) 𝟙-is-prop l l'))

GraysonList-is-ordinal-if-base-zero
 : (β : Ordinal 𝓤)
  is-well-order (Grayson-order (underlying-order 𝟘ₒ) (underlying-order β))
GraysonList-is-ordinal-if-base-zero β =
 order-transfer-lemma₄.well-order← fe
  (GraysonList _ _) 𝟙
  (Grayson-order (underlying-order 𝟘ₒ) (underlying-order β))
  (underlying-order 𝟙ₒ)
  (GraysonList-is-𝟙-if-base-zero β)
  (GraysonOrder-is-𝟘-if-base-zero β)
  (is-well-ordered 𝟙ₒ)

\end{code}

We are now in a position to prove the converse of
GraysonList-always-ordinal-implies-EM:

\begin{code}

EM-implies-GraysonList-is-ordinal
 : EM 𝓤
  (α β : Ordinal 𝓤)
  is-well-order (Grayson-order (underlying-order α) (underlying-order β))
EM-implies-GraysonList-is-ordinal em α β = I II
 where
  I : has-trichotomous-least-element-or-is-zero α
     is-well-order (Grayson-order (underlying-order α) (underlying-order β))
  I (inl h) = GraysonList-is-ordinal-if-base-has-trichotomous-least α β h
  I (inr refl) = GraysonList-is-ordinal-if-base-zero β

  II : has-trichotomous-least-element-or-is-zero α
  II = EM-gives-Has-trichotomous-least-element-or-is-zero em α

\end{code}