Talk:Type theory

message: Question - does type theory have anything to do with category theory in mathematics?
:Not really. A type is a set of related things, together with a specification of the operations you can do to those things. A category is a set of related things, together with the maps (or arrows, or homomorphisms) between those things. AxelBoldt  
:Type theory with product types is related to Cartesian closed catagories and topos.  Types are the objects, and the arrows are functions between types.  See "Introduction to higher order categorical logic" by J. Lambek and P. J. Scott.
But, aren't those "operations" on types very similar to "maps" between things in categories? For instance executing "push" on a stack must not change the fundamental nature of the stack, hence is not the operation "push" a mapping (or homomorphism) between stacks?
:Ok, I suppose you are right, for some types. So if we take the type "stack", we could manufacture a category out of it as follows: objects are the stacks, two stacks being considered different if they contain different things, and the morphisms between two stacks are all the sequences of push/pop operations that can get you from the first stack to the second stack. 
:However, this works only for type operations that take one stack and return one stack. For instance, the "stack" ADT typically has an empty? boolean operation, and a top operation which returns the top element of the stack. Those two can't be modeled in category theory. AxelBoldt
Meyer ("Object oriented software construction 2nd ed") differentiates strictly between "commands" and "queries" on an ADT. Commands change the state; queries observe but do not change the state. It would seem that an ADT plus all of its command-operations would form a category (since however a command changes the state, it cannot change the class of the object, unless we somehow also allow class-changing morphisms, which then however muddies the very concept of a "class" of objects). I feel there must also be a formalism for "queries" but it eludes me at the moment.
:You also have a problem with operations that take two things and produce a new one, let's say the "add" operation for the ADT "integer". It's not clear how that should be modeled as a morphism either. AxelBoldt
 
Is the set of all integers a category in category theory? It intuitively seems like it would/could be. How does category theory deal with the class of all integers? 
:The set of integers is not a category (you could treat it as an additive category with a single object, but that is artificial). Typically, the integers are treated as one object in the category of rings.
Also, I think you can view the "create a new object from two objects" differently by switching to prefix notation instead of infix notation, e.g. to add integers 1 and 7, this is viewed as the command-operation "add" on object of type integer with state (value) "1" with an argument of "7", which changes its internal state to contain the value 8. This would then not be creating a new object, but rather changing the state of the first object. In fact, that's exactly how I implement my vector/matrix classes in C++. Would all this fit within the framework of category theory?
:Ok, but then you need a copy() operation, or else you can never non-desctructively add two integers. I don't see how that could be modeled in category theory. AxelBoldt
(NOTE: see new reference added on main Type theory page)
:My $0.02: Category theory and type theory are quite distinct, although not disjoint.  You can imagine a type system based on category theory as an underlying formalism, but the practice of practical type system design owes much more to constructive logic and proof systems than to category theory.  Anyway I've updated the type theory page with an intro.  In the indeterminate future we should seriously consider breaking the type theory page into two pages, one for computer science applications and one for the mathematical foundations. user:K.lee
There is a notion of "categorical type theory". For example, see "Crole: Categories for types". Categorical type theory is basically trying to describe the type theory concepts in the category theory framework.
                                                                                
---
                                                                                
It's not just that values are given types but also the contexts in which they
are used. For example, the if-then primitive of many programming
languages has an associated (but usually implicit) type which indicates that
it requires a Boolean value.
::This is a detail peculiar to languages that have phrases that do not represent values.  What you call "contexts" can usually be desugared into function values of appropriate type.  Hence the semantics of if/then/else in ML are equivalent to a function of type bool -> (unit -> 't) -> (unit -> 't) -> 't.  Anyway, I think that it's best to add this sort of information later in the article rather than earlier---it's hard enough to explain functional type systems clearly to a layperson, without getting into imperative languages.  (The article as a whole does need a lot of work, BTW, and I can never find time to do it.  If you want to add information about imperative languages and types of contexts, go for it.) k.lee
Also, sets are not always a suitable model for types. For example, when a type system allows recursive types, they cannot be modelled (in the standard way, at least) as well-founded sets. Consider the type of infinite lists of
integers:
  List ::= Cons Int List
Considered as a set we would have
  List = Int * List
