Qual é exatamente a diferença semântica entre conjunto e tipo?

33

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 x dizer que é do tipo T , em comparação com dizer que é um elemento no conjunto ?S

(Você pode escolher qualquer tipo e conjunto que torne a comparação mais esclarecedora).

user56834
fonte
Qual é o contexto em que você está usando / ouvindo a palavra "tipo"? É, como o seu nome sugere, linguagens de programação? Porque acho que as respostas abaixo assumem o contrário.
einpoklum - restabelece Monica
@einpoklum, não tenho 100% de certeza de como descrever o que é o "contexto", mas basicamente algo como: estou tentando entender o papel dos tipos na matemática. Essencialmente, os conjuntos (como eu o vejo) têm dois contextos: primeiro, eles são usados ​​como coleções de objetos para a matemática cotidiana. Em segundo lugar, são objetos na teoria axiomática dos conjuntos, onde são usados ​​principalmente como uma ferramenta muito estranha, mas útil para fale sobre matemática na lógica de primeira ordem, permitindo que os conjuntos correspondam a funções e números e assim por diante. Estou interessado principalmente na relação entre "conjunto" no primeiro sentido e "tipo".
user56834
O papel de quais tipos? Os tipos que você vê nos papéis / livros de matemática ou os tipos de variáveis ​​nos programas de computador?
Einpoklum - restabelece Monica
1
@einpoklum, esta pergunta é sobre aqueles em trabalhos de matemática. (Embora eu também esteja realmente interessado em saber a diferença fundamental entre tipos em matemática e tipos em linguagens de programação, se houver alguma. Mas não era disso que se tratava essa pergunta).
user56834

Respostas:

29

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:

  1. 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.

  2. 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:TTT T

  1. 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)npn3

  2. 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)mqm2

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 Nm  é um primo ímpar menor que  2 } são iguais porque têm os mesmos elementos.

{nNn is an even prime larger than 3}
{mNm is an odd prime smaller than 2}

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.

