Введение
Универсальный тип в логике и информатике
В математической логике и информатике некоторые теории типов и системы типов включают в себя верхний тип, который обычно обозначается как top или символом ⊤. Верхний тип также иногда называют универсальным типом или универсальным супертипом, поскольку все остальные типы в рассматриваемой системе типов являются его подтипами, и в большинстве случаев он содержит каждый возможный объект этой системы типов. Он противопоставляется нижнему типу, или универсальному подтипу, который является супертипом для каждого другого типа, и часто не содержит ни одного элемента.
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 subtypes 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.
Другие языки
Языки, не поддерживающие объектно-ориентированное программирование, обычно не имеют универсального супертипа или поддержки полиморфизма подтипов. Хотя в Haskell намеренно отсутствует подтипирование, он предоставляет другие формы полиморфизма, включая параметрический полиморфизм. Наиболее общим параметром класса типов является неограниченный параметр `a` (без ограничения класса типов). В Rust `<T: ?Sized>` является наиболее общим параметром (в то время как `<T>` таковым не является, поскольку по умолчанию подразумевает трейт `Sized`). Верхний тип используется как обобщенный тип, особенно в языках, не поддерживающих параметрический полиморфизм. Например, до появления дженериков в Java 5 классы коллекций в библиотеке Java (за исключением массивов Java) хранили ссылки типа `Object`. Таким образом, любой тип, не являющийся встроенным, можно было добавить в коллекцию. Верхний тип также часто используется для хранения объектов неизвестного типа. Верхний тип также можно рассматривать как подразумеваемый тип в языках с динамической типизацией. Языки с динамической типизацией часто предоставляют понижение типов (или уточнение типов), позволяющее определить более конкретный тип объекта во время выполнения. В C++ понижение типов из `void*` не может быть выполнено безопасным образом, и неудачные попытки понижения типов обнаруживаются во время выполнения программы. В языках со структурной системой типов пустая структура служит верхним типом. Например, объекты в OCaml имеют структурную типизацию; пустой тип объекта (тип объектов без методов), `<>`, является верхним типом для типов объектов. Любой объект OCaml может быть явно приведен к этому типу, хотя результат будет бесполезен. Go также использует структурную типизацию, и все типы реализуют пустой интерфейс: `interface{}`, который не имеет методов, но может быть приведен обратно к более конкретному типу.
В логике
Понятие "top" также встречается в пропозициональном исчислении, соответствуя формуле, которая истинна при любой возможной интерпретации. Оно имеет аналогичное значение в исчислении предикатов. В логике описаний "top" используется для обозначения множества всех концептов. Это интуитивно похоже на использование верхнего типа в языках программирования. Например, в Web Ontology Language (OWL), который поддерживает различные логики описаний, "top" соответствует классу owl:Thing, где все классы являются подклассами owl:Thing. (Нижний тип или пустое множество соответствует owl:Nothing).