Programmieren in natürlicher Sprache



  • Hallo zusammen, mal wieder. In letzter Zeit beschäftigt mich immer wieder ein Thema. Könnte man den nicht in einer kleinen Teilmenge einer natürlichen Sprache programmieren ? Die Frage: gibt es sowas schon ? Und wenn ja welche ? Momentan ist es sehr interessant, möchte aber das Rad nicht zweimal erfinden. Hier ein Beispiel, wohlgemerkt Quelltext, einer fiktiven Sprache:

    Text: Ein Auto hat 4 Räder. Es gibt 10000 Autos. Wieviel Räder gibt es ? // Muss nicht stimmen
    Meta: Wenn ein Objekt N Teilobjekte hat, und es M Objekte gibt, dann gibt es N * M Teilobjekte.

    Durch Einsetzen der Textzeile ( nach Textumformung ) in die Metazeile erhält man das Ergebnis: Es gibt 40000 Räder.

    Wenn man Handlungsanweisungen einbauen möchte, kommt man immer wieder auf die Sprach-Konstrukte existierender Programmiersprachen. Also nichts Neues. Hättet Ihr Ideen wie man so eine Sprache gestalten könnte ? Mit wenig Sprachelementen, mit Relationen wie: "ist ein", "hat", "es gibt" und "für Alle" ? Compilerbau ist nicht das Problem. Es geht auch nicht darum die Schlüsselworte von C# ins Deutsche zu übersetzten, irgendeine Besonderheit sollte die Sprache schon haben. Sowie Prolog oder Lisp eigenständige Konzepte als Grundlage haben. Gut um "FürAlleTue:" kommt man wohl nicht herum, oder ?



  • @biter

    Vielleicht Open AI:

    https://www.youtube.com/watch?v=Zm9B-DvwOgw

    Ich habe von dem Thema (noch) kaum Ahnung (hab dieses letzte Semester Sprachkonzepte), aber intuitiv meine ich, dass ...

    ... eine kleine Teilmenge der natürlichen Sprache als Programmiersprache existiert.

    Evtl. meinst Du ja auch etwas anderes ...

    Was mir gerade aktuell sehr zusagt, sind Sprachen wie

    Lisp: Scheme | Racket

    Minimal, funktional und man kann damit offenbar sehr gut experimentieren (exploratives Programmieren).

    Andere Frage:

    Warum verwendet man bei Mathematik bzw. Physik keine natürliche Sprache?

    Ungenauigkeit (meine ich).

    Man braucht eine Art "Wohldefiniertheit".
    Also Sachen sollten so genau definiert sein wie nur möglich.
    100%-tige Wohldefiniertheit ist schwer.

    Also man sollte nicht versuchen die Grammatik bei C oder Java vollumfänglich definieren.
    Zu Aufwendig.
    Man beschreibt die Grammatik nur in Teilen und erklärt deren Nutzung in einer Doku.


    Bei Mathematik (soweit ich durchblicke) ist der Ansatz so

    • was kann ich als von "Gott gegeben" annehmen?
      Also Sachen, die man nicht beweisen kann, aber halt annimmt, weil sie halt für uns intuitiv sind und wir darin (noch) keinen Widerspruch sehen.
      Beispiel: a + b = b + a für alle Zahlen, die man kennt.
      Das kann man nicht beweisen, aber man glaubt daran, weil es wohl keine Einwände noch gibt.
      Das nennt man eine Grundannahme oder hochgestochen "Axiom".

    Bemerkungen:
    Festlegung von Grundannahme (Glaubenssätzen) ist eine Art Willkür.
    Aber eine Art Willkür der "Vernunft".
    Sonst muss ich ja dann auch meine Existenz hinterfragen.
    Will ich das?
    (Ich tendiere dazu "Radikalskeptiker" zu sein leider.
    Wusste nicht, dass es einen Namen für so schlimme Leute wie mich gibt.)

    • So, was kann ich aus den Grundannahmen zusammenbauen oder basteln ("Definitionen")?

    Bemerkungen:
    Also, mit Definitionen konstruiere ich etwas aus meiner Willkür der "Vernunft" heraus.
    Ich sage jetzt, das Kreuzprodukt hat 3 Eigenschaften:

    • Es soll zum Beispiel ein Rechtskoordinatensystem bilden

    • Die zwei Vektoren in a x b spannen eine Parallelschlammfläche auf

    • Das "neue" Produkt, dass wir definieren a x b soll wieder ein Vektor sein, der senkrecht auf a und b steht.

    • Folgerungen und Satze (aus der "Definition" also unserer "Erfindung"):

    Die Parallelogrammfläche von |a x b| ist im Betrag |a| * |b| * sin(alpha).

    Beweis: ...

    Die Koordiantenvektordarstellung von a x b ist ...

    Beweis: ...

    Satz: a x b = - (b x a)

    Beweis: ...

    Und so weiter (mit Verteilungssatz etc.)

    • Was kommt danach?
      Dann schaut man sich nochmal an, was man selbst erzeugt oder gebaut hat und guckt nach Eigenschaften und verallgemeinert es evtl. in n-Dimensionen.

    Also der Mathematiker baut eine "abstrakte Maschine" (wie Vektorprodukt oder Determinante) und untersucht es dann später nochmal und baut darauf noch "abstraktere Maschinen".
    3 Eigenschatten/"Zutaten" reichen beim Vektorprodukt oder auch bei der Determinante, um das Vektorprodukt oder die Determinante zu "bauen" (definieren).

    So sehe ich zumindest Mathematik.

    Es ist nicht vom Himmel gefallen, es ist von einer Person der "Vernunft" ausgedacht worden und damit "denkt" man jetzt.

    Ich bin gerade aber zu philosophisch unterwegs, leider, das mag ich an mir eh nicht ...


    Mal sehen, wenn ich "Sprachkonstrukte" hinter mir habe, kann ich evtl. mehr sagen oder auch nicht.
    Mal sehen.



  • @biter manchmal würde einmal selbst googeln den Horizont erweitern 😉: https://en.m.wikipedia.org/wiki/Natural-language_programming



  • Die Seite habe ich auch schon aufgeschlagen. Was ich suche, ist eine Sprachdefinition und Beispiel Quell-Texte. Immer wieder habe ich den Begriff, "strukturierte natürliche Sprache", also Einschränkung auf eine kleine Teilmenge, gelesen. dozgon, dein Text ist interessant, das Thema ist spannend, Danke für die Anregung !



  • Naja, wenn's nicht strukturiert und auf eine kleine Teilmenge eingeschränkt ist, dann ist's halt nicht eindeutig. Und daher mMn. nicht sinnvoll.

    Und das was man sinnvoll machen kann, ist mMn. nicht angenehm zu verwenden. Weil die Regeln der Sprache muss man dann ja erst wieder lernen. Dann kann man auch gleich lernen das mit einer "normalen" Programmiersprache zu formulieren.

    Wobei ich einen Aspekt der Sache interessant finde: dass man ein System hat wo man (wie auch immer formulierte) Aussagen (Axiome) reinwerfen kann, und das damit dann...

    • Fragen beantworten kann
    • Neue Aussagen davon ableiten kann
    • Weitere Aussagen überprüfen ob sie a) zu einem Widerspruch führen, b) ohne Widerspruch als neue "Axiome" hinzugefügt werden können oder gar c) durch die bestehenden Axiome bewiesen werden können.

    Wobei ich fürchte dass das nicht so einfach ist. Also eine komplette Lösung geht ja denke ich sowieso nicht, weil halt Gödl & Co ("komplett" in dem Sinn dass die Fragen die man dem System stellt nie mit "weiss ich nicht" beantwortet). Aber eine teilweise Lösung wäre auch schon sehr cool.



  • Meine Idee ist, das die neue Natürliche PS (NPS), (nur eine Bezeichnung) als Datenstrukturen nur natürlichsprachliche Sätze hat. Aus vorhandenen Sätzen werden neue gebildet, sowie oben als Beispiel. Aber um Sprachelemente wie "if Bedingung then Action" kommt man nicht herum, sind aber eigentlich auch natürliche Sprachelemente. Strukturiert wäre die NPS schon, einen konkreten Entwurf, habe ich noch nicht. Momentan brauch ich ein Sprachelement wie "Vielfachheiten oder Collections, Arrays oder Listen", die aber selber auch Sätze sein müssen, um die Einheitlichkeit zu bewahren. War ein wenig euphorisch wegen dem obigen Beispiel. Man kann sich hohe Ziele, setzen danach Abstriche machen, oder es ganz verwerfen. Es geht jetzt um Iteration und Rekursion, alles mit Sätzen ...



  • Danke Euch !!!



  • @hustbaer sagte in Programmieren in natürlicher Sprache:

    Wobei ich einen Aspekt der Sache interessant finde: dass man ein System hat wo man (wie auch immer formulierte) Aussagen (Axiome) reinwerfen kann, und das damit dann...

    Fragen beantworten kann
    Neue Aussagen davon ableiten kann
    Weitere Aussagen überprüfen ob sie a) zu einem Widerspruch führen, b) ohne Widerspruch als neue "Axiome" hinzugefügt werden können oder gar c) durch die bestehenden Axiome bewiesen werden können.

    Ich erinnere mich da dunkel an Resolution (Logik) und Case-Based Reasoning.



  • Ich denke, da ist man bei chatGPT3 oder chatGPT4 gut aufgehoben.

    Beispiel:
    Meine C# Fähigkeiten sind beschränkt, wollte aber ein kleines Tutorial darüber verfassen. chatGPT hat über 95% dieses Tutorials verfasst: https://www.henkessoft.de/Csharp/Csharp - 1.htm
    Ich habe im Wesentlichen nur Anweisungen gegeben und bei der Software zusätzliche Forderungen gestellt.



  • Gehts darum Cobol neu zu erfinden?


  • Mod

    Vor allem ging es darum, einen Beitrag zu lange gestorbenen Threads zu leisten. Ich hatte es stehen gelassen, weil es viel relevanter Inhalt war, aber ich denke, wir brauchen keine weiteren lustigen Sprüche als Antworten auf 2022.


Anmelden zum Antworten