Edição: Agora eu fiz uma pergunta semelhante sobre a diferença entre categorias e conjuntos.
Toda vez que leio sobre teoria dos tipos (que reconhecidamente é bastante informal), não consigo entender realmente como ela difere da teoria dos conjuntos, concretamente .
Entendo que existe uma diferença conceitual entre dizer "x pertence a um conjunto X" e "x é do tipo X" porque, intuitivamente, um conjunto é apenas uma coleção de objetos, enquanto um tipo tem certas "propriedades". No entanto, os conjuntos também são frequentemente definidos de acordo com as propriedades e, se forem, então estou tendo problemas para entender como essa distinção é importante.
Portanto, da maneira mais concreta possível, o que exatamente implica em dizer que é do tipo , em comparação com dizer que é um elemento no conjunto ?
(Você pode escolher qualquer tipo e conjunto que torne a comparação mais esclarecedora).
fonte
Respostas:
Para entender a diferença entre conjuntos e tipos, é preciso voltar às idéias pré- matemáticas de "coleção" e "construção" e ver como os conjuntos e tipos os matematizam .
Há um espectro de possibilidades sobre o que é a matemática. Dois deles são:
Pensamos na matemática como uma atividade na qual objetos matemáticos são construídos de acordo com algumas regras (pense na geometria como a atividade de construir pontos, linhas e círculos com uma régua e uma bússola). Assim, os objetos matemáticos são organizados de acordo com a forma como são construídos , e existem diferentes tipos de construção. Um objeto matemático é sempre construído de uma maneira única, que determina seu tipo único.
Pensamos na matemática como um vasto universo cheio de objetos matemáticos preexistentes (pense no plano geométrico como dado). Descobrimos, analisamos e pensamos sobre esses objetos (observamos que existem pontos, linhas e círculos no plano). Nós os coletamos em conjunto . Geralmente, coletamos elementos que têm algo em comum (por exemplo, todas as linhas que passam por um determinado ponto), mas, em princípio, um conjunto pode reunir uma seleção arbitrária de objetos. Um conjunto é especificado por seus elementos e apenas por seus elementos. Um objeto matemático pode pertencer a muitos conjuntos.
Não estamos dizendo que as possibilidades acima são as únicas duas, ou que qualquer uma delas descreve completamente o que é a matemática. No entanto, cada um pode ver pode servir como um ponto de partida útil para uma teoria matemática geral que descreve utilmente uma ampla gama de atividades matemáticas.
É natural tomar um tipo e imaginar a coleção de todas as coisas que podemos construir usando as regras do T . Esta é a extensão de T , e é não T em si. Por exemplo, aqui estão dois tipos que têm regras diferentes de construção, mas eles têm a mesma extensão:T T T T
O tipo de pares que n é construído como um número natural ep é construído como uma prova demonstrando que n é um número principal par maior que 3 .(n,p) n p n 3
O tipo de pares que m é construído como um número natural e q é construído como uma prova demonstrando que m é um primo ímpar menor que 2 .(m,q) m q m 2
Sim, esses são exemplos tolos e triviais, mas o ponto permanece: ambos os tipos não têm nada em sua extensão, mas têm regras diferentes de construção. Por outro lado, os conjuntos e { m ∈ N ∣ m é um primo ímpar menor que 2 } são iguais porque têm os mesmos elementos.
Observe que a teoria dos tipos não é sobre sintaxe. É uma teoria matemática das construções, assim como a teoria dos conjuntos é uma teoria matemática das coleções. Acontece que as apresentações usuais da teoria dos tipos enfatizam a sintaxe e, consequentemente, as pessoas acabam pensando que a teoria dos tipos é sintaxe. Este não é o caso. Confundir um objeto matemático (construção) com uma expressão sintática que o represente (um termo antigo) é um erro básico de categoria que intrigou os lógicos por um longo tempo, mas não mais.
fonte
Para começar, sets e tipos não estão na mesma arena. Conjuntos são objetos de uma teoria de primeira ordem, como a teoria de conjuntos ZFC. Enquanto tipos são como tipos crescidos. Em outras palavras, uma teoria dos conjuntos é uma teoria de primeira ordem dentro da lógica de primeira ordem. Uma teoria de tipos é uma extensão da própria lógica. A teoria dos tipos de Martin-Löf, por exemplo, não é apresentada como uma teoria de primeira ordem dentro da lógica de primeira ordem. Não é tão comum falar sobre conjuntos e tipos ao mesmo tempo.
Como afirma um lagarto discreto, os tipos (e as classificações) servem para uma função sintática. Uma classificação / tipo se comporta como uma categoria sintática . Ele nos permite saber quais expressões são bem formadas. Para um exemplo simples de ordenação, digamos que descrevemos a teoria dos espaços vetoriais sobre um campo arbitrário como uma teoria de 2 ordenações. Temos uma espécie de escalares, , e uma espécie de vetores, V . Entre muitas outras coisas, teríamos uma operação para o dimensionamento: s c um l e : S × V → V . Isso nos permite saber que s c a l e ( s c a l eS V s c a l e : S × V → V simplesmente não é um termo bem formado. Em um contexto teórico tipo, uma expressão como f ( x ) requer f ter um tipo X → Y para alguns tipos X e Y . Se f não possui o tipo de uma função, então f ( x ) simplesmente não é uma expressão bem formada. Se uma expressão é de algum tipo ou tem algum tipo é uma afirmação meta-lógica. Não faz sentido escrever algo como: ( x : X )s c a l e ( s c a l e (s,v),v) f( X ) f X→Y X Y f f(x) . Primeiro, x : X simplesmente não é uma fórmula e, segundo, nem conceitualmente faz sentido, pois tipos / tipos são o que nos permite saber quais fórmulas são bem formadas. Consideramos apenas o valor real das fórmulas bem formadas; portanto, quando consideramos se alguma fórmula é válida, é melhor já sabermos que é bem formada!(x:X)⟹y=3 x:X
Na teoria dos conjuntos, e particularmente no ZFC, o único símbolo não lógico é o símbolo de relação para a associação de conjuntos, . Então x ∈ y é uma fórmula bem formada com um valor de verdade. Não há termos que não sejam variáveis. Toda a notação usual da teoria dos conjuntos é uma extensão definitiva para isso. Por exemplo, uma fórmula como f ( x ) = y é freqüentemente usada como abreviação de ( x , y ) ∈ f, a qual pode ser usada como abreviação de ∃ p . p ∈ f ∧ p = ( x∈ x∈y f(x)=y (x,y)∈f que é uma abreviação de ∃ p . p ∈ f ∧ ( ∀ z . z ∈ p∃p.p∈f∧p=(x,y)
De qualquer forma,qualquer conjunto pode substituir o lugar de f e tudo é um conjunto! Como aponteirecentementeemuma pergunta diferente, π ( 7 ) = 3 onde π
Um tipo não é uma coleção de coisas (também não é um conjunto ...) e não é definido por uma propriedade. Um tipo é uma categoria sintática que permite saber quais operações são aplicáveis aos termos desse tipo e quais expressões são bem formadas. De uma perspectiva de proposições como tipos, quais tipos estão classificando são as provas válidas da proposição à qual o tipo corresponde. Ou seja, os termos bem formados (ou seja, bem tipificados) de um determinado tipo correspondem às provas válidas (que também são objetos sintáticos) da proposição correspondente. Nada disso está acontecendo na teoria dos conjuntos.
Teoria dos conjuntos e teoria dos tipos não são realmente nada parecidas.
fonte
Na prática, alegar que sendo do tipo T geralmente é usado para descrever a sintaxe , enquanto afirmar que x está no conjunto S é geralmente usado para indicar uma propriedade semântica . Vou dar alguns exemplos para esclarecer essa diferença no uso de tipos e conjuntos. Para a diferença de quais tipos e conjuntos são realmente , refiro-me à resposta de Andrej Bauer .x T x S
Um exemplo
Para esclarecer essa distinção, usarei o exemplo dado nas notas de aula de Herman Geuvers . Primeiro, olhamos para um exemplo de habitar um tipo:
e um exemplo de ser membro de um conjunto: 3 ∈ { n ∈ N | ∀ x , y , z ∈ N + ( x n + y n ≠ z n ) }
A principal diferença aqui é que, para testar se a primeira expressão é um número natural, não precisamos calcular algum significado semântico, apenas temos que 'ler' o fato de que todos os literais são do tipo Nat e que todos os operadores são fechado no tipo Nat.
No entanto, para o segundo exemplo do conjunto, temos que determinar o significado semântico dos no contexto do conjunto. Para este conjunto em particular, isso é bastante difícil: a participação de 3 nesse conjunto é equivalente a provar o último teorema de Fermat! Observe que, conforme declarado nas notas, a distinção entre sintaxe e semântica nem sempre pode ser desenhada com clareza. (e você pode até argumentar que mesmo este exemplo não é claro, como o Programmer2134 menciona nos comentários)3 3
Algoritmos vs Provas
Para resumir, os tipos são frequentemente usados para reivindicações 'simples' na sintaxe de alguma expressão, de modo que a associação de um tipo possa ser verificada por um algoritmo , enquanto que para testar a associação de um conjunto, geralmente exigiríamos uma prova .
Para ver por que essa distinção é útil, considere um compilador de uma linguagem de programação digitada. Se esse compilador precisar criar uma prova formal para 'verificar os tipos', o compilador será solicitado a executar uma tarefa quase impossível (a prova automatizada de teoremas é, em geral, difícil). Se, por outro lado, o compilador puder simplesmente executar um algoritmo (eficiente) para verificar os tipos, poderá executar a tarefa de forma realista.
Uma motivação para uma interpretação estrita
Existem múltiplas interpretações do significado semântico de conjuntos e tipos. Embora, sob a distinção feita aqui, tipos extensional e tipos com verificação de tipo indecidível (como os usados no NuPRL, como mencionado nos comentários) não sejam 'tipos', outros são naturalmente livres para chamá-los dessa maneira (da mesma forma que livre como eles podem chamá-los de outra coisa, desde que suas definições sejam adequadas).
No entanto, nós (Herman Geuvers e eu) preferimos não jogar essa interpretação pela janela, pela qual eu (não Herman, embora ele possa concordar) temos a seguinte motivação:
Antes de tudo, a intenção dessa interpretação não está muito longe da de Andrej Bauer. A intenção de uma sintaxe é geralmente descrever como construir algo e ter um algoritmo para construí-lo é geralmente útil. Além disso, os recursos de um conjunto geralmente são necessários apenas quando queremos uma descrição semântica, para a qual a indecidibilidade é permitida.
Portanto, a vantagem de nossa descrição mais rígida é manter a separação mais simples , obter uma distinção mais diretamente relacionada ao uso prático comum. Isso funciona bem, desde que você não precise ou queira diminuir o uso, como faria, por exemplo, NuPRL.
fonte
Acredito que uma das diferenças mais concretas sobre conjuntos e tipos é a diferença na maneira como as "coisas" em sua mente são codificadas na linguagem formal.
Ambos os conjuntos e tipos permitem que você fale sobre coisas e coleções de coisas. A principal diferença é que, com conjuntos, você pode fazer qualquer pergunta que quiser sobre as coisas e talvez isso seja verdade, talvez não; enquanto que com tipos, você primeiro precisa provar que a pergunta faz sentido.
Por exemplo, se você tiver booleanosB ={verdadeiro,falso} e números naturais N ={0,1,…} , com tipos, você não pode perguntar se true = 1 que você pode com conjuntos.
Uma maneira de interpretar isso é que, com conjuntos, tudo é codificado em uma única coleção: a coleção de todos os conjuntos.0 0 é codificado como [ 0 ] = { } , n + 1 é codificado como [ n + 1 ] = { [ n ] } ∪ [ n ] e verdade e falso pode ser codificado por dois conjuntos distintos. Para que faça sentido perguntar setrue = 1 , pois pode ser entendido como perguntar se "a codificação escolhida para verdade é o mesmo que a codificação escolhida para 1 ". Mas a resposta a esta pergunta pode mudar se escolhermos outra codificação: é sobre as codificações e não realmente sobre as coisas.
Você pode pensar em tipos como descrevendo a codificação das coisas dentro dela. Com tipos, para perguntar sea = b , primeiro você tem que mostrar que uma e b têm o mesmo tipo, ou seja, foram codificados da mesma maneira, o que proíbe questões como true = 1 . Você ainda pode querer ter um tipo grandeS em que ambos B e N poderia ser codificado e, em seguida, receber duas codificações ιB: B → S e ιN: N → S , você pode perguntar se ιB( verdadeiro ) = ιN( 1 ) mas o fato de que essa pergunta depende das codificações (e da escolha das codificações) agora é explícito.
Observe que, nesses casos, se a pergunta fazia sentido era realmente fácil de ver, mas poderia ser muito mais difícil, como em, por exemplo,( severy_hard_question then1 pessoatrue ) = 1 .
Em resumo, os conjuntos permitem fazer qualquer pergunta que você quiser, mas os tipos forçam você a tornar as codificações explícitas quando a resposta depender delas.
fonte