The primitive expression
The reason that the type is indicated as part of the equality is that a pair of notations may be used for distinct values in one type, and yet they may stand for the same value in another type, due to the radical
For example,
Or again,
Thm* (x.x) = (x.if x<0 0 ; x fi) ,since the first branch is never taken on
, but
Thm* (x.x) (x.if x<0 0 ; x fi) since they take different integer values on
-1 .
Naturally, "equality" between notations is intimately connected to notations for
Often there is a most likely type that can be discerned from context, and we elide the type from the display of an equality, though it's still in the term. For example, we may display
Expressing Membership:
The expression for membership in a type is simply defined as
Def t T == t = t T .
Thus,
For a more thorough discussion of types, denotation and equality see
About: