EDIT: J'ai maintenant posé une question similaire sur la différence entre les catégories et les ensembles.
Chaque fois que je lis sur la théorie du type (qui est certes plutôt informelle), je ne peux pas vraiment comprendre comment elle diffère de la théorie des ensembles, concrètement .
Je comprends qu’il existe une différence conceptuelle entre dire "x appartient à un ensemble X" et "x est de type X", car intuitivement, un ensemble est simplement une collection d’objets, alors qu’un type a certaines "propriétés". Néanmoins, les ensembles sont souvent définis en fonction des propriétés également, et s'ils le sont, j'ai du mal à comprendre en quoi cette distinction est importante.
Ainsi , dans le plus concret façon possible, qu'est-ce exactement cela implique au sujet de à dire qu'il est de type , par rapport à dire qu'il est un élément dans l'ensemble ?
(Vous pouvez choisir n’importe quel type et jeu qui rend la comparaison plus précise).
la source
Réponses:
Pour comprendre la différence entre les séries et les types, les doit revenir à pré idées -mathematical de « collection » et « construction », et voir comment les ensembles et les types mathématiser ceux - ci.
Il existe un large éventail de possibilités sur le sujet des mathématiques. Deux d'entre eux sont:
Nous pensons que les mathématiques sont une activité dans laquelle les objets mathématiques sont construits selon certaines règles (pensez à la géométrie en tant qu'activité de construction de points, de lignes et de cercles avec une règle et une boussole). Ainsi, les objets mathématiques sont organisés en fonction de la manière dont ils sont construits et il existe différents types de construction. Un objet mathématique est toujours construit dans une façon unique, qui détermine son type unique.
Nous pensons aux mathématiques comme à un vaste univers rempli d'objets mathématiques préexistants (pensez au plan géométrique comme étant donné). Nous découvrons, analysons et pensons à propos de ces objets (nous observons qu'il y a des points, des lignes et des cercles dans le plan). Nous les recueillons en set . Habituellement, nous collectons des éléments qui ont quelque chose en commun (par exemple, toutes les lignes passant par un point donné), mais en principe, un ensemble peut contenir une sélection arbitraire d'objets. Un ensemble est spécifié par ses éléments et uniquement par ses éléments. Un objet mathématique peut appartenir à plusieurs ensembles.
Nous ne disons pas que les possibilités ci-dessus sont les deux seules, ni que l’un d’entre elles décrit complètement ce que sont les mathématiques. Néanmoins, chaque vue peut servir de point de départ utile à une théorie mathématique générale décrivant utilement un large éventail d'activités mathématiques.
Il est naturel de prendre un type et imaginez la collecte de toutes les choses que nous pouvons construire en utilisant les règles de T . C'est l' extension de T , et ce n'est pas T lui-même. Par exemple, voici deux types qui ont des règles de construction différentes, mais qui ont la même extension:T T T T
Le type de paires où n est construit sous forme de nombre naturel et p est construit sous forme de preuve démontrant que n est un nombre premier pair supérieur à 3 .(n,p) n p n 3
Le type de paires où m est construit sous la forme d'un nombre naturel et q est construit comme une preuve démontrant que m est un nombre impair inférieur à 2 .(m,q) m q m 2
Oui, ce sont des exemples triviaux et ridicules, mais le problème est clair: les deux types n’ont rien dans leur extension, mais ils ont des règles de construction différentes. En revanche, les ensembles et { m ∈ N | m est un nombre impair premier inférieur à 2 } sont égaux parce qu'ils ont les mêmes éléments.
Notez que la théorie des types ne concerne pas la syntaxe. C'est une théorie mathématique des constructions, tout comme la théorie des ensembles est une théorie mathématique des collections. Il se trouve que les présentations habituelles de la théorie des types mettent l’accent sur la syntaxe et, par conséquent, les gens finissent par penser que la théorie des types est la syntaxe. Ce n'est pas le cas. Confondre un objet mathématique (construction) avec une expression syntaxique qui le représente (un terme ancien) est une erreur de catégorie de base qui a longtemps laissé perplexe les logiciens, mais plus maintenant.
la source
Pour commencer, les ensembles et les types ne sont même pas dans la même arène. Les ensembles sont les objets d’une théorie du premier ordre, telle que la théorie des ensembles ZFC. Alors que les types sont comme des sortes envahies. Pour mettre une autre manière, une théorie des ensembles est une théorie du premier ordre au sein de la logique du premier ordre. Une théorie des types est une extension de la logique elle-même. La théorie de type de Martin-Löf, par exemple, n'est pas présentée comme une théorie du premier ordre dans la logique du premier ordre. Il n'est pas courant de parler d'ensembles et de types en même temps.
En tant qu'états discrets de lézards, les types (et les tris) remplissent une fonction syntaxique. Une sorte / type se comporte comme une catégorie syntaxique . Cela nous permet de savoir quelles expressions sont bien formées. Pour un exemple simple utilisant des tris, supposons que nous avons décrit la théorie des espaces vectoriels sur un champ arbitraire comme une théorie à 2 triés. Nous avons une sorte de scalaires, , et une sorte de vecteurs, V . Parmi beaucoup d' autres choses, nous aurions une opération de mise à l' échelle: s c a l e : S × V → V . Cela nous permet de savoir que l c un l e ( s c a l eS V scale:S×V→V n’est tout simplement pas un terme bien formé. Dans un contextetype théorique, une expression comme f ( x ) exige f avoir un type X → Y pour certains types X et Y . Si f n'a pas le type d'une fonction, alors f ( x ) n'est tout simplement pas une expression bien formée. Qu'une expression soit ou non d'un type est une déclaration méta-logique. Cela n'a aucun sens d'écrire quelque chose comme: ( x : X )scale(scale(s,v),v) f(x) f X→Y X Y f f(x) . Premièrement, x : X n’est tout simplement pas une formule, et deuxièmement, cela n’a même aucun sens conceptuel puisque ce sont les types / types qui nous permettent de savoir quelles formules sont bien formées. Nous ne tenons compte que de la valeur de vérité des formules bien formées. Par conséquent, si nous déterminons si une formule est valable, nous ferions mieux de savoir déjà qu’elle est bien formée!(x:X)⟹y=3 x:X
En théorie des ensembles, et en particulier ZFC, le seul symbole non-logique du tout est le symbole de la relation d'adhésion ensemble, . Donc, x ∈ y est une formule bien formée avec une valeur de vérité. Il n'y a pas d'autres termes que variables. Toute la notation habituelle de la théorie des ensembles en est une extension définitionnelle. Par exemple, une formule comme f ( x ) = y est souvent considéré comme un raccourci pour ( x , y ) ∈ F qui lui - même peut être considéré comme un raccourci pour ∃ p . p ∈ f ∧ p = ( x∈ x∈y f(x)=y (x,y)∈f qui estraccourci pour ∃ p . p ∈ f ∧ ( ∀ z . z ∈ p∃p.p∈f∧p=(x,y)
En tout cas,tout ensemble peut prendre la place de f et tout est ensemble! Comme je l'ai soulignérécemmentdansune question différente, π ( 7 ) = 3 où π
Un type n'est pas une collection de choses (ni un ensemble, d'ailleurs ...), et il n'est pas défini par une propriété. Un type est une catégorie syntaxique qui vous permet de savoir quelles opérations sont applicables aux termes de ce type et quelles expressions sont bien formées. Dans la perspective propositions-as-types, quels types classent sont les preuves valides de la proposition à laquelle correspond le type. C'est-à-dire que les termes bien formés (c'est-à-dire bien typés) d'un type donné correspondent aux preuves valides (qui sont aussi des objets syntaxiques) de la proposition correspondante. Rien de tel ne se passe dans la théorie des ensembles.
La théorie des ensembles et la théorie des types ne ressemblent vraiment pas.
la source
En pratique, l'affirmation que est de type T est généralement utilisée pour décrire la syntaxe , alors que l'affirmation que x est dans l'ensemble S est généralement utilisée pour indiquer une propriété sémantique . Je vais donner quelques exemples pour clarifier cette différence d’ utilisation des types et des ensembles. Pour la différence de quels types et ensembles en fait sont , je me réfère à la réponse de Andrej Bauer .X T X S
Un exemple
Pour clarifier cette distinction, je vais utiliser l'exemple donné dans les notes de cours d'Herman Geuvers . Tout d’abord, examinons un exemple d’habitation d’un type:
La principale différence ici est que pour vérifier si la première expression est un nombre naturel, nous n’avons pas à calculer de signification sémantique, nous devons simplement "lire" le fait que tous les littéraux sont de type Nat et que tous les opérateurs sont fermé sur le type Nat.
Algorithmes vs preuves
Pour résumer, les types sont souvent utilisés pour des revendications «simples» sur la syntaxe d'une expression, telle que l'appartenance à un type puisse être vérifiée par un algorithme , alors que pour tester l'appartenance à un ensemble, nous aurions généralement besoin d'une preuve .
Pour voir pourquoi cette distinction est utile, considérons un compilateur d’un langage de programmation typé. Si ce compilateur doit créer une preuve formelle pour «vérifier les types», il lui est demandé de faire une tâche presque impossible (la démonstration automatique d'un théorème est généralement difficile). Si par contre le compilateur peut simplement exécuter un algorithme (efficace) pour vérifier les types, il peut alors effectuer la tâche de manière réaliste.
Une motivation pour une interprétation stricte
Il existe plusieurs interprétations de la signification sémantique des ensembles et des types. Bien que, selon la distinction faite ici, les types d'extension et les types avec vérification de type indécidable (tels que ceux utilisés dans NuPRL, comme indiqué dans les commentaires) ne soient pas des "types", d'autres sont bien entendu libres de les appeler en tant que tels (tout aussi comme ils sont appelés à les appeler autre chose, tant que leurs définitions correspondent).
Cependant, nous (Herman Geuvers et moi), préférons ne pas jeter cette interprétation par la fenêtre, pour laquelle moi (pas Herman, même s'il pourrait être d'accord) avons la motivation suivante:
Tout d’abord, l’intention de cette interprétation n’est pas si éloignée de celle d’Andrej Bauer. L'intention d'une syntaxe est généralement de décrire comment construire quelque chose et qu'il est généralement utile de disposer d'un algorithme pour le construire. De plus, les fonctionnalités d'un ensemble ne sont généralement nécessaires que lorsque nous voulons une description sémantique, pour laquelle l'indécidabilité est autorisée.
L’avantage de notre description plus stricte est donc de garder la séparation plus simple , d’obtenir une distinction plus directement liée à l’utilisation pratique courante. Cela fonctionne bien tant que vous n'avez pas besoin ou ne voulez pas assouplir votre utilisation, comme vous le feriez pour, par exemple, NuPRL.
la source
Je crois que l'une des différences les plus concrètes concernant les ensembles et les types est la différence dans la manière dont les "choses" de votre esprit sont codées dans le langage formel.
Les ensembles et les types vous permettent de parler de choses et de collections de choses. La principale différence est qu'avec les sets, vous pouvez poser toutes les questions que vous voulez et ce sera peut-être vrai, peut-être pas; tandis qu'avec les caractères, vous devez d'abord prouver que la question a un sens.
Notez que dans ces cas, il était facile de voir si la question avait du sens, mais elle pourrait être beaucoup plus difficile, comme dans, par exemple,( sivery_hard_question alors1 autrevrai ) = 1 .
En résumé, les ensembles vous permettent de poser toutes les questions de votre choix, mais les types vous obligent à rendre explicites les encodages lorsque la réponse peut en dépendre.
la source