Algorithmus des Denkens und des Bewusstseins

Dieser Artikel beschreibt einen Algorithmus fĂŒr Denken und Bewusstsein. Ich biete meine Antwort auf die Frage, wie Denken und Bewusstsein funktionieren. Und ich demonstriere einen Algorithmus, der wirklich, kreativ denken und echtes Bewusstsein besitzen kann. Der Artikel richtet sich an Programmierer und besteht aus zwei Hauptteilen. Der erste Teil ist rein technisch und enthĂ€lt eine Beschreibung des Algorithmus, eine Liste seiner Eigenschaften und ein Beispiel fĂŒr die praktische Anwendung. Der zweite Teil enthĂ€lt erklĂ€rende Thesen und eine Lösung fĂŒr die Frage der konstruktiven Axiomatisierung des Bewusstseins. Ein Algorithmus ist ein aussagekrĂ€ftiger Text, der fĂŒr sich selbst spricht, und daher gibt es nur praktisch notwendige Mindestkommentare.

Beschreibung des Algorithmus


Die Beschreibung des Algorithmus erfolgt in einem selbst erstellten mathematisierten Formalismus nach dem "Top-Down" -Prinzip, dh es wird zuerst eine endgĂŒltige, abstrakte Aufzeichnung gegeben, und dann wird der Algorithmus auf Teile in der Reihenfolge analysiert, in der Aufrufe und Kommentare gegeben werden. Der "zusammengesetzte" Algorithmus ist also eine rekursive Funktion der folgenden Form:

t n + 1 = Zusammensetzung [ Abstraktion [ Abzug [t n ]]]; t 0 = s; t n , s ∈ S ; n ∈ N.

Die Berechnung dieser Funktion ist Denken. Wie Sie sehen können, erscheinen drei Operatoren im Datensatz:
Komposition [] , Abstraktion [] , Abzug [] ; es gibt auch: die Startvariable s ∈ S , die Menge der Zeilen einer speziellen Form S und die Schrittnummer n ∈ N. Als nÀchstes betrachten wir jedes Ersatzteil im Detail. Wir beginnen mit der Menge S und ihren Elementen.

Um die Menge S anzugeben , muss die Syntax festgelegt werden, in die die Elemente dieser Menge geschrieben werden. Elemente der Menge S werden Strings genannt. Jede Zeile in S besteht aus einer Hierarchie von Klammern "(", ")", und in die Klammern sind beliebige Zeichenbezeichner geschrieben. Um die Verwendung des Begriffs "Bezeichner" zu vermeiden, wie er fĂŒr andere Zwecke erforderlich sein kann, werden symbolische Bezeichner in den Klammern als "Mnemonik" bezeichnet. Jede Mnemonik ist in lateinischen Zeichen „A - z“ geschrieben. Mnemonik in Klammern kann durch ein Komma "," getrennt werden. Wenn die LĂ€nge der Mnemonik festgelegt ist, die separat angegeben wird, wird das Trennzeichen nicht festgelegt. Mnemonics werden nur in Klammern geschrieben. Eine Zeile kann verschachtelte Klammern enthalten. Die Hierarchie der Klammern in der Zeichenfolge ist beliebig, es muss jedoch fĂŒr jede öffnende Klammer eine schließende Klammer vorhanden sein. In diesem Artikel werde ich nur kleine Buchstaben des lateinischen Alphabets zum Schreiben von Mnemonics verwenden, und die LĂ€nge der Mnemonics wird festgelegt. Ein Buchstabe entspricht einer Mnemonik. Ich setze kein Trennzeichen. Beispiele fĂŒr Zeilen:

() ≡ ≡ ist eine leere Zeichenfolge.
(a) - eine Zeichenfolge, die eine Mnemonik " a " enthÀlt.
(aa) - eine Zeichenfolge, die zwei Kopien der Mnemonik „ a “ enthĂ€lt.
(ab) ist eine Zeichenfolge, die zwei Mnemoniken " a " und " b " enthÀlt.
((a) (a)) - Die Zeile enthĂ€lt zwei Kopien der Mnemonik „ a “ und verschachtelte Ebenen von Klammern.

Die beiliegenden Klammern werden zusammen mit ihrem Inhalt sowie den einzelnen Mnemoniken manchmal als "Zeichenfolgenkomponenten" bezeichnet, wenn eine entsprechende Verallgemeinerung erforderlich ist. Beispielsweise enthÀlt Zeile ((a) ab) vier Komponenten, darunter zwei Komponenten " a ", eine Komponente " (a) " und eine Komponente " b ".

Aufzeichnungen von Zeichenfolgen, die mit einer Neuanordnung der Komponenten innerhalb der Zeichenfolge ĂŒbereinstimmen, werden als identisch betrachtet. Beispiele fĂŒr identische Zeilen:

(ab) ≡ (ba) .
((a) (b)) ≡ ((b) (a)) .
(abc) ≡ (bac) ≡ (cba) ≡ (acb) ≡ (bca) ≡ (cab) .
((a) (ab)) ≡ ((a) (ba)) ≡ ((ab) (a)) ≡ ((ba) (a)) .

Zeilen können eine beliebige Anzahl identischer, sich wiederholender Komponenten enthalten. In diesem Fall ist eine kĂŒrzere Aufzeichnung möglich, indem der Wiederholungsindex, der links vor der Komponente steht, ohne Trennzeichen verwendet wird. Beispiele:

(aa) ≡ (2a) .
(aabb) ≡ (2a2b) .
((a) (a)) ≡ (2 (a)) .
((aa) (aa)) ≡ (2 (2a)) .
(aa (bb) (bb) (ccc) (ccc) (ccc)) ≡ (2a2 (2b) 3 (3c)) .

In den FĂ€llen, in denen die Zeichenfolge leere Komponenten enthĂ€lt, z. B. (a ()) , (a () () (b)), gelten folgende IdentitĂ€ten: (a ()) ≡ (a) , (a () () (b )) ≡ (a (b)) , d. H. Leere Komponenten werden weggeworfen.

Definition Die Menge S besteht aus allen möglichen Zeichenfolgen, die die obigen Syntaxkriterien erfĂŒllen, einschließlich einer leeren Zeichenfolge.

