packages feed

Agda-2.3.2.2: notes/papers/implicit/examples/Loop.agda

module Loop where

{-
data _=>_ (A, B : Set) : Set where
  lam : (A -> B) -> A => B

app : {A, B : Set} -> (A => B) -> A -> B
app (lam f) = f

delta = lam (\x -> app x x)

loop = app delta delta
-}

lam : (A, B : Set) -> (A -> B) -> A -> B
lam A B f = f

app : (A, B : Set) -> (A -> B) -> A -> B
app A B f = f

postulate Nat : Set
	  zero : Nat

wrap : (F : Nat -> Set) -> F zero -> F zero
wrap F x = x

delta : (Nat -> Nat) -> Nat
delta = \x -> x (wrap _ x)

loop : Nat
loop = delta (wrap _ delta)

-- delta : _ -> _
-- delta = \x -> app _ _ x x -- lam _ _ (\x -> app _ _ x x)
-- 
-- loop = app _ _ delta (wrap _ delta)