There are also other ways to express the empty type by means of other Nuprl primitives, such as,
Thm* Void =ext {x:| x<x }
Thm* Void =ext rec(A.A)
Thm* Void =ext (x:. {x:}) since these singleton types are disjoint.
And of course,
Here are a few examples of how
Thm* VoidA =ext Void
Thm* Void List =ext {nil:Void List}
Thm* VoidA =ext {x.x:VoidA}
The last theorem above states that
Thm* (x.whatever) = (x.x) VoidA
So, although
Similarly, the intersection over the empty domain is a trivial one-element type whose single member is denoted by every expression that can denote at all:
Thm* whatever1 = whatever2 Whatever(given Void)
Thm* whatever1 = whatever2 (x:Void. Whatever(x))
Sometimes this last type is denoted
Thm* A Top where
Def Top == Void(given Void) .
See
About: