Einfach ausgedrückt Einschränkung der imperativen Programmiersprache, die die elementaren Funktionen erfasst?

8

Die Sprache der whileProgramme kann die rechnerisch aufzählbaren Funktionen ausdrücken. (Dies gilt auch dann, wenn die einzigen arithmetischen Operationen für Variablen beispielsweise Inkrementierung und Dekrementierung sind.)

Wenn whiledurch ersetzt wird forund Schleifen immer begrenzt werden, kann die Sprache nur die primitiven rekursiven Funktionen ausdrücken.

Vor kurzem wurde mir die Klasse der Elementarfunktionen bewusst , die streng unter den primitiven rekursiven Funktionen liegen, aber immer noch streng über der exponentiellen Hierarchie.

Offensichtlich wäre es möglich, eine zwingende Programmiersprache zu definieren, die genau die Elementarfunktionen erfasst, beispielsweise durch Einführung von Operatoren für begrenzte Summe und Produkt. Meine Frage ist jedoch:

Gibt es eine syntaktische Änderung der whileProgrammsprache, die sie auf die Elementarfunktionen beschränkt und die so einfach wie die ( while-> for) Beschränkung auf primitive rekursive Funktionen angegeben werden kann?

forStattdessen würde natürlich auch eine Einschränkung der Programme ausreichen, und vielleicht sollte ich klarstellen, dass ich nicht nach etwas suche, das absolut so einfach ausgedrückt ist, sondern nur nach etwas mit vergleichbarer Einfachheit, bei dem keine zusätzlichen Operatoren oder ähnliches hinzugefügt werden müssen .

Bearbeiten : Ein Beispiel für eine repräsentative forSprache ist PL- {GOTO} aus Brainerd und Landwebers "Theory of Computation" (1974), in der jedes Programm eine endliche, aber uneingeschränkte Anzahl von Variablen hat, von denen jede eine natürliche Zahl enthalten kann, und Dies besteht im Wesentlichen aus den folgenden Befehlen:

  • X <- 0 (einer Variablen 0 zuweisen)
  • X <- Y(weisen Sie den Wert von Yzu X)
  • X <- Y + 1(weisen Sie den Nachfolger des Wertes von Yzu X)
  • LOOP X; ... END;(Wiederholen Sie den enthaltenen Block von Codezeiten X; ändert sich nicht X)

Die Autoren geben einen Beweis dafür, dass dies genau die primitiven rekursiven Funktionen ausdrücken kann. Die Sprache PL stimmt nicht perfekt mit der Frage überein, da sie GOTOstattdessen verwendet wird while, und PL- {GOTO} wird durch Entfernen GOTOvon PL abgeleitet . PL-Programme sind jedoch genauso leistungsfähig wie whileProgramme, und diese GOTOEntfernungstransformation wird genauso einfach angegeben wie das Ersetzen whiledurch for. (Wohl vielleicht sogar ein bisschen einfacher.)

Edit 2 : http://en.wikipedia.org/wiki/Total_Turing_machine schlägt vor, dass dieses Ergebnis auf Folgendes zurückgeht: Meyer, AR, Ritchie, DM (1967), Die Komplexität von Schleifenprogrammen , Proc. der ACM National Meetings, 465.

Chris Pressey
quelle
Hat Ihre Sprache Arrays? Vermutlich nur Variablen mit natürlichen Zahlen und Booleschen Werten. Jedenfalls dachte ich immer, dass die primitiven rekursiven Funktionen forSchleifen entsprechen , aber ich habe nie einen Beweis gesehen. Hast du?
Andrej Bauer
@AndrejBauer: Ich habe momentan keine Kopie bei mir, aber ich glaube, Brainerd und Landweber geben in ihrem Lehrbuch Theory of Computation (1974) einen Beweis. Sie zeigen eine Spielzeugsprache, PL, die sowohl LOOP(wie ich es genannt habe for) als GOTOauch Turing-vollständig ist, aber ohne GOTOsie nur die pr-Funktionen ausdrücken kann. Ich werde die Frage bearbeiten, um eine kurze Beschreibung dieser Sprache aufzunehmen.
Chris Pressey
Nach Jan's Antwort ist dies hilfreich: en.wikipedia.org/wiki/Grzegorczyk_hierarchy
usul

Antworten:

8

Nach einem klassischen Ergebnis von Meyer und Ritchie (erwähnt in dem in der Frage zitierten Artikel) sind die Elementarfunktionen durch LOOP-Programme gekennzeichnet, bei denen die Verschachtelungstiefe von for-Schleifen auf höchstens 2 beschränkt ist.

Jan Johannsen
quelle
3
Vielen Dank. Nach dem Follow-up von usul entsprechen LOOP-Programme mit der Verschachtelungstiefe n für n > = 2 der in der Grzegorczyk-Hierarchie festgelegten _n_ + 1-ten Menge.
Chris Pressey
1