which is non-well-founded.
:Malcohol 14:14 18 Jul 2003 (UTC)
::AFAIK a recursive type is usually defined as the least set denoted by the closure of the unfolding(s) of the type definition, in much the same way that Church numerals are defined as the least set containing zero and closed under the successor function.  A recursive infinite type (i.e., one that has no finite instances) is a little more complicated, but with the right formal acrobatics you can still define it as a set.  I don't see why it matters whether this set is well-founded or not.  The values belonging to a type need not be finite or even countable.
::Of course, there could still be exotic type systems in which sets do not serve as an appropriate semantic foundation, but this article doesn't have to account for every bizarro type system out there, not in the first few paragraphs anyway. k.lee
:::Well, try giving a simple set-based meaning to types whose inductive definitions contain negative occurences of the induction type variable. David.Monniaux 06:37, 24 Jul 2004 (UTC)
thread_title:  Question 

message: :with classifying entities into "sets" called types.
I added quotes around "sets" in that sentence. Zermelo-Fraenkel set theory and type theory are two different ways of solving the paradoxes of naive set theory, as far as I know. That's why types are not, in general, "sets" in the mathematical sense. David.Monniaux 06:37, 24 Jul 2004 (UTC)
thread_title: Type theory vs Set theory

message: I did a major rewrite in Feb. 2013.  The old page was ... not useful.
I gave _a_ definition for type theory.  I tried to give its relation to its origins and similar concepts (term rewriting system, combinatory logic).  
I moved the history (which was the majority of the old article) to a separate page.  I moved the description of the "ST" system to its own page.  (Not sure why it was here - I had not heard of it elsewhere.)  
I gave a concise description of features of most type systems, although there are many many type theories with difference properties.  I gave a list of the better-known features that exist in various type theories.
I compared and contrasted type theory vs. set theory as a mathematical foundation.
I listed some type theories.  I improved the list of applications of type theory.
I kept sections on "Category theory" and applications in "linguistics" and "social sciences", because I didn't know anything about those subjects.  I removed a section on Polymorphic types; it seemed to apply to a "type system" more than a "type theory".  (There is polymorphism in type theory, but it's different and rare and I don't understand it well enough to write on it.) 
On the "talk page", I removed comments on the evolution towards separate "type theory" and "type system" pages, because I think it is clear that two pages are necessary and they refer to things with two different goals - mathematical foundations vs. features of a programming language.   On the "talk page", I moved comments about ST and the History to their respective talk pages.
For full disclosure: I am working with the group working on Homotopy Type Theory.  I did add links to the that topic on this page.  But Martin-Lof and Coquand are also working on HoTT, so it is a significant area in the field.
Michael Nahas (mdnahas)  — Preceding unsigned comment added by Mdnahas (talk • contribs) 19:23, 15 February 2013 (UTC)
replies: text: Nice work, so far! Cheers, —Ruud 19:55, 15 February 2013 (UTC)
thread_title:  Major Rewrite in Feb. 2013 

message: The notion of type as its own object of study is extremely important -- we cannot understand type theory without first understanding the different notions of what a type is, and then, how it can be applied as a concept to form the fundamental basis of several formal systems.
The Stanford Encyclopedia of Philosophy has its own article and discussion around "What Is A Type?": https://plato.stanford.edu/entries/types-tokens/. I think this is worth its own page and that material should be shifted around to support this extremely fundamental concept. Atasato (talk) 22:59, 8 June 2018 (UTC)
thread_title:  Type itself deserves its own page 

message: I rolled back changes made to the intro paragraph by DesolateReality.  They added a link to the "computational logic" page, which does not contain a definition of computational logic.  They did add that some type theories can work as "a programming language and a calculus for category theoryhttps://ncatlab.org/nlab/show/type+theory."   The "programming language" is possibly worth including.  For the "calculus for category theory", I don't think that's worth including in the intro paragraph.  It might be worth adding a section to the page if DesolateReality can do that.
Mdnahas (talk) 00:10, 2 January 2019 (UTC)
thread_title: Lead paragraph

message: Skimming through this article, the only actual type I saw mentioned was nat. I think it would a good addition to the article to add a sentence/paragraph/section listing the most well known types. Joel Brennan (talk) 20:46, 9 July 2019 (UTC)
thread_title: List of types

