Artikel ini menguraikan algoritma untuk berpikir dan kesadaran. Saya menawarkan jawaban saya untuk pertanyaan tentang cara kerja berpikir dan kesadaran. Dan saya mendemonstrasikan suatu algoritma yang dapat benar-benar, berpikir kreatif dan memiliki kesadaran nyata. Artikel ini ditujukan untuk programmer dan terdiri dari dua bagian utama. Bagian pertama adalah murni teknis, berisi deskripsi algoritma, daftar propertinya dan contoh aplikasi praktis. Bagian kedua berisi tesis penjelasan dan solusi untuk pertanyaan aksioma kesadaran konstruktif. Algoritme adalah teks yang bermakna yang berbicara sendiri, dan oleh karena itu hanya akan ada komentar minimum yang diperlukan secara praktis.
Deskripsi algoritma
Deskripsi algoritma dibuat dalam formalisme matematis buatan sendiri sesuai dengan prinsip "top-down", yaitu, pertama final, catatan abstrak diberikan, dan kemudian algoritma dianalisis untuk bagian-bagian dalam urutan di mana panggilan dibuat dan komentar diberikan. Jadi, algoritma "assembled" adalah fungsi rekursif dari bentuk berikut:
t n + 1 = komposisi [ abstraksi [ pengurangan [t n ]]]; t 0 = s; t n , s β S ; n β NPerhitungan fungsi ini adalah berpikir. Seperti yang Anda lihat, tiga operator muncul dalam catatan:
komposisi [] ,
abstraksi [] ,
deduksi [] ; ada juga: variabel seed
s β S , himpunan baris dari bentuk khusus
S dan nomor langkah
n β N. Selanjutnya, kami mempertimbangkan secara rinci setiap suku cadang. Kita mulai dengan himpunan
S dan elemen-elemennya.
Untuk menentukan himpunan
S, perlu untuk menentukan sintaks di mana unsur-unsur himpunan ini akan ditulis. Elemen himpunan
S akan disebut string. Setiap baris dalam
S terdiri dari hierarki tanda kurung "(", ")", dan pengidentifikasi karakter sewenang-wenang dituliskan di dalam tanda kurung. Untuk menghindari penggunaan istilah "pengidentifikasi", karena mungkin diperlukan untuk tujuan lain, pengidentifikasi simbolis di dalam tanda kurung akan disebut "mnemonik". Setiap mnemonik ditulis dalam karakter Latin "A - z". Mnemonik di dalam kurung dapat dipisahkan dengan koma ",". Jika panjang mnemonik diperbaiki, yang ditentukan secara terpisah, pemisah tidak diatur. Mnemonik hanya ditulis di dalam tanda kurung. Garis mungkin berisi tanda kurung bersarang. Hirarki tanda kurung dalam string bersifat arbitrer, tetapi harus ada braket penutup untuk setiap braket pembuka. Dalam artikel ini, saya hanya akan menggunakan huruf kecil alfabet Latin untuk menulis mnemonik, dan panjang mnemonik akan diperbaiki, satu huruf sesuai dengan satu mnemonik, saya tidak meletakkan karakter pemisah. Contoh garis:
() β‘ β
adalah string kosong.
(a) - string yang berisi satu mnemonik β
a β.
(aa) - string yang berisi dua instance dari mnemonik β
a β.
(ab) adalah string yang berisi dua mnemonik "
a " dan "
b ".
((a) (a)) - baris berisi dua salinan mnemonik "
a " dan tingkat tanda kurung bersarang.
Kurung tertutup, bersama dengan isinya, serta mnemonik individu, kadang-kadang akan disebut "komponen string", dalam kasus di mana generalisasi yang sesuai diperlukan. Misalnya, baris
((a) ab) berisi empat komponen, di antaranya: dua komponen "
a ", satu komponen "
(a) " dan satu komponen "
b ".
Rekaman string yang cocok dengan permutasi komponen dalam string dianggap identik. Contoh garis identik:
(ab) β‘ (ba) .
((a) (b)) β‘ ((b) (a)) .
(abc) β‘ (bac) β‘ (cba) β‘ (acb) β‘ (bca) β‘ (cab) .
((a) (ab)) β‘ ((a) (ba)) β‘ ((ab) (a)) β‘ ((ba) (a)) .
Garis dapat berisi sejumlah komponen yang identik dan berulang, dan dalam hal ini, catatan yang lebih pendek dimungkinkan menggunakan indeks pengulangan, yang ditempatkan sebelum komponen di sebelah kiri, tanpa pemisah. Contoh:
(aa) β‘ (2a) .
(aabb) β‘ (2a2b) .
((a) (a)) β‘ (2 (a)) .
((aa) (aa)) β‘ (2 (2a)) .
(aa (bb) (bb) (ccc) (ccc) (ccc)) β‘ (2a2 (2b) 3 (3c)) .
Dalam kasus-kasus di mana string berisi komponen kosong, misalnya,
(a ()) ,
(a () () (b)), identitas menahan:
(a ()) β‘ (a) ,
(a () () (b )) β‘ (a (b)) , yaitu komponen kosong dibuang.
Definisi Set
S terdiri dari semua string yang mungkin memenuhi kriteria sintaksis di atas, termasuk string kosong.
Operator deduksi, abstraksi, dan komposisi didefinisikan pada himpunan
S. Argumen operator ditunjukkan dalam tanda kurung siku
[] , karena tanda kurung disediakan untuk sintaksis string. Istilah "operator" identik dengan istilah "fungsi".
Operator pengurang . Definisi
βs β S , deduksi k [s] β S , k β N , k> 1, deduksi [s] β deduksi 2 [s] . Mengambil string
s dari
S sebagai argumen. Akibatnya, mengembalikan string dari
S. Aksi Kali operator menggandakan setiap komponen string dan seluruh string. Struktur yang dihasilkan dibingkai oleh tanda kurung luar yang umum. Duplikasi dimulai dengan komponen yang paling dalam, dalam hal bersarang. Seluruh baris digandakan terakhir. Untuk tujuan praktis langsung, sudah cukup bahwa
k = 2 , jadi saya mendefinisikan kasus khusus
deduksi [s] β deduksi 2 [s] . Penggunaan
deduksi [] menyiratkan bahwa
k = 2 , yaitu, sebagai hasil dari operator
deduksi [s] , semua komponen string
s menjadi dua kali lipat. Contoh:
deduksi [(a)] = ((aa) (aa)).
deduksi [(aa)] = ((aaaa) (aaaa))
deduksi [(ab)] = ((aabb) (aabb)).
deduksi [(a (b))] = ((aa (bb) (bb)) (aa (bb) (bb)))).
deduksi [((a) (b))] = (((aa) (aa) (bb) (bb)) ((aa) (aa) (bb) (bb)))).
deduksi [((a) (b (cc)))] = (((aa) (aa) (bb (cccc) (cccc)) (bb (cccc) (cccc))) ((aa) (aa) ( bb (cccc) (cccc)) (bb (cccc) (cccc)))))Operator abstraksi . Definisi
βs β S , abstraksi [s] β S. Mengambil string
s dari
S sebagai argumen. Sebagai hasilnya, ia mengembalikan banyak baris. Prinsip tindakan. Operator abstraksi membuat banyak garis dari garis sumber menggunakan operasi khusus - tanda kurung dari komponen yang identik. Pengoperasian bracketing hanya berlaku untuk braket bersarang yang berada pada level yang sama. Prinsip umum bracketing. Jika dalam kombinasi kurung yang terletak pada level yang sama, komponen yang sama berada di dalam kurung, maka setiap set komponen yang sama dapat diletakkan dalam kurung, dan komponen yang tetap utuh harus digabungkan di bawah kurung umum yang sama pada level yang sama. Pertimbangkan sebuah contoh. String
((ab) (ac)) . Pada baris ini, ada dua substring pada level yang sama:
(ab) dan
(ac) , di dalamnya terdapat mnemonik yang sama "
a ", mnemonik ini dapat dikeluarkan dari kurung dan hasilnya adalah
(a (bc)) . Seperti yang Anda lihat, mnemonik sisa "
b " dan "
c " digabungkan dalam tanda kurung umum. Pertimbangkan contoh yang kurang jelas. String
((aa) (aa)) berisi substring
(aa) dan
(aa) , dalam hal ini ada dua opsi yang berbeda untuk memadamkan kurung. Pada varian pertama, hanya satu mnemonik "
a " yang dapat dikeluarkan dari tanda kurung dari setiap substring, dan pada varian kedua, sekelompok mnemonik "
aa " dapat dikeluarkan. Mari kita pertimbangkan kedua opsi secara lebih rinci.
Opsi pertama, demonstrasi langkah demi langkah:
- Langkah satu, pilih ( merah ) apa yang harus diambil ((a) (a)) .
- Langkah dua, buat yang dipilih ( a (... a) (... a)) .
- Langkah ketiga, gabungkan sisanya dalam tanda kurung umum ( a (... a ... a)) .
- Hasil (a (aa)) .
Opsi kedua, dalam langkah-langkah:
- Langkah satu, pilih apa yang harus diambil (( aa ) ( aa )) .
- Langkah dua, buat yang dipilih ( aa (...) (...)) .
- Langkah ketiga, gabungkan sisanya dalam tanda kurung umum ( aa (...)) .
- Langkah keempat, buang komponen kosong ( aa ) .
- Hasil (aa) .
Mari kita tambahkan contohnya. Biarkan diberi string
((aa) (aab) (aab)) , ia memiliki tiga substring yang terletak di tingkat yang sama:
(aa) ,
(aab) ,
(aab) , ketiganya memiliki konten yang sama. Aturan tanda kurung tidak mengharuskan kita untuk melakukan operasi untuk ketiga substring sekaligus. Untuk operasi mempertaruhkan, Anda dapat memilih grup substring apa saja.
Dalam hal ini, ada tiga opsi yang tidak identik untuk pengelompokan substring:
- (aa), (aab) .
- (aab), (aab) .
- (aa), (aab), (aab) .
Kami melakukan semua pernyataan yang mungkin untuk masing-masing opsi pengelompokan, langkah demi langkah.
Pengelompokan
(aa) ,
(aab) . String
((aa) (aab) (aab)) .
Opsi pertama:
- Pilih konten ((a) (a) (a)) .
- Kami mengambil ( a (... a) (... ab) (aab)) .
- Gabungkan ( a (... a ... ab) (aab)) .
- Hasil No. 1 (a (aab) (aab)) .
Opsi kedua:
- Pilih konten (( aa ) ( aa b) (aab)) .
- Kami mengambil ( aa (...) (... b) (aab)) .
- Gabungkan ( aa (... b) (aab)) .
- Hasil No. 2 (a (b) (aab)) .
Pengelompokan
(aab) ,
(aab) . String
((aa) (aab) (aab)) .
Opsi pertama:
- Pilih konten ((aa) ( a ab) ( a ab)) .
- Kami mengambil ((aa) a (... ab) (... ab)) .
- Gabungkan ((aa) a (... ab ... ab)) .
- Hasil No. 3 (a (aa) (aabb)) .
Opsi kedua:
- Pilih konten ((aa) ( aa b) ( aa b)) .
- Kami mengambil ((aa) aa (... b) (... b)) .
- Gabungkan ((aa) aa (... b ... b)) .
- Hasil No. 4 (aa (aa) (bb)) .
Opsi ketiga:
- Pilih konten ((aa) (a ab ) (a ab )) .
- Kami mengambil ((aa) ab (... a) (... a)) .
- Gabungkan ((aa) ab (... a ... a)) .
- Hasil No. 5 (ab (aa) (aa)) .
Opsi keempat:
- Pilih konten ((aa) (aa b ) (aa b )) .
- Kami mengambil ((aa) b (... aa) (... aa)) .
- Gabungkan ((aa) b (... aa ... aa)) .
- Hasil No. 6 (b (aa) (aaaa)) .
Opsi kelima:
- Pilih konten ((aa) ( aab ) ( aab )) .
- Kami mengambil ((aa) aab (...) (...)) .
- Gabungkan ((aa) aab (...)) .
- Hasil No. 7 (aab (aa)) .
Pengelompokan
(aa) ,
(aab) ,
(aab) . String
((aa) (aab) (aab)) .
Opsi pertama:
- Pilih konten (( a ) (a) (a)) (a)
- Kami mengambil ( a (... a) (... ab) (... ab)) .
- Gabungkan ( a (... a ... ab ... ab)) .
- Hasil No. 8 (a (aaabb)) .
Opsi kedua:
- Pilih konten (( aa ) ( aa b) ( aa b)) .
- Kami mengambil ( aa (...) (... b) (... b)) .
- Gabungkan ( aa (... b ... b)) .
- Hasil No. 9 (aa (bb)) .
Tindakan operator abstraksi . Seperti yang Anda lihat dari contoh, untuk baris asli
((aa) (aab) (aab)), ada sembilan opsi berbeda untuk meletakkan sesuatu dari kurung, dan sembilan baris yang dihasilkan sesuai dengan opsi ini. Ini adalah bagaimana operator abstraksi bertindak - iterasi atas semua opsi yang memungkinkan untuk menempatkan tanda kurung dan membangun set baris yang sesuai dari hasil yang dihasilkan. Selain itu, operator abstraksi mencari opsi untuk melakukan tidak hanya di jalur sumber, tetapi juga di semua jalur hasil yang dihasilkan. Dengan kata lain, operator abstraksi diterapkan secara rekursif untuk hasilnya, dan seterusnya sampai semua opsi yang mungkin habis. Untuk alasan yang jelas, untuk setiap baris terakhir, jumlah opsi penghapusan yang mungkin juga terbatas.
Mari kita kembali ke contoh sebelumnya. Dalam contoh yang dipertimbangkan, saya tidak menulis semua opsi yang mungkin, tetapi hanya sembilan buah dari tingkat pertama. Untuk mengilustrasikan efek penuh dari operator abstraksi, perlu untuk membangun semua opsi untuk memadamkan kurung untuk masing-masing dari sembilan hasil yang diperoleh sebelumnya. Kami akan menuliskan semua opsi, tetapi dengan cara yang lebih ringkas.
Hasil No. 1
(a (aab) (aab)) :
1.1.
(a ( a ab) ( a ab)) => ( a (aabb)) .
1.2.
(a ( aa b) ( aa b)) => ( aa (bb)) .
1.3.
(a (a ab ) (a ab )) => (a ab (aa)) . * No. 7
1.4.
(a ( aab ) ( aab )) => ( aab ) .
1.5.
(a (aa b ) (aa b )) => (a b (aaaa)) .
Hasil No. 2
(a (b) (aab)) :
2.1.
(a ( b ) (aa b )) => (a b (aa)) .
Hasil No. 3
(a (aa) (aabb)) :
3.1.
(a ( a ) ( a abb)) => ( a (aabb)) . * No. 1.1
3.2.
(a ( aa ) ( aa bb)) => ( aa (bb)) . * No. 1.2
Hasil No. 4
(aa (aa) (bb)) .
Hasil No. 5
(ab (aa) (aa)) :
5.1.
(ab ( a ) (a)) => ( a ab (aa)) . * No. 7, * No. 1.3
5.2.
(ab ( aa ) ( aa )) => ( aa ab) . * Tidak. 1.4
Hasil No 6
(b (aa) (aaaa)) :
6.1.
(b ( a ) (aaa))) => ( a b (aaaa)) . * No. 1.5
6.2.
(b ( aa ) ( aa aa)) => ( aa b (aa)) . * No. 7, * No. 1.3, * No. 5.1
Hasil No. 7
(aab (aa)) .
Hasil No. 8
(a (aaabb)) .
Hasil No. 9
(aa (bb)) .
Tanda bintang menunjukkan opsi yang diulang. Hanya variasi unik yang dimasukkan dalam hasil abstraksi. Dalam contoh yang diuraikan, ada empat belas garis hasil yang unik. Total:
abstraksi [((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))
}Untuk kejelasan, pertimbangkan beberapa contoh lagi.
String
((a (b)) (a (b))) . Opsi parenthesis. Iterasi pertama:
(( a (b)) ( a (b))) => ( a ((b) (b)))) , hasil No. 1.
((a (b) ) (a (b) )) => ( (b) (aa)) , hasil No. 2.
(( a (b) ) ( a (b) )) => ( a (b) ) , hasil No. 3.
Pada hasil pertama, satu keputusan lagi dapat dibuat. Iterasi kedua:
(a (( b ) ( b ))) => (a ( b )) , hasil No. 1.2 bertepatan dengan hasil No. 3.
Total:
abstraksi [((a (b)) (a (b)))] = {(a ((b) (b))), ((b) (aa)), (a (b))}Contoh yang bagus:abstraksi [ deduksi [(a (b))]] = abstraksi [((aa (bb) (bb)) (aa (bb) (bb)))] =>
1. ((aa ( b b) ( b b)) (aa (bb) (bb))) => ((aa b (b)) (aa (bb) (bb)))) .
1.1. ((ab (b)) ( a (bb) (bb))) => ( a (aab (b) (bb) (bb))) .
1.1.1. (a (aab ( b ) ( b b) (bb))) => (a (aab b (b) (bb)))) .
1.1.1.1. (a (aabb ( b ) ( b b))) => (a (aabb b (b))) .
1.1.2. (a (aab ( b ) ( b b) ( b b))) => (a (aab b (bb))) .
1.1.3. (a (aab (b) ( b b) ( b b))) => (a (aab b (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 ) ( b b))) => (aa (bb b (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 ) ( b b))) => (aa (bb b (b))) .
1.2.4. (aa (b (b) ( bb ) ( bb ))) => (aa (b bb (b))) .
1.3. ((aab (b)) (aa ( b b) ( b b))) => ((aab (b)) (aa b (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 ) ( b b))) => (aa (bb b (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))) => (( bb aa) (aa (bb) (bb)))) .
2.1. ((aabb) (aa ( b b) ( b b))) => ((aabb) (aa b (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. (( abb ) ( abb (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. (( 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. ((abb) ( 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 ( b b) ( b b))) => (aa (bb b (bb))) .
2.4.2. (aa (bb ( bb ) ( bb ))) => (aa (bb bb )) .
3. (( a (bb) (bb)) ( a (bb) (bb))) => ( a (aa (bb) (bb) (bb) (bb) (bb))) .
3.1. (a (aa ( b b) ( b b) (bb) (bb))) => (a (aa b (bb) (bb) (bb))
3.1.1. (a (aab ( b b) ( b b) (bb))) => (a (aab b (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 ( b b) ( b b) ( b b))) => (a (aab b (bbb)))) .
3.1.3. (a (aab ( bb ) ( bb ) (bb))) => (a (aab bb (bb))) .
3.1.4. (a (aab ( bb ) ( bb ) ( bb ))) => (a ( bb aab)) .
3.2. (a (aa ( bb ) ( bb ) (bb) (bb))) => (a ( bb aa (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 ( b b) ( b b) ( b b) (bb))) => (a (aa b (bbb) (bb)))) .
3.3.1. (a (aab ( b bb) ( b b))) => (a (aab b (bbb))) .
3.3.2. (a (aab ( bb b) ( bb ))) => (a (aab bb (b))) .
3.4. (a (aa ( b b) ( b b) ( b b) ( b b))) >> (a (aa b (bbbb)))) .
3.5. (a (aa ( bb ) ( bb ) ( bb ) (bb))) => (a ( bb aa (bb)))) .
3.6. (a (aa ( bb ) ( bb ) ( bb ) ( bb ))) => (a ( bb aa)) .
4. (( aa (bb) (bb)) ( aa (bb) (bb))) => ( aa ((bb) (bb) (bb) (bb) (bb))) .
4.1. (aa (( b b) ( b b) (bb) (bb))) => (aa ( b (bb) (bb) (bb))) .
4.1.1. (aa (b ( b b) ( b b) (bb))) => (aa (b b (bb) (bb)))) .
4.1.1.1. (aa (bb ( b b) ( b b))) => (aa (bb b (bb))) .
4.1.1.2. (aa (bb ( bb ) ( bb ))) => (aa (bb bb )) .
4.1.2. (aa (b ( b b) ( b b) ( b b))) => (aa (b b (bbb)))) .
4.1.3. (aa (b ( bb ) ( bb ) (bb))) => (aa (b bb (bb))) .
4.1.4. (aa (b ( bb ) ( bb ) ( bb ))) => (aa (b bb )) .
4.2. (aa (( bb ) ( bb ) (bb) (bb))) => (aa ( bb (bb) (bb)))) .
4.2.1. (aa (bb ( b b) ( b b))) => (aa (bb b (bb))) .
4.2.2. (aa (bb ( bb ) ( bb ))) => (aa (bb bb )) .
4.3. (aa (( b b) ( b b) ( b b) (bb))) => (aa ( b (bbb) (bb)))) .
4.3.1. (aa (b ( b bb) ( b b))) => (aa (b b (bbb))) .
4.3.2. (aa (b ( bb b) ( bb ))) => (aa (b bb (b))) .
4.4. (aa (( b b) ( b b) ( b b) ( b b))) >> (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 ( b b) ( b b))) => ((bb) (aaaa b (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 (bb) (bb)) (a (bb) (bb))) => ( a (bb) (aa (bb) (bb))) .
7.1. (a (bb) (aa ( b b) ( b b))) => (a (bb) (aa b (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) (( b b) ( b b))) => (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 (bb) (bb) ) (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 )) => ( bb ) .
Dari daftar baris hasil (di sebelah kanan panah) di atas, Anda harus memilih semua yang unik, dan kumpulan baris unik ini akan menjadi hasil abstraksi [((aa (bb) (bb) (bb)) (aa (bb) (bb))]] . Saya tidak akan menulis baris yang unik, karena ini tidak akan menambah apa pun pada penjelasannya. Di bawah ini, ketika mempertimbangkan optimasi dan penggunaan praktis dari algoritma, saya akan merujuk pada contoh ini.
Operator komposisi . Definisi
βU β S , U β β
, komposisi [U] β β
, komposisi [U] β S. Ia menerima banyak jalur input, dan mengembalikan satu baris. Aksi Operator menyiapkan konten untuk iterasi algoritma berikutnya. Setelah tindakan operator abstraksi, banyak garis muncul, dan pada tahap komposisi, pemilihan dan rangkaian garis untuk iterasi algoritma berikutnya terjadi. Secara lebih rinci saya akan mempertimbangkan masalah ini di bagian optimasi dan penggunaan praktis. Dalam kasus yang paling sederhana, operator komposisi melakukan penggabungan sederhana dari semua hasil abstraksi. Jadi kami mendefinisikannya. Contoh:
komposisi [ abstraksi [((a (b)) (a (b)))]] = komposisi [{(a ((b) (b))), ((b) (aa)), (a ( b))}] = ((a ((b) (b))) ((b) (aa)) (a (b))) .
Properti Algoritma
Algoritma menghasilkan string. Himpunan semua garis yang terbentuk sebagai hasil dari operasi iteratif dari algoritma akan disebut "output algoritma" atau hanya "output". Definisi inferensi.
T s β {t n | t n + 1 = komposisi [ abstraksi [ pengurangan [t n ]]]; t 0 = s; t n , s β S ; n β N }. Ts adalah output untuk benih
s . Dalam kasus di mana
T adalah tanpa parameter, kita berbicara tentang kesimpulan dari benih apa pun. Properti inferensi:
βs, e β S , s β β
, e β β
, s β e, T s β© T e = β
. Ini berarti bahwa setiap elemen keluaran sesuai secara unik dengan seed. Hasilnya, kesimpulannya unik untuk setiap benih.
Interpretasi yang berarti tentang deduksi dan abstraksi . Arti fisik dari operator deduksi adalah sebagai berikut. Dari garis asli, dengan cara universal, operator deduksi menciptakan objek konstruktif yang secara fundamental baru dengan properti internal yang secara fundamental baru dan lebih kompleks. Dalam perkiraan intuitif, kita dapat mengatakan bahwa deduksi menambah informasi baru secara kualitatif. Pada gilirannya, operator abstraksi mem-parsing objek baru menjadi bagian-bagian dan dengan demikian mengekspresikan informasi yang ditambahkan pada tahap deduksi dalam persamaan yang konstruktif. Anda mungkin memperhatikan bahwa sebagai akibat dari prosedur memadamkan kurung, informasi hilang. Terlebih lagi, untuk sintaksis ini, menempatkan kurung adalah cara universal untuk kehilangan informasi secara bermakna tanpa adanya data a priori tentang nilai string. Yaitu, dari sudut pandang algoritma, semua opsi yang mungkin untuk kehilangan informasi yang dihitung pada tahap abstraksi, pada kenyataannya, adalah nilai dari garis. Jadi, pada setiap langkah, algoritma menciptakan heuristik sintaksis yang baru dan unik. Dan setiap heuristik berikutnya secara fundamental lebih kompleks dan lebih substansial daripada yang sebelumnya. Pada setiap iterasi algoritma, pengetahuan baru muncul.
Aplikasi praktis
Algoritme adalah "benda itu sendiri."
Dia berpikir, tetapi ini adalah pemikiran "alien". Untuk mendapatkan manfaat praktis dari pemikiran alien, Anda perlu menemukan bahasa yang sama dengannya. Di satu sisi, diperlukan untuk melatih orang asing, dan di sisi lain, untuk belajar memahaminya, pada akhirnya, untuk membangun komunikasi yang bermakna. Secara umum, paradigma interaksi dengan algoritma ini mirip dengan prinsip interaksi yang terkenal dengan "kotak hitam". Selanjutnya, untuk kenyamanan yang lebih besar, saya akan menyebut algoritma pemikiran itu alien Kohl.Pertimbangkan kasus yang ideal. Misalkan kita memiliki kekuatan komputasi yang tidak terbatas yang dapat kita gunakan dan kita mampu menghitung sejumlah iterasi pemikiran Kolya tanpa khawatir tentang masalah optimisasi. Dalam hal ini, bahan-bahan berikut akan diperlukan untuk berinteraksi dengan Kolya:- Model digital dari lingkungan interaktif yang makna aktivitasnya diketahui.
- Model digital alat yang dapat memengaruhi lingkungan.
- Encoding algoritma untuk sinyal encode dari lingkungan string S .
- Algoritma decoding yang entah bagaimana akan fuzzy, tetapi secara rasional dibenarkan untuk memecahkan kode garis yang sebelumnya tidak diketahui dari S dan mengubahnya menjadi sinyal untuk instrumen.
Memiliki komponen seperti itu, dimungkinkan untuk mengatur skema pembelajaran universal dengan motivasi yang tidak diketahui, yang akan memungkinkan mengadaptasi pemikiran Kolya ke lingkungan. Di bawah ini adalah kode semu.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()); }
Sirkuit umpan balik . Awalnya, Kolya tidak punya pikiran. Pikiran pertama Kolya adalah kondisi awal medium yang disandikan. Pada setiap iterasi, sinyal eksternal dituangkan ke dalam pemikiran Kolya. Setelah itu Kolya berpikir selama waktu pemaparan. Hasil pemikiran diterjemahkan dan dikirim ke alat. Pada gilirannya, tindakan alat tersebut entah bagaimana mengubah keadaan lingkungan. Dan semuanya terulang lagi. Seiring waktu, pemikiran Kolya akan beradaptasi dengan lingkungan dan dia akan mulai menunjukkan tanda-tanda perilaku yang sangat terorganisir dan termotivasi secara subyektif. Namun, motivasi Kolya akan tetap tidak diketahui. Untuk memahami motivasinya, pada tahap pelatihan berikutnya, perlu dilakukan eksperimen, yaitu, dengan sengaja mengubah lingkungan dan mempelajari reaksi Kolya terhadap perubahan. Jika mungkin untuk menggambarkan perilaku eksternal yang diinginkan dari Kolya dalam hal beberapa fungsi obyektif, maka proses pembelajaran dapat diotomatisasi, misalnya, menggunakan algoritma genetika.
Masalah decoding . Penting untuk men-decode pemikiran Kolya untuk mensintesis sinyal untuk instrumen. Kesulitannya adalah bahwa setiap pemikiran, seperti yang saya sebutkan di bagian sebelumnya, adalah desain yang secara fundamental baru. Artinya, seorang peneliti hipotetis tidak pernah dapat sepenuhnya memahami isi pikiran Kolya. Bagian dari konten yang dihasilkan oleh pemikiran Kolya, tidak peduli berapa banyak yang dipelajari, akan selamanya menjadi sesuatu yang sama sekali tidak jelas. Hanya beberapa fragmen pemikiran yang sangat terorganisir yang dapat diakui secara bermakna, dan ini merupakan batasan mendasar dan tidak dapat diatasi dalam komunikasi dengan Kolya. Namun secara praktis, pembatasan ini tidak mendasar. Karena, pertama, seseorang dapat secara tak terbatas menentukan sisi yang bermakna dari pemikiran Kolya, dan kedua, tidak perlu untuk sepenuhnya memahami Kolya. Cukuplah untuk mengembangkan bahasa umum di mana Anda dapat menjelaskan tentang masalah-masalah praktis. Dari sudut pandang teknis, situasinya adalah sebagai berikut. Sinyal yang masuk menggambarkan kondisi medium dikodekan dalam beberapa bahasa. Pernyataan kata dan bahasa adalah string dari
S. Bahasa ini memiliki kosakata, sintaksis, dan semantiknya sendiri. Konten dari setiap iterasi pemikiran sesuai dengan kriteria tata bahasa akan dibagi menjadi beberapa kategori:
1. Fragmen dengan kosakata yang tidak diketahui.
2. Sintaks tidak dikenal.
3. Semantik tidak dikenal.
4. Fragmen yang benar secara tata bahasa dan semantik.
Konten dari semua kategori ini sewenang-wenang sesuai dengan metode terjadinya. Yaitu, bahkan dalam kasus fragmen tata bahasa yang benar - ini adalah kecelakaan dan tidak diketahui apa artinya Kolya memasukkannya, karena makna batinnya hanya dapat diakses oleh dirinya sendiri. A priori, tidak ada kriteria untuk menghubungkan dengan benar pemikiran Kolya dan tindakan yang sesuai dari instrumen. Dan dalam hal ini tetap bergantung hanya pada Kolya sendiri. Perilakunya berubah-ubah dan hanya dia yang bisa memahami motivasinya karena tingkat organisasi dari pemikirannya akan meningkat. Dalam hal ini, skema rasional apa pun untuk merespons pemikiran Kolya akan dapat diterima dan produktif, satu-satunya pertanyaan adalah efektivitas relatif dari berbagai skema. Pilihan dasar adalah untuk menanggapi semua fragmen yang benar secara tata bahasa bahkan jika mereka tidak masuk akal dalam konten. Secara umum, segala sesuatu yang dapat dikonversi menjadi istilah pengkodean asli harus diubah dan bereaksi. Dan seterusnya sampai Kohl βsadarβ akan reaksi yang berarti. Dan tentu saja, model lingkungan yang paling plastis dengan derajat kebebasan yang besar akan bermanfaat. Mediumnya, dalam beberapa cara, akan menjadi tubuh Kolya.
Masalah daya komputasi yang terbatas . Dalam hal jumlah komputasi, algoritma ini berat. Jelas, beberapa lusin iterasi akan menghabiskan seluruh daya komputasi planet ini. Kita dapat mengandalkan perangkat kuantum dan fakta bahwa ada analog kuantum algoritma, tetapi sejauh ini hanya ada satu jalan keluar: alih-alih satu pemikiran yang sangat kompleks, pikirkan banyak pikiran kecil dan sederhana secara paralel. Ada beberapa trik teknis untuk ini:
1. Pada tahap komposisi, tidak perlu untuk memasukkan dalam semua hasil banyak abstraksi. Agar algoritma dapat mempertahankan sifat dasarnya, cukup untuk memilih dari himpunan hanya dua baris independen yang dihasilkan. Kriteria independensi adalah perbedaan bukan nol dari digit pertama dalam penomoran hierarkis dari hasil abstraksi. Kita beralih ke contoh yang bagus, yang lebih tinggi di bawah spoiler. Semua baris diberi nomor sesuai dengan prinsip
abcd .. Sepasang garis dengan indeks
a1.b1.c1.d1 ... ,
a2.b2.c2.d2 ... disebut independen jika
a1 β a2 . Dan ini berarti bahwa adalah mungkin untuk membagi seluruh hasil abstraksi menjadi pasangan independen dan untuk masing-masing pasangan pada langkah berikutnya, mulailah cabang komputasi sendiri. Selain itu, tidak perlu menggunakan semua hasil abstraksi. Dalam kasus minimum, Anda hanya dapat memilih satu pasang garis, dan membuang sisanya (kehilangan yang tidak dapat ditarik kembali) dan semua prinsip pemikiran akan dipertahankan. Mengingat kemampuan untuk kehilangan hasil, dimungkinkan untuk mengatur tahap seleksi tambahan, di mana, dalam beberapa cara rasional, misalnya, sesuai dengan signifikansi statistik, untuk memilih konten untuk perhitungan lebih lanjut.
2. Trik kedua didasarkan pada asumsi bahwa semakin dalam kurung diletakkan di garis, semakin tidak terorganisir konten yang dikandungnya. Dengan demikian, konten "pop-up" sebagai akibat dari tanda kurung lebih terorganisir dan abstrak dari sudut pandang makna internal Kolya, yang berarti bahwa tingkat sarang yang dalam dapat dihilangkan. Dengan demikian, jumlah perhitungan pada iterasi berikutnya menurun secara eksponensial. Dalam arti intuitif, prosedur ini memungkinkan Anda untuk mendekati hanya bagian pemikiran yang paling abstrak.
3. Sebagai hasil paralelisasi ke banyak cabang yang lebih kecil, perhitungan akan tumbuh βlebarβ. Lebar ini dapat benar-benar dibatasi oleh pemilihan tidak hanya pada tingkat cabang komputasi individual, tetapi juga di seluruh jajaran cabang paralel. Ini dapat dilakukan melalui kumpulan umum dari ukuran tetap, dari mana setiap cabang akan menggambar garis untuk iterasi berikutnya, dan, dengan demikian, di mana ia akan membuang hasilnya. Dan untuk string, Anda benar-benar dapat membatasi tingkat bersarang kurung. Pendekatan gabungan seperti itu akan membantu mengendalikan dan mengatur pertumbuhan volume perhitungan.
Interpretasi dan komentar
Bukti . Tidak ada bukti dan tidak mungkin. Setiap teori pemikiran adalah masalah definisi. Algoritma yang disajikan adalah teori pemikiran yang konstruktif. Dan karena itu dia adalah suatu aksioma. Algoritma berpikir secara apodik dikenali oleh subjek pemikiran. Pengakuan dapat difasilitasi dengan terlebih dahulu beralih ke aksioma non-konstruktif yang lebih intuitif, dan kemudian menemukan kebetulan dari sifat-sifat definisi konstruktif dan tidak konstruktif.
Definisi pemikiran yang tidak konstruktif . Berpikir bukanlah produksi konten algoritmik. Dalam pemahaman intuitif, fenomena non-algoritmik memiliki ciri-ciri spesifik berikut: kemandirian, spontanitas, keunikan, pengorganisasian diri sendiri, kesewenang-wenangan, subjektivitas, kompleksitas, ketidakpastian tak terduga dan ketidakpastian, tidak adanya hambatan konseptual dan dalam arti luas - kemungkinan yang melekat dan abadi dari kebaruan mendasar. Semua fitur yang tercantum entah bagaimana melekat dalam algoritma berpikir yang dijelaskan. Meskipun kombinasi dari suatu algoritma dan sifat nonalgorithmic tidak intuitif dan pada pandangan pertama bertentangan, pada kenyataannya tidak ada kontradiksi. Algoritme menyebarkan konten menggunakan prosedur algoritmik yang terdefinisi dengan baik, tetapi dalam proses penyebaran, konten memiliki organisasi non-algoritmik. Mengingat desain spesifik dari algoritma, sifat nonalgorithmic dalam organisasi konten berasal dari sendiri, internal, sifat nonalgorithmic konten itu sendiri.
Titik pandang tambahan pada algoritma . Algoritme berpikirnya adalah, termasuk:
1. Implementasi metafora secara konstruktif. Berpikir pada dasarnya adalah metaforis. Tidak ada arti lain selain kiasan (mungkin). Namun, dalam arti kiasan, makna literal (algoritma) dimungkinkan.
2. Model swadaya kekacauan absolut. Model spontanitas konseptual.
3. Model perilaku yang sepenuhnya independen, termotivasi secara subjektif. Model kreativitas.
4. Bahasa yang mengatur diri sendiri.
5. Model pendekatan konstruktif, untuk semantik non-konstruktif, murni mungkin.
Kesadaran Masalah kesadaran juga diselesaikan pada tingkat definisi. Kesadaran adalah sesuatu yang berada di luar batasan konseptual apa pun. Dalam terang definisi semacam itu, seseorang hanya dapat meracuni lebih banyak atau lebih sedikit cerita rumit tentang kesadaran, yang masing-masing akan merefleksikan beberapa kemungkinan kesadaran, tetapi tidak satu pun di antaranya yang benar. Pada saat yang sama, cerita tentang kesadaran memiliki potensi heuristik yang berbeda. Dari semua dongeng, yang lebih sulit lebih bermanfaat. Dari sudut pandang algoritma, kesadaran adalah objek trans-algoritmik, kompleks tanpa batas (atau sederhananya - kompleks). Kisah kesadaran dapat direkam menggunakan algoritma. Kedengarannya seperti ini:
lim n β β [t n + 1 = komposisi [ abstraksi [ pengurangan [t n ]]]]]; t 0 = s; t n , s β S ; n β N