Введение

Универсальный тип в логике и информатике
В математической логике и информатике некоторые теории типов и системы типов включают в себя верхний тип, который обычно обозначается как top или символом ⊤. Верхний тип также иногда называют универсальным типом или универсальным супертипом, поскольку все остальные типы в рассматриваемой системе типов являются его подтипами, и в большинстве случаев он содержит каждый возможный объект этой системы типов. Он противопоставляется нижнему типу, или универсальному подтипу, который является супертипом для каждого другого типа, и часто не содержит ни одного элемента.

Другие языки

Языки, не поддерживающие объектно-ориентированное программирование, обычно не имеют универсального супертипа или поддержки полиморфизма подтипов. Хотя в 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).