رفتن به محتوای اصلی

بیت و نگاه معنایی و منطقی

جلسه قبل عرض کردم ما با عینک معنابین از سخت‌افزار شروع کنیم و بالا بیاییم. در جلسه قبل مسأله بیت‌ها را تحلیل کردیم و این‌که بیت چیست؟ نرم‌افزار است یا سخت‌افزار است؟ چیست؟ عرض کردم در دل سخت‌افزار و عالم فیزیک، فهم و آگاهی نداریم و فقط حالات فیزیکی داریم. صفر و یک هم نداریم. این انسان است چون درک و آگاهی دارد، دو حالت فیزیکی علی البدل -یا به این صورت است یا به آن صورت- را درک می‌کند و از آن، یک بیت درست می‌کند. یعنی یک سیستم فیزیکی درست می‌کند که خود متن فیزیک، از آن خبر نداشت، اما آن را به مرحله درک می‌آورد و یک سیستم نرم‌افزاری از آن درست می‌کند؛ می‌گوید این یا صفر است یا یک است. صفر و یک، معنا است. جلسه قبل این‌ها را عرض کردم.

ببینید صفر و یک، معنا است؛ معنای ریاضی و اعداد. با سیستم باینری که فقط صفر و یک باشد، یا سه‌تایی باشد که سه نماد را به کار بگیریم، یا بیشتر و اعشاری باشد؛ دسیمال باشد که ده نماد را به کار می‌گیریم - در آن، 0 تا 9 را به کار می‌گیریم - یا هگزادسیمال باشد که وقتی چهار بیت کنار هم می‌گذارند، می‌بینند شانزده نماد نیاز دارید که بتوانید آن را نشان بدهید و حیف است که از شش تا از آن‌ها استفاده نشود، لذا بعد از 9، از a تا f شمرده‌اند؛ f  پانزده شده و صفر هم یکی است. در هگزادسیمال پانزده نماد دارند؛ عمده کارهای کامپیوتر که راندمان کار در سی‌پی‌یوها بالا می‌رود، همین هگزادسیمال است.  بایت، هشت بیت بود که دو تا چهارتا کنار هم قرار می‌گیرند. این هفت بیت، بر مبنای شانزده، دویست و پنجاه و شش عدد را به نحو هگزادسیمال نشان می‌دهد. بعداً هم مبدل‌هایی هست که به دسیمال و ده‌دهی هم برمی‌گردانند.

نکته‌ی بسیار مهمی که می‌خواهم در ادامه عرض کنم، این است: حتماً این‌ها را مطالعه کنید، چون معلومات عمومی روز است و در درک این بحثی که الآن می‌خواهم بگویم، بسیار مهم است. اگر ما بودیم و بیت و فکر بشر که صفر و یک را بگوید و بعد هم بر مبنای دودویی یا سه‌تایی، اعداد را کنار هم بگذاریم، در اینجا هرگز کامپیوتری پدید نیامده بود. می‌گویید خب خیلی چیز خوبی است، صفر و یک! نه، صرف این نیست که شما بگویید مبنای صفر و یک - باینری - داریم و کار تمام شود. اگر در فضای علم، یک چیز جلو نیامده بود، اصلاً دستگاه‌های امروزی را نداشتیم. آن چیست؟ این‌که در بیت به‌عنوان صفر و یک، معنایی را تزریق کردیم؛ یک معنای ریاضی به صفر و یک، سیاه و سفید، پیت و لند، یونیزه و غیرش دادیم. صرف این‌ها سخت‌افزار است، ولی ما از این حالت دودویی، با مفهوم ریاضیاتی صفر و یک، صفر و یک درست کردیم. خب اگر این بود می‌خواستیم چکار کنیم؟! هزارها صفحه و مطلب را از صفر و یک پر کنید! فایده ندارد و نمی‌توانیم کاری انجام بدهیم؛ مهم، پردازش این‌ها است.

خب بگوییم ما عمل جمع و تفریق داریم! اتفاقاً در سی‌پی‌یوها هم عمل جمع انجام می‌دادیم. عمل جمع هم فایده‌ای ندارد. خب مدام جمع بزنیم؛ پنج و دو، هفت می‌شود! خب حالا چه؟! این نمی‌تواند کاری که الآن از این دستگاه می‌بینید را انجام بدهد. یک نقطه عطف بسیار مهم، کاری بود که حدود سال 1943 آن آقای کلود شانون (Claude Elwood Shannon ) انجام داد. اگر کار او نبود الآن هیچ‌کدام از این دستگا‌ه‌ها نبودند، ولو باینری و صفر و یک و پیت‌ها هم باشد. آن کار چه بود؟ آمد به صفر و یک، به جای معنای ریاضیاتی، معنای منطقی داد. خیلی ساده است، اما بعد که جلو می‌روید می‌بینید عجب! چقدر تفاوت کرد! شما می‌گویید صفر، یک. صفر یعنی هیچی؟! یک هم یعنی یک. اما یک وقتی است که می‌گویید صفرش یعنی غلط و نبود، یکش یعنی صحیح و بود؛ بود و نبود؛ صحیح و غلط. این معنا، معنای ریاضیاتی نیست، چون در منطق است که می‌گویید این صادق است یا کاذب است؛ درست است یا غلط است؛ هست یا نیست. قبلش بول ریاضی‌دان، جبر بولی را آورده بود، اما کار مهمی که این آقای شانون کرده بود، این بود که بیتی را که در فضای صفر و یک بود و معنای ریاضیاتی داشت، به فضای معنای منطقی و به صحیح و غلط برد. الآن وقتی می‌گویید صفر، یعنی غلط و وقتی یک می‌گویید، یعنی درست. اینجاست که راه افتاد؛ عجائب امری که در این پایه صورت می‌گیرد - که آقا می‌گفتند چطور می‌خواهد بفهمد - یکی از مهم‌ترین ارکانش، این است که به جای این‌که بگویید 0 یعنی صفر، می‌گویید 0 یعنی غلط و نادرست؛ یعنی نبود و 1 را می‌گویید یعنی هست و یعنی درست. خب «درست» که یک معنا است؛ معنای منطقی است. صفر و یک هم معنا بود، ولی ریاضیاتی بود. درست و غلط، معنایی منطقی و ارزشی منطقی است. «قضیة صادقة» یعنی درست و در مقابل «قضیة کاذبة». درست و غلط، یک معنای منطقی است که شما الآن می‌خواهید آن را در دل سخت‌افزار به حالت نرم‌افزاری تعبیه کنید و بگویید اگر پیت است یعنی غلط است.

در فضای ریاضیات، ما نظریه مجموعه‌ها داریم. مجموعه‌ها نوعاً سر و کارش با اعداد است. البته با اشیاء هم هست، ولی ریخت نظریه مجموعه‌ها، ریخت ریاضیاتی است. کنار این نظریه مجموعه‌ها، نظریه دیگری - در فضای آن پارادوکس‌هایی که در قرن بیستم در مجموعه‌ها پدید آمد - پدید آمد و نظریه انواع درست شد. سیستم نوع با یک سیستمی که حالت مجموعه دارد، خیلی وقت‌ها معادل و هم‌ارز هستند، اما دو مفهوم هستند. یعنی در سیستم نوع‌ها، سر و کار شما با منطق است، نه با ریاضیات به‌عنوان ریاضی. این مطلب مهمی است؛ سیستم نوع‌ها.

الآن هم مهم‌ترین کاری که زبان‌های برنامه‌نویسی انجام می‌دهند، این است که نوع داده تهیه می‌بینند؛ نوع داده آماده کرده. یکی از نوع داده‌های بسیار مهم که اگر نبود هیچ چیزی نبود و اصلاً دم و دستگاه هوش مصنوعی و خود کامپیوتر نبود، نوع داده بولین است. شاید هم برخورد کرده باشید که متغیر در جبر بولی، همین صحیح و غلط است. چرا؟ چون می‌خواست جبری درست کند که فقط منطق باشد، نه جبری که متغیرش اعداد باشد. جبری که از زمان خوارزمی و بوزجانی تا الآن آمده، جبری بود که متغیر و x آن، پنج، شش و هزار و … بود. وقتی جبر، خیلی وسیع می‌شد، به جای متغیر x که عدد بود، می‌توانست اشیاء باشد؛ شما به جای x می‌توانستید صندلی بگذارید یا عدد بگذارید. این‌ها در ریاضیات بود. جبری که اختصاصی این ریاضی‌دان بود، منطق را به جبر آورد - در منطق سر و کار شما با چیست؟ «القضیة قول یحتمل الصدق و الکذب»؛ دو ارزش داشت - و یک جبری برای منطق درست کرد. لذا متغیرش تنها دو گزینه داشت: یا صفر است یا یک است. صفر و یکش هم صفر و یک ریاضی نیست، بلکه یعنی غلط و درست. این جبر را این آقا درست کرد و سال‌ها بعد از او، آن را در صنعت به کار گرفتند. اگر به کار نگرفته بودند، ما امروزه اصلاً کامپیوتر نداشتیم. یعنی اساس برنامه‌نویسی‌ها تماماً روی آن دور می‌زند و محور اصلی آن، اعداد باینری نیست، بلکه نوع داده بولین است؛ این بسیار نقش دارد و این است که شما می‌توانید مقایسه کنید. تمام این کارهایی که پردازش‌گر سی‌پی‌یو انجام می‌دهد، اگر نوع داده بولین نباشد، نمی‌تواند انجام بدهد؛ هیچ کاری نمی‌تواند بکند و فقط یک جمع می‌کند؛ وقتی بگوید 7 و 2، می‌شود ۹، این‌که کاری نیست؛ نمی‌توانید بگویید آیا مثلاً 7 و 2 مساوی با 9 هست یا نیست؟ درک این مساوات را تا نوع داده بولی را نداشته باشید، نخواهید داشت.