منطق جدایی

منطق جدایی تعمیمی از منطق هور (Hoare logic) است که هدف اصلی ابداع آن، بررسی و وارسی ریاضی برنامه‌هایی است که داده‌ها را در حافظه تغییر می‌دهند و خانه‌های مختلف از حافظه هستند که در معرض تحول هستند. این منطق توسط جان سی رینولدز, Peter OHearn, Samin Ishtiaq و Hongseok Yang معرفی شده‌است.
مفاهیم کلی
در برنامه‌هایی که از اشاره‌گر بهره می‌برند، استفاده از منطق‌های پیشین نظیر منطق هور ممکن نیست. علت آن است که در این‌جا، هر خانه از حافظه اهمیت دارد و باید زبان منطق مورد نظر، توانایی اشاره به قسمت‌های مختلف از حافظه رایانه را داشته باشد. به این دلیل، نیاز به تعریف عملگری جدید حس شد. این احساس نیاز، منجر به تعریف عملگر شد که به صورت شهودی یعنی دو عملوند آن، در قسمت‌های مجزا از حافظه پشته هستند؛ لذا، با شکل‌گیری این منطق و ابزارهای آن، وارسی الگوریتم‌ها و برنامه‌های موازی امکان‌پذیر شده‌است.
اعلان‌ها
منظور ما در این‌جا از حالت، وضعیت مقادیر موجود در حافظه تصادفی و همچنین حافظه پشته است. اعلان در منطق جدایی، تعدادی حالت را مشخص می‌کند که در آن‌ها درست است. با تعریف استقرایی ساختار لغوی منطق جدایی، عبارت حالاتی را مشخص می‌کند که در یک قسمت از ساختار حافظه تصادفی/پشته و در قسمتی کاملا مجزا از آن درست باشد. پس تعریف استقرایی زبان منطق به این صورت است:
گزاره یک پشته خالی را نشان می‌دهد. یعنی پشته‌ای که هیچ خانه آن، به متغیری اختصاص داده نشده باشد.
عملگر دوتایی نشان‌دهنده یک اشاره‌گر است. یعنی متغیری به خانه‌ای از حافظه اشاره می‌کند.
عملگر دوتایی نشان‌دهنده درستی دو عبارت در دو قسمت مجزای حافظه است.
عملگر دوتایی به این معنا است که اگر بتوانیم حافظه را طوری گسترش دهیم که عملگر اول برقرار باشد، عملگر دوم نیز ناگزیر برقرار است.
حال می‌توان این عملگرها را در مفاهیم منطق مرتبه اول به کار برد و با آن عباراتی در مورد تاثیر یک برنامه بر حافظه گفت یا در بیان مشخصات حافظه استفاده کرد.
شکل عبارت در حافظه
شکل عبارت در حافظه
استدلال و استنتاج
در این منطق هم مانند دیگر منطق‌ها می‌توان اصول استنتاج تعریف و طبق آن‌ها استدلال کرد. برای مثال طبق تعریف عملگر ، داریم:
تمامی قواعد استنتاج در منطق هور، در منطق جدایی هم معتبر هستند؛ و همچنین در این منطق، قاعده قاب هست که برای سه‌تایی‌های هور تعریف می‌شود. یک سه‌تایی هور، به شکل کلی
است که یعنی اگر، حافظه قبل از اجرای برنامه ، در حالت باشد، پس از اجرای آن به حالت می‌رود. حال طبق قاعده قاب داریم:
به‌وسیله این قاعده، می‌توان استدلالات محلی در مورد حافظه را گسترش داد و در مورد بخش بزرگ‌تری از حافظه صحبت کرد. استدلال محلی برای یک برنامه ، یعنی استدلال در مورد تمامی متغیرها و خانه‌های حافظه که توسط تغییر می‌یابند. این‌ها را OHearn، ردپای می‌نامد. او بیان می‌دارد که:
«برای فهم رفتار یک برنامه، باید در مورد خانه‌هایی اطلاع کسب کنید که توسط آن برنامه تغییر می‌یابند. ارزش دیگر خانه‌ها به صورت خودبه‌خود ثابت باقی می‌ماند.»
ابزارهای وارسی مدل‌ها و تحلیل برنامه‌ها
منطق جدایی به دلیل کاربرد در درستی‌یابی برنامه‌های کامپیوتری، عملکرد وسیعی در ابزارهای مختلف وارسی مدل‌ها و همچنین کاربردهای صنعتی دارد. به‌نحوی‌که OHearn که از مبدعین این منطق بوده، از سال ۲۰۱۳ در شرکت فیسبوک مشغول به کار است.
به صورت کلی، ابزارهایی که از منطق جدایی استفاده می‌کنند در دسته‌های مختلف هستند:
تحلیل خودکار برنامه‌ها: این دسته از ابزارها، تلاش می‌کنند تا به صورت خودکار تحلیل‌هایی را در مورد ساختار، تاثیر و معنای برنامه‌ها انجام دهند. به‌طور مثال شرکت فیسبوک از ابزار Facebook Infer استفاده می‌کند که در این دسته جای می‌گیرد.
اثبات‌ها تعاملی: در این دسته، سعی بر آن است که با استفاده از قواعد استنتاج از پیش تعیین شده به اثبات‌های ریاضی برای عبارات در منطق جدایی برسیم. در حقیقت، این ابزارها جایگزین تلاش‌های طولانی افراد برای درستی‌یابی عبارات هستند. از نمونه این ابزارها، اثبات‌کننده Coq است که دسته وسیعی از عبارات، از ساده تا پیچیده را در بر می‌گیرد. Coq، در حقیقت یک زبان برنامه‌نویسی است که به‌وسیله آن می‌توان اعلان‌های مختلف را بیان کرد.
ابزارهای بینابین: این گروه، رویکردی مخلوط از اثبات‌کننده و تحلیل‌گر دارند. به این صورت که با دریافت برخی ویژگی‌ها، ویژگی‌های دیگر را می‌یابند و برای درستی آن‌ها اثبات ارائه می‌دهند. یک نمونه از این الگوریتم‌ها، مسئله است. در این مسئله، به دنبال یافتن پیش‌شرط کافی برای به دست آوردن شرایط پس از اجرای یک برنامه هستیم. یک نمونه از این ابزارها، است که جزو نخستین نسل از آن‌هاست.