از بازی زندگی کانوی تا گلایدرها، ماشین تورینگ و این سؤال که پیچیدگی واقعاً از کجا میآید

بعضی وقتها برای ساختن یک سیستم پیچیده، لازم نیست از اول همهچیز را پیچیده طراحی کنیم. شاید کافی باشد چند قانون ساده داشته باشیم و اجازه بدهیم بارها و بارها اجرا شوند؛ نتیجه ممکن است چیزی باشد که انتظارش را نداریم.
یکی از مثالهای جالب این موضوع، بازی زندگی کانوی است؛ آزمایشی ریاضی که جان کانوی طراحی کرد و مارتین گاردنر در اکتبر ۱۹۷۰ در مجلهی Scientific American معرفیاش کرد. با وجود قوانین بسیار سادهاش، به یکی از مثالهای شناختهشده در مطالعهی پیچیدگی، اتوماتای سلولی و محاسبات تبدیل شد.
اما چیزی که برای من جالب است صرفاً خود بازی نیست؛ این سؤال است که چطور از چند قانون ساده، رفتارهایی به وجود میآیند که در نگاه اول بسیار پیچیدهتر از خود قوانین به نظر میرسند.
بازیای که واقعاً بازی نیست
صفحهای شطرنجی و بسیار بزرگ را تصور کنید که هر خانهاش یکی از دو حالت را دارد: زنده یا مرده. هر خانه هشت همسایه دارد: افقی، عمودی و مورب.
قوانین بازی:
خانهی زنده با دو یا سه همسایهی زنده، زنده میماند؛ در غیر این صورت میمیرد.خانهی مرده با دقیقاً سه همسایهی زنده، زنده میشود؛ در غیر این صورت مرده میماند.
همین. نه هوش مصنوعی، نه یادگیری ماشین، نه الگوریتم پیچیده. در هر نسل، وضعیت همهی خانهها از روی نسل قبل محاسبه میشود و این فرایند تکرار میشود.
ولی همین چند قانون ساده قرار است چه بسازند؟
وقتی چند مربع سیاه شروع به حرکت میکنند
بعضی الگوها برای همیشه ثابت میمانند؛ مثل مربعی از چهار خانهی زنده. بعضی بین چند حالت جابهجا میشوند؛ مثل سه خانهی متوالی که میان وضعیت عمودی و افقی نوسان میکند (نوسانگر).
اما جالبترینها الگوهاییاند که انگار روی صفحه حرکت میکنند. معروفترینشان گلایدر است: الگویی کوچک که پس از چهار نسل، یک خانه بهصورت مورب جابهجا میشود — نه چون کسی دستور حرکتش را نوشته، بلکه بهخاطر تعامل همان خانهها با قوانین بازی.
حتی الگویی به نام تفنگ گلایدر گاسپر وجود دارد که مداوم گلایدر تولید میکند؛ بدون اینکه قانونی به نام «حرکت کن» یا «گلایدر بساز» به بازی اضافه شده باشد.
آیا یک صفحهی شطرنجی میتواند کامپیوتر باشد؟
اینجا ماجرا جالبتر میشود: بازی زندگی از نظر محاسباتی جهانشمول است؛ یعنی میتوان با آرایشهای مهندسیشدهی خانهها، محاسبات یک ماشین تورینگ را شبیهسازی کرد.
البته نه با چند مربع تصادفی؛ باید الگوهایی طراحی کرد که اطلاعات را منتقل کنند و عملیات محاسباتی انجام دهند. بااینحال نتیجه شگفتانگیز است: قوانینی که ظاهراً فقط دربارهی زنده ماندن چند خانهاند، میتوانند بستر محاسبات عمومی باشند.
این صرفاً برداشت فلسفی نیست؛ جهانشمولی محاسباتی بازی زندگی مطالعه شده است و حتی مقالهای در ۲۰۲۵ مسئلهی محاسبهی وضعیتهای قبلی آن را بررسی کرده. هرچند توانایی انجام محاسبات عمومی با این واقعیت فرق دارد که یک الگوی خاص واقعاً دارد محاسبه میکند.
پس پیچیدگی از کجا میآید؟
به نظرم این مهمترین بخش ماجراست.
ما معمولاً تصور میکنیم پشت هر سیستم پیچیده باید قوانین پیچیده یا طراحی دقیقی برای همهی حالتها باشد. ولی بازی زندگی مثال نقض جالبی است: قوانین محلی و سادهاند، هیچ خانهای کل صفحه را نمیبیند و هیچ مرکزی تصمیم نمیگیرد گلایدر کجا برود.
بااینحال وقتی همین قوانین روی هزاران خانه و در نسلهای متوالی اجرا میشوند، رفتارهایی در مقیاس بزرگ شکل میگیرند که از نگاه به یک خانه بهتنهایی دیده نمیشوند. به این میگویند رفتارهای نوظهور (Emergence): رفتارهایی که از تعامل اجزا به وجود میآیند.
این موضوع در پژوهشهای سیستمهای پیچیده هم بررسی شده؛ مثلاً مقالهای در Nature (۱۹۸۹) رفتار بلندمدت بازی زندگی را از دید خودسازماندهی مطالعه کرد. البته باید مراقب بود: شباهت یک مدل ریاضی به طبیعت به این معنی نیست که جهان واقعی دقیقاً با همین قوانین کار میکند.
اگر قوانین مشخصاند، نتیجه هم مشخص نیست؟
از نظر ریاضی، با دانستن وضعیت اولیه و قوانین، همهی نسلهای بعدی تعیین شدهاند؛ هیچ تصادفی در کار نیست.
اما مشخص بودن قوانین به معنی ساده بودن تحلیل نتیجه نیست. برای یک الگوی کوچک شاید بتوان نتیجه را پیشبینی کرد، ولی برای یک ساختار محاسباتی پیچیده ممکن است لازم باشد خود فرایند را اجرا و بررسی کنیم.
نکتهی مهم: پیچیدگی نتیجه الزاماً به معنی پیچیدگی قوانین نیست. (و البته نه هر سیستم پیچیدهای غیرقابلپیشبینی است، نه هر سیستم غیرقابلپیشبینیای پیچیده.)
آیا این یعنی داریم زندگی را شبیهسازی میکنیم؟
اسم بازی کمی گمراهکننده است. «زنده» و «مرده» فقط دو حالت تعریفشده در مدلاند؛ خبری از سلول واقعی، سوختوساز یا ژنتیک نیست.
بااینحال رفتارهای جالبی دیده میشود: ساختارهای پایدار، الگوهای متحرک و تعامل میان آنها. بهتر است بازی زندگی را نه شبیهسازی کامل حیات، بلکه آزمایشی ببینیم برای این سؤال: چطور اجزای ساده با تعامل محلی، ساختارهای پیچیدهتری میسازند؟
این تفاوت جزئی به نظر میرسد اما مهم است؛ نمیگذارد از یک شباهت جالب، نتیجهای بزرگتر از شواهد بگیریم.
چیزی که از بازی زندگی برای برنامهنویسی میماند
جذابیت بازی زندگی برای من فقط الگوهای متحرک یا محاسبات نیست؛ فاصلهی میان قوانین سیستم و رفتار نهایی آن است.
در پروژههای بزرگ گاهی وسوسه میشویم همهی رفتارهای آینده را از ابتدا طراحی کنیم، ولی در بعضی سیستمها بخش مهمی از رفتار از تعامل اجزایی میآید که هرکدام وظیفهی کوچکی دارند.
البته این به معنی کنار گذاشتن طراحی مهندسی نیست؛ برای رسیدن به الگوهای خاص گاهی به طراحی اولیهی بسیار دقیقی نیاز است. اما نکته این است: برای فهمیدن یک سیستم، شناختن تکتک اجزا کافی نیست؛ باید دید چطور با هم تعامل میکنند.
این موضوع برای الگوریتمها، سیستمهای توزیعشده، هوش مصنوعی و مدلسازی پدیدههای طبیعی هم ارزشمند است.
در نهایت، بازی زندگی ما را به پرسشی میرساند که پاسخش ساده نیست: چطور از قواعدی ابتدایی، ساختارهایی به وجود میآیند که در سطح بالاتر، رفتاری متفاوت از انتظار اولیه نشان میدهند؟ برای من این یکی از جذابترین بخشهای علوم کامپیوتر است: گاهی برای ساختن چیزی پیچیده، لازم نیست پیچیدگی را در تکتک اجزا بگذاری؛ گاهی باید قوانین مناسبی تعریف کنی و ببینی تعامل اجزا به کجا میرسد.
دوست دارم بدانم شما بازی زندگی کانوی را بیشتر یک سرگرمی ریاضی میبینید، یک مدل برای مطالعهی سیستمهای پیچیده یا نمونهای از قدرت محاسباتی سیستمهایی با قوانین ساده؟