Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Relation with the empty type  





2 Computer science applications  





3 In programming languages  





4 See also  





5 References  





6 Further reading  














Bottom type






Français

Русский
 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




In other projects  



Wikifunctions
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


Intype theory, a theory within mathematical logic, the bottom type of a type system is the type that is a subtype of all other types.[1]

Where such a type exists, it is often represented with the up tack (⊥) symbol.

Relation with the empty type[edit]

When the bottom type is uninhabited, a function whose return type is bottom cannot return any value, not even the lone value of a unit type. In such a language, the bottom type may therefore be known as the zero, neverorempty type which, in the Curry–Howard correspondence, corresponds to falsity.

However, when the bottom type is inhabited, it is then different from the empty type.

Computer science applications[edit]

In subtyping systems, the bottom type is a subtype of all types.[1] It is dual to the top type, which spans all possible values in a system.

If a type system is sound, the bottom type is uninhabited and a term of bottom type represents a logical contradiction. In such systems, typically no distinction is drawn between the bottom type and the empty type, and the terms may be used interchangeably.

If the bottom type is inhabited, its term(s) typically correspond to error conditions such as undefined behavior, infinite recursion, or unrecoverable errors.

InBounded Quantification with Bottom,[1] Pierce says that "Bot" has many uses:

  1. In a language with exceptions, a natural type for the raise construct is raise ∈ exception -> Bot, and similarly for other control structures. Intuitively, Bot here is the type of computations that do not return an answer.
  2. Bot is useful in typing the "leaf nodes" of polymorphic data structures. For example, List(Bot) is a good type for nil.
  3. Bot is a natural type for the "null pointer" value (a pointer which does not point to any object) of languages like Java: in Java, the null type is the universal subtype of reference types. null is the only value of the null type; and it can be cast to any reference type.[2] However, the null type is not a bottom type as described above, it is not a subtype of int and other primitive types.
  4. A type system including both Top and Bot seems to be a natural target for type inference, allowing the constraints on an omitted type parameter to be captured by a pair of bounds: we write S<:X<:T to mean "the value of X must lie somewhere between S and T." In such a scheme, a completely unconstrained parameter is bounded below by Bot and above by Top.

In programming languages[edit]

Most commonly used languages don't have a way to denote the bottom type. There are a few notable exceptions.

InHaskell, the bottom type is called Void.[3]

InCommon Lisp the type NIL, contains no values and is a subtype of every type.[4] The type named NIL is sometimes confused with the type named NULL, which has one value, namely the symbol NIL itself.

InScala, the bottom type is denoted as Nothing. Besides its use for functions that just throw exceptions or otherwise don't return normally, it's also used for covariant parameterized types. For example, Scala's List is a covariant type constructor, so List[Nothing] is a subtype of List[A] for all types A. So Scala's Nil, the object for marking the end of a list of any type, belongs to the type List[Nothing].

InRust, the bottom type is called the never type and is denoted by !. It is present in the type signature of functions guaranteed to never return, for example by calling panic!() or looping forever. It is also the type of certain control-flow keywords, such as break and return, which do not produce a value but are nonetheless usable as expressions.[5]

InCeylon, the bottom type is Nothing.[6] It is comparable to Nothing in Scala and represents the intersection of all other types as well as an empty set.

InJulia, the bottom type is Union{}.[7]

InTypeScript, the bottom type is never.[8][9]

InJavaScript with Closure Compiler annotations, the bottom type is !Null (literally, a non-null member of the Null unit type).

InPHP, the bottom type is never.

InPython's optional static type annotations, the general bottom type is typing.Never (introduced in version 3.11),[10] while typing.NoReturn (introduced in version 3.5) can be used as the return type of non-returning functions specifically (and doubled as the general bottom type prior to the introduction of Never).[11]

InKotlin, the bottom type is Nothing.[12]

InD, the bottom type is noreturn[13]

InDart, since version 2.12 with the sound null safety update, the Never type was introduced as the bottom type. Before that, the bottom type used to be Null.[14][15]

See also[edit]

References[edit]

  1. ^ a b c Pierce, Benjamin C. (1997). "Bounded Quantification with Bottom". Indiana University CSCI Technical Report (492): 1.
  • ^ "Section 4.1: The Kinds of Types and Values". Java Language Specification (3rd ed.).
  • ^ "Data.Void". Hackage. Retrieved 2023-09-20.
  • ^ "Type NIL". Common Lisp HyperSpec. Retrieved 25 October 2022.
  • ^ "Primitive Type never". The Rust Standard Library Documentation. Retrieved 2020-09-24.
  • ^ "Chapter 3. Type system — 3.2.5. The bottom type". The Ceylon Language. Red Hat, Inc. Retrieved 2017-02-19.
  • ^ "Essentials - The Julia Language", The Julia Programming Language Documentation, retrieved 2021-08-13
  • ^ The never type, TypeScript 2.0 release notes, Microsoft, 2016-10-06, retrieved 2019-11-01
  • ^ The never type, TypeScript 2.0 release notes, source code, Microsoft, 2016-10-06, retrieved 2019-11-01
  • ^ "typing — Support for type hints — Python 3.12.0a0 documentation". docs.python.org. Retrieved 2024-03-02.
  • ^ typing.NoReturn, typing — Support for type hints, Python documentation, Python Software Foundation, retrieved 2024-03-02
  • ^ Nothing, retrieved 2020-05-15
  • ^ "Types - D Programming Language". dlang.org. Retrieved 2022-10-20.
  • ^ Understanding null safety - top and bottom, retrieved 2022-04-13
  • ^ Understanding null safety - never for unreachable code, retrieved 2022-04-13
  • Further reading[edit]


    Retrieved from "https://en.wikipedia.org/w/index.php?title=Bottom_type&oldid=1211458338"

    Categories: 
    Data types
    Type theory
    Hidden categories: 
    Articles with short description
    Short description is different from Wikidata
     



    This page was last edited on 2 March 2024, at 17:43 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki