Können Sie eine Programmiersprache ohne Implementierung angeben?

11

Ist es theoretisch möglich, eine Programmiersprache anzugeben, für die keine Implementierung existieren könnte? Eine Programmiersprache ist eine Möglichkeit, Funktionen zu definieren. Eine Implementierung bedeutet ein Verfahren zum Ausführen eines bestimmten Programms in dieser Sprache an einem bestimmten Eingang zum Ausgang der Funktion, die dem Programm an diesem Eingang entspricht.

Was sind die Mindestanforderungen an eine solche Sprache?

Kaveh
quelle
3
Was ist eine "Implementierung" einer Sprache?
Raphael
@ Raphael: Sie haben "Programmiersprache" in "Sprache" geändert. Vor Ihrer Bearbeitung war klar, was eine Implementierung einer Sprache bedeutet.
Tsuyoshi Ito
@ TsuyoshiIto: Nicht ganz; Ich habe den Titel nur an die Frage angepasst, die auf cstheory.SE geändert wurde. Ich habe es zurück geändert, aber es ist immer noch nicht klar, was das bedeutet. Ein Compiler? Ein Dolmetscher? Wie auch immer, eine Frage hierher zu migrieren, die fast ein Jahr alt ist und von einem Benutzer stammt, der die Frage dort anscheinend nie wieder aufgegriffen hat, war bestenfalls schlecht beraten.
Raphael
@ Raphael: Fragen: "Was ist eine Implementierung einer Sprache?" Nachdem ich alle Hinweise entfernt hatte, war das einfach unverständlich. Ich stimme jedoch zu, dass die Frage von Anfang an unklar war.
Tsuyoshi Ito
Ich denke, Ihre mutmaßliche Definition von "Programmiersprache" ist schlecht durchdacht. Es sollte zumindest geändert werden, indem "Funktionen" durch "berechenbare Funktionen" ersetzt werden. Andernfalls ist nicht klar, warum Sie die Sprache als "Programmiersprache" bezeichnen würden. Sobald Sie es ändern, wird die Frage bedeutungslos, da es keine solchen "Programmiersprachen gibt, für die keine Implementierung existieren könnte".
Uday Reddy

Antworten:

7

Normalerweise bedeutet die Implementierung einer Programmiersprache, dass mindestens ein Interpreter in einer Sprache (oder ein Compiler für eine Sprache) angegeben wird, die nicht mehr als Turing-vollständig ist.

Mit dieser "Definition" können wir eine Programmiersprache wie diese angeben:

  • es gibt nur ein mögliches Programm HALT;

  • Spezifikation von HALT: Es ist eine Funktion, die das Halteproblem löst .

Die Implementierung dieser Programmiersprache erfordert die Lösung des Halteproblems mit der Implementierung. (Was unmöglich ist, da unsere Implementierung nicht leistungsfähiger sein sollte als eine Turing-Maschine).

Die Spezifikation behandelt die Logik und kann daher viel mehr verlangen. Eine andere Spezifikation, die nicht implementiert werden kann, ist "false". (Oder irgendein widersprüchlicher Satz in der Spezifikation) Aber dies fühlt sich nicht wie eine Spezifikation an, weshalb ich das Beispiel für das Stoppproblem verwendet habe.

jmad
quelle
1
Verallgemeinert: Jede Sprache, die eine Funktion angibt, die ein unentscheidbares Problem löst, kann nicht implementiert werden.
edA-qa mort-ora-y
@ edA-qamort-ora-y Technisch könnte es implementiert werden. Sie können das Halteproblem nicht entscheiden , aber ein TM kann eine andere Maschine simulieren und akzeptieren, wenn diese Maschine anhält. Die von einem solchen TM akzeptierte Sprache ist genau die Sprache der (Codierungen von) Maschinen, die anhalten. Aus praktischen Gründen möchten wir jedoch normalerweise, dass die primitiven Operationen von Programmiersprachen garantiert beendet werden! (zumindest bei "vernünftiger" Eingabe)
Ben
1
O()
1/0 let loop = loop in loopΩ()
3

Nur eine merkwürdige Randnotiz: Die C ++ - Vorlagen-Engine ist Turing-vollständig

Satz 1: Ohne Instanziierungsgrenzen sind C ++ - Vorlagen Turing-vollständig.

Folgerung 1: In Ermangelung von Instanziierungsbeschränkungen ist nicht zu entscheiden, ob ein C ++ - Compiler beim Kompilieren eines bestimmten Programms angehalten wird.

... so kann das C ++ selbst als Programmiersprache betrachtet werden, für die keine "Implementierung" existieren könnte ... :-D

Vor
quelle
Könnte also ein C "Compiler" als Interpreter verwendet werden, wenn man sich nicht um den generierten Code kümmert, sondern nur um die erzeugte Diagnose?
Superkatze
Ja, wie in diesem Dokument gezeigt, hält der Compiler mit einer Liste von Fehlern an, die mit dem Berechnungsverlauf der Turing-Maschine (und ihrer endgültigen Bandkonfiguration) übereinstimmen. Offensichtlich kann die Eingabe nicht interaktiv sein (sie muss im Quellcode codiert werden, bevor der Compiler ausgeführt wird).
Vor
2

Es ist unklar, was Sie unter einer "Programmiersprache" und einer "Implementierung einer Sprache" verstehen. Sie müssen diese beiden genau definieren, um eine Antwort zu erhalten.

Σ2Σ

MM0

Dies ist jedoch nicht die Art von Spezifikationssprache, die Menschen meinen, wenn sie den Ausdruck "Programmiersprache" verwenden. Eine Programmiersprache ist normalerweise eine Sprache, die berechenbare Funktionen (Prozesse, ...) ausdrückt und die Anweisungen an eine Maschine übermittelt. Daher gibt es ein TM, das diese Programme simulieren und ihre Ergebnisse ausgeben kann. In gewissem Sinne ist eine Programmiersprache, die nicht implementiert werden kann, nicht sinnvoll.

(Ich vermute, dass Sie Programmiersprachen wahrscheinlich entweder mit Spezifikationssprachen oder mit formalen Sprachen verwechseln . In jedem Fall können wir Sprachen definieren, die nicht berechenbar sind.)

Kaveh
quelle
Ich bin mir ziemlich sicher, dass "Programmiersprache" eine Programmiersprache bedeutet, wie wir normalerweise darüber sprechen würden, und "eine Implementierung einer Sprache" eine Umgebung zum Ausführen von Programmen in dieser Sprache auf realen Computern bedeutet. Die Frage ist nicht formalisiert , aber sicherlich nicht unklar? Ich kann leicht eine Spezifikation für eine neue Programmiersprache schreiben, ohne mich die Mühe zu machen, sie zu implementieren. Die Frage ist lediglich, ob dies so möglich ist, dass die Sprache nicht implementiert werden kann.
Ben
@Ben, wenn Sie sich die ursprüngliche Frage zu cstheory ansehen, werden Sie sehen, dass die Frage nur im Titel keine Wortprogrammierung enthält. Die von OP gestellte Frage ist definitiv klar. ps: Ich würde mich für eine strenge (muss nicht formal sein) Definition einer Programmiersprache interessieren. Wir können keine negativen Ergebnisse über Programmiersprachen nachweisen, die ausschließlich auf Intuition und Beispielen beruhen. Wenn Sie eine Referenz für eine Definition haben, veröffentlichen Sie diese bitte als Bearbeitung oder Kommentar zur Frage.
Kaveh
Fair genug, obwohl SE behauptet, Sie hätten es vor 9 Stunden beantwortet, lange nachdem es migriert und bearbeitet wurde. Ich würde trotzdem die gleiche Interpretation basierend auf der ursprünglichen Frage machen. Was die Definition einer Programmiersprache angeht, würde ich sagen, dass eine offensichtliche eine formale Grammatik plus entweder eine Reduktion auf ein anderes gut verstandenes Rechenmodell (Lambda-Kalkül, Turing-Maschine usw.) oder eine strenge operative Semantik ist. Das Reduktionsmodell würde die Antwort auf diese Frage offensichtlich zu einem trivialen "Nein" machen.
Ben
1

Es wurden viele Sprachen ohne Implementierung spezifiziert, z. B. sollte Algol 60 eine Sprache zum Schreiben von Algorithmen sein, die nicht implementiert werden sollte. Einige der vielen "nur zum Spaß" -Sprachen wurden lange vor der Implementierung spezifiziert, fällt Intercal ein.

vonbrand
quelle