open import Definition.Typed.Restrictions
import Definition.Untyped
import Graded.Erasure.LogicalRelation.Assumptions
open import Graded.Modality
module Graded.Erasure.LogicalRelation.Assumptions.Reasoning
{a} {M : Set a}
(open Definition.Untyped M)
{π : Modality M}
{R : Type-restrictions π}
(open Graded.Erasure.LogicalRelation.Assumptions R)
{k} {Ξ : Con Term k}
{_β_β·_ : Term k β Term k β Term k β Set a}
(is-reduction-relation : Is-reduction-relation Ξ _β_β·_)
where
open Is-reduction-relation is-reduction-relation
open import Definition.Typed R
open import Definition.Typed.Properties.Reduction R
open import Tools.Function
import Tools.PropositionalEquality as PE
private variable
A B t u v : Term _
infix -1 finally-β finally-β* finally-β
infixr -2 step-β step-β* step-β finally-ββ‘ finally-β*β‘ finally-ββ‘
opaque
step-β : β t β u β v β· A β t β u β· A β t β v β· A
step-β _ = flip trans-β
syntax step-β t uβv tβu = t ββ¨ tβu β© uβv
opaque
step-β* : β t β u β v β· A β Ξ β’ t β* u β· A β t β v β· A
step-β* _ uβv tβ*u = trans-β (β*ββ tβ*u) uβv
syntax step-β* t uβv tβu = t β*β¨ tβu β©β uβv
opaque
step-β : β t β u β v β· A β Ξ β’ t β u β· A β t β v β· A
step-β _ uβv tβu = step-β* _ uβv (redMany tβu)
syntax step-β t uβv tβu = t ββ¨ tβu β©β uβv
finally-β : β t u β t β u β· A β t β u β· A
finally-β _ _ tβu = tβu
syntax finally-β t u tβu = t ββ¨ tβu β©β u β
{-# INLINE finally-β #-}
opaque
finally-β : β t u β Ξ β’ t β u β· A β t β u β· A
finally-β _ _ tβu = β*ββ (redMany tβu)
syntax finally-β t u tβu = t ββ¨ tβu β©ββ u β
opaque
finally-β* : β t u β Ξ β’ t β* u β· A β t β u β· A
finally-β* _ _ tβu = β*ββ tβu
syntax finally-β* t u tβu = t β*β¨ tβu β©ββ u β
finally-ββ‘ : β t β u PE.β‘ v β t β u β· A β t β v β· A
finally-ββ‘ _ PE.refl tβu = tβu
syntax finally-ββ‘ t uβ‘v tβu = t ββ¨ tβu β©ββ‘ uβ‘v
opaque
finally-β*β‘ : β t β u PE.β‘ v β Ξ β’ t β* u β· A β t β v β· A
finally-β*β‘ _ PE.refl = finally-β* _ _
syntax finally-β*β‘ t uβ‘v tβu = t β*β¨ tβu β©ββ‘β uβ‘v
opaque
finally-ββ‘ : β t β u PE.β‘ v β Ξ β’ t β u β· A β t β v β· A
finally-ββ‘ _ PE.refl = finally-β _ _
syntax finally-ββ‘ t uβ‘v tβu = t ββ¨ tβu β©ββ‘β uβ‘v
infix -1 finally-β finally-β* finally-β
infixr -2 step-β step-β* step-β finally-ββ‘ finally-β*β‘ finally-ββ‘
opaque
step-β : β t β t β u β· A β u β v β· A β t β v β· A
step-β _ = trans-β
syntax step-β v tβu uβv = v ββ¨ uβv β© tβu
opaque
step-β* : β v β t β u β· A β Ξ β’ u β* v β· A β t β v β· A
step-β* _ tβu uβv = trans-β tβu (β*ββ uβv)
syntax step-β* v tβu uβv = v β*β¨ uβv β©β tβu
opaque
step-β : β v β t β u β· A β Ξ β’ u β v β· A β t β v β· A
step-β _ tβu uβv = step-β* _ tβu (redMany uβv)
syntax step-β v tβu uβv = v ββ¨ uβv β©β tβu
finally-β : β u t β t β u β· A β t β u β· A
finally-β _ _ tβu = tβu
syntax finally-β u t tβu = u ββ¨ tβu β©β t β
{-# INLINE finally-β #-}
opaque
finally-β* : β u t β Ξ β’ t β* u β· A β t β u β· A
finally-β* _ _ = finally-β* _ _
syntax finally-β* u t tβu = u β*β¨ tβu β©ββ t β
{-# INLINE finally-β* #-}
opaque
finally-β : β u t β Ξ β’ t β u β· A β t β u β· A
finally-β _ _ = finally-β _ _
syntax finally-β u t tβu = u ββ¨ tβu β©ββ t β
{-# INLINE finally-β #-}
finally-ββ‘ : β v β u PE.β‘ t β u β v β· A β t β v β· A
finally-ββ‘ _ PE.refl uβv = uβv
syntax finally-ββ‘ v uβ‘t uβv = v ββ¨ uβv β©ββ‘ uβ‘t
opaque
finally-β*β‘ : β v β u PE.β‘ t β Ξ β’ u β* v β· A β t β v β· A
finally-β*β‘ _ PE.refl = finally-β* _ _
syntax finally-β*β‘ v uβ‘t uβv = v β*β¨ uβv β©ββ‘β uβ‘t
opaque
finally-ββ‘ : β v β u PE.β‘ t β Ξ β’ u β v β· A β t β v β· A
finally-ββ‘ _ PE.refl = finally-β _ _
syntax finally-ββ‘ v uβ‘t uβv = v ββ¨ uβv β©ββ‘β uβ‘t
infix -1 _ββ¨_β©β
infixr -2 step-β‘ step-β‘Λ _β‘β¨β©β_
step-β‘ : β t β u β v β· A β t PE.β‘ u β t β v β· A
step-β‘ _ uβv PE.refl = uβv
syntax step-β‘ t uβv tβ‘u = t β‘β¨ tβ‘u β©β uβv
step-β‘Λ : β t β u β v β· A β u PE.β‘ t β t β v β· A
step-β‘Λ _ uβv PE.refl = uβv
syntax step-β‘Λ t uβv uβ‘t = t β‘Λβ¨ uβ‘t β©β uβv
_β‘β¨β©β_ : β t β t β u β· A β t β u β· A
_ β‘β¨β©β tβu = tβu
{-# INLINE _β‘β¨β©β_ #-}
_ββ¨_β©β : β t β Ξ β’ t β· A β t β t β· A
_ ββ¨ β’t β©β = β*ββ (id β’t)
{-# INLINE _ββ¨_β©β #-}
infix -1 finally-ββ· finally-β*β· finally-ββ·
infixr -2 step-ββ· step-β*β· step-ββ· step-ββ·β‘ step-ββ·β‘Λ _β·_β‘β¨β©ββ·_
finally-ββ‘β· finally-β*β‘β· finally-ββ‘β·
opaque
step-ββ· : β t A β u β v β· A β t β u β· A β t β v β· A
step-ββ· _ _ = step-β _
syntax step-ββ· t A uβv tβu = t β· A ββ¨ tβu β©β· uβv
opaque
step-β*β· : β t A β u β v β· A β Ξ β’ t β* u β· A β t β v β· A
step-β*β· _ _ = step-β* _
syntax step-β*β· t A uβv tβu = t β· A β*β¨ tβu β©ββ· uβv
opaque
step-ββ· : β t A β u β v β· A β Ξ β’ t β u β· A β t β v β· A
step-ββ· _ _ = step-β _
syntax step-ββ· t A uβv tβu = t β· A ββ¨ tβu β©ββ· uβv
step-ββ·β‘ : β t A β u β v β· A β t PE.β‘ u β t β v β· A
step-ββ·β‘ _ _ uβv PE.refl = uβv
syntax step-ββ·β‘ t A uβv tβ‘u = t β· A β‘β¨ tβ‘u β©ββ· uβv
step-ββ·β‘Λ : β t A β u β v β· A β u PE.β‘ t β t β v β· A
step-ββ·β‘Λ _ _ uβv PE.refl = uβv
syntax step-ββ·β‘Λ t A uβv uβ‘t = t β· A β‘Λβ¨ uβ‘t β©ββ· uβv
_β·_β‘β¨β©ββ·_ : β t A β t β u β· A β t β u β· A
_ β· _ β‘β¨β©ββ· tβu = tβu
{-# INLINE _β·_β‘β¨β©ββ·_ #-}
finally-ββ· : β t A u β t β u β· A β t β u β· A
finally-ββ· _ _ _ tβu = tβu
syntax finally-ββ· t A u tβu = t β· A ββ¨ tβu β©ββ· u β
{-# INLINE finally-ββ· #-}
opaque
finally-ββ· : β t A u β Ξ β’ t β u β· A β t β u β· A
finally-ββ· _ _ _ = finally-β _ _
syntax finally-ββ· t A u tβu = t β· A ββ¨ tβu β©βββ· u β
opaque
finally-β*β· : β t A u β Ξ β’ t β* u β· A β t β u β· A
finally-β*β· _ _ = finally-β* _
syntax finally-β*β· t A u tβu = t β· A β*β¨ tβu β©βββ· u β
finally-ββ‘β· : β t A β u PE.β‘ v β t β u β· A β t β v β· A
finally-ββ‘β· _ _ PE.refl tβu = tβu
syntax finally-ββ‘β· t A uβ‘v tβu = t β· A ββ¨ tβu β©ββ·β‘ uβ‘v
opaque
finally-β*β‘β· : β t A β u PE.β‘ v β Ξ β’ t β* u β· A β t β v β· A
finally-β*β‘β· _ _ = finally-β*β‘ _
syntax finally-β*β‘β· t A uβ‘v tβu = t β· A β*β¨ tβu β©βββ·β‘ uβ‘v
opaque
finally-ββ‘β· : β t A β u PE.β‘ v β Ξ β’ t β u β· A β t β v β· A
finally-ββ‘β· _ _ = finally-ββ‘ _
syntax finally-ββ‘β· t A uβ‘v tβu = t β· A ββ¨ tβu β©βββ·β‘ uβ‘v
infix -1 finally-ββ· finally-β*β· finally-ββ·
infixr -2 step-ββ· step-β*β· step-ββ· step-ββ·β‘ step-ββ·β‘Λ _β·_β‘β¨β©ββ·_
finally-ββ‘β· finally-β*β‘β· finally-ββ‘β·
opaque
step-ββ· : β t A β t β u β· A β u β v β· A β t β v β· A
step-ββ· _ _ = step-β _
syntax step-ββ· v A tβu uβv = v β· A ββ¨ uβv β©β· tβu
opaque
step-β*β· : β v A β t β u β· A β Ξ β’ u β* v β· A β t β v β· A
step-β*β· _ _ = step-β* _
syntax step-β*β· v A tβu uβv = v β· A β*β¨ uβv β©ββ· tβu
opaque
step-ββ· : β v A β t β u β· A β Ξ β’ u β v β· A β t β v β· A
step-ββ· _ _ = step-β _
syntax step-ββ· v A tβu uβv = v β· A ββ¨ uβv β©ββ· tβu
step-ββ·β‘ : β v A β t β u β· A β v PE.β‘ u β t β v β· A
step-ββ·β‘ _ _ tβu PE.refl = tβu
syntax step-ββ·β‘ v A tβu vβ‘u = v β· A β‘β¨ vβ‘u β©ββ· tβu
step-ββ·β‘Λ : β v A β t β u β· A β u PE.β‘ v β t β v β· A
step-ββ·β‘Λ _ _ tβu PE.refl = tβu
syntax step-ββ·β‘Λ v A tβu uβ‘v = v β· A β‘Λβ¨ uβ‘v β©ββ· tβu
_β·_β‘β¨β©ββ·_ : β u A β t β u β· A β t β u β· A
_ β· _ β‘β¨β©ββ· tβu = tβu
{-# INLINE _β·_β‘β¨β©ββ·_ #-}
finally-ββ· : β u A t β t β u β· A β t β u β· A
finally-ββ· _ _ _ tβu = tβu
syntax finally-ββ· u A t tβu = u β· A ββ¨ tβu β©ββ· t β
{-# INLINE finally-ββ· #-}
opaque
finally-β*β· : β u A t β Ξ β’ t β* u β· A β t β u β· A
finally-β*β· _ _ _ = finally-β* _ _
syntax finally-β*β· u A t tβu = u β· A β*β¨ tβu β©βββ· t β
{-# INLINE finally-β*β· #-}
opaque
finally-ββ· : β u A t β Ξ β’ t β u β· A β t β u β· A
finally-ββ· _ _ _ = finally-β _ _
syntax finally-ββ· u A t tβu = u β· A ββ¨ tβu β©βββ· t β
{-# INLINE finally-ββ· #-}
finally-ββ‘β· : β v A β u PE.β‘ t β u β v β· A β t β v β· A
finally-ββ‘β· _ _ PE.refl uβv = uβv
syntax finally-ββ‘β· v A uβ‘t uβv = v β· A ββ¨ uβv β©ββ·β‘ uβ‘t
opaque
finally-β*β‘β· : β v A β u PE.β‘ t β Ξ β’ u β* v β· A β t β v β· A
finally-β*β‘β· _ _ = finally-β*β‘ _
syntax finally-β*β‘β· v A uβ‘t uβv = v β· A β*β¨ uβv β©βββ·β‘ uβ‘t
opaque
finally-ββ‘β· : β v A β u PE.β‘ t β Ξ β’ u β v β· A β t β v β· A
finally-ββ‘β· _ _ = finally-ββ‘ _
syntax finally-ββ‘β· v A uβ‘t uβv = v β· A ββ¨ uβv β©βββ·β‘ uβ‘t
infix -1 _β·_ββ¨_β©β
_β·_ββ¨_β©β : β t A β Ξ β’ t β· A β t β t β· A
_ β· _ ββ¨ β’t β©β = β*ββ (id β’t)
{-# INLINE _β·_ββ¨_β©β #-}
infix -2 step-β-conv step-β-convΛ step-β-conv-β‘ step-β-conv-β‘Λ
opaque
step-β-conv : t β u β· B β Ξ β’ A β‘ B β t β u β· A
step-β-conv tβu Aβ‘B = conv-β tβu (sym Aβ‘B)
syntax step-β-conv tβu Aβ‘B = β¨ Aβ‘B β©β tβu
opaque
step-β-convΛ : t β u β· B β Ξ β’ B β‘ A β t β u β· A
step-β-convΛ tβu Bβ‘A = conv-β tβu Bβ‘A
syntax step-β-convΛ tβu Bβ‘A = Λβ¨ Bβ‘A β©β tβu
step-β-conv-β‘ : t β u β· B β A PE.β‘ B β t β u β· A
step-β-conv-β‘ tβu PE.refl = tβu
syntax step-β-conv-β‘ tβu Aβ‘B = β¨ Aβ‘B β©ββ‘ tβu
step-β-conv-β‘Λ : t β u β· B β B PE.β‘ A β t β u β· A
step-β-conv-β‘Λ tβu PE.refl = tβu
syntax step-β-conv-β‘Λ tβu Bβ‘A = Λβ¨ Bβ‘A β©ββ‘ tβu
infix -2 step-β·β-conv step-β·β-convΛ step-β·β-conv-β‘ step-β·β-conv-β‘Λ
opaque
step-β·β-conv : β A β t β u β· B β Ξ β’ A β‘ B β t β u β· A
step-β·β-conv _ = step-β-conv
syntax step-β·β-conv A tβu Aβ‘B = β· A β¨ Aβ‘B β©β tβu
opaque
step-β·β-convΛ : β A β t β u β· B β Ξ β’ B β‘ A β t β u β· A
step-β·β-convΛ _ = step-β-convΛ
syntax step-β·β-convΛ A tβu Bβ‘A = β· A Λβ¨ Bβ‘A β©β tβu
step-β·β-conv-β‘ : β A β t β u β· B β A PE.β‘ B β t β u β· A
step-β·β-conv-β‘ _ tβu PE.refl = tβu
syntax step-β·β-conv-β‘ A tβu Aβ‘B = β· A β¨ Aβ‘B β©ββ‘ tβu
step-β·β-conv-β‘Λ : β A β t β u β· B β B PE.β‘ A β t β u β· A
step-β·β-conv-β‘Λ _ tβu PE.refl = tβu
syntax step-β·β-conv-β‘Λ A tβu Bβ‘A = β· A Λβ¨ Bβ‘A β©ββ‘ tβu
infix -2 step-β·β-conv step-β·β-convΛ step-β·β-conv-β‘ step-β·β-conv-β‘Λ
opaque
step-β·β-conv : β A β t β u β· B β Ξ β’ A β‘ B β t β u β· A
step-β·β-conv _ = step-β-conv
syntax step-β·β-conv A tβu Aβ‘B = β· A β¨ Aβ‘B β©β tβu
opaque
step-β·β-convΛ : β A β t β u β· B β Ξ β’ B β‘ A β t β u β· A
step-β·β-convΛ _ = step-β-convΛ
syntax step-β·β-convΛ A tβu Bβ‘A = β· A Λβ¨ Bβ‘A β©β tβu
step-β·β-conv-β‘ : β A β t β u β· B β A PE.β‘ B β t β u β· A
step-β·β-conv-β‘ _ tβu PE.refl = tβu
syntax step-β·β-conv-β‘ A tβu Aβ‘B = β· A β¨ Aβ‘B β©ββ‘ tβu
step-β·β-conv-β‘Λ : β A β t β u β· B β B PE.β‘ A β t β u β· A
step-β·β-conv-β‘Λ _ tβu PE.refl = tβu
syntax step-β·β-conv-β‘Λ A tβu Bβ‘A = β· A Λβ¨ Bβ‘A β©ββ‘ tβu