Meine Vermutung basiert ausschließlich auf der Definition: Eine Antwort könnte "Beschränkung von Schleifen auf peinlich parallele for Schleifen" sein.

Meine Arbeitsdefinition von "peinlich paralleler forSchleife" ist eine, bei der keine Iteration eine Datenabhängigkeit von einer anderen Iteration aufweist und es eine binäre Reduzierungsfunktion zum Aggregieren der Ausgabe gibt (zusammen mit einem Basisfall). Bonus-Peinlichkeitspunkte, wenn die Reduzierungsfunktion assoziativ ist, aber ich weiß nicht, ob diese Unterscheidung die Macht der Sprache einschränken würde.

Wenn wir die zulässigen Reduzierungen auf Addition und Multiplikation beschränken, scheint es mir wahrscheinlich, dass jedes Programm, das unter diesen Einschränkungen implementiert wird, als elementare rekursive Funktion geschrieben werden kann (und umgekehrt). Bei allgemeineren Reduzierstücken bin ich mir weniger sicher.

Eine unterhaltsame Art, es auszudrücken, ist, dass das einzige Schleifenkonstrukt Ihrer Sprache MapReduce ist.

Ich bin kein Experte auf diesem Gebiet, aber ich möchte dies als Hypothese vorschlagen und sehen, was die Meinungen der Leute sind.

Bearbeiten . Um diese Tatsache zu beweisen oder zu widerlegen, könnten wir eine nützliche Charakterisierung von Meyer und Ritchie verwenden: Ein LOOP-Programm implementiert eine Elementarfunktion, wenn es in der Zeit wobei stellt einen Turm mit einer festen Größe .O(22n)k

Dies scheint eindeutig für Parallelprogramme zu gelten for, bei denen die Reduzierungsfunktion auf Addition oder Multiplikation beschränkt ist, für eine breitere Auswahl an Reduzierern jedoch nicht wahr zu sein scheint. Ich würde gerne herausfinden, dass wir die Elementarfunktionen erhalten können, wenn wir den Reduzierer auf die Ausführung in Polynomzeit beschränken (die Multiplikation ist in diesem Modell linear), aber ich muss versuchen, es herauszufinden.

Bearbeiten 2 . Richtig, es sieht so aus, als sollten wir genau die Reduktionsfunktionen zulassen, die in Polynomzeit ausgeführt werden, um die elementaren rekursiven Funktionen wiederherzustellen. [1] Dann stellen wir fest, dass diese Einschränkung nicht so interessant ist, da die Polynomfunktionen in diesem Modell nur diejenigen sind, die durch Programme mit einer einzelnen forSchleife oder einer Parallelschleife formit einer Reduktionsfunktion ohne Schleife ausgedrückt werden können. Wir haben also im Grunde nur die Einschränkung wiederhergestellt, dass Programme bis zu zwei verschachtelte forSchleifen haben, aber wir haben diese Einschränkung gerade in die Reduzierungsfunktion verschoben.

Zusammenfassung: Die Charakterisierung scheint für Reduktionsmittel zu gelten, die in Polynomzeit laufen. Es ist unklar, ob dies überhaupt interessant ist.

[1]: Lassen Sie am Eingang die Reduzierfunktion für einige in der Zeit laufen . Wir können grob durch Induktion argumentieren, dass ein Programm mit verschachtelten Parallelschleifen in der Zeit für einen Exponentenstapel konstanter Größe ausgeführt wird.nO(nk)kfor22n

In einer peinlich parallelen forSchleife am Eingang können bis zu Iterationen ausgeführt werden, von denen jede (da sie unabhängig sind) zeitlich bis zu . Nehmen wir für die Induktion für einen Exponentialstapel konstanter Tiefe an.nnf(n)f(n)O(22n)

Wenn die Reduzierungsfunktion , besteht die Schleife aus Zusammensetzungen von an einem Eingang der Größe : . Unter der Annahme, dass die Laufzeit der Eingangsgröße für jeden Schritt des Reduzierers durch begrenzt ist , läuft sie in der Zeit , die asymptotisch von dominiert wird. . Durch die induktive Annahme wurde für einen Exponentenstapel konstanter Größe durch , daher muss dies auch für unsere Laufzeit gelten.n p f ( n ) p ( f ( n ) , p ( f ( n ) , ) ) x x k O ( f ( n ) k n ) f ( n ) 2 2 n f ( n ) 2 npfornpf(n)p(f(n),p(f(n),))xxkO(f(n)kn)f(n)22nf(n)2n

Wenn der Reduzierer andererseits in exponentieller Zeit ausgeführt wird, schlägt dieses Argument fehl und wir erhalten einen exponentiellen Stapel, dessen Größe von abhängt , was bedeutet, dass wir eine nicht-elementare rekursive Funktion implementieren können.n

usul
quelle