#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)