7 Stimmen

Konvergenz von Mathematik und Programmiersprachen

Es scheint, dass es eine starke Bewegung für die Konvergenz von Mathematik und Computerprogrammiersprachen gibt, was insbesondere durch den Einfluss des Lambda-Kalküls auf moderne Sprachen belegt wird. Die meiste Zeit denke ich nicht mit Mathematik, sondern mit Logik. Mir scheint, dass viele der Phänomene, die sich mathematisch modellieren lassen, auch logisch modelliert werden können.

Ich glaube nicht, dass sich eine rein logische Sprache oder eine rein mathematische Sprache jemals für die allgemeine Programmierung durchsetzen wird, aber ich möchte eine Bestandsaufnahme der Vorteile jedes Paradigmas machen. Ich würde es gerne wissen:

  • Welche Vorteile bietet die Modellierung von Programmiersprachen oder Sprachmerkmalen in der Mathematik?
  • Welche Vorteile bietet die Modellierung einer Sprache nach den Prinzipien der formalen Logik?
  • Kann eine Allzwecksprache auf Logik oder Mathematik verzichten?
  • Welche Sprachen zeigen die Vorteile der beiden Ansätze besonders deutlich?
  • Welche Hardware-Merkmale machen den einen Ansatz attraktiver als den anderen?

14 Stimmen

Logik ist Mathematik. Sie ist sogar eine Schlüsselkomponente der diskreten Mathematik. Und wenn Sie Informatiker oder Software-Ingenieur sind, sollten Sie zumindest einigermaßen mit der diskreten Mathematik vertraut sein.

0 Stimmen

Ich verstehe die Beziehung auf der grundlegendsten Ebene, aber ich bin wirklich neugierig auf den Ausdruck auf der Benutzerebene.

3 Stimmen

Ich sehe nicht den klaren Unterschied zwischen Logik und Mathematik, den Sie deutlich erkennen. Natürlich sind banale Dinge, bei denen es um numerische Berechnungen geht, eher mathematisch als logisch, aber bei fortgeschritteneren Themen, bei denen es sich um komplexe Abstraktionen handelt, scheint es eine willkürliche Entscheidung zu sein, sie in den Korb "Logik" oder "Mathematik" zu legen.

9voto

Michael Borgwardt Punkte 334642

Zunächst einmal sehe ich keinen großen Unterschied zwischen Logik und Mathematik; letztere ist nur die systematische Anwendung der ersteren auf bestimmte Konstrukte.

Außerdem bin ich nicht davon überzeugt, dass die theoretische Schönheit von Programmiersprachen, die auf Mathematik/Logik beruhen, wirklich viel wert ist, wenn es darum geht, Dinge zu erledigen, indem man effizienten, wartbaren Code schreibt.

Was Ihre konkreten Fragen betrifft.

Was sind die Vorteile der Modellierung? Programmiersprachen oder Sprach auf Mathematik? Was sind die Vorteile der Modellierung einer Sprache nach den Prinzipien der formalen Logik?

Korrektheitsbeweise werden viel einfacher - obwohl es fraglich ist, ob wir jemals an den Punkt kommen, an dem sie für reale Systeme praktisch werden.

Kann eine Allzwecksprache auf die entweder auf Logik oder Mathematik verzichten?

Das hängt davon ab, was Sie mit "Verzicht" meinen. Man kann eine Sprache ohne mathematische Operationen haben (auch wenn man dabei ziemlich esotherisch vorgehen muss; Turing-Maschinen sind die einzigen, die ich mir vorstellen kann, die nicht einmal Inkrement oder Dekrement haben), und man kann sicherlich eine Sprache haben, die sich nicht um Formalismen kümmert (Assembler, C). Aber ich glaube nicht, dass es möglich ist, eine Programmiersprache ohne Logik zu haben (auch wenn es sich um eine pervertierte Logik handeln mag, siehe. Malbolge )

Welche Sprachen zeigen die Vorteile der beiden Ansätze besonders deutlich?

Nun, wenn man das Lambda-Kalkül als eine Form der Logik betrachtet, dann hat Lisp seine Vorzüge ziemlich gut unter Beweis gestellt, indem es seit 1958 die Sprache ist, deren Ausdruckskraft andere Sprachen zu erreichen versuchen (aber nicht erreichen).

Dann gibt es noch Prolog, die einzige andere "seriöse" Sprache, die ich kenne, die versucht, sich explizit auf die formale Logik zu stützen. Und - quelle surprise - sie ist gut in logischen Dingen und wenig anderem.

Welche Hardware-Merkmale machen den einen Ansatz attraktiver als den anderen?

Keine. Das Scheitern von Lisp-Maschinen beweist IMO ziemlich schlüssig, dass Compiler und allgemeine Hardware leistungsfähiger sind als spezialisierte Hardware. Man könnte jedoch sagen, dass die einfache, brachiale Leistung der heutigen Systeme Sprachen, die Hardwarebeschränkungen völlig ignorieren, praktisch macht, wo dies früher nicht möglich war.

1 Stimmen

Ich würde sagen, dass es Haskell genauso ernst damit ist, explizit in der Logik verankert zu sein, wie (Standard) ML. Ansonsten: sehr guter Kommentar.

2voto

Tobias Langner Punkte 10350

Da die Informatik ein spezieller Zweig der Mathematik ist, gibt es keine Konvergenz von Mathematik und Programmiersprache. Eine Programmiersprache ist angewandte Mathematik. Sie ist ein Werkzeug, das von Menschen mit profunden Mathematikkenntnissen geschaffen wurde, um von anderen (meist mit weniger profunden Kenntnissen) verwendet zu werden. Man kann es mit einem Lichtschalter vergleichen - man kann ihn benutzen, ohne Physik studiert zu haben, aber es ist trotzdem angewandte Physik. Manchmal (vor allem wenn man ein Problem hat) ist es notwendig, das "Wissen" zu haben. Dann braucht man den speziellen Hintergrund.

0 Stimmen

Aber diejenigen, die Lichter einschalten (PHP schreiben), werden wahrscheinlich auch nicht als Raketenwissenschaftler eingestellt (Haskell schreiben), und ich denke, dass diese Spaltung die Industrie in Zukunft noch stärker beeinflussen wird, so wie die Höhlenmenschen Ärzte hatten, aber jetzt brauchen sie einen Abschluss und 9+ Jahre - ich denke also, Konvergenz bedeutet hier die Konvergenz der Beruf mit Mathematik und nicht so sehr mit CS (weil CS bereits es Mathematik).

1voto

BobbyShaftoe Punkte 27949

Nun, um ehrlich zu sein, sind viele dieser so genannten "modernen Programmiersprachen" nur eine Nachahmung von Dingen, die es in verschiedenen Programmiersprachen schon seit über 50 Jahren gibt.

0 Stimmen

In der Tat. Lisp wurde ursprünglich 1958 spezifiziert und basiert auf dem Lambda-Kalkül. APL, das stark auf Matrixoperationen ausgerichtet ist, wurde 1967 für die IBM 1130 verfügbar.

0 Stimmen

Welche Teile von Haskell, OCaml und anderen Typensystemen waren vor 50 Jahren verfügbar oder auch nur annähernd?

1voto

cdiggins Punkte 16400

Was sind die Vorteile der Modellierung von Programmiersprachen oder Sprachmerkmalen auf der Grundlage der Mathematik? Welche Vorteile bietet die Modellierung einer Sprache nach den Prinzipien der formalen Logik?

Das ist ein und dasselbe: Die formale Logik ist nur ein Zweig der Mathematik. Zwei große Vorteile der formalen Mathematik sind Optimierung und Sicherheit. Wenn ein Algorithmus keine Nebeneffekte hat (d. h. referenziell transparent ist) und ausschließlich mit reiner Mathematik ausgedrückt wird, können Compiler den Algorithmus nach den Regeln der Mathematik umstrukturieren. Dies erleichtert den Compilern die Optimierung des Codes und die Ausnutzung paralleler Architekturen. Ein weiterer wichtiger Vorteil ist die Möglichkeit, bestimmte Eigenschaften des Codes zu beweisen.

Kann eine Allzwecksprache auf die entweder auf Logik oder Mathematik verzichten?

Nein. Wie würden Sie boolesche Operationen oder Arithmetik ohne Logik oder Mathematik durchführen. Vielleicht meinen Sie hier etwas, das ich nicht verstehe.

Welche Sprachen zeigen die Vorteile der beiden Ansätze besonders deutlich?

Haskell, ML, OCaML, Miranda, Alice, Oz, Erlang, Twelf, Coq, Prolog - sie alle demonstrieren strengere Anwendungen der Mathematik auf die Programmierung.

Welche Hardware-Merkmale machen den einen Ansatz attraktiver als den anderen?

Ich glaube nicht, dass die Hardware viel an den Vorteilen strenger mathematischer Ansätze für die Programmierung ändert. Die Vorteile von referenziell transparentem Code liegen hauptsächlich auf der Ebene des Compilers.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X