Skip to content

Instantly share code, notes, and snippets.

@Saizan
Created November 9, 2020 09:20
Show Gist options
  • Save Saizan/ee9c0a7fe61db3aa0036715800edcd1d to your computer and use it in GitHub Desktop.
Save Saizan/ee9c0a7fe61db3aa0036715800edcd1d to your computer and use it in GitHub Desktop.
Guarded Cubical with clocks
module Prims where
primitive
primLockUniv : Set₁
open Prims renaming (primLockUniv to LockU) public
postulate
Cl : Set
k0 : Cl
Tick : Cl → LockU
▹ : ∀ {l} → Cl → Set l → Set l
▹ k A = (@tick x : Tick k) -> A
▸ : ∀ {l} k → ▹ k (Set l) → Set l
▸ k A = (@tick x : Tick k) → A x
postulate
tick-irr : ∀ {A : Set}{k : Cl} (x : ▹ k A) → ▸ k \ α → ▸ k \ β → x α ≡ x β
postulate
dfix : ∀ {k} {l} {A : Set l} → (▹ k A → A) → ▹ k A
pfix : ∀ {k} {l} {A : Set l} (f : ▹ k A → A) → dfix f ≡ (\ _ → f (dfix f))
force : ∀ {l} {A : Cl → Set l} → (∀ k → ▹ k (A k)) → ∀ k → A k
force-delay : ∀ {l} {A : Cl → Set l} → (f : ∀ k → ▹ k (A k)) → ∀ k → ▸ k \ α → force f k ≡ f k α
delay-force : ∀ {l} {A : Cl → Set l} → (f : ∀ k → A k) → ∀ k → force (\ k α → f k) k ≡ f k
force^ : ∀ {l} {A : ∀ k → ▹ k (Set l)} → (∀ k → ▸ k (A k)) → ∀ k → force A k
-- No more postulates after this line.
private
variable
l : Level
A B : Set l
k : Cl
next : A → ▹ k A
next x _ = x
_⊛_ : ▹ k (A → B) → ▹ k A → ▹ k B
_⊛_ f x a = f a (x a)
map▹ : (f : A → B) → ▹ k A → ▹ k B
map▹ f x α = f (x α)
later-ext : ∀ {l} {A : Set l} → {f g : ▹ k A} → (▸ k \ α → f α ≡ g α) → f ≡ g
later-ext eq = \ i α → eq α i
pfix' : ∀ {l} {A : Set l} (f : ▹ k A → A) → ▸ k \ α → dfix f α ≡ f (dfix f)
pfix' f α i = pfix f i α
fix : ∀ {l} {A : Set l} → (▹ k A → A) → A
fix f = f (dfix f)
fix-eq : ∀ {l} {A : Set l} → (f : ▹ k A → A) → fix f ≡ f (\ _ → fix f)
fix-eq f = \ i → f (pfix f i)
delay : ∀ {A : Cl → Set} → (∀ k → A k) → ∀ k → ▹ k (A k)
delay a k _ = a k
Later-Alg[_]_ : ∀ {l} → Cl → Set l → Set l
Later-Alg[ k ] A = ▹ k A → A
@Saizan
Copy link
Author

Saizan commented Feb 25, 2021 via email

@L-TChen
Copy link

L-TChen commented Mar 11, 2021

Alright, that sounds useful enough to me already. By the way, is it reasonable to postulate the diamond tick and use the REWRITE pragma to introduce necessary rewrite rules for those missing judgemental equalities?

@L-TChen
Copy link

L-TChen commented Mar 11, 2021

Forgot to say: thank you so much!

@Saizan
Copy link
Author

Saizan commented Mar 11, 2021

The typing rule for diamond tick seems hard to reproduce as a postulate, though maybe you could make it private and use it as the implementation of force?

@L-TChen
Copy link

L-TChen commented Mar 21, 2021

But the current implementation only accepts lock variables,

lock should be a var
when inferring the type of t ◇

so the following postulate

module _ where
  private
    postulate
      : {k : Cl}  Tick k

is not helpful to express the judgemental equalities about the diamond tick.

Maybe I will just wait for it to be implemented. :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment