جمعه، مهر ۱۱، ۱۳۹۹

کد اجرایی بودن DNA

دی ان آ DNA دارای توان پردازشی است. درست مثل کد نرم‌افزار است که در یک سخت افزار (سلول) اجرا می‌شود. اتفاقا این الهام بخش پیشرفت هایی از علوم کامپیوتر بوده. بله DNA رو میشه مثل کد متن برنامه اسمبلی در نظر گرفت. البته پیچیده تر از اسمبلی است چون RNA کد خودش را حین اجرا عوض میکند (ییشتر ریکانفیگوربل لاجیک است). یادم نیست در ابتدا چه کسی این دیدگاه رو گفته. اما این ایده کمابیش از ابتدای کشف DNA بوده. اما فرم کامل و دقیق این ادعا رو باید بیشتر جستجو کنم. اینجا توضیحات بیشتری پیدا کردم: https://mindmatters.ai/2018/10/a-computer-programmer-looks-at-dna/ این ایده اساسی ای است که ایده ی پایه و الهام بخش چند فیلد است: Genetic Programming (John Holland) DNA Computing (Adleman) در پاسخ به یک انتقاد: چرا میگید کد کامپیوتر توان پردازشی داره ولی کد DAN توان پردازشی نداره؟ کد برنامه در حافظه کامپیوتر هم پسیو است. تا وقتی در یک سخت افزار قرار بگیرد. در مورد ثابت بودن و نبودن: من هم گفتم کدش تغییر میکنه. ... کد dna تغییر نمیکنه مگر در اثر جهش. احتمالش کم است. ناچیز نیست. اما کم است. و بین دو نسل است. نکته ی DNA دوامش است. تقریبا همه سلولها کپی یکی هستند. (در حالت عادی....) مقدار زیادی مکانیزم های تصحیح خطا وجود دارد که DNA تغییر نکند. بعضی پترن های DNA از میلیاردها سال پیش بدون تغییر مانده اند. حتی بین نسل ها. ... میتونه عملکرد کد code رو داره. در اصطلاح، code به معنای برنامه ای است که اجرا میشود. طبق دیدگاه فون نویمان کد (برنامه احرا شونده) تفاوت ماهوی با دیتا (داده) ندارد. برنامه های کامپیوتری هم به صورت دیتا ذخیره میشوند. برای همین نام code به آنها داده اند. در حقیقت یعنی دیتا data هستند. چیزی که اونها (کد به مثابه دیتای فعال )رو از سایر دیتا ها (دیتای پسیو و منفعل) جدا میکنه اینه که توسط سخت‌افزار مناسب اجرا و نفسیر شوند. دیتا و داده تغییر میکند. حتی در کامپیوتر هم تغییر میکند (مثلا با اشعه کیهانی یا امسید شدن هارد دیسک). نام پدیده اش bitrot است. اما اون تغییر ها رو به حساب نمی آوریم. گاهی وفت ها میبینید فایلهای تصثیری هراب شده اند بخاطر پدیده های مشابه است. تفاوت ماهوی ندارند. در این حالت ها فایل رو دور یمریزیم یا برنامه را دوباره نصب میکنیم یا سی دی را دور میریزیم. این همان تصحیح خطا است. طبیعت (بیولوژی) هم‌مکانیزم های بسیار فراوان و متنوعی برای حفظ و تصحیح خطاها دارد. .... پرسش: منظور از کد بودنِ DNA اینه که سلول کدهای DNA رو می‌خونه تا بدونه که کی و چه جوری باید تکثیر بشه یا چه واکنشی به محیط اطرافش و اطلاعات دریافتیش بده؟ پاسخ: بله درسته. تا حدی مثل «کد اجرایی» در کامپیوتر است. البته سبکش با instruction ها ی cpu خیلی فرق داره. بخش های آنالوگ، فضایی، و نویزی و پر خطا دارد. اما مکانیزم هایی از اینترکشن سمبلیک بین بخشهای مختلف با state های مختلف است که بر یکدیگر اثر و اینترکشن از راه نسبتا دور دارند (که مانند پوینتر است) . مثلا یک ژن اکسپرس میشود و حاصلش که یک پروتئین است، اکسپرشن ژنی دیگر که دورتر از آن است را کم یا زیاد میکند: رگولیت میکند. اینها عملیات پایه ای تشکیل میدهن که اگر به یک برنامه نویس با تخیل بالا بدهید میتونه مسایلی که ماشین تورینگ حرکت میکنه رو باهاش حل کنه. عملگرهای پایه بین موجودات مختلف تا حد ربادی یکسان است (اصول یکسانی دارد که در ابتدای تکامل به این صورت در آمده اند). اما ارایش و نحوه ی اینترکشن آنها بین موجودات مختلف فرق دارد. پیچیدگی های زیادی دارد و احتمالا همه ی موارد پیچیدگی اش کشف نشده. در حال حاظر نمیتوان از یک DNA داده شده رفتار آن را بطو کامل پیش بینی کرد. (چون لازمه اش پیش بینی شکل پروتئین ها، شکل تا خوردن و خم شدن خود DNA، و اینکه از کجا خم میشود و کجایش به کجایش نزدیک میشود، و پیش بینی محل بسته شدن و باب شدن از هیستون ها و موارد بسیار دیگر است.). اما در درونش کاری شبیه کنترل و پردازش سیگنالها هم انجام میدهد و قابلیت عمل و عکس العمل برنامه ریزی شده (programmed) دارد (در کنار تولید پروتئین ها). تکه های برنامه تقریبا ژن ها هستند (شبیه ساب روتین ها) که باهم اینترکشن دارند. امکانات پایه (پس از ابسترکشن: عملکر های پایه) برای پترن مچینگ های دقیق وجود دارد (مثل پرولوگ و فانکشال ها). یکی از کنش های اصلی (خروجی عملیات مختلف) gene expression است. کنترل روی آن را رگولیشن میگویند. تکه ای از مکانیزمی که عمل معکوس اکسپرش را انجام میدهد repressor نام دارد. هر مجموعه ژن هایی که اکسپرس میشوند یک promoter دارند (که یاداور head در زبان LISP) است. عملگر های زیادی وجود دارد که کار not را انجام میدهند. و حاصل میتواند دوباره not می شود. شبکه ی اینترکشن احزا اگر ببینیم (با کمی ابسترکشن) مدارهایی تشکیل میدهند که پیجیدگ compositionality به دلخپاه بزرگ را دارند. این مدارها تا حدی شبیه مدار های منطقی هستند. اطلاعاتی که در این مدارهای ابسترکت حرکت میکنند از جنس پروتئین و mRNA و DNA و مولکولهای دیگر هستند. عمل های متنوع پردازش رشته انجام میشود. مچ کردن رشته ها، کپی شدن، بریدن و وصل کردن رشته ها (قیچی کردن)، که تپان ترکیبیاتی بالایی به آن میدهد. رشته پترن یک بعدی است. اما گاهی ارایش فضایی دو بعدی (نحوه خم شدن و پیچیدن) و یا ارایش فضایی پروتئینها مهم میشود. از پیچیدگی هایش، شکل فضایی پیجیده شدن یا باز شدن رشته DNA مهم است. که در کامپیوتر استفاده نمی‌شود. اما طراحی حاصل از ترکیب بدون محدودیت اجزا و شبکه ی اینترکشن که به دلخواه بتواند پیجیده شود، میتپاند تقریبا هر عملیات محاسباتی که یک کامپیوتر میتواند را انجام دهد. یعنی فراتر از finite state machine است. و شرایط لازم برای قدرت محاسباتی Turing machine را دارد. ممکن است تمایز کد و دیتا مانند کامپیوتر نباشد و این دو مفهوم در امیخته تر باشند. اما دلیلش این است که کامپیوتری دقیقا از نوع «کامپیوتر فون نویمانی» نیست (این عبارت دارد میگوید که کامپیوتر های غیر فون نویمانی هم کامپیوتر محسوب میشوند). کلا هر آنچه (هر قابلیتی که) یک کامپیوتر دارد را: «یک مجموعه ژنومی که داخل سیتوپلاسم قرار گرفته باشد» هم دارد. هرچند پیاده سازی آن متفاوت باشند. و این بر اساس برنامه ریزی ای است که قابل تغییر است و در رشته طولانی ای از دیتا انجام میشود، که به صورت «کد اجرایی» اجرا میشوند. این قابلیت برنامه ریزی میدهد. کافی است محتوای ان رشته ی بزرگ توسط یک طراح و برنامه نویس (پروسه تکامل/فرگشت یا حتی انسان در آینده) تغییر کند تا عملیت بدلخواه پیچیده ی مورد نظر توسط آن ماشین DNAای اجرا شود. @sohale

هیچ نظری موجود نیست: