Top (mathematical Logic)
   HOME

TheInfoList



OR:

In mathematical logic and computer science, some type theories and type systems include a top type that is commonly denoted with top or the symbol ⊤. The top type is sometimes called also ''universal type'', or ''universal supertype'' as all other types in the type system of interest are
subtype Subtype may refer to: * Viral subtypes, such as Subtypes of HIV * Subtyping In programming language theory, subtyping (also subtype polymorphism or inclusion polymorphism) is a form of type polymorphism in which a subtype is a datatype that is ...
s of it, and in most cases, it contains every possible object of the type system. It is in contrast with the bottom type, or the ''universal subtype'', which every other type is supertype of and it is often that the type contains no members at all.


Support in programming languages

Several typed programming languages provide explicit support for the top type. In statically-typed languages, there are two different, often confused, concepts when discussing the top type. # A ''universal base class'' or other item at the top of a run time ''class hierarchy'' (often relevant in object-oriented programming) or ''type hierarchy''; it is often possible to create objects with this (run time) type, or it could be found when one examines the type hierarchy programmatically, in languages that support it # A ( compile time) ''static type'' in the code whose variables can be assigned any value (or a subset thereof, like any object pointer value), similar to dynamic typing The first concept often implies the second, i.e., if a universal base class exists, then a variable that can point to an object of this class can also point to an object of any class. However, several languages have types in the second regard above (e.g., void * in C++, id in Objective-C, interface in Go), static types which variables can accept any object value, but which do not reflect real run time types that an object can have in the type system, so are not top types in the first regard. In dynamically-typed languages, the second concept does not exist (any value can be assigned to any variable anyway), so only the first (class hierarchy) is discussed. This article tries to stay with the first concept when discussing top types, but also mention the second concept in languages where it is significant. The following object-oriented languages have no universal base class: * C++. The ''pointer to void'' type can accept any non-function pointer, even though the void type itself is not the universal type but the unit type. Since C++17, the standard library provides the top type std::any. * Objective-C. It is possible to create a new base class by not specifying a parent class for a class, although this is highly unusual. Object is conventionally used as the base class in the original Objective-C run times. In the OpenStep and Cocoa Objective-C libraries, NSObject is conventionally the universal base class. The top type for pointers to objects is id. * Swift. It is possible to create a new base class by not specifying a parent class for a class. The protocol Any can accept any type.


Other languages

Languages that are not object-oriented usually have no universal supertype, or subtype polymorphism support. While Haskell purposefully lacks subtyping, it has several other forms of polymorphism including parametric polymorphism. The most generic type class parameter is an unconstrained parameter a (without a
type class In computer science, a type class is a type system construct that supports ad hoc polymorphism. This is achieved by adding constraints to type variables in parametrically polymorphic types. Such a constraint typically involves a type class T and ...
constraint). In Rust, is the most generic parameter ( is not, as it implies the Sized trait by default). The top type is used as a ''generic'' type, more so in languages without parametric polymorphism. For example, before introducing generics in Java 5, collection classes in the Java library (excluding Java arrays) held references of type Object. In this way, any non-intrinsic type could be inserted into a collection. The top type is also often used to hold objects of unknown type. The top type may also be seen as the implied type of non-statically typed languages. Languages with run time typing often provide downcasting (or ''type refinement'') to allow discovering a more specific type for an object at run time. In C++, downcasting from void * cannot be done in a ''safe'' way, where failed downcasts are detected by the language run time. In languages with a
structural type system A structural type system (or property-based type system) is a major class of type systems in which type compatibility and equivalence are determined by the type's actual structure or definition and not by other characteristics such as its name o ...
, the empty structure serves as a top type. For example, objects in
OCaml OCaml ( , formerly Objective Caml) is a general-purpose programming language, general-purpose, multi-paradigm programming language which extends the Caml dialect of ML (programming language), ML with object-oriented programming, object-oriented ...
are structurally typed; the empty object type (the type of objects with no methods), < >, is the top type of object types. Any OCaml object can be explicitly upcasted to this type, although the result would be of no use. Go also uses structural typing; and all types implement the empty interface: interface , which has no methods, but may still be downcast back to a more specific type.


In logic

The notion of ''top'' is also found in propositional calculus, corresponding to a formula which is true in every possible interpretation. It has a similar meaning in predicate calculus. In description logic, top is used to refer to the set of all concepts. This is intuitively like the use of the top type in programming languages. For example, in the Web Ontology Language (OWL), which supports various description logics, top corresponds to the class owl:Thing, where all classes are subclasses of owl:Thing. (the bottom type or empty set corresponds to owl:Nothing).


See also

*
Singly rooted hierarchy The singly rooted hierarchy, in object-oriented programming, is a characteristic of most (but not all) OOP-based programming languages. In most such languages, in fact, all classes inherit directly or indirectly from a single root, usually with a ...


Notes


References

*


External links


c2.com: Top type
{{data types Data types Type theory