Type Theory
In mathematics, logic, and computer science, a type theory is the formal presentation of a specific type system, and in general type theory is the academic study of type systems. Some type theories serve as alternatives to set theory as a foundation of mathematics. Two influential type theories that were proposed as foundations are Alonzo Church's typed λcalculus and Per MartinLöf's intuitionistic type theory. Most computerized proofwriting systems use a type theory for their foundation. A common one is Thierry Coquand's Calculus of Inductive Constructions. History Type theory was created to avoid a paradox in a mathematical foundation based on naive set theory and formal logic. Russell's paradox, which was discovered by Bertrand Russell, existed because a set could be defined using "all possible sets", which included itself. Between 1902 and 1908, Bertrand Russell proposed various "theories of type" to fix the problem. By 1908 Russell arrived at a "ramified" theory ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Mathematics
Mathematics is an area of knowledge that includes the topics of numbers, formulas and related structures, shapes and the spaces in which they are contained, and quantities and their changes. These topics are represented in modern mathematics with the major subdisciplines of number theory, algebra, geometry, and analysis, respectively. There is no general consensus among mathematicians about a common definition for their academic discipline. Most mathematical activity involves the discovery of properties of abstract objects and the use of pure reason to prove them. These objects consist of either abstractions from nature orin modern mathematicsentities that are stipulated to have certain properties, called axioms. A ''proof'' consists of a succession of applications of deductive rules to already established results. These results include previously proved theorems, axioms, andin case of abstraction from naturesome basic properties that are considered true starting points of ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Bertrand Russell
Bertrand Arthur William Russell, 3rd Earl Russell, (18 May 1872 – 2 February 1970) was a British mathematician, philosopher, logician, and public intellectual. He had a considerable influence on mathematics, logic, set theory, linguistics, artificial intelligence, cognitive science, computer science and various areas of analytic philosophy, especially philosophy of mathematics, philosophy of language, epistemology, and metaphysics.Stanford Encyclopedia of Philosophy"Bertrand Russell" 1 May 2003. He was one of the early 20th century's most prominent logicians, and a founder of analytic philosophy, along with his predecessor Gottlob Frege, his friend and colleague G. E. Moore and his student and protégé Ludwig Wittgenstein. Russell with Moore led the British "revolt against idealism". Together with his former teacher A. N. Whitehead, Russell wrote ''Principia Mathematica'', a milestone in the development of classical logic, and a major attempt to reduce the whole ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Lean (proof Assistant)
Lean is a theorem prover and programming language. It is based on the calculus of constructions with inductive types. The Lean project is an open source project, hosted on GitHub. It was launched by Leonardo de Moura at Microsoft Research in 2013. Lean has an interface that differentiates it from other interactive theorem provers. Lean can be compiled to JavaScript and accessed in a web browser. It has native support for Unicode symbols. (These can be typed using LaTeXlike sequences, such as "\times" for "×".) Lean also has an extensive support for metaprogramming. Lean has gotten attention from mathematicians Thomas Hales and Kevin Buzzard. Hales is using it for his project, Formal Abstracts. Buzzard uses it for the Xena project. One of the Xena Project's goals is to rewrite every theorem and proof in the undergraduate math curriculum of Imperial College London in Lean. Examples Here is how the natural numbers are defined in Lean. inductive nat : Type , zero : nat , s ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Calculus Of Constructions
In mathematical logic and computer science, the calculus of constructions (CoC) is a type theory created by Thierry Coquand. It can serve as both a typed programming language and as constructive foundation for mathematics. For this second reason, the CoC and its variants have been the basis for Coq and other proof assistants. Some of its variants include the calculus of inductive constructions (which adds inductive types), the calculus of (co)inductive constructions (which adds coinduction), and the predicative calculus of inductive constructions (which removes some impredicativity). General traits The CoC is a higherorder typed lambda calculus, initially developed by Thierry Coquand. It is well known for being at the top of Barendregt's lambda cube. It is possible within CoC to define functions from terms to terms, as well as terms to types, types to types, and types to terms. The CoC is strongly normalizing, and hence consistent. Usage The CoC has been developed alongsi ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Constructivism (mathematics)
In the philosophy of mathematics, constructivism asserts that it is necessary to find (or "construct") a specific example of a mathematical object in order to prove that an example exists. Contrastingly, in classical mathematics, one can prove the existence of a mathematical object without "finding" that object explicitly, by assuming its nonexistence and then deriving a contradiction from that assumption. Such a proof by contradiction might be called nonconstructive, and a constructivist might reject it. The constructive viewpoint involves a verificational interpretation of the existential quantifier, which is at odds with its classical interpretation. There are many forms of constructivism. These include the program of intuitionism founded by Brouwer, the finitism of Hilbert and Bernays, the constructive recursive mathematics of Shanin and Markov, and Bishop's program of constructive analysis. Constructivism also includes the study of constructive set theories such as CZ ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Higherorder Logic
mathematics and logic, a higherorder logic is a form of predicate logic that is distinguished from firstorder logic by additional quantifiers and, sometimes, stronger semantics. Higherorder logics with their standard semantics are more expressive, but their modeltheoretic properties are less wellbehaved than those of firstorder logic. The term "higherorder logic", abbreviated as HOL, is commonly used to mean higherorder simple predicate logic. Here "simple" indicates that the underlying type theory is the ''theory of simple types'', also called the ''simple theory of types'' (see Type theory). Leon Chwistek and Frank P. Ramsey proposed this as a simplification of the complicated and clumsy ''ramified theory of types'' specified in the ''Principia Mathematica'' by Alfred North Whitehead and Bertrand Russell. ''Simple types'' is nowadays sometimes also meant to exclude polymorphic and dependent types. Quantification scope Firstorder logic quantifies only variables th ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Kleene–Rosser Paradox
In mathematics, the Kleene–Rosser paradox is a paradox that shows that certain systems of formal logic are inconsistent, in particular the version of Haskell Curry's combinatory logic introduced in 1930, and Alonzo Church's original lambda calculus, introduced in 1932–1933, both originally intended as systems of formal logic. The paradox was exhibited by Stephen Kleene and J. B. Rosser in 1935. The paradox Kleene and Rosser were able to show that both systems are able to characterize and enumerate their provably total, definable numbertheoretic functions, which enabled them to construct a term that essentially replicates Richard's paradox in formal language. Curry later managed to identify the crucial ingredients of the calculi that allowed the construction of this paradox, and used this to construct a much simpler paradox, now known as Curry's paradox. See also * List of paradoxes This list includes well known paradoxes, grouped thematically. The grouping is appr ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Simply Typed Lambda Calculus
The simply typed lambda calculus (\lambda^\to), a form of type theory, is a typed interpretation of the lambda calculus with only one type constructor (\to) that builds function types. It is the canonical and simplest example of a typed lambda calculus. The simply typed lambda calculus was originally introduced by Alonzo Church in 1940 as an attempt to avoid paradoxical use of the untyped lambda calculus. The term ''simple type'' is also used to refer extensions of the simply typed lambda calculus such as products, coproducts or natural numbers ( System T) or even full recursion (like PCF). In contrast, systems which introduce polymorphic types (like System F) or dependent types (like the Logical Framework) are not considered ''simply typed''. The simple types, except for full recursion, are still considered ''simple'' because the Church encodings of such structures can be done using only \to and suitable type variables, while polymorphism and dependency cannot. Syntax In ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Lambda Calculus
Lambda calculus (also written as ''λ''calculus) is a formal system in mathematical logic for expressing computation based on function abstraction and application using variable binding and substitution. It is a universal model of computation that can be used to simulate any Turing machine. It was introduced by the mathematician Alonzo Church in the 1930s as part of his research into the foundations of mathematics. Lambda calculus consists of constructing § lambda terms and performing § reduction operations on them. In the simplest form of lambda calculus, terms are built using only the following rules: * x – variable, a character or string representing a parameter or mathematical/logical value. * (\lambda x.M) – abstraction, function definition (M is a lambda term). The variable x becomes bound in the expression. * (M\ N) – application, applying a function M to an argument N. M and N are lambda terms. The reduction operations include: * (\lambda x.M \rightarrow(\l ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Julia (programming Language)
Julia is a highlevel, dynamic programming language. Its features are well suited for numerical analysis and computational science. Distinctive aspects of Julia's design include a type system with parametric polymorphism in a dynamic programming language; with multiple dispatch as its core programming paradigm. Julia supports concurrent, (composable) parallel and distributed computing (with or without using MPI or the builtin corresponding to "OpenMPstyle" threads), and direct calling of C and Fortran libraries without glue code. Julia uses a justintime (JIT) compiler that is referred to as "just aheadoftime" (JAOT) in the Julia community, as Julia compiles all code (by default) to machine code before running it. Julia is garbagecollected, uses eager evaluation, and includes efficient libraries for floatingpoint calculations, linear algebra, random number generation, and regular expression matching. Many libraries are available, including some (e.g., for fast Fo ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

Julia (programming Language)
Julia is a highlevel, dynamic programming language. Its features are well suited for numerical analysis and computational science. Distinctive aspects of Julia's design include a type system with parametric polymorphism in a dynamic programming language; with multiple dispatch as its core programming paradigm. Julia supports concurrent, (composable) parallel and distributed computing (with or without using MPI or the builtin corresponding to "OpenMPstyle" threads), and direct calling of C and Fortran libraries without glue code. Julia uses a justintime (JIT) compiler that is referred to as "just aheadoftime" (JAOT) in the Julia community, as Julia compiles all code (by default) to machine code before running it. Julia is garbagecollected, uses eager evaluation, and includes efficient libraries for floatingpoint calculations, linear algebra, random number generation, and regular expression matching. Many libraries are available, including some (e.g., for fast Fo ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 

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 related to another datatype (the supertype) by some notion of substitutability, meaning that program elements, typically subroutines or functions, written to operate on elements of the supertype can also operate on elements of the subtype. If S is a subtype of T, the subtyping relation (written as , , or ) means that any term of type S can ''safely be used'' in ''any context'' where a term of type T is expected. The precise semantics of subtyping here crucially depends on the particulars of how ''"safely be used"'' and ''"any context"'' are defined by a given type formalism or programming language. The type system of a programming language essentially defines its own subtyping relation, which may well be trivial, should the language support no (or very little) conversion mechanisms. Due to the su ... [...More Info...] [...Related Items...] OR: [Wikipedia] [Google] [Baidu] 