import Graded.Modality
module Definition.Untyped.Bool.OK
{a} {M : Set a}
(open Graded.Modality M)
(𝕄 : Modality)
(OKᵍ : M)
where
open Modality 𝕄
open import Definition.Untyped M
open import Definition.Untyped.Nat 𝕄
open import Definition.Untyped.Properties M
open import Tools.Fin
open import Tools.Function
open import Tools.Nat
open import Tools.PropositionalEquality
open import Tools.Reasoning.PropositionalEquality
private variable
n : Nat
t : Term _
σ : Subst _ _
ρ : Wk _ _
opaque
OK : Term n → Term n
OK t = natcase OKᵍ 𝟘 U₀ Unitʷ (natcase 𝟘 𝟘 U₀ Unitʷ Empty (var x0)) t
opaque
unfolding OK
OK-[] : OK t [ σ ] ≡ OK (t [ σ ])
OK-[] =
trans natcase-[] $
cong (flip (natcase _ _ _ _) _) natcase-[]
opaque
wk-OK : wk ρ (OK t) ≡ OK (wk ρ t)
wk-OK {ρ} {t} =
wk ρ (OK t) ≡⟨ wk≡subst _ _ ⟩
OK t [ toSubst ρ ] ≡⟨ OK-[] ⟩
OK (t [ toSubst ρ ]) ≡˘⟨ cong OK $ wk≡subst _ _ ⟩
OK (wk ρ t) ∎