open import Graded.Modality
open import Graded.Mode
open import Graded.Usage.Restrictions
open import Definition.Typed.Variant
open import Graded.Usage.Restrictions.Natrec
module Graded.Heap.Reduction.Inversion
{a b} {M : Set a} {Mode : Set b}
{π : Modality M}
{π : IsMode Mode π}
(type-variant : Type-variant)
(UR : Usage-restrictions π π)
(open Usage-restrictions UR)
(factoring-nr :
β¦ has-nr : Nr-available β¦ β
Is-factoring-nr M (Natrec-mode-Has-nr π has-nr))
(β£Ξ΅β£ : M)
where
open Type-variant type-variant
open Modality π
open import Definition.Untyped M
open import Definition.Untyped.Properties M
open import Graded.Heap.Untyped type-variant UR factoring-nr β£Ξ΅β£
open import Graded.Heap.Reduction type-variant UR factoring-nr β£Ξ΅β£
open import Tools.Empty
open import Tools.Fin
open import Tools.Function
open import Tools.Nat
open import Tools.Product
open import Tools.PropositionalEquality
open import Tools.Relation
open import Tools.Sum
private variable
m n mβ² nβ² nβ³ k : Nat
H : Heap _ _
x : Fin _
A B t u v w : Term _
l : Lvl _
Ο Οβ² : Wk _ _
S : Stack _
s : State _ _ _
sβ² : Strength
lβ lβ : Universe-level
p pβ² q qβ² r : M
opaque
βΎβ-inv-var :
β¨ H , var x , Ο , S β© βΎβ s β
β Ξ» p β β£ S β£β‘ p Γ State.stack s β‘ S Γ
H β’ wkVar Ο x β¦[ p ] State.head s , State.env s β¨Ύ State.heap s
βΎβ-inv-var (var x y) = _ , x , refl , y
βΎβ-inv-var (ββ ())
opaque
β’β-inv-var :
β¨ H , var x , Ο , S β© β’β s β
State.heap s β‘ H Γ State.stack s β‘ S Γ
H β’ wkVar Ο x β¦ (State.head s , State.env s)
β’β-inv-var (var x) = refl , refl , x
β’β-inv-var (ββ ())
opaque
ββ-inv-lower :
β¨ H , lower t , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , lowerβ β S β©
ββ-inv-lower lowerβ = refl
opaque
ββ-inv-β :
β¨ H , t ββ¨ p β© u , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , ββ p u Ο β S β©
ββ-inv-β appβ = refl
opaque
ββ-inv-fst :
β¨ H , fst p t , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , fstβ p β S β©
ββ-inv-fst fstβ = refl
opaque
ββ-inv-snd :
β¨ H , snd p t , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , sndβ p β S β©
ββ-inv-snd sndβ = refl
opaque
ββ-inv-prodrec :
β¨ H , prodrec r p q A t u , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , prodrecβ r p q A u Ο β S β©
ββ-inv-prodrec prodrecβ = refl
opaque
ββ-inv-natrec :
β¨ H , natrec p q r A u v t , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , natrecβ p q r A u v Ο β S β©
ββ-inv-natrec natrecβ = refl
opaque
ββ-inv-unitrec :
β¨ H , unitrec p q A t u , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , unitrecβ p q A u Ο β S β© Γ Β¬ UnitΚ·-Ξ·
ββ-inv-unitrec (unitrecβ x) = refl , x
opaque
ββ-inv-emptyrec :
β¨ H , emptyrec p A t , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , emptyrecβ p A Ο β S β©
ββ-inv-emptyrec emptyrecβ = refl
opaque
ββ-inv-J :
β¨ H , J p q A u B v w t , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , Jβ p q A u B v w Ο β S β©
ββ-inv-J Jβ = refl
opaque
ββ-inv-K : β¨ H , K p A u B v t , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , Kβ p A u B v Ο β S β©
ββ-inv-K Kβ = refl
opaque
ββ-inv-[]-cong :
β¨ H , []-cong sβ² l A u v t , Ο , S β© ββ s β
s β‘ β¨ H , t , Ο , []-congβ sβ² l A u v Ο β S β©
ββ-inv-[]-cong []-congβ = refl
opaque
βα΅₯-inv-lift :
{H : Heap k mβ²} {t : Term nβ²} {s : State _ m n} β
β¨ H , lift t , Ο , S β© βα΅₯ s β
β Ξ» Sβ² β Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
S β‘ lowerβ β Sβ² Γ substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , t , Ο , Sβ² β©
βα΅₯-inv-lift liftβ = _ , refl , refl , refl , refl
opaque
βα΅₯-inv-lift-lowerβ :
{H : Heap k mβ²} {t : Term nβ²} {s : State _ m n} β
β¨ H , lift t , Ο , lowerβ β S β© βα΅₯ s β
Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , t , Ο , S β©
βα΅₯-inv-lift-lowerβ d =
case βα΅₯-inv-lift d of Ξ» where
(_ , refl , refl , refl , refl) β
refl , refl , refl
opaque
βα΅₯-inv-lam :
{H : Heap k mβ²} {t : Term (1+ nβ²)} {s : State _ m n} β
β¨ H , lam p t , Ο , S β© βα΅₯ s β
ββ
Ξ» k q u (Οβ² : Wk _ k) Sβ² β β£ Sβ² β£β‘ q Γ S β‘ ββ p u Οβ² β Sβ² Γ
Ξ£ (m β‘ 1+ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ 1+ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘
β¨ H β (q Β· p , u , Οβ²) , t , lift Ο , wk1Λ’ Sβ² β©
βα΅₯-inv-lam (lamβ x) = _ , _ , _ , _ , _ , x , refl , refl , refl , refl
opaque
βα΅₯-inv-lam-ββ :
{H : Heap k mβ²} {t : Term (1+ nβ²)} {s : State _ m n} β
β¨ H , lam p t , Ο , ββ q u Οβ² β S β© βα΅₯ s β
β Ξ» q β β£ S β£β‘ q Γ
Ξ£ (m β‘ 1+ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ 1+ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘
β¨ H β (q Β· p , u , Οβ²) , t , lift Ο , wk1Λ’ S β©
βα΅₯-inv-lam-ββ d =
case βα΅₯-inv-lam d of Ξ» {
(_ , _ , _ , _ , _ , β£Sβ£β‘ , refl , refl , refl , refl) β
_ , β£Sβ£β‘ , refl , refl , refl }
opaque
βα΅₯-inv-prodΛ’ :
{H : Heap k mβ²} {t : Term nβ²} {s : State _ m n} β
β¨ H , prodΛ’ p t u , Ο , S β© βα΅₯ s β
β Ξ» Sβ² β Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
(S β‘ fstβ p β Sβ² Γ substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , t , Ο , Sβ² β© β
S β‘ sndβ p β Sβ² Γ substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , u , Ο , Sβ² β©)
βα΅₯-inv-prodΛ’ prodΛ’ββ = _ , refl , refl , injβ (refl , refl)
βα΅₯-inv-prodΛ’ prodΛ’ββ = _ , refl , refl , injβ (refl , refl)
opaque
βα΅₯-inv-prodΛ’-fstβ :
{H : Heap k mβ²} {t : Term nβ²} {s : State _ m n} β
β¨ H , prodΛ’ p t u , Ο , fstβ q β S β© βα΅₯ s β
Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , t , Ο , S β©
βα΅₯-inv-prodΛ’-fstβ d =
case βα΅₯-inv-prodΛ’ d of Ξ» where
(_ , refl , refl , injβ (refl , refl)) β
refl , refl , refl
(_ , _ , _ , injβ (() , _))
opaque
βα΅₯-inv-prodΛ’-sndβ :
{H : Heap k mβ²} {t : Term nβ²} {s : State _ m n} β
β¨ H , prodΛ’ p t u , Ο , sndβ q β S β© βα΅₯ s β
Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , u , Ο , S β©
βα΅₯-inv-prodΛ’-sndβ d =
case βα΅₯-inv-prodΛ’ d of Ξ» where
(_ , _ , _ , injβ (() , _))
(_ , refl , refl , injβ (refl , refl)) β
refl , refl , refl
opaque
βα΅₯-inv-prodΚ· :
{H : Heap k mβ²} {t u : Term nβ²} {s : State _ m n} β
β¨ H , prodΚ· p t u , Ο , S β© βα΅₯ s β
ββ Ξ» k r q qβ² A v (Οβ² : Wk _ k) Sβ² β β£ Sβ² β£β‘ qβ² Γ S β‘ prodrecβ r p q A v Οβ² β Sβ² Γ
Ξ£ (m β‘ 2+ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ 2+ k) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘
β¨ H β (qβ² Β· r Β· p , t , Ο) β (qβ² Β· r , u , step Ο) , v
, liftn Οβ² 2 , wk2Λ’ Sβ² β©
βα΅₯-inv-prodΚ· (prodΚ·β x) =
_ , _ , _ , _ , _ , _ , _ , _ , x , refl , refl , refl , refl
opaque
βα΅₯-inv-prodΚ·-prodrecβ :
{H : Heap k mβ²} {v : Term (2+ nβ³)} {s : State _ m n} β
β¨ H , prodΚ· p t u , Ο , prodrecβ r pβ² q A v Οβ² β S β© βα΅₯ s β
β Ξ» qβ² β β£ S β£β‘ qβ² Γ
Ξ£ (m β‘ 2+ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ 2+ nβ³) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘
β¨ H β (qβ² Β· r Β· p , t , Ο) β (qβ² Β· r , u , step Ο) , v
, liftn Οβ² 2 , wk2Λ’ S β©
βα΅₯-inv-prodΚ·-prodrecβ d =
case βα΅₯-inv-prodΚ· d of Ξ» {
(_ , _ , _ , _ , _ , _ , _ , _ , β£Sβ£β‘ , refl , refl , refl , refl) β
_ , β£Sβ£β‘ , refl , refl , refl}
opaque
βα΅₯-inv-zero :
{H : Heap k mβ²} {s : State _ m n} β
β¨ H , zero , Ο , S β© βα΅₯ s β
ββ Ξ» nβ² p q r A u v (Οβ² : Wk _ nβ²) Sβ² β
S β‘ natrecβ p q r A u v Οβ² β Sβ² Γ
Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , u , Οβ² , Sβ² β©
βα΅₯-inv-zero zeroβ =
_ , _ , _ , _ , _ , _ , _ , _ , _ , refl , refl , refl , refl
opaque
βα΅₯-inv-zero-natrecβ :
{H : Heap k mβ²} {u : Term nβ²} {s : State _ m n} β
β¨ H , zero , Ο , natrecβ p q r A u v Οβ² β S β© βα΅₯ s β
Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , u , Οβ² , S β©
βα΅₯-inv-zero-natrecβ d =
case βα΅₯-inv-zero d of Ξ» {
(_ , _ , _ , _ , _ , _ , _ , _ , _
, refl , refl , refl , refl) β
refl , refl , refl }
opaque
βα΅₯-inv-suc :
{H : Heap k mβ²} {t : Term nβ²} {s : State _ m n} β
β¨ H , suc t , Ο , S β© βα΅₯ s β
βββ Ξ» nβ² p q r qβ² pβ² A u v (Οβ² : Wk _ nβ²) Sβ² β
β£ Sβ² β£β‘ qβ² Γ β£natrec p , r β£β‘ pβ² Γ
S β‘ natrecβ p q r A u v Οβ² β Sβ² Γ
Ξ£ (m β‘ 2+ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ 2+ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘
β¨ H β (qβ² Β· pβ² , t , Ο)
β (qβ² Β· r , natrec p q r (wk (lift (step id)) A)
(wk1 u) (wk (liftn (step id) 2) v) (var x0)
, lift Οβ²)
, v , liftn Οβ² 2 , wk2Λ’ Sβ² β©
βα΅₯-inv-suc (sucβ β£Sβ£β‘ β£nrβ£β‘) =
_ , _ , _ , _ , _ , _ , _ , _ , _ , _ , _ , β£Sβ£β‘ , β£nrβ£β‘ , refl , refl , refl , refl
opaque
βα΅₯-inv-suc-natrecβ :
{H : Heap k mβ²} {u : Term nβ²} {s : State _ m n} β
β¨ H , suc t , Ο , natrecβ p q r A u v Οβ² β S β© βα΅₯ s β
ββ Ξ» qβ² pβ² β β£ S β£β‘ qβ² Γ β£natrec p , r β£β‘ pβ² Γ
Ξ£ (m β‘ 2+ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ 2+ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘
β¨ H β (qβ² Β· pβ² , t , Ο)
β (qβ² Β· r , natrec p q r (wk (lift (step id)) A) (wk1 u)
(wk (liftn (step id) 2) v) (var x0)
, lift Οβ²)
, v , liftn Οβ² 2 , wk2Λ’ S β©
βα΅₯-inv-suc-natrecβ d =
case βα΅₯-inv-suc d of Ξ» {
(_ , _ , _ , _ , _ , _ , _ , _ , _ , _ , _
, β£Sβ£β‘ , β£nrβ£β‘ , refl , refl , refl , refl) β
_ , _ , β£Sβ£β‘ , β£nrβ£β‘ , refl , refl , refl}
opaque
βα΅₯-inv-starΚ· :
{H : Heap k mβ²} {s : State _ m n} β
β¨ H , starΚ· , Ο , S β© βα΅₯ s β
ββ Ξ» nβ² p q A u (Οβ² : Wk _ nβ²) Sβ² β
S β‘ unitrecβ p q A u Οβ² β Sβ² Γ
ββ Ξ» (mβ‘ : m β‘ mβ²) (nβ‘ : n β‘ nβ²) β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , u , Οβ² , Sβ² β©
βα΅₯-inv-starΚ· starΚ·β =
_ , _ , _ , _ , _ , _ , _ , refl , refl , refl , refl
opaque
βα΅₯-inv-starΚ·-unitrecβ :
{H : Heap k mβ²} {u : Term nβ²} {s : State _ m n} β
β¨ H , starΚ· , Ο , unitrecβ p q A u Οβ² β S β© βα΅₯ s β
ββ Ξ» (mβ‘ : m β‘ mβ²) (nβ‘ : n β‘ nβ²) β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , u , Οβ² , S β©
βα΅₯-inv-starΚ·-unitrecβ d =
case βα΅₯-inv-starΚ· d of Ξ» {
(_ , _ , _ , _ , _ , _ , _ , refl , refl , refl , refl) β
refl , refl , refl }
opaque
βα΅₯-inv-unitrec-Ξ· :
{H : Heap k mβ²} {s : State _ m n} β
β¨ H , unitrec p q A t u , Ο , S β© βα΅₯ s β
UnitΚ·-Ξ· Γ ββ Ξ» (mβ‘ : m β‘ mβ²) (nβ‘ : n β‘ nβ²) β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , u , Ο , S β©
βα΅₯-inv-unitrec-Ξ· (unitrec-Ξ·β x) = x , refl , refl , refl
opaque
βα΅₯-inv-rfl :
{H : Heap k mβ²} {s : State _ m n} β
β¨ H , rfl , Ο , S β© βα΅₯ s β
ββ
Ξ» Sβ² A t u Οβ² β Ξ£ (m β‘ mβ²) Ξ» mβ‘ β
(ββ Ξ» p q B v β S β‘ Jβ p q A t B u v Οβ² β Sβ² Γ
subst (Ξ» m β State _ m _) mβ‘ s β‘ β¨ H , u , Οβ² , Sβ² β©) β
(ββ Ξ» p B β S β‘ Kβ p A t B u Οβ² β Sβ² Γ
subst (Ξ» m β State _ m _) mβ‘ s β‘ β¨ H , u , Οβ² , Sβ² β©) β
(ββ Ξ» sβ² l β S β‘ []-congβ sβ² l A t u Οβ² β Sβ² Γ
subst (Ξ» m β State _ m _) mβ‘ s β‘ β¨ H , rfl , Οβ² , Sβ² β©)
βα΅₯-inv-rfl rflββ±Ό =
_ , _ , _ , _ , _ , refl , injβ (_ , _ , _ , _ , refl , refl)
βα΅₯-inv-rfl rflββ =
_ , _ , _ , _ , _ , refl , injβ (injβ (_ , _ , refl , refl))
βα΅₯-inv-rfl rflββ =
_ , _ , _ , _ , _ , refl , injβ (injβ (_ , _ , refl , refl))
opaque
βα΅₯-inv-rfl-Jβ :
{H : Heap k mβ²} {t : Term nβ²} {s : State _ m n} β
β¨ H , rfl , Ο , Jβ p q A t B u v Οβ² β S β© βα΅₯ s β
Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , u , Οβ² , S β©
βα΅₯-inv-rfl-Jβ d =
case βα΅₯-inv-rfl d of Ξ» where
(_ , _ , _ , _ , _ , refl , injβ (_ , _ , _ , _ , refl , refl)) β
refl , refl , refl
(_ , _ , _ , _ , _ , refl , injβ (injβ (_ , _ , () , _)))
(_ , _ , _ , _ , _ , refl , injβ (injβ ()))
opaque
βα΅₯-inv-rfl-Kβ :
{H : Heap k mβ²} {t : Term nβ²} {s : State _ m n} β
β¨ H , rfl , Ο , Kβ p A t B u Οβ² β S β© βα΅₯ s β
Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , u , Οβ² , S β©
βα΅₯-inv-rfl-Kβ d =
case βα΅₯-inv-rfl d of Ξ» where
(_ , _ , _ , _ , _ , refl , injβ (_ , _ , _ , _ , () , _))
(_ , _ , _ , _ , _ , refl , injβ (injβ (_ , _ , refl , refl))) β
refl , refl , refl
(_ , _ , _ , _ , _ , refl , injβ (injβ ()))
opaque
βα΅₯-inv-rfl-[]-congβ :
{H : Heap k mβ²} {t : Term nβ²} {s : State _ m n} β
β¨ H , rfl , Ο , []-congβ sβ² l A t u Οβ² β S β© βα΅₯ s β
Ξ£ (m β‘ mβ²) Ξ» mβ‘ β Ξ£ (n β‘ nβ²) Ξ» nβ‘ β
substβ (State _) mβ‘ nβ‘ s β‘ β¨ H , rfl , Οβ² , S β©
βα΅₯-inv-rfl-[]-congβ d =
case βα΅₯-inv-rfl d of Ξ» where
(_ , _ , _ , _ , _ , refl , injβ (_ , _ , _ , _ , () , _))
(_ , _ , _ , _ , _ , refl , injβ (injβ (_ , _ , () , _)))
(_ , _ , _ , _ , _ , refl , injβ (injβ (_ , _ , refl , refl))) β
refl , refl , refl
opaque
ββ-inv-suc :
Β¬ Numeral t β β¨ H , suc t , Ο , S β© ββ s β
β Ξ» k β S β‘ sucβ k Γ s β‘ β¨ H , t , Ο , sucβ β S β©
ββ-inv-suc _ (sucβ _) = _ , refl , refl
ββ-inv-suc Β¬n (numβ (sucβ n)) = β₯-elim (Β¬n n)
opaque
ββ-inv-num :
Numeral t β β¨ H , t , Ο , S β© ββ s β
β Ξ» Sβ² β S β‘ sucβ β Sβ² Γ s β‘ β¨ H , suc t , Ο , Sβ² β©
ββ-inv-num (sucβ n) (sucβ Β¬n) = β₯-elim (Β¬n n)
ββ-inv-num _ (numβ _) = _ , refl , refl
opaque
βα΅₯-inv-var : β¨ H , var x , Ο , S β© βα΅₯ s β β₯
βα΅₯-inv-var ()
opaque
ββ-inv-lift : β¨ H , lift t , Ο , S β© ββ s β β₯
ββ-inv-lift ()
opaque
ββ-inv-lam : β¨ H , lam p t , Ο , S β© ββ s β β₯
ββ-inv-lam ()
opaque
ββ-inv-prod : β¨ H , prod sβ² p t u , Ο , S β© ββ s β β₯
ββ-inv-prod ()
opaque
ββ-inv-zero : β¨ H , zero , Ο , S β© ββ s β β₯
ββ-inv-zero ()
opaque
ββ-inv-suc : β¨ H , suc t , Ο , S β© ββ s β β₯
ββ-inv-suc ()
opaque
ββ-inv-star : β¨ H , star sβ² , Ο , S β© ββ s β β₯
ββ-inv-star ()
opaque
ββ-inv-unitrec-Ξ· :
UnitΚ·-Ξ· β β¨ H , unitrec p q A t u , Ο , S β© ββ s β β₯
ββ-inv-unitrec-Ξ· Ξ· (unitrecβ no-Ξ·) = no-Ξ· Ξ·
opaque
ββ-inv-rfl : β¨ H , rfl , Ο , S β© ββ s β β₯
ββ-inv-rfl ()
opaque
ββ-inv-var : β¨ H , var x , Ο , S β© ββ s β β₯
ββ-inv-var (numβ ())
opaque
ββ-inv-natrec : β¨ H , natrec p q r A t u v , Ο , S β© ββ s β β₯
ββ-inv-natrec (numβ ())
opaque
β -inv-sucβΏ : β¨ H , sucβΏ k , Ο , Ξ΅ β© β s β β₯
β -inv-sucβΏ {k = 0} (βΎββ² x) = ββ-inv-zero x
β -inv-sucβΏ {k = 1+ k} (βΎββ² x) = ββ-inv-suc x
β -inv-sucβΏ {k = 0} (βα΅₯ ())
β -inv-sucβΏ {k = 1+ k} (βα΅₯ ())
β -inv-sucβΏ {k = 0} (ββ ())
β -inv-sucβΏ {k = 1+ k} (ββ x) =
case ββ-inv-num (sucβΏ-Numeral _) x of Ξ» where
(_ , () , _)