Skip to content

Instantly share code, notes, and snippets.

@bond15
Created March 10, 2022 16:05
Show Gist options
  • Save bond15/c0ea23554add5d08df7a2186f4304f9d to your computer and use it in GitHub Desktop.
Save bond15/c0ea23554add5d08df7a2186f4304f9d to your computer and use it in GitHub Desktop.
modal
module modal where
open import Data.Unit
open import Data.Nat
open import Data.Product
open import Data.String
open import Data.Bool
open import Agda.Builtin.String
data ty : Set where
π•Œ : ty
_β‡’_ _&_ : ty β†’ ty β†’ ty
data tm : Set where
var : String β†’ tm
_●_ _,_ : tm β†’ tm β†’ tm
π₁ Ο€β‚‚ : tm β†’ tm
Ζ›_∷_βˆ™_ : String β†’ ty β†’ tm β†’ tm
u : tm
-- adding box modality
β–‘ : tm β†’ tm
letβ–‘_≣_inn_ : tm β†’ String β†’ tm β†’ tm
data _value : tm β†’ Set where
Ζ›V : βˆ€ {x T t} β†’ (Ζ› x ∷ T βˆ™ t) value
&V : βˆ€{t1 t2} β†’ t1 value β†’ t2 value β†’ (t1 , t2) value
uV : u value
β–‘V : βˆ€{t} β†’ (β–‘ t) value
_=β‚›_ : String β†’ String β†’ Bool
_=β‚›_ = primStringEquality
[_/_]_ : tm β†’ String β†’ tm β†’ tm
[ s / x ] t@(var y) = if (x =β‚› y) then s else t
[ s / x ] (t ● t') = ([ s / x ] t) ● ([ s / x ] t')
[ s / x ] (π₁ t') = π₁ ([ s / x ] t')
[ s / x ] (Ο€β‚‚ t') = Ο€β‚‚ ([ s / x ] t')
[ s / x ] (t , t') = [ s / x ] t , [ s / x ] t'
[ s / x ] t@(Ζ› y ∷ T βˆ™ t') = if (x =β‚› y) then t else (Ζ› x ∷ T βˆ™ [ s / x ] t')
[ s / x ] u = u
-- adding box modality
[ s / x ] t@(β–‘ d) = t
[ s / x ] (letβ–‘ d ≣ x₁ inn d₁) = {! !}
data _⟢_ : tm β†’ tm β†’ Set where
st-Ζ› : βˆ€{A N M x} β†’ M value β†’ ((Ζ› x ∷ A βˆ™ N) ● M) ⟢ ([ M / x ] N)
st-&₁ : βˆ€{M N} β†’ M value β†’ N value β†’ (π₁(M , N)) ⟢ M
st-&β‚‚ : βˆ€{M N}Β β†’ M value β†’ N value β†’ (Ο€β‚‚(M , N)) ⟢ N
st-&c₁ : βˆ€{M M' N} β†’ (M ⟢ M') β†’ (M , N) ⟢ (M' , N)
st-&cβ‚‚ : βˆ€{M N N'} β†’ M value β†’ (N ⟢ N') β†’ (M , N) ⟢ (M , N')
st-π₁c : βˆ€{M M'} β†’ M ⟢ M' β†’ (π₁ M) ⟢ (π₁ M')
st-Ο€β‚‚c : βˆ€{M M'} β†’ M ⟢ M' β†’ (Ο€β‚‚ M) ⟢ (Ο€β‚‚ M')
st-●c₁ : βˆ€{M M' N} β†’ M ⟢ M' β†’ (M ● N) ⟢ (M' ● N)
st-●cβ‚‚ : βˆ€{M N N'} β†’ M value β†’ N ⟢ N' β†’ (M ● N) ⟢ (M ● N')
data multi {X : Set}(R : X β†’ X β†’ Set) : X β†’ X β†’ Set where
mrefl : βˆ€{x : X} β†’ multi R x x
mstep : βˆ€ { x y z : X} β†’ R x y β†’ multi R y z β†’ multi R x z
_~>*_ : tm β†’ tm β†’ Set
t ~>* t' = multi _⟢_ t t'
_ : ((Ζ› "x" ∷ π•Œ βˆ™ var "x") ● π₁ (u , u)) ~>* u
_ = mstep (st-●cβ‚‚ Ζ›V (st-&₁ uV uV))
(mstep (st-Ζ› uV)
mrefl)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment