Da Sie Python erwähnen, ist die Frage nicht rein typentheoretisch. Deshalb versuche ich, eine breitere Perspektive auf Typen zu geben. Typen sind verschiedene Dinge für verschiedene Menschen. Ich habe mindestens 5 verschiedene (aber verwandte) Begriffe von Typen gesammelt:
Typsysteme sind logische Systeme und Mengen- theorien.
Ein Typensystem ordnet jedem berechneten Wert einen Typ zu. Durch Untersuchen des Flusses dieser Werte versucht ein Typensystem zu beweisen oder sicherzustellen, dass keine Typfehler auftreten können.
Typ ist eine Klassifizierung, die einen von verschiedenen Datentypen identifiziert, z. B. reelle Werte, Ganzzahlen oder Boolesche Werte, die die möglichen Werte für diesen Typ bestimmen. die Operationen, die mit Werten dieses Typs durchgeführt werden können; die Bedeutung der Daten; und wie Werte dieses Typs gespeichert werden können
Abstrakte Datentypen ermöglichen die Datenabstraktion in Hochsprachen. ADTs werden häufig als Module implementiert: Die Schnittstelle des Moduls deklariert Prozeduren, die den ADT-Operationen entsprechen. Diese Strategie zum Ausblenden von Informationen ermöglicht es, die Implementierung des Moduls zu ändern, ohne die Client-Programme zu stören.
In Implementierungen von Programmiersprachen werden Wertetypen verwendet, um den für die Werte erforderlichen Speicher und die Algorithmen für Operationen an den Werten auszuwählen.
Die Zitate stammen aus Wikipedia, aber ich kann Ihnen bei Bedarf bessere Referenzen zur Verfügung stellen.
Types-1 entstand aus Russels Werk, schützt aber heute nicht nur vor Paradoxen: Die typisierte Sprache der Homotopietypentheorie ist eine neue Art, Mathematik in einer formalen, maschinenverständlichen Sprache zu kodieren, und eine neue Art, wie Menschen Grundlagen verstehen können der Mathematik. (Der "alte" Weg ist das Codieren mit einer axiomatischen Mengenlehre).
Die Typen 2-5 ergaben sich aus verschiedenen Programmieranforderungen: Um Fehler zu vermeiden, Daten zu klassifizieren, mit denen Softwareentwickler und Programmierer arbeiten, große Systeme zu entwerfen und Programmiersprachen effizient zu implementieren.
Typsysteme in C / C ++, Ada, Java und Python sind nicht aus Russels Arbeit oder dem Wunsch entstanden, Fehler zu vermeiden. Sie entstanden aus der Notwendigkeit heraus, verschiedene Arten von Daten zu beschreiben (z. B. "Nachname ist eine Zeichenfolge und keine Zahl"), das Softwaredesign zu modularisieren und Darstellungen auf niedriger Ebene für Daten optimal auszuwählen. Diese Sprachen haben keine Typen-1 oder Typen-2. Java gewährleistet relative Sicherheit vor Fehlern nicht durch den Nachweis der Programmkorrektheit mithilfe des Typsystems, sondern durch ein sorgfältiges Design von Sprache (keine Zeigerarithmetik) und Laufzeitsystem (virtuelle Maschine, Bytecode-Überprüfung). Typsystem in Java ist weder ein logisches System noch eine Mengenlehre.
Das Typensystem in der Programmiersprache Agda ist jedoch eine moderne Variante von Russels Typensystem (basierend auf späteren Arbeiten oder Per Martin-Lof und anderen Mathematikern). Das Typensystem in Agda wurde entwickelt, um mathematische Eigenschaften von Programmen und Beweise dieser Eigenschaften auszudrücken. Es ist ein logisches System und eine Mengenlehre.
Hier gibt es keinen schwarz-weißen Unterschied: Viele Sprachen passen dazwischen. Zum Beispiel hat das Typensystem der Haskell-Sprache Wurzeln in Russels Arbeit, kann als vereinfachtes Agdas System angesehen werden, aber vom mathematischen Standpunkt aus gesehen ist es inkonsistent (selbst widersprüchlich), wenn es als logisches System oder als Mengenlehre betrachtet wird.
Als theoretisches Mittel, um Haskell-Programme vor Fehlern zu schützen, funktioniert es jedoch recht gut. Sie können sogar Typen verwenden, um bestimmte Eigenschaften und deren Proofs zu codieren. Es können jedoch nicht alle Eigenschaften codiert werden, und der Programmierer kann trotzdem die nachgewiesenen Eigenschaften verletzen, wenn er entmutigte schmutzige Hacks verwendet.
Das Typensystem von Scala ist noch weiter von Russels Werk und Agdas perfekter Beweissprache entfernt, hat aber immer noch Wurzeln in Russels Werk.
Es gibt viele Ansätze und Systeme, um Eigenschaften von Industriesprachen zu beweisen, deren Typsysteme nicht dafür ausgelegt waren.
Informationen zu interessanten, aber unterschiedlichen Ansätzen finden Sie im Coq- und Microsoft Boogie-Forschungsprojekt. Coq stützt sich auf die Typentheorie, um aus Coq-Programmen Imperativprogramme zu generieren. Boogie basiert auf der Annotation von Imperativprogrammen mit Eigenschaften und dem Nachweis dieser Eigenschaften mit dem Z3-Theorembeweiser unter Verwendung eines völlig anderen Ansatzes als Coq.