Andrej Bauer
fonte
1
Bonito obrigado! Você poderia esclarecer um detalhe? ao listar os dois tipos cuja extensão está vazia, você diz que "o tipo cujos elementos são ...". Para minha clareza, é uma maneira 100% correta de dizer isso? Você disse na frase anterior que um tipo não é uma coleção, portanto parece que não pode ter "elementos" (os quais associo a conjuntos). Essencialmente, da maneira que você escreveu agora, é como se você estivesse definindo o Tipo de acordo com o conjunto que é sua extensão. Se você não pretendia isso, poderia reformulá-los com mais precisão para capturar a ideia deles como tipos?
user56834
A extensão de um tipo é um conceito muito útil e, como é um tipo de coleção, podemos dizer "elemento da extensão de um tipo". Isso é complicado, muitas vezes abreviado para apenas "elemento de um tipo". Eu removi o fraseado para diminuir a possibilidade de confusão, mas cuidado, é uma terminologia comum.
21718 Andrej Bauer
Obrigado, isso esclarece. Então, para acompanhar, é correto dizer o seguinte? Dizer que um objeto é "do tipo T" significa a mesma coisa que, o objeto é "um elemento da extensão de T", de modo que há uma exceção natural de tipos para conjuntos. Mas o inverso não se sustenta, porque qualquer conjunto pode ser construído de várias maneiras. Essencialmente, a diferença entre conjunto e tipo não é importante da perspectiva de um objeto específico , no sentido de que x : T e x X T (onde X T é a extensão de T ) nos fornecem exatamente as mesmas informações sobre x . No entanto,xx:TxXTXTTx
Você pode usar o seguinte comando
A diferença é relevante quando queremos falar sobre tipos e conjuntos, e suas propriedades e relações. Portanto, em outras palavras, as informações que perdemos quando dizemos vez de x : T não nos dizem nada relevante sobre x , mas o mesmo pode não ser válido se, por exemplo, quisermos falar sobre superconjunto ou subconjunto relações de subtipo? Isso está correto? xXTx:Tx
user56834
4
Sim, nos perguntamos onde estão esses livros. Alguém deveria escrevê-los.
21318 Andrej Bauer
11

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 × VV . Isso nos permite saber que s c a l e ( s c a l eSVscumaeue:S×VV 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 )scumaeue(scumaeue(s,v),v)f(x)fXYXYff(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=3x: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 = ( xxyf(x)=y(x,y)f que é uma abreviação dep . p f ( z . z pp.pfp=(x,y) De qualquer forma,qualquer conjunto pode substituir o lugar de f e tudo é um conjunto! Como aponteirecentementeemuma pergunta diferente, π ( 7 ) = 3 onde π

p.pf(z.zp[z=x(w.wzw=y)])
fπ(7)=3πé que o número real é uma expressão teórica de conjunto completamente legítima e significativa (e potencialmente verdadeira). Basicamente, qualquer coisa que você escreva que analise a teoria dos conjuntos pode ter algum significado. Pode ser um significado completamente falso, mas tem um. Os conjuntos também são objetos de "primeira classe" na teoria dos conjuntos. (É melhor que sejam os únicos objetos em geral.) Uma função como
f(x)={N,if x=17,if x=QxRR,if x=(Z,N)
é uma função completamente legítima na teoria dos conjuntos. Não há nada nem remotamente análogo a isso na teoria dos tipos. O mais próximo seria usar códigos para um universo tarskiano. Conjuntos são os objetos da teoria dos conjuntos; tipos não são objeto da teoria dos tipos.

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.

Derek Elkins
fonte
1
É falso que os tipos sejam apenas entidades sintáticas.
21318 Andrej Bauer
1
Isso é muito útil, mas um ponto principal na sua resposta me incomoda. Parece-me que é um erro (que muitas pessoas cometem, ou, alternativamente, não é um erro e eu estou errado), dizer que "um conjunto não é uma coleção de coisas". Eu diria que um conjunto é uma coleção de coisas. Essa é a propriedade essencial mais básica de um conjunto. De fato, como poderíamos saber que, por exemplo, o ZFC é o axioma certo para escolher (em vez de fórmulas completamente arbitrárias), sem poder dizer que elas são verdadeiras, dado que os conjuntos são coleções de objetos? Claro, eu entendo que ...
user56834
A teoria axiomática dos conjuntos trata os conjuntos como objetos e apenas como um símbolo, porque a teoria axiomática dos conjuntos não é uma estrutura matemática no sentido da lógica matemática.
user56834
1
@ Programmer2134 Para responder a isso, teríamos que entrar no significado semântico da palavra "coleção". Não podemos ter certeza de que eles estão "certos", a menos que você reserve um tempo para definir com precisão o que "certo" significa. No entanto, o que podemos dizer é que "conjunto" é o resultado de mais de cem anos de matemáticos batendo no conceito de uma coleção, buscando um sistema consistente que corresponda ao conceito intuitivo de uma coleção. Para alcançar essa consistência, eles tiveram que tomar decisões. Por exemplo, conjuntos não são a única coleção em matemática. Uma "classe" também descreve uma coleção.
Cort Ammon - Restabelece Monica
1
@AndrejBauer Estou adotando uma postura (principalmente) não filosófica e não tentando explicar quais tipos "realmente" são, mas mais como eles são usados. (Eu digo "serve como" e "comporta-se como" no início, mas entrei com um "é" no final.) Existe o risco de pensar que uma variável sendo do tipo T significa que os únicos "valores" que x pode "tomar" são os (presumivelmente fechado) termos de tipo T . Isso não é verdade e não está implícito em nada do que digo acima. Concordo que você pode ver os tipos como mais do que entidades sintáticas, mas acho que os diferentes tipos de papéis sintáticos desempenham um claro contraste com os conjuntos. xTxT
Derek Elkins
9

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 .xT xS

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 nz n ) }

3+(78)5:Numat,
3{nNx,y,zN+(xn+ynzn)}

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)33

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.

Lagarto discreto
fonte
3
A verificação de tipo não precisa ser decidida (embora certamente seja desejável). O NuPRL, por exemplo, exige que o usuário forneça uma prova de que um termo habita um tipo.
Derek Elkins
3
Obrigado. As coisas estão ficando mais claras. Aqui está o que estou pensando ainda: não há um elemento semântico para digitar teoria e um elemento sintático para definir teoria? Por exemplo, em vez de ver o seu "3..."afirmação como uma afirmação semântica, vê-a como uma proposição na teoria axiomática dos conjuntos, não? Além disso, o tipo" Nat "não tem um significado semântico, a saber, o que precede o número natural? Portanto, ainda me confunde: digamos que os conjuntos rhat são semânticos e tipos de propriedades sintáticas.
user56834
1
@DerekElkins I'm not familiar with NuPRL, but e.g. the proof assistant Coq most certainly does type checking by itself (i.e, is the provided term of the 'type of my theorem'). How does NuPRL verify the proof if the user has to 'prove' the fact that a term of a certain type? (in other words, this sounds like NuPRL doesn't use the Curry-Howard correspondence, so what does it use?)
Discrete lizard
1
@Discretelizard Não estou dizendo que o NuPRL é típico. Definitivamente, é o caso usual para a verificação de tipo ser decidível. Eu recomendo que você se familiarize apenas com o caminho. O NuPRL é um cálculo no estilo Curry, e não no estilo Igreja, que o torna mais um sistema de refinamento de tipo. De qualquer forma, em vez de apenas escrever termos (ou táticas que produzem termos), você tem essencialmente um sistema de prova no estilo LCF para digitar derivações. Indiscutivelmente, as derivações são o que é importante, e é meio que um acaso que podemos deduzi-las de termos.
Derek Elkins
3
Eu expliquei em minha resposta por que é prejudicial pensar na teoria dos tipos como "sintática". Sua primeira frase é a mais ofensiva, quando você diz que "habitar um tipo é uma propriedade sintática". Há tanta verdade nisso quanto dizer que "ser um elemento de um conjunto é ficar à esquerda do símbolo".
Andrej Bauer
4

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 booleanos B={verdade,falso} e números naturais N={0 0,1,...}, com tipos, você não pode perguntar se verdade=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 0]={}, n+1 é codificado como [n+1]={[n]}[n] e verdade e falsopode ser codificado por dois conjuntos distintos. Para que faça sentido perguntar severdade=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 seuma=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 verdade=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:BS e ιN:NS, você pode perguntar se ιB(verdade)=ι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, (E severy_hard_questionentão1outroverdade)=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.

