packages feed

caledon-3.1.0.0: examples/universe.ncc

#include "../prelude/combinators.ncc"

fixity pre 1 ♢
fixity lambda Π 
fixity lambda lam 


{-
for the moment, circularly defined types are allowed!  this violates consistency.  
If a dependency analysis is done, and types are checked in order, this will become safe!
-}

{- 
the implicit argument is pretty much always intialized to ty
tm basically says
t in tm S T has type T where T has sort S.
-}
unsound tm : {S : tm ty} tm S → prop
   | ty  = tm ty
   | ♢   = tm ty -> tm ty
   | Π   = [T : tm ty] (tm T → tm T) → tm $ ♢  T
   | raise = {T : tm ty} tm T → tm $ ♢  T
   | lam = [T : tm ty][F : tm T → tm T] tm {S = ♢ T} (Π A : T . F A)

defn isTm : {Kind : tm ty} {Ty : tm Kind} tm Ty -> prop
   | hasValue = [S : tm ty][T : tm S][V : tm T] isTm V

query whattype0 = isTm { Kind = ty } { Ty = ♢ ty } ( Π A : ty . A)
query whattype1 = isTm (lam A : ty . A)