-- https://www.youtube.com/watch?v=pNBPCnZEdSs
module Neighbors

-- Prf ?
import Prelude

data Void : U where

data Prf : U → U where
  Pf : ∀ a. {{_ : a}} → Prf a

tryThis : ∀ A B. Prf A → Prf B → Prf A
-- this needs help in newt
tryThis (Pf {{x}}) b = Pf {_} {{x}}

P : U

data Bnd : U where
  bot : Bnd
  val : P → Bnd
  top : Bnd

Rel : U → U
Rel a = a × a → U

L : P × P → U

-- FIXME Rel Bnd needs to be expanded
-- LH LB : Rel Bnd → U
LH LB : Bnd × Bnd → U
LH (bot, _) = Unit
LH (val x, val y) = L (x, y)
LH _ = Void
LB xy = Prf (LH xy)
data Set : U where
  SR SP : Set -- recursive / param
  S0 S1 : Set -- empty, unit
  _:+_ _:*_ : (S T : Set) → Set

infixl 5 _:+_ _:*_
SetF : Set → U → U
SetF sr r = r
SetF sr p = p
SetF (s :+ t) r = SetF s r + SetF t r
SetF (s :* t) r = SetF s r * SetF t r

infixl 5 <_>
data MuSet : Set → U where
  <_> : ∀ t. SetF t (MuSet t) → MuSet t

-- 9:30