Die Abzugs-, Abstraktions- und Kompositionsoperatoren sind in der Menge S definiert . Operatorargumente werden in eckigen Klammern [] angegeben , da Klammern fĂŒr die Zeichenfolgensyntax reserviert sind. Der Begriff "Operator" ist gleichbedeutend mit dem Begriff "Funktion".

Abzugsoperator . Definition ∀s ∈ S , Abzug k [s] ∈ S , k ∈ N , k> 1, Abzug [s] ≝ Abzug 2 [s] . Nimmt die Zeichenfolge s von S als Argument. Gibt als Ergebnis eine Zeichenfolge von S zurĂŒck. Aktion. Der Operator dupliziert k- mal jede Komponente der Zeichenfolge und die gesamte Zeichenfolge. Die resultierende Struktur wird von gemeinsamen Ă€ußeren Klammern eingerahmt. Die VervielfĂ€ltigung beginnt mit den tiefsten in Bezug auf die Verschachtelung von Komponenten. Die gesamte Zeile wird zuletzt dupliziert. FĂŒr unmittelbare praktische Zwecke reicht es aus, dass k = 2 ist , also habe ich einen Sonderfall von Abzug [s] ≝ Abzug 2 [s] definiert . Die Verwendung von deduction [] impliziert, dass k = 2 ist, dh als Ergebnis des deduction [s] -Operators werden alle Komponenten der Zeichenfolge s verdoppelt. Beispiele:

Abzug [(a)] = ((aa) (aa)).
Abzug [(aa)] = ((aaaa) (aaaa))
Abzug [(ab)] = ((aabb) (aabb)).
Abzug [(a (b))] = ((aa (bb) (bb)) (aa (bb) (bb))).
Abzug [((a) (b))] = (((aa) (aa) (bb) (bb)) ((aa) (aa) (bb) (bb))).
Abzug [((a) (b (cc)))] = (((aa) (aa) (bb (cccc) (cccc)) (bb (cccc) (cccc))) ((aa) (aa) ( bb (cccc) (cccc)) (bb (cccc) (cccc)))) .

Abstraktionsoperator . Definition ∀s ∈ S , Abstraktion [s] ⊂ S. Nimmt die Zeichenfolge s von S als Argument. Infolgedessen werden viele Zeilen zurĂŒckgegeben. Handlungsprinzip. Ein Abstraktionsoperator erstellt viele Zeilen aus einer Quellzeile mithilfe einer speziellen Operation - Klammern identischer Komponenten. Die Operation der Belichtungsreihe gilt nur fĂŒr verschachtelte Belichtungsreihen, die sich auf derselben Verschachtelungsebene befinden. Das allgemeine Prinzip der Klammerung. Befinden sich in einer Kombination von Klammern auf derselben Ebene dieselben Komponenten in den Klammern, kann jeder Satz derselben Komponenten in Klammern gesetzt werden, und die intakten Komponenten sollten unter denselben allgemeinen Klammern derselben Ebene kombiniert werden. Betrachten Sie ein Beispiel. String ((ab) (ac)) . In dieser Zeile befinden sich zwei Teilzeichenfolgen auf derselben Ebene: (ab) und (ac) , in denen sich die gleichen Mnemoniken " a " befinden. Diese Mnemoniken können in Klammern gesetzt werden und das Ergebnis ist (a (bc)) . Wie Sie sehen können, werden die verbleibenden Mnemoniken " b " und " c " in gemeinsamen Klammern zusammengefasst. Betrachten Sie ein weniger offensichtliches Beispiel. Die Zeichenfolge ((aa) (aa)) enthĂ€lt die Teilzeichenfolgen (aa) und (aa) . In diesem Fall gibt es zwei verschiedene Optionen zum Löschen von Klammern. In der ersten Variante kann nur eine Mnemonik " a " aus Klammern von jedem Teilstring entfernt werden, und in der zweiten Variante kann eine Gruppe von Mnemoniken " aa " herausgenommen werden. Lassen Sie uns beide Optionen genauer betrachten.

Erste Option, Schritt fĂŒr Schritt Demonstration:

  1. Schritt eins, wÀhlen Sie ( rot ), was Sie herausnehmen möchten (( a a) ( a a)) .
  2. Schritt zwei, machen Sie die Auswahl ( a (... a) (... a)) .
  3. Schritt drei, kombinieren Sie die Reste in gemeinsamen Klammern ( a (... a ... a)) .
  4. Ergebnis (a (aa)) .

Die zweite Option in Schritten:

  1. Schritt eins, wÀhlen Sie, was Sie herausnehmen möchten (( aa ) ( aa )) .
  2. Schritt zwei, machen Sie die Auswahl ( aa (...) (...)) .
  3. Schritt drei, kombinieren Sie die Reste in gemeinsamen Klammern ( aa (...)) .
  4. Vierter Schritt, wirf die leeren Komponenten weg ( aa ) .
  5. Ergebnis (aa) .

Lassen Sie uns das Beispiel komplizieren. Es sei die Zeichenfolge ((aa) (aab) (aab)) gegeben , sie hat drei Teilzeichenfolgen auf derselben Ebene: (aa) , (aab) , (aab) , alle drei haben den gleichen Inhalt. Die Klammerregel verpflichtet uns nicht, die Operation fĂŒr alle drei Teilzeichenfolgen gleichzeitig auszufĂŒhren. FĂŒr den Absteckvorgang können Sie eine beliebige Gruppe von Teilzeichenfolgen auswĂ€hlen.

In diesem Fall gibt es drei nicht identische Optionen zum Gruppieren von Teilzeichenfolgen:

  1. (aa), (aab) .
  2. (aab), (aab) .
  3. (aa), (aab), (aab) .

Wir fĂŒhren Schritt fĂŒr Schritt alle möglichen Anweisungen fĂŒr jede der Gruppierungsoptionen aus.

Gruppierung (aa) , (aab) . Zeichenfolge ((aa) (aab) (aab)) .

Die erste Option:

  1. WĂ€hlen Sie den Inhalt (( a a) ( a ab) (aab)) .
  2. Wir nehmen ( a (... a) (... ab) (aab)) heraus .
  3. Kombiniere ( a (... a ... ab) (aab)) .
  4. Ergebnis Nr. 1 (a (aab) (aab)) .

Die zweite Option:

  1. WĂ€hlen Sie den Inhalt (( aa ) ( aa b) (aab)) .
  2. Wir nehmen ( aa (...) (... b) (aab)) heraus .
  3. Kombiniere ( aa (... b) (aab)) .
  4. Ergebnis Nr. 2 (a (b) (aab)) .