xavierm02
fonte
Você provavelmente está pensando em um tipo específico de teoria de conjuntos (algo ao longo de uma teoria de classificação única à la ZFC). No entanto, existem outros tipos de teoria dos conjuntos que exigem muita verificação de que faz sentido. E a maneira como a teoria dos conjuntos é usada na prática está muito mais próxima dessas outras teorias dos conjuntos. Você acha que um aluno poderia perguntar "ÉR um elemento de pecado(2)?", Sem ser repreendido A distinção entre a teoria tipo e teoria dos conjuntos não é no formalismo, que está no significado.
Andrej Bauer
@AndrejBauer Right. Você concorda que esta resposta apresenta diferenças entre teorias de classificação única (incluindo a maioria das teorias de conjuntos, ou pelo menos as mais comuns) e teorias de classificação múltipla (incluindo todas as teorias de tipos (?))?
precisa saber é o seguinte
Mesmo em uma única teoria-ordenada você tem que distinguir termos de fórmulas ...
Andrej Bauer
@AndrejBauer Não entendo seu segundo comentário.
precisa saber é o seguinte
Uma teoria de primeira ordem de classificação única possui duas categorias sintáticas: fórmulas e termos lógicos . É preciso garantir que eles não estejam confusos, ou você poderá escrever "(xX.ϕ(x))N".
Andrej Bauer