message: I extended the sections basic concepts summarizing and linking in the most central lemmata from Barendregt's framework and moved in the section decision problems from type systems and added a section about "interpretations of type theory", so that the main hooks should now be present. As "type theory" in general is broader, the disadvantage is, that the lemma now leans a bit more towards typed lambda calculus, but it already did so before. -- Cobalt pen (talk) 23:19, 9 October 2020 (UTC)
thread_title:  Rewrite in Oct. 2020 

message: The previous changes to this webpage made it very technical and unintelligible to most readers.  (The first definition was "a term is opposed to a type", which is not English or, at least, not modern English!)  This page needs to be accessible to people who are not graduate students in math / computer science.  I added an "introduction" section that is very simple.  It includes "Knuth lies", that is, simplifications that help the reader to understand the basics of the ideas, even if they may learn later that the details are more complicated.
The introduction talks about (1) basics of terms, types and computation, (2) Barendregt's "pure type system" (a.k.a. lambda calculus or the "functional core"), and (3) some common types.   I think it has all the basic ideas needed.  The text could use some cleanup, especially to make the math/symbols correct.
I organized and cleaned up the rest.  
I added a "technical details" section for all the graduate-student language.  
TODO:
* It needs a lot more citations.  
* We should combine and clean up "external links" and "further reading".
Mdnahas (talk) 18:10, 29 December 2021 (UTC)
replies: text: I am extremely glad that you care about this and put the effort in, because I shared your troubles with this page. One thing to keep in mind, though, is that Wikipedia is not a textbook. We should definitely aim for a middle-ground encyclopedic style which is also good to learn from, by laying things out sensibly and making good use of linking. 185.214.220.196 (talk) 19:38, 8 February 2022 (UTC)
thread_title:  Rewrite in Dec. 2021 

message: In the article, 'if' has the following description:
* if a b c : (Π a : bool . B → C → if a B C)
This appears to me inaccurate. If the definition above is considered correct, then `if a b c a b c : if a B C,` which is not, I think, the intended meaning. I propose that the above description is replaced by the 2 following:
* if : (Π a : bool . B → C → if a B C)
* if a b c : if a B C
The first gives the type of the `if` function itself, and the second gives its type when applied to arguments. Scholar596440 (talk) 14:44, 19 July 2023 (UTC)
replies: text: I second this :-) BalinKingOfMoria (talk) 19:49, 19 July 2023 (UTC)
replies: text: And it seems like a pretty straightforward typo to me, so I can't imagine your fix would be controversial. As per WP:JUSTDOIT, I think you're safe to go ahead make the change! BalinKingOfMoria (talk) 19:51, 19 July 2023 (UTC)
replies: text: Thanks! Scholar596440 (talk) 19:56, 19 July 2023 (UTC)
thread_title:  Proposed Change to Descriptions of the ‘if’ Construct 

message: Aside from it being a right mess, it seems that the Introduction section begins with a treatment of simply typed lambda calculus, which already has its own page, and then lists a grab-bag of types which have varying levels of universality among type theories. This makes me wonder, what is really the goal of this article? I quite like the general sections (differences from set theory, interpretations, list, applications) because they deal with general type theories instead of a specific one. I would move (and rewrite!) most of the introduction to the STλC article; since I'm a new editor I thought I'd probe for opinions before being bold. Tectoskepsis (talk) 22:37, 17 January 2024 (UTC)
replies: text: Tectoskepsis, generally encyclopedia articles should be able to stand on their own to a reasonable degree—a rule of thumb is to provide sufficient context to the reader. Mathematics articles may be the most difficult to do this for on the whole site, but I still think it's important to do so. I encourage your improvement of the article, but a summarized context is important to maintain in some form, in my opinion. — Remsense诉 22:50, 17 January 2024 (UTC)
replies: text: Makes sense, thank you Remsense! (I've been reading your opinions at the Teahouse, and I appreciate the clarity of your thought!) Tectoskepsis talk 15:38, 18 January 2024 (UTC)
thread_title:  Purpose of "Introduction"? 

message: I'm reluctant to jump in and edit a page that has had such careful curation, but the second sentence of the History section starts, "Russell's paradox (first described in Gottlob Frege's The Foundations of Arithmetic)". As far as I know, this is false. Zermelo was apparently aware of the paradox in 1899. Hope someone will fix, or provide a reference.
Thanks, Natkuhn (talk) 23:38, 3 May 2024 (UTC)
thread_title:  I don't think Frege published Russell's paradox in 1884