[PYTHON] Natürlicher Zahlengenerator

Es ist eine natürliche Zahl, die ich beiläufig benutze, aber sie muss streng definiert werden, um in der Mathematik damit umgehen zu können. Dieses Mal werde ich Ihnen zeigen, wie es geht. Unten ist eine Frage der persönlichen Präferenz, aber natürliche Zahlen beginnen bei $ 0 $.

Wie man natürliche Zahlen macht

Natürliche Zahlen beginnen bei $ 0 $ (oder $ 1 $) und haben die Eigenschaft, unendlich und in einer Linie zu sein. Natürlich bricht, verzweigt oder verschmilzt es nirgendwo. Die Eigenschaften, die solche natürlichen Zahlen erfüllen müssen, werden durch das "Pearno-Axiom" definiert. In Bezug auf Peanos Bestätigung denke ich, dass es gut wäre, wenn Sie sich auf "Schöne Geschichte der Mathematik an der High School: Was ist eine natürliche Zahl (kann 0 enthalten)" beziehen könnten. Es wird auch ausführlich und auf leicht verständliche Weise in "Unvollständigkeitssatz von Mathematics Girl Goetel" erörtert.

Peanos Axiom erwähnt jedoch nur die Bedingung, eine natürliche Zahl zu sein. Dies ist kein Problem, aber einer der Algorithmen, die diejenigen formal definieren, die diese Bedingungen erfüllen, dh natürlichen Zahlen Substanz verleihen, ist "Neumans Konstruktionsmethode". Ist es nach den Worten eines Ingenieurs ein Bild der Definition der Anforderungen an natürliche Zahlen unter Verwendung des Peano-Axioms und der Codierung mit Neumanns Konstruktionsmethode? Neumanns Konstruktionsmethode verwendet Mengen (so etwas wie {1, 2, 3}), um etwas zu erzeugen, das Peanos Agenda entspricht.

In Neumanns Konstruktionsmethode ist $ 0 $ die erste natürliche Zahl, und die natürliche Zahl ist wie folgt definiert.

\begin{eqnarray}
0 &:=& \{\} \\
1 &:=& \{0\} = \{\{\}\} \\
2 &:=& \{1,\ 0\} = \{\{\{\}\},\ \{\}\} \\
3 &:=& \{2,\ 1,\ 0\} = \{\{\{\{\}\},\ \{\}\},\ \{\{\}\},\ \{\}\}
\end{eqnarray}

Danach wird es wiederholt.

Anordnung der Algorithmen

Erstellen Sie einen Algorithmus, der natürliche Zahlen gemäß Neumanns Konstruktionsmethode definiert. Ziel ist es, ein Programm zu erstellen, das die Definition als Standardzeichenfolge ausgibt, wenn eine Ganzzahl von $ 0 $ oder mehr eingegeben wird.

In Neumanns Konstruktionsmethode wird zuerst "0 = {}" definiert und dann rekursiv nur unter Verwendung der bereits definierten natürlichen Zahlen definiert. Letztendlich werden natürliche Zahlen nur durch drei Arten von Zeichen dargestellt: "{", "}", ",". Ich werde ein Bilddiagramm setzen.

algorism.PNG

Alles was Sie tun müssen, ist dieses Zeichen für Zeichen von links auszugeben.

Implementierung

Klicken Sie hier für den Quellcode. Ich benutze Python 3.7.

natural_number_generator.py


import sys


#Natürlicher Zahlengenerator
def neumann_algorithm(target_num: int):
    processing = target_num - 1
    yield '{'

    while processing >= -1:
        # (1)
        if processing == -1:
            yield '}'
            return 0
        else:
            natural_number_generator = neumann_algorithm(processing)
            yield from natural_number_generator
        
        # (2)
        if processing == 0:
            yield '}'
            return 0
        else:
            yield ', '
        
        processing -= 1

    return 0


#Eingabewert abrufen
def get_input_num():
    args = sys.argv
    input_num = int(args[1])

    return input_num


if __name__ == "__main__":
    target_num = get_input_num()

    natural_number_generator = neumann_algorithm(target_num)
    for char in natural_number_generator:
        print(char, end='')

Erklärung des Quellcodes

Die Funktion neumann_algorithm im Quellcode ist der Algorithmus, der natürliche Zahlen generiert. Innerhalb der Funktion gibt es zwei Zweige, "(1)" und "(2)" (siehe Kommentare im Quellcode). Ich werde eine kurze Erklärung dazu geben.

algorism_explain.PNG

(1) ist der Teil, der bestimmt, ob der Wert, der von nun an ausgegeben werden soll, $ 0 $ ist, dh ob er definiert ist oder nicht. Da zuerst "0 = {}" definiert wird, können Sie "{}" direkt ausgeben. Da die anderen Zahlen jedoch nicht definiert sind, müssen Sie die Funktion rekursiv aufrufen.

"(2)" ist der Teil, der bestimmt, ob "}" oder "jedes Mal ausgegeben wird, wenn ein Neustartvorgang abgeschlossen ist.

Die Definition einer natürlichen Zahl wird explosionsartig lang, wenn die Zahl zunimmt (ungefähr $ O (2 ^ n) $) **. Wenn Sie eine Zeichenfolge oder Liste aktivieren, ist möglicherweise nicht mehr genügend Speicher vorhanden. Um dies zu verhindern, haben wir es mit einem Generator implementiert, der jedes auszugebende Zeichen beurteilen und verwerfen kann, wenn es nicht mehr benötigt wird. Wenn Sie es ausführen möchten, empfehlen wir Ihnen, auf etwa 10 US-Dollar zu warten.

Ausgabeergebnis

Hier ist das Ergebnis der Eingabe von $ 0 $ bis $ 5 $ und deren Ausführung.

>python natural_number_generator.py 0
{}
>python natural_number_generator.py 1
{{}}
>python natural_number_generator.py 2
{{{}}, {}}
>python natural_number_generator.py 3
{{{{}}, {}}, {{}}, {}}
>python natural_number_generator.py 4
{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}
>python natural_number_generator.py 5
{{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}
>

Es ist ein gutes Gefühl.

Übrigens habe ich bemerkt, als ich es verschoben habe, aber es scheint, dass } nicht mehr als dreimal fortgesetzt wird. Es ist aus der Art der Verzweigung klar, aber ich war mir dessen nicht bewusst, als ich über den Algorithmus nachdachte. Sie haben eine neue Entdeckung gemacht.

Bonus

Die Definition von $ 10 $.

>python natural_number_generator.py 10
{{{{{{{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}, {{{{}}, {}}, {{}}, {}}, {{{}}, {}}, {{}}, {}}
>

das ist alles. Vielen Dank.

Recommended Posts

Natürlicher Zahlengenerator
Numpys Zufallsmodul Zufällige Generierung
Generator
Generator
Zufallsgenerator für französische Zahlen mit Python
Unendlicher Primgenerator in Python3
Primzahl
Natürliche Sorte
Generator Memo.
Zufallsgenerator, der der Normalverteilung N (0,1) folgt
Basisnummer