Gruppierung (aab) , (aab) . Zeichenfolge ((aa) (aab) (aab)) .

Die erste Option:

  1. WĂ€hlen Sie den Inhalt ((aa) ( a ab) ( a ab)) .
  2. Wir nehmen ((aa) a (... ab) (... ab)) heraus .
  3. Kombiniere ((aa) a (... ab ... ab)) .
  4. Ergebnis Nr. 3 (a (aa) (aabb)) .

Die zweite Option:

  1. WĂ€hlen Sie den Inhalt ((aa) ( aa b) ( aa b)) .
  2. Wir nehmen ((aa) aa (... b) (... b)) heraus .
  3. Kombiniere ((aa) aa (... b ... b)) .
  4. Ergebnis Nr. 4 (aa (aa) (bb)) .

Die dritte Option:

  1. WĂ€hlen Sie den Inhalt ((aa) (a ab ) (a ab )) .
  2. Wir nehmen ((aa) ab (... a) (... a)) heraus .
  3. Kombiniere ((aa) ab (... a ... a)) .
  4. Ergebnis Nr. 5 (ab (aa) (aa)) .

Vierte Option:

  1. WĂ€hlen Sie den Inhalt ((aa) (aa b ) (aa b )) .
  2. Wir nehmen ((aa) b (... aa) (... aa)) heraus .
  3. Kombiniere ((aa) b (... aa ... aa)) .
  4. Ergebnis Nr. 6 (b (aa) (aaaa)) .

FĂŒnfte Option:

  1. WĂ€hlen Sie den Inhalt ((aa) ( aab ) ( aab )) .
  2. Wir nehmen ((aa) aab (...) (...)) heraus .
  3. Kombiniere ((aa) aab (...)) .
  4. Ergebnis Nr. 7 (aab (aa)) .

Gruppierung (aa) , (aab) , (aab) . Zeichenfolge ((aa) (aab) (aab)) .

Die erste Option:

  1. WĂ€hlen Sie den Inhalt (( a a) ( a ab) ( a ab)) .
  2. Wir nehmen ( a (... a) (... ab) (... ab)) heraus .
  3. Kombiniere ( a (... a ... ab ... ab)) .
  4. Ergebnis Nr. 8 (a (aaabb)) .

Die zweite Option:

  1. WĂ€hlen Sie den Inhalt (( aa ) ( aa b) ( aa b)) .
  2. Wir nehmen heraus ( aa (...) (... b) (... b)) .
  3. Kombiniere ( aa (... b ... b)) .
  4. Ergebnis Nr. 9 (aa (bb)) .

Die Aktion des Abstraktionsoperators . Wie Sie dem Beispiel entnehmen können, gibt es fĂŒr die ursprĂŒngliche Zeile ((aa) (aab) (aab) neun verschiedene Optionen, um etwas aus den Klammern zu setzen, und neun resultierende Zeilen entsprechen diesen Optionen. So verhĂ€lt sich der Abstraktionsoperator - iteriert ĂŒber alle möglichen Optionen zum Löschen von Klammern und erstellt die entsprechende Menge der resultierenden Zeilen. DarĂŒber hinaus sucht der Abstraktionsoperator nach Optionen, um nicht nur in der Quellzeile, sondern auch in allen resultierenden Ergebniszeilen zu erkennen. Mit anderen Worten, der Abstraktionsoperator wird rekursiv auf seine Ergebnisse usw. angewendet, bis alle möglichen Optionen ausgeschöpft sind. Aus offensichtlichen GrĂŒnden ist fĂŒr jede letzte Zeile auch die Anzahl der möglichen Entfernungsoptionen begrenzt.

Kehren wir zum vorherigen Beispiel zurĂŒck. Im betrachteten Beispiel habe ich nicht alle möglichen Optionen aufgeschrieben, sondern nur neun Teile der ersten Ebene. Um die volle Wirkung des Abstraktionsoperators zu veranschaulichen, mĂŒssen fĂŒr jedes der neun vorherigen Ergebnisse alle Optionen zum Löschen von Klammern erstellt werden. Wir werden alle Optionen aufschreiben, aber auf eine prĂ€zisere Art und Weise.

Ergebnis Nr. 1 (a (aab) (aab)) :

1.1. (a ( a ab) ( a ab)) => (a a (aabb)) .
1.2. (a ( aa b) ( aa b)) => (a aa (bb)) .
1.3. (a (a ab ) (a ab )) => (a ab (aa)) . * Nr. 7
1.4. (a ( aab ) ( aab )) => ( aab ) .
1.5. (a (aa b ) (aa b )) => (a b (aaaa)) .
Ergebnis Nr. 2 (a (b) (aab)) :
2.1. (a ( b ) (aa b )) => (a b (aa)) .
Ergebnis Nr. 3 (a (aa) (aabb)) :
3.1. (a ( a a) ( a abb)) => (a a (aabb)) . * Nr. 1.1
3.2. (a ( aa ) ( aa bb)) => (a aa (bb)) . * Nr. 1.2
Ergebnis Nr. 4 (aa (aa) (bb)) .
Ergebnis Nr. 5 (ab (aa) (aa)) :
5.1. (ab ( a a) ( a a)) => ( a ab (aa)) . * Nr. 7, * Nr. 1.3
5.2. (ab ( aa ) ( aa )) => ( aa ab) . * Nr. 1.4
Ergebnis Nr. 6 (b (aa) (aaaa)) :
6.1. (b ( a a) ( a aaa)) => ( a b (aaaa)) . * Nr. 1.5
6.2. (b ( aa ) ( aa aa)) => ( aa b (aa)) . * Nr. 7, * Nr. 1.3, * Nr. 5.1
Ergebnis Nr. 7 (aab (aa)) .
Ergebnis Nr. 8 (a (aaabb)) .
Ergebnis Nr. 9 (aa (bb)) .

Ein Sternchen kennzeichnet Optionen, die wiederholt werden. Das Ergebnis der Abstraktion enthÀlt nur eindeutige Variationen. Im analysierten Beispiel gibt es vierzehn eindeutige Ergebniszeilen. Gesamt:

Abstraktion [((aa) (aab) (aab))] =
{
(a (aab) (aab)), (aa (aabb)), (aaa (bb)), (aaab), (a (b) (aab)), (ab (aa)), (a (aa) (aabb)), (aa (aa) (bb)), (ab (aa) (aa)), (b (aa) (aaaa)), (ab (aaaa)), (aab (aa)), ( a (aaabb)), (aa (bb))
}}

Betrachten Sie zur Verdeutlichung noch einige Beispiele.

Zeichenfolge ((a (b)) (a (b))) . Optionen in Klammern. Erste Iteration:

(( a (b)) ( a (b))) => ( a ((b) (b))) , Ergebnis Nr. 1.
((a (b) ) (a (b) )) => ( (b) (aa)) , Ergebnis Nr. 2.
(( a (b) ) ( a (b) )) => ( a (b) ) , Ergebnis Nr. 3.
Im ersten Ergebnis kann eine weitere Entscheidung getroffen werden. Zweite Iteration:
(a (( b ) ( b ))) => (a ( b )) , Ergebnis Nr. 1.2 stimmt mit Ergebnis Nr. 3 ĂŒberein.

Gesamt: Abstraktion [((a (b)) (a (b)))] = {(a ((b) (b))), ((b) (aa)), (a (b))}

Tolles Beispiel:
Abstraktion [ Abzug [(a (b))]] = Abstraktion [((aa (bb) (bb)) (aa (bb) (bb))] =>
1. ((aa (bb) (bb)) (aa (bb) (bb))) => ((aab (b)) (aa (bb) (bb))) .
1.1. (( a ab (b)) ( a a (bb) (bb))) => ( a (aab (b) (bb) (bb))) .
1.1.1. (a (aab ( b ) (bb) (bb))) => (a (aabb (b) (bb))) .
1.1.1.1. (a (aabb ( b ) ( b b))) => (a (aabb b (b))) .
1.1.2. (a (aab ( b ) (bb) (bb))) => (a (aabb (bb))) .
1.1.3. (a (aab (b) (bb) (bb))) => (a (aabb (b) (bb))) .
1.1.3.1. (a (aabb ( b ) ( b b))) => (a (aabb b (b))) .
1.1.4. (a (aab (b) ( bb ) ( bb ))) => (a (aab bb (b))) .
1.2. (( aa b (b)) ( aa (bb) (bb))) => ( aa (b (b) (bb) (bb))) .
1.2.1. (aa (b ( b ) ( b b) (bb))) => (aa (b b (b) (bb))) .
1.2.1.1. (aa (bb ( b ) (bb))) => (aa (bbb (b))) .
1.2.2. (aa (b ( b ) ( b b) ( b b))) => (aa (b b (bb))) .
1.2.3. (aa (b (b) ( b b) ( b b))) => (aa (b b (b) (bb))) .
1.2.3.1. (aa (bb ( b ) (bb))) => (aa (bbb (b))) .
1.2.4. (aa (b (b) ( bb ) ( bb ))) => (aa ( bbb (b))) .
1.3. ((aab (b)) (aa (bb) (bb))) => ((aab (b)) (aab (bb))) .
1.3.1. (( a ab (b)) ( a ab (bb))) => ( a (aabb (b) (bb))) .
1.3.1.1. (a (aabb ( b ) ( b b))) => (a (aabb b (b))) .
1.3.2. (( aa b (b)) ( aa b (bb))) => ( aa (bb (b) (bb))) .
1.3.2.1. (aa (bb ( b ) (bb))) => (aa (bbb (b))) .
1.3.3. (( aab (b)) ( aab (bb))) => ( aab ((b) (bb))) .
1.3.3.1. (aab (( b ) ( b b))) => (aab ( b (b))) .
1.3.4. ((a ab (b)) (a ab (bb))) => ( ab (aa (b) (bb))) .
1.3.4.1. (ab (aa ( b ) ( b b))) => (ab (aa b (b))) .
1.3.5. ((aa b (b)) (aa b (bb))) => ( b (aaaa (b) (bb))) .
1.3.5.1. (b (aaaa ( b ) ( b b))) => (b (aaaa b (b))) .
1.4. ((aab (b)) (aa ( bb ) ( bb ))) => ((aab (b)) (aa bb )) .
1.4.1. (( a ab (b)) ( a abb)) => ( a (aabbb (b))) .
1.4.2. (( aa b (b)) ( aa bb)) => ( aa (bbb (b))) .
1.4.3. (( aab (b)) ( aab b)) => ( aab (b (b))) .
1.4.4. ((a ab (b)) (a ab b)) => ( ab (aab (b))) .
1.4.5. ((aa b (b)) (aa b b)) => ( b (aaaab (b))) .
2. ((aa ( bb ) ( bb )) (aa (bb) (bb)) => ((aa bb ) (aa (bb) (bb))) .
2.1. ((aabb) (aa (bb) (bb))) => ((aabb) (aab (bb))) .
2.1.1. (( a abb) ( a ab (bb))) => ( a (aabbb (bb))) .
2.1.2. (( aa bb) ( aa b (bb))) => ( aa (bbb (bb))) .
2.1.3. (( aab b) ( aab (bb))) => ( aab (b (bb))) .
2.1.4. ((a ab b) (a ab (bb))) => ( ab (aab (bb))) .
2.1.5. ((aa b b) (aa b (bb))) => ( b (aaaab (bb))) .
2.2. ((aabb) (aa ( bb ) ( bb ))) => ((aabb) (aa bb )) .
2.2.1. (( a abb) ( a abb)) => ( a (aabbbb)) .
2.2.2. (( aa bb) ( aa bb)) => ( aa (bbbb)) .
2.2.3. (( aab b) ( aab b)) => ( aab (bb)) .
2.2.4. ((a abb ) (a abb )) => ( abb (aa)) .
2.2.5. (( aabb ) ( aabb )) => ( aabb ) .
2.2.6. ((a ab b) (a ab b)) => ( ab (aabb)) .
2.2.7. ((aa b b) (aa b b)) => ( b (aaaabb)) .
2.2.8. ((aa bb ) (aa bb )) => ( bb (aaaa)) .
2.3. (( a abb) ( a a (bb) (bb))) => ( a (aabb (bb) (bb))) .
2.3.1. (a (aabb ( b b) ( b b))) => (a (aabb b (bb))) .
2.3.2. (a (aabb ( bb ) ( bb ))) => (a (aabb bb )) .
2.4. (( aa bb) ( aa (bb) (bb))) => ( aa (bb (bb) (bb))) .
2.4.1. (aa (bb (bb) (bb))) => (aa (bbb (bb))) .
2.4.2. (aa (bb ( bb ) ( bb ))) => (aa (bb bb )) .
3. (( a a (bb) (bb)) ( a a (bb) (bb))) => ( a (aa (bb) (bb) (bb) (bb))) .
3.1. (a (aa (bb) (bb) (bb) (bb)) => (a (aab (bb) (bb) (bb))) .
3.1.1. (a (aab (bb) (bb) (bb))) => (a (aabb (bb) (bb))) .
3.1.1.1. (a (aabb ( b b) ( b b))) => (a (aabb b (bb))) .
3.1.1.2. (a (aabb ( bb ) ( bb ))) => (a (aabb bb )) .
3.1.2. (a (aab (bb) (bb) (bb))) => (a (aabb (bbb))) .
3.1.3. (a (aab ( bb ) ( bb ) (bb))) => (a (aab bb (bb))) .
3.1.4. (a (aab ( bb ) ( bb ) ( bb ))) => (a (aab bb )) .
3.2. (a (aa ( bb ) ( bb ) (bb) (bb)) => (a (aa bb (bb) (bb))) .
3.2.1. (a (aabb ( b b) ( b b))) => (a (aabb b (bb))) .
3.2.2. (a (aabb ( bb ) ( bb ))) => (a (aabb bb )) .
3.3. (a (aa (bb) (bb) (bb) (bb)) => (a (aab (bbb) (bb))) .
3.3.1. (a (aab (bbb) (bb))) => (a (aabb (bbb))) .
3.3.2. (a (aab ( bb b) ( bb ))) => (a (aab bb (b))) .
3.4. (a (aa (bb) (bb) (bb) (bb)) >> ( a (aab (bbbb))) .
3.5. (a (aa ( bb ) ( bb ) ( bb ) (bb)) => (a (aa bb (bb))) .
3.6. (a (aa ( bb ) ( bb ) ( bb ) ( bb ))) => (a (aa bb )) .
4. (( aa (bb) (bb)) ( aa (bb) (bb))) >> ( aa ((bb) (bb) (bb) (bb))) .
4.1. (aa ((bb) (bb) (bb) (bb)) => (aa ( b (bb) (bb) (bb))) .
4.1.1. (aa (b (bb) (bb) (bb))) => (aa (bb (bb) (bb))) .
4.1.1.1. (aa (bb (bb) (bb))) => (aa (bbb (bb))) .
4.1.1.2. (aa (bb ( bb ) ( bb ))) => (aa (bb bb )) .
4.1.2. (aa (b (bb) (bb) (bb)) => (aa ( bb (bbb))) .
4.1.3. (aa (b ( bb ) ( bb ) (bb))) => (aa ( bbb (bb))) .
4.1.4. (aa (b ( bb ) ( bb ) ( bb ))) => (aa ( bbb )) .
4.2. (aa (( bb ) ( bb ) (bb) (bb))) => (aa ( bb (bb) (bb))) .
4.2.1. (aa (bb (bb) (bb))) => (aa (bbb (bb))) .
4.2.2. (aa (bb ( bb ) ( bb ))) => (aa (bb bb )) .
4.3. (aa ((bb) (bb) (bb) (bb)) => (aa ( b (bbb) (bb))) .
4.3.1. (aa (b (bbb) (bb))) => (aa (bb (bbb))) .
4.3.2. (aa (b ( bb b) ( bb ))) => (aa (b bb (b))) .
4.4. (aa ((bb) (bb) (bb) (bb)) >> (aa ( b (bbbb))) .
4.5. (aa (( bb ) ( bb ) ( bb ) (bb)) => (aa ( bb (bb))) .
4.6. (aa (( bb ) ( bb ) ( bb ) ( bb )) => (aa ( bb )) .
5. ((aa (bb) (bb)) (aa (bb) (bb)) => ( (bb) (aaaa (bb) (bb))) .
5.1. ((bb) (aaaa (bb) (bb))) => ((bb) (aaaab (bb))) .
5.1.1. (( b b) (aaaa b (bb))) => ( b (aaaab (bb))) .
5.2. ((bb) (aaaa ( bb ) ( bb ))) => ((bb) (aaaa bb )) .
5.2.1. (( b b) (aaaa b b)) => ( b (aaaabb)) .
5.2.2. (( bb ) (aaaa bb )) => ( bb (aaaa)) .
6. ((aa (bb) (bb) ) (aa (bb) (bb) )) => ( (bb) (bb) (aaaa)) .
6.1. (( b b) ( b b) (aaaa)) => ( b (bb) (aaaa)) .
6.2. (( bb ) ( bb ) (aaaa)) => ( bb (aaaa)) .
7. ((a a (bb) (bb)) (a a (bb) (bb))) => ( a (bb) (aa (bb) (bb))) .
7.1. (a (bb) (aa (bb) (bb))) => (a (bb) (aab (bb))) .
7.1.1. (a ( b b) (aa b (bb))) => (a b (aab (bb))) .
7.2. (a (bb) (aa ( bb ) ( bb ))) => (a (bb) (aa bb )) .
7.2.1. (a ( b b) (aa b b)) => (a b (aabb)) .
7.2.2. (a ( bb ) (aa bb )) => (a bb (aa)) .
8. (( aa (bb) (bb)) ( aa (bb) (bb)) => ( aa (bb) ((bb) (bb))) .
8.1. (aa (bb) ((bb) (bb))) => (aa (bb) ( b (bb))) .
8.1.1. (aa ( b b) ( b (bb))) => (aa b (b (bb))) .
8.2. (aa (bb) (( bb ) ( bb ))) => (aa (bb) ( bb )) .
8.2.1. (aa ( b b) ( b b)) => (aa b (bb)) .
8.2.2. (aa ( bb ) ( bb )) => (aa bb ) .
9. ((a a (bb) (bb) ) (a a (bb) (bb) )) => ( a (bb) (bb) (aa)) .
9.1. (a (aa) ( b b) ( b b)) => (a b (aa) (bb)) .
9.2. (a (aa) ( bb ) ( bb )) => (a bb (aa)) .
10. (( aa (bb) (bb) ) ( aa (bb) (bb) )) => ( a (bb) (bb) ) .
10.1. (a ( b b) ( b b)) => (a b (bb)) .
10.2. (a ( bb ) ( bb )) => (a bb ) .

Aus der obigen Liste der resultierenden Zeilen (rechts neben dem Pfeil) mĂŒssen Sie alle eindeutigen Zeilen auswĂ€hlen. Diese Gruppe eindeutiger Zeilen ist das Ergebnis der Abstraktion [((aa (bb) (bb)) (aa (bb) (bb))] . Ich werde keine eindeutigen Zeilen schreiben, da dies der ErklĂ€rung nichts hinzufĂŒgt. Wenn ich die Optimierung und praktische Anwendung des Algorithmus betrachte, werde ich im Folgenden auf dieses Beispiel verweisen.


Kompositionsoperator . Definition ∀U ⊂ S , U ≠ ≠, Zusammensetzung [U] ≠ ≠, Zusammensetzung [U] ∈ S. Es akzeptiert viele Eingabezeilen und gibt eine Zeile zurĂŒck. Aktion. Der Bediener bereitet den Inhalt fĂŒr die nĂ€chste Iteration des Algorithmus vor. Nach der Aktion des Abstraktionsoperators erscheinen viele Zeilen, und im Stadium der Komposition erfolgt die Auswahl und Verkettung von Zeilen fĂŒr die nĂ€chste Iteration des Algorithmus. Im Detail werde ich dieses Problem in den Abschnitten Optimierung und praktische Anwendung behandeln. Im einfachsten Fall fĂŒhrt der Kompositionsoperator eine einfache Verkettung aller Abstraktionsergebnisse durch. Also definieren wir es. Beispiel: Zusammensetzung [ Abstraktion [((a (b)) (a (b))]] = Zusammensetzung [{(a ((b) (b))), ((b) (aa)), (a ( b))}] = ((a ((b) (b))) ((b) (aa)) (a (b))) .

Algorithmus-Eigenschaften


Der Algorithmus erzeugt Strings. Die Menge aller Linien, die als Ergebnis der iterativen Operation des Algorithmus gebildet werden, wird als "Algorithmusausgabe" oder einfach "Ausgabe" bezeichnet. Definition der Folgerung. T s ≝ {t n | t n + 1 = Zusammensetzung [ Abstraktion [ Abzug [t n ]]]; t 0 = s; t n , s ∈ S ; n ∈ N }. T s ist die Ausgabe fĂŒr den Startwert s . In den FĂ€llen, in denen T keinen Parameter hat, sprechen wir ĂŒber die Schlussfolgerung eines beliebigen Samens. Inferenz-Eigenschaft: ∀s, e ∈ S , s ≠ ≠, e ≠ ≠, s ≠ e, T s ∩ T e = ∅ . Dies bedeutet, dass jedes Ausgabeelement eindeutig dem Startwert entspricht. Infolgedessen ist die Schlussfolgerung fĂŒr jeden Samen eindeutig.

Eine sinnvolle Interpretation von Deduktion und Abstraktion . Die physikalische Bedeutung des Abzugsoperators ist wie folgt. Aus der ursprĂŒnglichen Zeile erstellt der Abzugsoperator auf universelle Weise ein grundlegend neues konstruktives Objekt mit grundlegend neuen und komplexeren internen Eigenschaften. In einer intuitiven AnnĂ€herung können wir sagen, dass der Abzug qualitativ neue Informationen hinzufĂŒgt. Der Abstraktionsoperator analysiert seinerseits das neue Objekt in Teile und drĂŒckt somit Informationen, die in der Ableitungsphase hinzugefĂŒgt wurden, in einem konstruktiven Äquivalent aus. Möglicherweise stellen Sie fest, dass durch das Löschen von Klammern Informationen verloren gehen. DarĂŒber hinaus ist das Löschen von Klammern fĂŒr diese Syntax ein universeller Weg, um Informationen sinnvoll zu verlieren, wenn keine A-priori-Daten ĂŒber den Wert von Zeichenfolgen vorliegen. Das heißt, aus Sicht des Algorithmus sind alle möglichen Optionen fĂŒr den Informationsverlust, die im Stadium der Abstraktion berechnet werden, tatsĂ€chlich der Wert der Linien. Somit erstellt der Algorithmus bei jedem Schritt eine neue, eindeutige syntaktische Heuristik. Und jede nachfolgende Heuristik ist grundlegend komplexer und umfangreicher als die vorherige. Bei jeder Iteration des Algorithmus erscheint neues Wissen.

Praktische Anwendung


Der Algorithmus ist ein "Ding fĂŒr sich". Er denkt, aber das ist das Denken eines „Außerirdischen“. Um praktische Vorteile aus dem Denken von Außerirdischen zu ziehen, mĂŒssen Sie eine gemeinsame Sprache mit ihm finden.Einerseits ist es erforderlich, einen Außerirdischen auszubilden und andererseits zu lernen, ihn zu verstehen, um letztendlich eine sinnvolle Kommunikation herzustellen. Im Allgemeinen Ă€hnelt das Paradigma der Interaktion mit dem Algorithmus den bekannten Prinzipien der Interaktion mit der „Black Box“. Zur Vereinfachung werde ich den Denkalgorithmus den Alien Kohl nennen.

Betrachten Sie den Idealfall. Angenommen, wir verfĂŒgen ĂŒber unbegrenzte Rechenleistung und können es uns leisten, eine beliebige Anzahl von Iterationen von Kolyas Denken zu berechnen, ohne uns um Optimierungsprobleme kĂŒmmern zu mĂŒssen. In diesem Fall sind die folgenden Zutaten erforderlich, um mit Kolya zu interagieren:

  1. Ein digitales Modell einer interaktiven Umgebung, deren Bedeutung von AktivitÀt bekannt ist.
  2. Ein digitales Modell eines Werkzeugs, das sich auf die Umwelt auswirken kann.
  3. , S .
  4. , - , S .

, . .

S NextThought(S prevThought, S ExternalSignal, int exposure = 1) { S t = composition[prevThought, ExternalSignal]; for (int i = 0; i < exposure; i++) t = composition[abstraction[deduction[t]]]; return t; } EnvironmentModel e; S s = encode(e.GetState()); S o = ∅; while (0) { S o = NextThought(o, s); e.ImpactTool.perform(decode(o)); s = encode(e.GetState()); } 

RĂŒckkopplungsschaltung . Am Anfang hat Kolya keine Gedanken. Kolyas erster Gedanke ist der verschlĂŒsselte Ausgangszustand des Mediums. Bei jeder Iteration wird ein externes Signal in Kolyas Gedanken eingegossen. Danach denkt Kolya wĂ€hrend der Belichtungszeit. Die Ergebnisse des Denkens werden dekodiert und an das Tool gesendet. Die Aktion des Tools Ă€ndert wiederum irgendwie den Zustand der Umgebung. Und alles wiederholt sich noch einmal. Mit der Zeit wird sich Kolyas Denken an die Umwelt anpassen und er wird Anzeichen von hoch organisiertem, subjektiv motiviertem Verhalten zeigen. Die Motivation von Kolya wird jedoch unbekannt bleiben. Um seine Motivation zu verstehen, mĂŒssen in der nĂ€chsten Ausbildungsphase Experimente durchgefĂŒhrt werden, dh die Umgebung gezielt verĂ€ndert und Kolyas Reaktionen auf VerĂ€nderungen untersucht werden. Wenn es möglich ist, das gewĂŒnschte Ă€ußere Verhalten von Kolya anhand einer objektiven Funktion zu beschreiben, kann der Lernprozess beispielsweise mithilfe eines genetischen Algorithmus automatisiert werden.

Dekodierungsproblem . Es ist notwendig, Kolyas Gedanken zu entschlĂŒsseln, um ein Signal fĂŒr das Instrument zu synthetisieren. Die Schwierigkeit besteht darin, dass jeder Gedanke, wie ich im vorherigen Abschnitt festgestellt habe, ein grundlegend neues Design ist. Das heißt, ein hypothetischer Forscher kann den Inhalt von Kolyas Gedanken niemals vollstĂ€ndig verstehen. Ein Teil des Inhalts, der durch Kolyas Denken erzeugt wird, egal fĂŒr wie viel es studiert wird, wird fĂŒr immer etwas völlig Dunkles bleiben. Nur einige der am besten organisierten Denkfragmente können sinnvoll erkannt werden, und dies ist eine grundlegende und unĂŒberwindbare EinschrĂ€nkung in der Kommunikation mit Kolya. In der Praxis ist diese EinschrĂ€nkung jedoch nicht grundlegend. Da man erstens die sinnvolle Seite von Kolyas Gedanken unendlich spezifizieren kann und zweitens es nicht notwendig ist, Kolya vollstĂ€ndig zu verstehen. Es reicht aus, eine gemeinsame Sprache zu entwickeln, in der Sie praktische Fragen erlĂ€utern können. Aus technischer Sicht ist die Situation wie folgt. Das eingehende Signal, das den Zustand des Mediums beschreibt, ist in einer Sprache codiert. Wörter und Sprachaussagen sind Zeichenfolgen von S. Die Sprache hat ihren eigenen Wortschatz, ihre eigene Syntax und Semantik. Der Inhalt jeder Iteration des Denkens nach grammatikalischen Kriterien wird in mehrere Kategorien unterteilt:

1. Fragmente mit unbekanntem Wortschatz.
2. Unbekannte Syntax.
3. Unbekannte Semantik.
4. Grammatisch und semantisch korrekte Fragmente.

Der Inhalt all dieser Kategorien ist je nach Art des Auftretens beliebig. Das heißt, selbst bei grammatikalisch korrekten Fragmenten - dies ist ein Unfall und es ist nicht bekannt, welche Bedeutung Kolya in sie legt, da seine innere Bedeutung nur fĂŒr sich selbst zugĂ€nglich ist. A priori gibt es keine Kriterien, um Kolyas Gedanken und die entsprechenden Handlungen des Instruments richtig zu verbinden. Und in dieser Angelegenheit bleibt es, sich ausschließlich auf Kolya selbst zu verlassen. Sein Verhalten ist willkĂŒrlich und nur er kann seine Motivation verstehen, wenn der Organisationsgrad seines Denkens zunimmt. In diesem Fall ist jedes rationale Schema zur Beantwortung von Kolyas Gedanken akzeptabel und produktiv. Die einzige Frage ist die relative Wirksamkeit der verschiedenen Schemata. Die grundlegende Option besteht darin, auf alle grammatikalisch korrekten Fragmente zu antworten, auch wenn sie inhaltlich absurd sind. Im Allgemeinen muss alles, was in die ursprĂŒngliche Codierung konvertiert werden kann, transformiert und umgesetzt werden. Und so weiter, bis Kohl zu sinnvollen Reaktionen „weise“ wurde. Und natĂŒrlich wird das plastischste Modell der Umgebung mit einer großen Anzahl von Freiheitsgraden nĂŒtzlich sein. Das Medium wird in gewisser Weise zu Kolyas Körper.

Das Problem der begrenzten Rechenleistung . In Bezug auf den Rechenaufwand ist der Algorithmus schwer. Es ist klar, dass mehrere Dutzend Iterationen die gesamte Rechenleistung des Planeten erschöpfen werden. Wir können uns auf QuantengerĂ€te und die Tatsache verlassen, dass es ein Quantenanalogon des Algorithmus gibt, aber bisher gab es nur einen Ausweg: Statt eines enorm komplexen Gedankens denken Sie viele kleine und einfache Gedanken parallel. HierfĂŒr gibt es mehrere technische Tricks:

1. In der Phase der Komposition ist es nicht erforderlich, alle vielen Abstraktionen in das Ergebnis aufzunehmen. Damit der Algorithmus seine grundlegenden Eigenschaften beibehĂ€lt, reicht es aus, nur zwei unabhĂ€ngige resultierende Zeilen aus der Menge auszuwĂ€hlen. Das UnabhĂ€ngigkeitskriterium ist die Differenz der ersten Ziffern ungleich Null in der hierarchischen Nummerierung der Abstraktionsergebnisse. Wir wenden uns dem großartigen Beispiel zu, das unter dem Spoiler höher liegt. Alle Zeilen sind nach dem Prinzip von abcd nummeriert . Ein Zeilenpaar mit den Indizes a1.b1.c1.d1 ... , a2.b2.c2.d2 ... heißt unabhĂ€ngig, wenn a1 ≠ a2 . Dies bedeutet, dass es möglich ist, das gesamte Abstraktionsergebnis in unabhĂ€ngige Paare aufzuteilen und fĂŒr jedes Paar im nĂ€chsten Schritt einen eigenen Rechenzweig zu starten. DarĂŒber hinaus mĂŒssen nicht alle Ergebnisse der Abstraktion verwendet werden. Im Mindestfall können Sie nur ein Zeilenpaar auswĂ€hlen und den Rest verwerfen (unwiderruflich verlieren), und alle Denkprinzipien bleiben erhalten. Aufgrund der FĂ€higkeit, Ergebnisse zu verlieren, ist es möglich, eine zusĂ€tzliche Auswahlphase zu organisieren, in der auf rationale Weise, beispielsweise entsprechend der statistischen Signifikanz, Inhalte fĂŒr weitere Berechnungen ausgewĂ€hlt werden.

2. Der zweite Trick basiert auf der Annahme, dass der Inhalt umso weniger organisiert ist, je tiefer die Klammern in der Zeile platziert sind. Dementsprechend ist der Inhalt „Popup“ als Ergebnis der Klammerung in Bezug auf die internen Bedeutungen von Kolya organisierter und abstrakter, was bedeutet, dass tiefe Verschachtelungsebenen entfernt werden können. Somit nimmt der Rechenaufwand bei der nĂ€chsten Iteration exponentiell ab. In einem intuitiven Sinne können Sie mit diesem Verfahren nur den abstraktesten Teil des Denkens approximieren.

3. Durch die Parallelisierung zu vielen kleineren Zweigen werden die Berechnungen „breiter“. Diese Breite kann durch Auswahl nicht nur auf der Ebene einzelner Rechenzweige, sondern auch in der gesamten Anordnung paralleler Zweige absolut begrenzt werden. Dies kann ĂŒber einen gemeinsamen Pool fester GrĂ¶ĂŸe erfolgen, von dem aus jeder Zweig Linien fĂŒr die nĂ€chste Iteration zeichnet und dementsprechend die Ergebnisse ausgibt. Und fĂŒr Zeichenfolgen können Sie die zulĂ€ssige Verschachtelung von Klammern absolut begrenzen. Ein solcher kombinierter Ansatz wird dazu beitragen, das Wachstum des Rechenvolumens einzudĂ€mmen und zu regulieren.

Interpretation und Kommentar


Beweise . Es gibt keine Beweise und kann nicht sein. Jede Theorie des Denkens ist eine Frage der Definition. Der vorgestellte Algorithmus ist eine konstruktive Theorie des Denkens. Und deshalb ist er ein Axiom. Der Denkalgorithmus ist fĂŒr das Thema Denken apodiktisch erkennbar. Das Erkennen kann erleichtert werden, indem zunĂ€chst auf eine nicht konstruktive Axiomatik zurĂŒckgegriffen wird, die intuitiver ist, und dann die Übereinstimmung der Eigenschaften konstruktiver und nicht konstruktiver Definitionen gefunden wird.

Unkonstruktive Definition des Denkens . Denken ist keine algorithmische Produktion von Inhalten. In einem intuitiven VerstĂ€ndnis weisen nicht-algorithmische PhĂ€nomene die folgenden spezifischen Merkmale auf: UnabhĂ€ngigkeit, SpontaneitĂ€t, Einzigartigkeit, Selbstorganisation, WillkĂŒr, SubjektivitĂ€t, KomplexitĂ€t, fundamentale Unvorhersehbarkeit und Unsicherheit, das Fehlen konzeptioneller Barrieren und im weitesten Sinne eine inhĂ€rente und dauerhafte Möglichkeit grundlegender Neuheit. Alle aufgelisteten Merkmale sind dem beschriebenen Denkalgorithmus irgendwie inhĂ€rent. Obwohl die Kombination eines Algorithmus und nichtalgorithmischer Eigenschaften nicht intuitiv und auf den ersten Blick widersprĂŒchlich ist, gibt es tatsĂ€chlich keinen Widerspruch. Der Algorithmus stellt Inhalte mithilfe genau definierter algorithmischer Verfahren bereit. WĂ€hrend der Bereitstellung ist der Inhalt jedoch nicht algorithmisch organisiert. Angesichts der Entwurfsspezifikationen des Algorithmus ergeben sich nichtalgorithmische Eigenschaften bei der Organisation von Inhalten aus den eigenen internen, nichtalgorithmischen Eigenschaften des Inhalts selbst.

ZusÀtzliche Gesichtspunkte zum Algorithmus . Der Denkalgorithmus umfasst:

1. Konstruktive Umsetzung einer Metapher. Denken ist im Wesentlichen metaphorisch. Es gibt keine anderen Bedeutungen als bildlich (möglich). Im ĂŒbertragenen Sinne sind jedoch wörtliche Bedeutungen (Algorithmen) möglich.
2. Selbstorganisationsmodell des absoluten Chaos. Ein Modell konzeptioneller SpontanitÀt.
3. Ein Modell völlig unabhÀngigen, subjektiv motivierten Verhaltens. Modell der KreativitÀt.
4. Selbstorganisierende Sprache.
5. Das Modell der konstruktiven Approximation fĂŒr nichtkonstruktive, rein mögliche Semantik.

Bewusstsein Die Frage des Bewusstseins wird auch auf der Ebene der Definition gelöst. Bewusstsein ist etwas, das jenseits jeglicher konzeptioneller Grenzen liegt. Im Lichte dieser Definition kann man nur mehr oder weniger komplizierte Geschichten ĂŒber das Bewusstsein vergiften, von denen jede einige Möglichkeiten des Bewusstseins widerspiegelt, aber keine davon wird wahr sein. Gleichzeitig haben Bewusstseinsgeschichten unterschiedliche heuristische Potenziale. Von allen Geschichten sind diejenigen, die schwieriger sind, nĂŒtzlicher. Aus der Sicht von Algorithmen ist Bewusstsein ein transalgorithmisches, unendlich komplexes (oder einfach - komplexes) Objekt. Eine Geschichte des Bewusstseins kann unter Verwendung eines Algorithmus aufgezeichnet werden. Es klingt so:

lim n → ∞ [t n + 1 = Zusammensetzung [ Abstraktion [ Abzug [t n ]]]; t 0 = s; t n , s ∈ S ; n ∈ N.

Source: https://habr.com/ru/post/de440424/


All Articles