moaminsharifi/fa-wiki-spell-checker huggingface dataset:
در این مدل فرض شده دستورها ورودی ماشین به صورت متوالی و پشت سر هم اجرا می‌شوند.
همچنین در اینجا "صفر" معادل خانهٔ بدون علامت و "یک" معادل خانهٔ علامت دار در نظر گرفته شده‌است.
وانگ در مورد مدل پیشنهادی‌اش این نکات را یادآور می‌شود:
بنا بر این یک ماشین تورینگ با نوار دودویی به سادگی به یک برنامهٔ وانگ قابل تبدیل است.
مارتین دیویس یکی از دانشجویان کارشناسی امیل پُست بود. او به همراه استیون کول کلینی، دکترای خود را زیر نظر آلونزو چرچ به پایان رساند.
او مدل محاسباتی را در دوران تدریس در دانشگاه نیویورک و در سال ۱۹۷۳ و ۱۹۷۴ مورد استفاده قرار داد که آن را ماشین پُست-تورینگ نامیده‌است. دستورها زبان پُست-تورینگ به صورت ترتیبی اجرا می‌شوند و این‌گونه هستند:
دقت شود که در این مدل هم دستوری برای توقف روال اجرا وجود ندارد و برنامه زمانی متوقف می‌شود که تمامی دستورها آن اجرا شده باشند.
در سال ۱۹۷۸ دیویس دومین مدل خود را در قالب مقالهٔ "محاسبات چیست" (به انگلیسی: "what is computation") به نام ماشین تورینگ-پُست ارائه کرد.
در این مدل حرف '۱' معادل خانهٔ علامت دار مدل پُست و حرف '۰' معادل خانهٔ بدون علامت است.
در مدل دوم دیویس ۷ نوع دستور وجود دارد:
تقسیم دستورها پرش به دو نوع دستور، مجموعهٔ دستورها مدل تورینگ-پُست را بزرگتر کرده ولی استفاده از آن را به دلیل سادگی این دستورها آسان‌تر کرده‌است.
از ویژگی‌های برجستهٔ این مدل می‌توان به این موارد اشاره کرد:
دستورها پایه‌ای در این ماشین عبارتند از:
در این مدل تفاوتی بین دستورها پرش شرطی و غیر شرطی وجود ندارد.
مدل‌های معرفی شده همگی به لحاظ قدرت محاسباتی، معادل ماشین تورینگ استاندارد هستند.
یک‌نویس (معادل معنایی انگلیسی: Busy Beaver) وظیفه دارد قبل از اتمام روال اجرایی‌اش بیشترین تعداد '۱' ممکن را در حافظه بنویسد. دستور print یا (P) حرف '۱' و دستور Erase یا 'E' حرف '۰' را در موقعیت فعلی بر روی نوار می‌نویسد. دستور Left یا (L) نوار را به سمت چپ و دستور Right یا (R) نوار را به سمت راست حرکت می‌دهد.
جدول حالات ماشین تورینگ یک‌نویس ۲ حالته به این صورت است:
دستورها در نسخهٔ معادل پُست-تورینگ ماشین دوحالتهٔ یک‌نویس (دقت شود که دستورها در یک خط و به ترتیب آمده‌اند. این نسخه یک تغییر عمده نسبت به نمایش ماشین تورینگ و معادل آن چیزی است که به آن «برنامهٔ کامپیوتر» می‌گوییم):
منظور از J1 در جدول بالا پرش در صورتی است که در خانهٔ فعلی '۱' نوشته شده باشد.
به صورت معادل می‌توانیم این جدول را به صورت یک رشته نمایش دهیم. به این صورت که عملوندهای دستورها را بعد از علامت ':' و بعد از نام دستور بنویسیم و دستورها متوالی را با ',' از هم جدا کنیم؛ بنابراین به عنوان مثال رشتهٔ معادل جدول بالا به این صورت است:
J1:5, P, R, J:8, P, L, J:8, J1:12, P, L, J1:1, P, N, J:15, H
نمودار حالت یک ماشین تورینگ دو حالتهٔ یک‌نویس با تبدیل هر حالت ماشین تورینگ به ۷ دستور معادل به حالت معادل ماشین پُست-تورینگ تبدیل می‌شود. حالت توقف هم باید به عنوان یک حالت جداگانه در نظر گرفته شود.
در شکل زیر روال اجرای ماشین پُست-تورینگ یک‌نویس با تمام حالات میانی نمایش داده شده‌است:
این مثال روال محاسبهٔ حاصل ضرب دو عدد طبیعی را در یک ماشین تک نوارهٔ پُست-تورینگ با الفبای دو تایی '۱' و '⏘' نشان می‌دهد.
این ماشین پُست-تورینگ عملیات محاسبهٔ ضرب را به صورت بازگشتی توسط دو حلقه انجام می‌دهد.
عملیات از ابتدای سمت چپ نوار و جایی که علائم مربوط به عدد a قرار دارند شروع می‌شود.
دختر دشت آرارات () یک فیلم است محصول سال ۱۹۴۹، به کارگردانی هامو بیک-نازاریان
یکی از محدودیت­‌های پایه‌­ای در امکان اجرای همروند دستورها یک برنامه، مفهوم وابستگی داده (به انگلیسی: Data Dependency) است. برای مثال، یک دستور تا زمانی که داده‌­های مورد نیازش آماده و در دسترس نباشند نمی‌­تواند اجرا شود. در علوم رایانه، وابستگی داده به موقعیتی گفته می‌شود که یک دستور به داده‌های دستورها قبل و یا بعد از خود نیاز دارد.
به‌طور کلی، اگر اجرای هم‌زمان دو دستور ممکن نباشد و اجرای آن‌ها باید به صورت متوالی انجام شود، آن‌ها را وابسته می‌گوییم.
انواع وابستگی عبارت اند از:
در نظریه کامپایلر، برای تشخیص وابستگی از فنون آنالیز وابستگی (به انگلیسی: ) استفاده می‌شود.
دو دستور formula_1 و formula_2 را در نظر می‌گیریم که دستور formula_2در جایی بعد از دستور formula_1 قرار دارد. formula_5 و formula_6 را به ترتیب مجموعه خانه‌هایی از حافظه که formula_7 از آن‌ها می‌خواند و مجموعه خانه‌هایی از حافظه که formula_7 در آن‌ها می‌نویسد، تعریف می‌کنیم. در این صورت با برقراری شرط زیر که به شرط Bernstein موسوم است، می‌گوییم formula_2 به formula_1 وابسته است:
به این ترتیب انواع وابستگی داده به صورت زیر تعریف می‌شود:
در برخی منابع، نوع چهارمی هم به صورت زیر تعریف می‌شود:
"وابستگی جریان (به انگلیسی: Flow Dependency)" که به آن "وابستگی داده (به انگلیسی: Data Dependency)"، "وابستگی صحیح (به انگلیسی: True Dependency) و خواندن بعد از نوشتن (به انگلیسی: (RAW) Read-after-write)" نیز گفته می‌شود، هنگامی رخ می‌دهد که یک دستور به نتیجه دستوری قبل از خود وابسته باشد. مثال زیر را با فرض اینکه مقدار x و y از قبل محاسبه شده‌است در نظر بگیرید:
a = x + y;
b = 2 * a;
در این مثال، دستور دوم به دستور اول وابستگی جریان دارد؛ چرا که از مقدار تولیدی در دستور اول استفاده می‌کند. به این ترتیب در این مثال نمی‌توان دستورها اول و دوم را به صورت هم زمان اجرا کرد.
"پاد وابستگی (به انگلیسی: Anti-dependency)" که به آن "نوشتن بعد از خواندن (به انگلیسی: Write-after-read (WAR))" نیز گفته می‌شود، هنگامی رخ می‌دهد که یک دستور به داده‌ای نیاز دارد که در دستور بعدی بازنویسی می‌شود. مثال زیر را با فرض اینکه مقدار x و y و z از قبل محاسبه شده‌است در نظر بگیرید:
a = z + 1;
در این مثال دستور دوم به دستور سوم پاد وابستگی دارد. توجه داریم که ترتیب این دستورها نمی‌تواند عوض شود؛ چرا که مقدار نهایی متغیر b را تغییر می‌دهد. همچنین اجرای هم‌زمان دستورها نیز به دلیل احتمال بروز خطا در مقدار نهایی امکان‌پذیر نیست.
پاد وابستگی مثالی از وابستگی نام است؛ به این معنا که وابستگی می‌تواند با تغییر نام برخی متغیرها برطرف شود. برای مثال کد زیر را برای رفع وابستگی مثال قبل در نظر بگیرید:
a2 = x + y;
b = 2 * a2;
به ابن ترتیب با تغییر نام متغیر a به متغیر جدید a2 در دستورها پیش از بازنویسی آن، پاد وابستگی میان دستورها دوم و سوم از بین رفته‌است و اکنون اجرای هم‌زمان آن‌ها امکان‌پذیر است.
"وابستگی خروجی (به انگلیسی: Output Dependency)" که به آن "نوشتن بعد از نوشتن (به انگلیسی: Write-after-write (WAW))" نیز گفته می‌شود، هنگامی رخ می‌دهد که یک متغیر در دو دستور نوشته شود. به بیان دیگر ترتیب اجرای دو دستور تعیین‌کننده مقدار نهایی یک متغیر است. مثال زیر را در نظر بگیرید:
b = 7;
a = 2 * b;
b = 11;
در این مثال دستور سوم به دستور اول وابستگی خروجی دارد. توجه داریم که تغییر ترتیب این دستورها موجب تغییر مقدار نهایی متغیرها خواهد شد.
وابستگی خروجی هم مثال دیگری از وابستگی نام است. برای مثال در کد زیر با تغییر نام متغیر b به متغیر b2 در دستورها قبل از بازنویسی آن، وابستگی خروجی مثال قبل برطرف شده‌است:
b2 = 7;
a = 2 * b2;
"وابستگی ورودی (به انگلیسی: Input Dependency)" که به آن "خواندن بعد از خواندن (به انگلیسی: Read-after-read (RAR))" نیز گفته می‌شود، هنگامی رخ می‌دهد که یک متغیر در دو دستور خوانده شود. مثال زیر را در نظر بگیرید:
در این مثال دستور سوم به دستور دوم وابستگی ورودی دارد.
توجه داریم که وابستگی ورودی در عمل مشکلی در اجرای هم‌زمان دستورها ایجاد نمی‌کند. همچنین تغییر ترتیب دستورها نیز قابل انجام است.
به وضوح، وابستگی ورودی نیز نوعی از وابستگی نام است.
وابستگی نام (به انگلیسی: Name Dependency) هنگامی رخ می‌دهد که دو دستور از محل یکسانی از حافظه استفاده می‌کنند اما هیچ جریان داده‌ای میان آن‌ها برقرار نیست. در نتیجه در بسیاری از موارد می‌توان با تغییر نام برخی از متغیرها این وابستگی را از بین برد.
از مهم‌ترین انواع وابستگی‌های نام، وابستگی خروجی و پاد وابستگی هستند.
اگر نتیجه دستور formula_1 مشخص‌کننده اجرا و یا عدم اجرای دستور formula_2 باشد، آنگاه دستور formula_2 به دستور formula_1 وابستگی کنترل دارد. مثال زیر را در نظر بگیرید:
b = a + b;
در این مثال نتیجه دستور اول مشخص می‌کند که دستورها سه و چهار اجرا می‌شوند یا خیر.
برای بیان کردن و نشان دادن دقیق و راحت وابستگی کنترل، معمولاً از مفهوم "گراف جریان کنترل (به انگلیسی: Control flow Graph (CFG))" استفاده می‌شود.
گراف جریان کنترل گرافی جهت‌دار است که مسیرهای مختلفی که اجرای برنامه ممکن است بپیماید را نشان می‌دهد. رأس‌های این گراف را تکه‌های مجزای برنامه تشکیل می‌دهند. در صورتی که امکان انتقال مستقیم از تکه برنامه i به تکه برنامه j وجود داشته‌باشد، یالی از راس i به راس j خواهیم داشت.
مسئلهٔ ارتفاع ستاره که توسط Eggan Lawrence C مطرح شده‌است، مسئله‌ای در تئوری زبان صوری است که سعی در پاسخ به این پرسش دارد که آیا می‌توان همهٔ زبان منظم را به کمک عبارات منظمی که ارتفاع ستارهٔ محدودی دارند بیان کرد؟ ارتفاع ستارهٔ یک عبارت منظم، بیشینهٔ عمق ستاره‌های تو در تویی است که در آن عبارت وجود دارد.
به‌طور مشخص‌تر، این مسئله بیان می‌کند که آیا همیشه عمق تو در توی یک کافی است و امکان‌پذیر است که همهٔ زبان‌های منظم را با عبارات منظم به عمق یک نشان داد؟ اگر پاسخ این سؤال منفی است، آیا الگوریتمی وجود دارد که عمق مورد نیاز را مشخص کند؟
مسئلهٔ اولیه، نخستین بار توسط Eggan پاسخ داده شد [۱]. او با ارائه مثالی نشان داد که پاسخ این پرسش منفی است. او برای هر عدد طبیعی مانند n، یک زبان منظم با ارتفاع ستارهٔ n ارائه داد. ساخت این عبارات به صورت بازگشتی است و به این ترتیب صورت می‌گیرد که عبارت formula_1، از کنار هم قرار دادن دو نسخهٔ formula_2 و تغییر نام نسخهٔ دوم با نام‌های جدید و پس از آن اضافه کردن یک نشانهٔ جدید در انتها و اضافه کردن پرانتز و ستاره در اطراف عبارت ساخته شده تا اینجا، صورت می‌گیرد.
با به‌کارگیری تنظیم «چپ» تصویر در سمت چپ متن ظاهر می‌شود.
Eggan ثابت کرد که هیچ عبارت منظمی با ارتفاع ستارهٔ کمتر از n وجود ندارد که معادل با formula_2 باشد [۱]. هرچند مثال ارائه شده توسط او از الفبای بزرگی استفاده می‌کند که برای زبانی با ارتفاع ستارهٔ n، اندازهٔ آن 2"n"-۱ است. به همین دلیل، سؤال دیگری که مطرح کرد این بود که آیا مثال‌هایی روی الفبای دودویی وجود دارد که به این شکل باشند؟ این سؤال به سرعت توسط Dejean و Schützenberger پاسخ داده شد [۳]. آن‌ها مثالی بازگشتی از چنین عباراتی به ازای هر n ارائه دادند. formula_2 در هر گام به این صورت ساخته می‌شود که ابتدا به تعداد 2"n" نشانهٔ اول و سپس formula_2 و پس از آن به تعداد 2"n" نشانهٔ دوم و در انتها نیز formula_2 قرار می‌گیرد. در نهایت پرانتز دور این عبارت قرار گرفته و ستاره اضافه می‌شود.
Dejean و Schützenberger و Salomaa نشان دادند که هیچ عبارت منظمی با ارتفاع ستارهٔ کمتری نمی‌تواند n را توصیف کند [۳٬۴].
سؤال مطرح شدهٔ دوم، پاسخ به نسبت پیچیده‌تری نسبت به سؤال اول دارد و برای حدود دو دهه به عنوان یکی از مسائل معروف حل نشدهٔ حوزهٔ زبان‌های صوری شناخته می‌شد [2]. Hashiguchi در سال ۱۹۸۸ الگوریتمی برای تعیین ارتفاع ستارهٔ هر عبارت منظمی ارائه داد. اما این الگوریتم عملی نیست و به محاسباتی می‌انجامد که حتی برای مثال‌های کوچک نیز امکان‌پذیر نیست.
الگوریتم بهینه‌تری توسط Kirsten در سال ۲۰۰۵ ارائه شد، اما حتی این الگوریتم هم فاصلهٔ زیادی با آنچه که قابل انجام است، دارد [۵].
این الگوریتم توسط Colcombet و Löding در سال ۲۰۰۸ کلی‌سازی و بهینه‌سازی شده‌است [۶] و در سال ۲۰۱۷ در ابزار Stamina پیاده‌سازی شده‌است [۷].Eggan, Lawrence C. (1963). "Transition graphs and the star-height of regular events". Michigan Mathematical Journal. 10 (4): 385–397.Brzozowski, Janusz A. (1980). "Open problems about regular languages". In Book, Ronald V. Formal language theory—Perspectives and open problems. New York: Academic Press. pp. 23–47.Dejean, Françoise; Schützenberger, Marcel-Paul (1966). "On a Question of Eggan". Information and Control. 9 (1): 23–25.Salomaa, Arto (1981). Jewels of Formal Language Theory. Melbourne: Pitman Publishing.Kirsten, Daniel (2005). "Distance desert automata and the star height problem". RAIRO Theoretical Informatics and Applications. 39 (3): 455–509.Thomas Colcombet, Christof Löding: "The Nesting-Depth of Disjunctive µ-Calculus for Tree Languages and the Limitedness Problem". CSL 2008: 416-430Nathanaël Fijalkow, Hugo Gimbert, Edon Kelmendi, Denis Kuperberg: "Stamina: Stabilisation Monoids in Automata Theory". CIAA 2017: 101-112
هر ناپیوستگی ثانویه زمین‌ساختی که بعد از ایجاد شکستگی در آن جابجایی رخ داده باشد به عنوان گسل شناخته می‌شود.
بر این اساس هم گسله‌های کوچک در حد چند میلی‌متر و هم گسل‌هایی با طول چندین کیلومتر در این تعریف می‌گنجند.
گسل‌ها بر تحولات زمین‌ساختی و تکوین حوضه‌های ساختاری - رسوبی ایران اثر قابل توجهی داشته‌اند. در این میان، گسل‌های طولی عمده هم‌زمان با جنبش‌های کوه‌زایی کاتانگایی (پرکامبرین پسین) به مراتب بیشتر است. روند این گسل‌ها در بیشتر جاها با روندهای زمین‌ساختی مربوط به چین‌خوردگی کاتانگایی هم‌خوان است و در راستای شمالی - جنوبی قرار دارد، ولی روندهای شمال‌غربی - جنوب‌شرقی (روند زاگرس) نیز گزارش شده است.علاوه بر این دو روند، راستای دیگری نیز در امتداد شمال‌شرقی - جنوب‌غربی بر گسل‌های ایران حاکم است؛ به گونه‌ای که سه امتداد اصلی قابل تشخیص است:
این گسل‌ها مرز واحدهای ساختاری - رسوبی مختلف ایران را تشکیل می‌دهند و با فعالیت خود موجب تغییرات عمده در رخساره‌های سنگی، ضخامت رسوبات و تحولات زمین‌ساختی (ماگماتیسم، دگرگونی، شدت و الگوی چین‌خوردگی و...) می‌شوند و بنابراین شناخت آن‌ها از نظر زمان تشکیل، فعالیت، تأثیر آن‌ها بر زمین‌شناسی ایران و لرزه‌زمین‌ساخت بسیار مهم است.
تعداد گسل‌های شناخته شده ایران ۵۷۵ عدد است. تعداد گسل‌های خطرناک ایران ۱۲۰ عدد است. میزان شهرهای لرزان ایران یعنی شهرهای با ریسک خطر بالا ۷۸ درصد می‌باشد.
اصلی‌ترین گسل‌های تهران عبارتند از گسل مشا فشم، گسل شمال تهران، گسل جنوب تهران، گسل پارچین، گسل شمال ری، گسل جنوب ری، گسل کهریزک، گسل اشتهارد و گسل ایپک.
امن‌ترین استان‌ها و مناطق ایران از نظر خطر گسل‌ها همدان اصفهان کردستان، مرکزی، مناطقی از خوزستان زنجان یزد و کرمان هستند.
گسل زمین‌لرزه‌ای نوعی شکستگی زمین است که در اثر زمین‌لرزه کم‌ژرفا تولید شده باشد و به‌طور کلی با تجدید حرکت دوباره گسل‌های پیشین همراه هستند. این گونه گسل‌ها می‌توانند دربارهٔ سازوکار رهاسازی انرژی لرزه‌ای در طی زمین‌لرزه و نیز تنش‌های ناحیه، اطلاعات لازم را بدهند.
بیشتر گسل‌های زمین‌لرزه‌ای شناخته‌شده ایران طول بیش از ۴۰ کیلومتر دارند و همه آن‌ها با زمین‌لرزه‌های مخرب با بزرگی بیش از ۷ همراهند. در همه حالت‌ها جهت گسل‌های زمین‌لرزه‌ای ایران گویای جهت فشاری در راستای شمال شمال‌شرقی - جنوب جنوب‌غربی است که با جهت حرکت شمال‌شرقی صفحه عربستان هماهنگی دارد.
«مناطق کم خطر زلزله در ایران». ۲۰۱۷. جستجوگر اخبار تی نیوز Tnews.Ir. Accessed December 31 2017. http://tnews.ir/news/b44c101773523.html.
عمل کاهش تورینگ در نظریهٔ زبان‌ها و ماشین‌ها، فرایندی است که در آن یک مسئله مانند formula_1 به مسئله‌ای مانند formula_2 تبدیل می‌شود به‌طوری‌که حل مسئلهٔ formula_2 منجر به حل مسئلهٔ formula_1 خواهد شد. این فرایند را کاهش مسئلهٔ formula_1 به مسئلهٔ formula_2 می‌نامند. فرایند کاهش را به صورت تئوری با تابعی تعریف می‌کنند که در ورودی مسئله‌ای در قالب مسئلهٔ formula_1 را می‌خواند و در خروجی مسئله‌ای در قالب مسئلهٔ formula_2 را تولید می‌کند. در این صورت مسائل ورودی و خروجی تابع معادل شده و اگر مسئله حاصل در قالب formula_2 حل شود، پاسخ آن پاسخی بر مسئلهٔ formula_1 نیز خواهد بود.
لازم به ذکر است که عمل کاهش تنها وجود تابع معادل‌سازی یک مسئله با مسئله دیگر را تضمین می‌کند و حرفی از حل‌پذیری، تشخیص‌پذیری و تصمیم‌پذیری هر یک از مسائل درگیر به‌طور مستقل به میان نمی‌آورد. در واقع کاهش مسئلهٔ formula_1 به مسئلهٔ formula_2، وابستگی دو مسئله به یکدیگر را بیان می‌کند و نشان‌دهندهٔ آن است که سختی حل مسئلهٔ formula_1 به میزان سختی حل مسئلهٔ formula_2 است.
اولین بار وجود ارتباط میان حل مسائل با عنوان "حل وابسته" یا "محاسبهٔ نسبی" توسط آلن تورینگ در سال ۱۹۳۹ از دیدگاه ماشین‌های اوراکل مطرح شد. بعدتر آن را "کاهش وابسته" یا "کاهش نسبی" نیز نامیدند. پس از آن استیون کول کلینی در سال‌های ۱۹۴۳ و ۱۹۵۲ مفهومی مشابه را از دیدگاه توابع بازگشتی مطرح کرد. در سال ۱۹۴۴ امیل لئون پست عنوان «کاهش تورینگ» را برای تعریف این مفهوم به کار گرفت. کاهش تورینگ در زمان خطی نیز به نام استیون کوک، "کاهش کوک" نام گرفت.
ما در عمل، به‌طور معمول روزانه بارها و بارها از فرایند کاهش استفاده می‌کنیم. برای مثال فرض کنید می‌خواهید از شهری به شهر دیگری سفر کنید. برای این کار نیاز به تهیهٔ بلیت برای سفر دارید. برای تهیهٔ بلیت به تهیهٔ پول نیاز دارید و برای تهیهٔ پول باید کار کنید. در همین فرایند چند مرحله‌ای معمول، مسئلهٔ سفر به مسئلهٔ خرید بلیت، مسئلهٔ خرید بلیت به مسئلهٔ تهیهٔ پول و مسئلهٔ تهیهٔ پول به مسئلهٔ کار کردن کاهش یافت. بنابراین عمل کاهش به صورت کلی بخشی از ساده‌ترین اعمال زندگی روزمرهٔ ما می‌باشد.
کاربرد فنی‌تر عمل کاهش، در مسائل ریاضی می‌باشد. یکی از این کاربردها دسته‌بندی مسائل ریاضی است. این دسته‌بندی، مسائل مختلف را از نظر تشخیص‌پذیری، تصمیم‌پذیری، زمان و حافظه به هم مربوط می‌کند و تلاش‌های دنیای علم را در راستای حل مسائل سامان می‌بخشد.
از دیدگاه الگوریتمی، شرح عمل کاهش به این صورت است که الگوریتمی برای حل مسئلهٔ formula_1 تعریف می‌شود به‌طوری‌که در آن بخش اصلی حل مسئله بر دوش زیرروالی است که خود شامل الگوریتم حل مسئلهٔ formula_2 است. این پیاده‌سازی را می‌توان به کمک ماشین‌های اوراکل به انجام رساند.
دو مجموعهٔ formula_1 و formula_2 متشکل از اعداد طبیعی را در نظر بگیرید. کاهش‌پذیری formula_1 به formula_2 به معنای وجود تابعی است که دامنهٔ آن مجموعهٔ formula_1 و تابع هدف آن مجموعهٔ formula_2 باشد و به صورت زیر نمایش داده می‌شود:
از دیدگاه ماشین‌های اوراکل، هرگاه مسئله‌ای مانند formula_1 به مسئله‌ای مانند formula_2 کاهش‌پذیر باشد، به ازای هر الگوریتمی برای formula_2 می‌توان الگوریتمی برای formula_1 تعبیه کرد به این صورت که به ازای هر فراخوانی اوراکل formula_2 در ماشین اوراکل formula_1 الگوریتم مربوط به formula_2 را قرار داد. از آنجایی که ممکن است ماشین اوراکل formula_1 چندین بار ماشین اوراکل formula_2 را فراخوانی کند، زمان و حافظهٔ مورد نیاز این الگوریتم ممکن است به صورت چشم‌گیری از زمان و حافظهٔ مورد نیاز ماشین اوراکل formula_2 و یا ماشین‌های اوراکل دیگر مربوط به formula_1 بیشتر باشد. به همین علت تبدیل مسئلهٔ formula_1 به مسئلهٔ formula_2 از نظر زمانی و حافظه مورد توجه و اهمیت قرار گرفته‌است.
اگر formula_1 و formula_2 هر دو به یکدیگر کاهش‌پذیر باشند، formula_1 و formula_2 را هم‌ارز تورینگ می‌نامند. به این صورت تمامی مسائل به کلاس‌های هم‌ارزی تورینگ تقسیم خواهد شد که عضویت در هر یک از این کلاس‌ها درجه تورینگ مسائل را نشان می‌دهد.
در یک مجموعه از مسائل مانند مجموعهٔ formula_41، اگر هر مسئله مانند formula_42 در مجموعهٔ formula_41، به مسئلهٔ مشخصی مانند formula_44 کاهش‌پذیر باشد، formula_44 را تورینگ-سخت برای مجموعهٔ formula_41 می‌نامند. همچنین در صورتی که formula_44 خود عضوی از مجموعهٔ formula_41 باشد، آن را تورینگ-تمام برای مجموعهٔ formula_41 تعریف می‌کنند.
عمل کاهش را در اثبات تصمیم‌ناپذیری یکی از مسائل معروف ریاضی شرح می‌دهیم. مجموعهٔ formula_50 را مجموعه جفت ماشین تورینگ‌هایی تعریف می‌کنیم که تولیدکننده یک زبان مساوی هستند. مجموعهٔ formula_51 را نیز مجموعه ماشین تورینگ‌هایی تعریف می‌کنیم که زبانشان تهی است. می‌دانیم مسئلهٔ formula_51 تصمیم‌ناپذیر است. با کاهش مسئلهٔ formula_51 به مسئلهٔ formula_50 می‌توان نتیجه گرفت که formula_50 نیز تصمیم‌ناپذیر است. زیرا در صورتی که تصمیم‌پذیر باشد، با توجه به این که formula_51 به این مسئله کاهش یافته، formula_51 نیز تصمیم‌پذیر خواهد شد که یک تناقض را نتیجه می‌دهد. برای کاهش مسئلهٔ formula_51 به مسئلهٔ formula_50، خاصیت تهی بودن یک زبان را می‌توان با خاصیت تساوی آن زبان با یک زبان تهی معادل کرد. بنابراین در صورتی که ورودی مسئلهٔ formula_51 را با ماشین یک زبان تهی به مسئلهٔ formula_50 بدهیم، پاسخ آن برای formula_51 نیز پاسخی صحیح است. بنابراین کاهشی از مسئلهٔ formula_51 به formula_50 وجود دارد و هر مسئله از formula_51 را می‌توان با formula_50 حل کرد.
به صورت مشابه تصمیم‌ناپذیری مسائلی همچون مجموعهٔ ماشین‌های زبان‌های منظم، ماشین‌های با نوار محدود و زبان تهی، مسئلهٔ معروف formula_67 و دیگر مسائل ثابت شده‌است.
در نظریه اتوماتا نظریه مک‌ناتون اشاره دارد به قضیه‌ای که بیان می‌دارد مجموعه‌ای از زبان‌های ω-منظم برابر خواهد بود با مجموعه‌ای که توسط ماشین مولر قطعی تشخیص داده شود. برای اثبات این قضیه الگوریتمی ارائه می‌شود که در آن برای هر زبان ω-منظم یک ماشین مولر قطعی ساخته می‌شود و بالعکس.
این قضیه نتایج مهم و متعددی دارد. از آنجایی که ماشین بوچی و زبان‌های ω-منظم هر دو بیانی از یکدیگر هستند، این قضیه این نتیجه را می‌رساند که ماشین بوچی و ماشین قطعی مولر به‌طور مساوی بیانگر یکدیگر هستند.
در مقاله اصلی مک‌ناتون، قضیه بدین صورت بیان شده‌است که:
" یک ω-رویداد منظم است اگر و فقط اگر حالت متناهی باشد."
امروزه از عبارت ω-زبان‌ها به جای ω-رویدادها استفاده می‌شود. همچنین طبق تعریف مک‌ناتون یک ω-رویداد، یک رویداد حالت متناهی است اگر یک ماشین مولر قطعی وجود داشته باشد که آن را تشخیص دهد.
اثبات یک طرف این قضیه بدین صورت است که نشان داده می‌شود هر ماشین مولر داده شده یک زبان ω-منظم را تشخیص می‌دهد.
فرض کنید ("A" = (Q,Σ,δ,q,F یک ماشین قطعی مولر باشد. اتحاد تعداد زیاد و معینی از زبان‌های ω-منظم، یک زبان ω-منظم را تولید می‌کند، لذا بدون کم شدن از کلیت مساله می‌توان فرض نمود که شرط قبولی مولر F دقیقاً شامل یک مجموعه از حالت‌های {q...,q} می‌شود. فرض می‌شود که α یک زبان منظم باشد که عناصرش "A" را از q تا q دربر بگیرد. برای هر i از 1 تا β ،n یک زبان منظمی باشد که عناصرش "A" را از q تا q را بدون عبور از هر وضعیتی خارج از {q...,q} در بر بگیرند. ادعا می‌شود که α(β)ω یک زبان ω-منظم است که توسط ماشین مولر A تشخیص داده می‌شود.
سمت دیگر قضیه را بدین طریق می‌توان اثبات کرد که به ازای هر زبان ω-منظم داده شده یک ماشین مولر وجود دارد که آن را تشخیص بدهد.
اتحاد تعداد متناهی و زیادی از ماشین‌های قطعی مولر به سادگی قابل ساخت است، لذا بدون کم شدن از کلیت مساله، فرض می‌شود که زبان ω-منظم داده شده به شکل αβω است. همچنین فرض شود که ω-کلمه w=a,a... ∈ αβω. "w"(i,j یک بخش معین شامل a از w در نظر گرفته می‌شود. برای ساختن ماشین مولر مرتبط با αβω، دو مفهموم در رابطه با w معرفی می‌شود.
زمان j در خدمت زمان i است اگر
j > i و "*w"(0,i) ∈ αβ و "*w"(i,j) ∈ β.
هم‌ارزی
با "ارزیابی" در زمان i، k "هم‌ارز" است با j اگر *i,j≤k "w"(0,j) ∈ αβ*، "w"(0,i) ∈ αβ، و برای هر کلمه x در "*w"(i,k)x ∈ β*، Σ، اگر و فقط اگر "*w"(j,k)x ∈ β یا به عبارتی "(E(i,j,k". به سادگی می‌توان توجه کرد که اگر "(E(i,j,k" آنگاه برای همه k <l داریم "(E(i,j,l". به عبارت دیگر، اگر چنانچه i و j هم‌ارز ارزیابی شوند، در آن صورت از آن به بعد هم‌ارز خواهند ماند. همچنین برای مقدار l مشابه، l به i خدمت می‌کند اگر و فقط اگر l به j خدمت کند. قرار می‌دهیم "(E(i,j" اگر یک k وجود داشته باشد که (E(i,j,k.
فرض کنید که p تعداد وضعیت‌ها در کمترین ماشین متناهی معین Aβ* باشد که زبان *β را تشخیص می‌دهد. اکنون به بیان دو لم دربارهٔ دو مفهوم بالا می‌پردازیم.
لم 1
برای هر زمانی چون k، در میان زمان‌های i و j که i,j<k به طوریکه (w(0,i و (*w(0,j ∈ αβ و تعداد هم‌ارزی‌های ایجاد شده توسط (E(i,j,k به وسیله p متناهی شده‌است.
لم 2
"W" ∈ αβω اگر و فقط اگر زمانی چون i وجود داشته باشد که به تعداد نامتناهی زمان هم‌ارز با i باشد که به i خدمت کند.
هر دو مفهموم "خدمت کردن" و "هم‌ارزی" در لم 2 مورد استفاده قرار گرفته‌است. اکنون از این لم برای ساختن یک ماشین مولر برای زبان αβω استفاده می‌کنیم. ماشین پیشنهادی یک کلمه را قبول می‌کند اگر و فقط اگر زمان i وجود داشته باشد که سمت راست لم 2 را ارضا گرداند. ماشین مذکور در ادامه توصیف شده‌است. توجه شود که این ماشین، یک ماشین قطعی مولر خواهد بود.
این ماشین شامل p+2 ماشین متناهی
قطعی و یک کنترل‌کننده مستر باشد که p سایز Aβ* می‌باشد. یکی از p+2 ماشین قادر است تا *αβ را تشخیص دهد و این ماشین در هر چرخه ورودی می‌گیرد. در هر زمان i یا کنترل‌کننده مستر ارتباط برقرار می‌کند، خواه "*w"(0,i) ∈ αβ برقرار باشد و یا خیر. باقی این p+1 ماشین کپی‌هایی از Aβ* هستند. مستر می‌تواند یک ماشین Aβ* را فعال یا غیر فعال گرداند. اگر مستر آن را غیرفعال گرداند، آنگاه آن در حالت ابتدایی خود باقی مانده و نسبت به ورودی‌ها بی‌توجه خواهد شد. اگر مستر آن را فعال گرداند، سپس آن ماشین داده را خوانده و حرکت می‌کند تا زمانی که مستر آن را غیرفعال گردانیده و وادار به بازگشت به حالت ابتدایی کند. مستر قادر است تا یک ماشین Aβ* را به تعداد دفعاتی که مایل است فعال و غیرفعال گرداند. مستر در هر لحظه اطلاعات زیر را دربارهٔ ماشین‌های Aβ* ذخیره می‌کند.
برای خروجی، مستر یک جفت چراغ سبز و قرمز را برای هر ماشین Aβ* داراست.اگر یک ماشین به حالت غیرفعال برود، چراغ قرمز روشن می‌شود. چراغ سبز ماشین M که در زمان j فعال شده‌است در دو حالت زیر در زمان i روشن خواهد بود:
لم 4
برعکس، اگر ماشین Aβ* مانند M وجود داشته باشد که چراغ سبزش بینهایت بار روشن شده بوده باشد و چراغ قرمزش تنها دفعات متناهی زده باشد، آنگاه زمان‌های نامتناهی وجود خواهد داشت که هم‌ارز بوده و به آخرین زمانی که ماشین M فعال شده‌است، خدمت می‌کند.
لم 5
"w ∈ αβω اگر و فقط اگر برای برخی ماشین‌های Aβ* چراغ سبز تعداد دفعات نامتناهی فلاش زده و چراغ قرمز تنها دفعات متناهی فلاش می‌زند.
توصیف بالا از یک ماشین کامل می‌تواند به عنوان یک ماشین قطعی گسترده در نظر گرفته شود. اکنون باید شرط پذیرش مولر تعریف گردد. در این ماشین گسترده، μ را مجموعه حالت‌های مرتبط با ماشین nام از نوع Aβ* تعریف می‌کنیم که در آن چراغ سبز فلاش زده و چراغ قرمز فلاش نمی‌زند. فرض کنید ν مجموعه حالت‌هایی باشد که در آن چراغ قرمز مربوط ماشین nام فلاش نمی‌زند. در نتیجه، شرط پذیرش مولر خواهد بود:
این شرط، ساخت ماشین مولر مورد نظر را به اتمام می‌رساند.
در علوم کامپیوتر گسترش در خط به معنی جایگزینی دستور فراخوانی یک تابع با متن خود آن تابع است. این کار به صورت
دستی توسط برنامه‌نویس (به‌طور مثال به وسیله کلیدواژه‌های تعریف‌شده زبان) یا به صورت خودکار (توسط
کامپایلر) انجام می‌شود.
این عمل بسیار شبیه به گسترش ماکرو است، ولی تفاوت عمدهای که گسترش در خط
دارد این است که در زمان کامپایل انجام می‌شود ولی جایگزینی ماکروها در زمان پیش از کامپایل صورت
می‌گیرد و متن برنامه ورودی تحلیل‌گر کامپایلر تغییر پیدا می‌کند. مزیت گسترش در خط نسبت به ماکرو این
است که ایرادهای ماکرو را از قبیل احتمال رعایت نشدن اولویت عملیات ریاضی ندارد.
گسترش در خط تأثیر زیادی بر عملکرد کامپایلر دارد و یکی از بهینه‌سازی‌های ساده در کامپایلرها است که می‌تواند منجر به افزایش سرعت شود. البته گسترش در خط بیش از حد به دلیل اشغال کردن قسمت عمده‌ای حافظه نهان دستورها ممکن است باعث کندتر شدن برنامه گردد. بررسی عملکرد گسترش در خط در مقاله‌های دهه ۸۰ تا ۹۰ میلادی در سال ۱۹۹۹ توسط Jones و Marlow انجام شده‌است
همان‌طور که گفته شد گسترش در خط از گسترش ماکرو سریع‌تر است و دلیل آن این است که در گسترش در خط سر بار فراخوانی تابع (که شامل ذخیره‌سازی مقادیر ثبّات‌ها و پرش است) دیگر وجود ندارد و خطوط مربوط به متن تابع مستقیماً اجرا می‌شود. از جهت دیگر اما گسترش در خط می‌تواند باعث هدر رفتن حافظه شود زیرا به ازای هر محل از برنامه که تابع فراخوانی شده باشد، یک رونوشت از متن تابع در آن‌جا اضافه می‌گردد. در نتیجه استفاده از گسترش در خط معمولاً در حالتی که متن تابع کوتاه است می‌تواند کارساز باشد.
به‌طور مثال در زبان ++C، توابعی که عضو کلاس‌ها هستند در صورتی که در داخل تعریف کلاس تعریف شوند به‌طور پیش‌فرض در خط سازی می‌شوند. در غیر این صورت برنامه‌نویس می‌بایستی صراحتاً از کلیدواژه inline استفاده کند. همچنین دلیل اشاره شده بالا، کامپایلر این زبان، توابع بزرگی که برنامه‌نویس صراحتاً درخواست خطی‌سازی آن‌ها را کرده‌است، خطی‌سازی نمی‌کند.
همچنین در برنامه‌نویسی تابعی، گسترش در خط معمولاً پس از تبدیل کاهش بتا صورت می‌گیرد.
گسترش در خط سر بار فراخوانی تابع را کاهش می‌دهد ولی دلیل اصلی انجام آن زمینه‌سازی برای بهینه‌سازی‌های دیگر است زیرا گسترش در خط اندازه برنامه را زیاد می‌کند و بهینه‌سازی‌های بهتری بر روی برنامه‌های با اندازه بزرگتر قابل انجام است
پیش‌بینی اثر نهایی گسترش در خط بر روی عملکرد برنامه پیچیده‌است و به دلیل اثر آن بر روی حافظه نهان دستورها، بسته به برنامه و اندازه حافظه نهان متفاوت است
همچنین میزان این تأثیر بین زبان‌های مختلف متفاوت است. به‌طور مثال در زبان‌های سطح پایین مانند C و Fortran، به اندازه ۱۰–۲۰٪ افزایش سرعت مشاهده می‌شود، در حالی که در زبان‌های سطح بالاتر و انتزاعی‌تر گسترش در خط می‌تواند چندین مرحله از اجرای برنامه را حذف کند. مثال این‌گونه زبان‌ها، زبان سلف (زبان_برنامه‌نویسی) است که ضریب بهبودی بین ۴ تا ۵۵ داشته‌است
کامپایلرها از روش‌های مختلفی برای تشخیص اینکه چه تابعی را گسترش در خط دهند، استفاده می‌کنند. این روش‌ها عبارتند از:
گسترش در خط در بسیاری از زبان‌ها به صورت خودکار توسط کامپایلر صورت می‌گیرد و کامپایلر بررسی می‌کند که آیا این عمل برای سرعت برنامه مفید است یا خیر. همچنین کلیدواژه‌هایی مانند inline نیز در برخی از زبان‌ها به عنوان پیشنهادی از طرف برنامه‌نویس برای در خطی سازی تابع وجود دارد. هرچند که همان‌طور که گفته شد این کلیدواژه‌ها کامپایلر را مجبور به انجام این عمل نمی‌کند.
به‌طور کلی توسعه‌دهندگان کامپایلرها از الگوریتم جستجوی کاشف و روش‌های مکاشفه‌ای در طراحی کامپایلر استفاده می‌کنند تا تشخیص دهند که در چه جایی نیاز به گسترش در خط می‌باشد.
پس از تشخیص اینکه کدام توابع باید گسترش در خط داده شوند، انجام این عمل معمولاً ساده است. کامپایلر می‌تواند که این عمل را در یک نمایش میانی سطح بالا مانند درخت نحو انتزاعی انجام دهد یا اینکه گسترش در خط در سطح پایین صورت گیرد. در هر دو حالت کامپایلر ورودی‌های تابع را حساب می‌کند، آن‌ها را در متغیرهایی قرار می‌دهد و در نهایت متن تابع را با محل فراخوانی آن تابع، جایگزین می‌کند.
پیوند دهندهها نیز می‌توانند گسترش در خط انجام دهند. پیونددهنده‌ها توابعی را که از کتابخانه‌های دیگر استفاده شده و در متن برنامه اولیه موجود نبوده را گسترش در خط می‌دهند.
در مثال زیر یک گسترش در خط به صورت دستی انجام شده‌است:
int pred(int x) {
"قبل از در خط سازی:"
"بعد از آن:"
int f(int y) {
پیش از C99 در زبان سی در خط سازی به کمک ماکروها انجام می‌شد. مزایای گسترش در خط نسبت به ماکروها عبارتند از:
بی‌یارنه استراس‌تروپ خالق زبان سی پلاس‌پلاس نیز استفاده از توابع در خط را به جای ماکروها توصیه می‌کند.
یک درخت رونده اتوماتا یک نوع اتوماتا متناهی است که به جای رشته‌ها درخت‌ها را تحلیل می‌کند. این مفهوم توسط Aho و Ullman پیشنهاد شده‌است.
این درخت بسیار شبیه درخت گرامر درخت منظم و ماشین درختی به عبارتی می‌توان گفت این درخت نمایشی متفاوت از دو درخت یاد شده‌است.
تمام درخت‌های به این شکل دودویی هستند و دارای برچسب‌هایی با الفبای ثابت هستند در واقعیت این درخت‌ها دارای تعدادی حالت هستند که با آمدن حروف جدید مانند اتومات‌های واقعی از حالتی به حالت دیگر حرکت می‌کند و در نهایت اگر در حالت تأیید به کار خود پایان داد که آن درخت تأیید می‌شود و اگر در حالت رد یا حلقهٔ بی‌نهایت به کار خود پایان داد آن درخت رد می‌شود.
اگر بخواهیم به صورت ریاضی تر آن را بگوییم هر درخت غیر قطعی رونده اتوماتا یک شش‌تایی A = (Q, Σ, I, F, R, δ) است که Σ الفبایی ثابت بوده، Q مجموعهٔ حالت‌ها ،I حالت‌های شروع، F حالت‌های تأیید و R حالت‌های رد است.
همان‌طور که در تمامی اتومات‌ها رابطه‌هایی وجود دارد که با دیدن یک حرف از حالی به حالت دیگر می‌رود.
δ ⊆ (Q × { root, left, right, leaf } × Σ × { up, left, right } × Q)
Q اول به معنای حالت فعلی است که در حالت فعلی یکی از چهار حالت مشخص شده را داریم. منظور از Σ حرف دیده شده‌است و مورد بعدی به معنای حرکتی است که می‌کنیم که یکی از بالا، راست و چب است و Q آخر نیز به معنای حالتی است که در آن می‌رویم. پس رابطه‌های به صورت ۵ تایی‌هایی درین اتوماتا نمایان می‌شوند.
یک مثال ساده از این درخت برای اجرا کردن الگوریتم جستجوی عمق اول بر روی درخت ورودی است. طبعاً برای هر مثال باید پارامترهای تعریف را مشخص کنیم. این اتومات‌های ۳ حالت دارد، formula_1.
در ابتدا از ریشه که حالت ۰ است شروع می‌کنیم. حال با آمدن هر راس جدید به حالت چپ وارد می‌شویم و در صورتی که در برگ درخت باشیم به بالا می‌رویم که متناظر با همان حرکت بالا بود که در تعریف از آن یاد کرده بودیم. همان‌طور که گفتیم درین درخت می‌توان مشخص کرد که آیا زیر درختی پردازش شده‌است یا نه در این‌جا هم هر جا که زیر درخت سمت چپ پردازش شده باشد باید به حالت سمت راست برویم.formula_2
بر خلاف ماشین درختی، درخت رونده اتوماتا به سختی قابل تجزیه و تحلیل است و حتی خواص سادهٔ آن نیز به سختی اثبات می‌شود و بعضاً اثبات‌های بسیار پیچیده و غیر بدیهی دارند.
درین به برخی از خواص آن که اثبات شده‌است اشاره می‌کنیم
منطق جدایی تعمیمی از منطق هور (Hoare logic) است که هدف اصلی ابداع آن، بررسی و وارسی ریاضی برنامه‌هایی است که داده‌ها را در حافظه تغییر می‌دهند و خانه‌های مختلف از حافظه هستند که در معرض تحول هستند. این منطق توسط جان سی رینولدز, Peter O'Hearn, Samin Ishtiaq و Hongseok Yang معرفی شده‌است.
در برنامه‌هایی که از اشاره‌گر بهره می‌برند، استفاده از منطق‌های پیشین نظیر منطق هور ممکن نیست. علت آن است که در این‌جا، هر خانه از حافظه اهمیت دارد و باید زبان منطق مورد نظر، توانایی اشاره به قسمت‌های مختلف از حافظهٔ رایانه را داشته باشد. به این دلیل، نیاز به تعریف عملگری جدید حس شد. این احساس نیاز، منجر به تعریف عملگر formula_1 شد که به صورت شهودی یعنی دو عملوند آن، در قسمت‌های مجزا از حافظهٔ پشته هستند؛ لذا، با شکل‌گیری این منطق و ابزارهای آن، وارسی الگوریتم‌ها و برنامه‌های موازی امکان‌پذیر شده‌است.
منظور ما در این‌جا از حالت، وضعیت مقادیر موجود در حافظهٔ تصادفی و همچنین حافظهٔ پشته است. اعلان formula_2 در منطق جدایی، تعدادی حالت را مشخص می‌کند که در آن‌ها formula_2 درست است. با تعریف استقرایی ساختار لغوی منطق جدایی، عبارت formula_4 حالاتی را مشخص می‌کند که formula_2 در یک قسمت از ساختار حافظهٔ تصادفی/پشته و formula_6 در قسمتی کاملاً مجزا از آن درست باشد. پس تعریف استقرایی زبان منطق به این صورت است:
حال می‌توان این عملگرها را در مفاهیم منطق مرتبهٔ اول به کار برد و با آن عباراتی در مورد تأثیر یک برنامه بر حافظه گفت یا در بیان مشخصات حافظه استفاده کرد.
در این منطق هم مانند دیگر منطق‌ها می‌توان اصول استنتاج تعریف و طبق آن‌ها استدلال کرد. برای مثال طبق تعریف عملگر formula_10، داریم:
تمامی قواعد استنتاج در منطق هور، در منطق جدایی هم معتبر هستند؛ و همچنین در این منطق، قاعدهٔ قاب هست که برای سه‌تایی‌های هور تعریف می‌شود. یک سه‌تایی هور، به شکل کلی
formula_13 است که یعنی اگر، حافظه قبل از اجرای برنامهٔ formula_14، در حالت formula_2 باشد، پس از اجرای آن به حالت formula_6 می‌رود. حال طبق قاعدهٔ قاب داریم:
به‌وسیلهٔ این قاعده، می‌توان استدلالات محلی در مورد حافظه را گسترش داد و در مورد بخش بزرگ‌تری از حافظه صحبت کرد. استدلال محلی برای یک برنامهٔ formula_14، یعنی استدلال در مورد تمامی متغیرها و خانه‌های حافظه که توسط formula_14 تغییر می‌یابند. این‌ها را O'Hearn، ردپای formula_14 می‌نامد. او بیان می‌دارد که:
«برای فهم رفتار یک برنامه، باید در مورد خانه‌هایی اطلاع کسب کنید که توسط آن برنامه تغییر می‌یابند. ارزش دیگر خانه‌ها به صورت خودبه‌خود ثابت باقی می‌ماند.»
منطق جدایی به دلیل کاربرد در درستی‌یابی برنامه‌های کامپیوتری، عملکرد وسیعی در ابزارهای مختلف وارسی مدل‌ها و همچنین کاربردهای صنعتی دارد. به‌نحوی‌که O'Hearn که از مبدعین این منطق بوده، از سال ۲۰۱۳ در شرکت فیسبوک مشغول به کار است.
به صورت کلی، ابزارهایی که از منطق جدایی استفاده می‌کنند در دسته‌های مختلف هستند:
چرخان‌تاژک‌داران یا داینوفلاژله‌ها نام یک شاخه از حبابچه‌داران است که تک‌یاخته و اکثراً دریازی هستند.
این جانوران پلانکتونی‌اند و در آن‌ها کپسول مشخصی از جنس سلولز وجود دارد. کپسول دو قسمتی است و شیاری در آن وجود دارد که در برگیرنده دو تاژک است، یکی از تاژک‌ها رو به عقب امتداد دارد و دیگری تقریباً افقی است. معمولاً دارای لکه چشمی و تعدادی زیاد کلروپلاست قهوه ای، زرد یا مایل به سبز هستند. هسته درشت و یکی است. حضور تعدادی کیسه بزرگ که توسط کانال‌ها یا مجاری به بیرون راه دارند، از مشخصات این جانوران است. این حجم‌های غیرانقباضی که پوسول (pusule) نام گرفته‌اند، گرچه به سیستم کریچهای شباهت ندارند ولی احتمالاً درگرفتن آب و در عمل هیدرواستاتیک نقش ایفا می‌کنند.
دسته‌ای از چرخان‌تاژک‌داران بدون رنگیزه هستند و به‌طریق جانوران تغذیه می‌کنند. از نظر ریخت‌شناسی شبه آمیب‌ها هستند.
تولید مثل در چرخان‌تاژک‌داران تا حدودی شبیه تقسیم دوتایی طولی تاژکداران است و در امتداد یک صفحه مورب صورت می‌گیرد. این نوع تقسیم حتی در کیست نیز اتفاق می‌افتد. حتی در حالت کیستی تقسیم می‌تواند از نوع چندتایی باشد. افراد حاصل از تقسیمات متوالی دوتایی گاهی به‌طور موقت به هم چسبیده می‌مانند (مانند زنجیر). شواهد کافی از ممزوج شدن گامت‌ها یا یاخته‌های جنسی وجود ندارد.
یک نمونه معروف از تاژک‌داران چرخان، سراتیوم (Ceratium) است که نمونه‌ای زره دار و دارای خار و دو تاژک است و به روش گیاهان تغذیه می‌کند. زره یا تک (Theca)، ضخیم و غیرقابل انعطاف است. خارها از امتداد بخش‌هایی از صفحات سازنده زره ایجاد شده‌اند و راست یا خمیده‌اند. خار جلویی، خار راسی (Apical spine) و خار یا خارهای عقبی (تا ۴ خار عقبی می‌تواند وجود داشته باشد)، خار یا خارهای مقابل راسی (Anapical spine) نامیده می‌شوند. طبق معمول بین صفحات سازنده زره دو شیار وجود دارد. شیار در موقعیت استوایی یا افقی به نام حلقه یا انولوس (Annulus) نیز نامیده می‌شود که معمولاً با یک صفحه به نام سینگولوم (Cingulum) پوشیده شده‌است. از میان منافذ زره برجستگی‌ها یا پاپیلاهای سیتوپلاسمی متعددی خارج و به شبکه‌ای از پاهای کاذب منتهی می‌شوند. این پاها سبب صید جانداران ریز می‌شوند، تغذیه گاهی از این نوع است. انواع آب شیرین دارای کلروپلاست‌های سبز و انواع دریایی زرد یا قهوه‌ای هستند.
نمونه دیگر نوکتیلوکا (Noctiluca)است که همچون یک کره بزرگ (ژلاتینی) به قطر 1mm یا بیشتر است. شناور بر سطح دریا و معمولاً نزدیک ساحل یافت می‌شود. بی‌رنگ و بیگانه‌خوار است. یک تاژک کوتاه ضخیم و یک تاژک ظریف دارد. این موجود دارای خاصیت زیست‌تابی و مسئول فسفرسانس آب‌های ساحلی دریاها است.
در بازی زندگی کانوی (و اتوماتای سلولی مربوط) سرعت نور یک نرخ انتشار در سراسر شبکه از دقیقاً یک گام (به صورت افقی عمودی و یا مورب) در هر نسل است. در یک نسل یک سلول تنها می‌تواند همسایه‌های نزدیکش را تحت تأثیر قرار دهد و بنابراین سرعت نور (در قیاس با سرعت نور در فیزیک) حداکثر نرخی که با آن اطلاعات می‌توانند منتشر شوند. از این رو یک حد بالا برای سرعتی که با آن هر الگوی حرکت می‌کند داریم.
همان‌طور که در فیزیک سرعت نور با حرف <math/>. این در عوض مرجعی است برای توصیف میانگین سرعت انتشار هر سفینه فضایی. برای مثال یک گلایدر گفته می‌شود که سرعتی برابر <math/>توسط یک سلول ترجمه شود. به طور مشابه «سفینه فضایی سبک» گفته شده است که سرعتی برابر <math/>هر حالت داده شده ۴ نسل طول می‌کشد تا توسط دو سلول ترجمه شود.
در حالی که <math/> یک کران بالای مطلق برای سرعت انتشار است حداکثر سرعت یک سفینه فضایی در بازی زندگی کانوی در واقع <math/>. دلیل این امر آن است که ساخت یک سفینه فضایی که بتواند در هر نسل حرکت کند غیرممکن است. (هر چند این موضوع در حالت کلی برای اتوماتای سلولی درست نیست؛ به عنوان مثال بسیاری از سفینه‌های فضایی با سرعت نور در دانه‌ها وجود دارند) با این حال این برای اشیاء ممکن است که با سرعت نور سفر کنند اگر آن‌ها به جای فضای خالی از مدیوم حرکت کنند. چنین رسانه ای شامل مسیرهای کهیر و خطوط سلول‌های زنده و مرده است. اگر با سرعت نور د کهکشان حرکت کنیم در30ثانیه به ماه میرسیم و 8/30دقیقه به خورشید میرسیم و2000سال طول میکشد از کهکشان راهشیری خارج شدیم و چند میلیون سال طول میکشد تا به نزدیک ترین کهکشان راهشیری برسیم!
الگوهای خاص می‌توانند به نظر برسند که با سرعت بیشتر از یک سلول در هر نسل حرکت می‌کنند اما مانند پدیده‌های سریع تر از نور در فیزیک این امر گمراه کننده است.
به عنوان مثال "Star Gate", ترتیبی از سه گلایدر همگرا که متقابلاً در برخورد نابود می‌شوند. اگر یک سفینه فضایی سبک (LWSS) با گلایدرهای همگرا برخورد کند به نظر می‌رسد که در ۶ نسل ۱۱ حرکت رو به جلو انجام داده و در نتیجه سفری سریع تر از نور داشته است. این توهم به این خاطر اتفاق می‌افتد که واکنش حاصل از نابودی گلایدر با ایجاد و به زودی تخریب یکی دیگر از LWSSها همراه است. هنگامی که LWSS ورودی با گلایدرهای همگرا برخورد می‌کند به جای دیگر منتقل نمی‌شود اما به جای آن واکنش را به طوری که LWSS به تازگی ایجاد شده می‌تواند زنده بماند تغییر می‌دهد. تنها سیگنالی که منتقل می‌شود این است که تعیین کند آیا LWSS خروجی باید زنده بماند یا نه. این نیازی به رسیدن به مقصد خود ندارد تا بعد از اینکه LWSS منتقل شده است و بنابراین هیچ اطلاعاتی نیاز به سفر سریع تر از نور ندارد.
فرم باکوس نائور توسعه یافته یا EBNF در علوم رایانه ای، یک خانواده از نمادهای متاسینتاکس است که هر کدام از آن‌ها می‌توانند برای بیان یک دستور زبان مستقل از متن استفاده شود. EBNF برای توصیف زبان صوری استفاده می‌شود که می‌تواند یک زبان برنامه‌نویسی کامپیوتری هم باشد. این‌ها شامل فرمت‌های بنتاکس (BNF) است. ابتدا EBNF توسط نیکلاوس ویرت توسعه داده شد و برخی از مفاهیم را به صورت نحوی به کار برد. با این حال بسیاری از انواع EBNF در استانداردسازی یک استاندارد) (ISO/IEC 14977 را برای EBNF مورد تصویب قرار داده‌است. این مقاله از EBNF که توسط استاندارد مشخص شده‌است را برای تمام مثال‌های EBNFها استفاده می‌کند. دیگر انواع EBNF از قوانین نحوی متفاوت استفاده می‌کنند).
EBNF یک کد است که دستور زبان رسمی را بیان می‌کند. یک EBNF شامل علائم ترمینال و قوانین تولید نامحدود است که محدودیت‌هایی را در مورد این که چگونه نمادهای ترمینال را می‌توان به یک ترتیب قانونی ترکیب کرد ارائه می‌کند. مثال‌هایی از نمادهای ترمینال عبارت اند از حروف الفبا، علائم نگارشی و نشانه‌های سجاوندی.
EBNF قوانین تولید را تعریف می‌کند که در آن دنباله‌های نمادها به ترتیب به صورت غیرانتصابی اختصاص داده می‌شوند.
digit = "0" | digit excluding zero ;
این قوانین تولید به صورت عددی غیرمنتظره ای است که در سمت چپ قرار داشته و آن‌ها را تعریف می‌کند. نمودار عمودی امکان جایگزینی را نشان می‌دهد و نمادهای ترمینال علامت نقل قول همراه یا یک نقطه متوقف می‌شود. از این رو یک رقم بوده و می‌تواند ۱ یا ۲ یا ۳ … ۹ باشد. یک قانون تولیدی همچنین می‌تواند دنباله ای از پایانه‌ها یا غیر ترمینال‌ها می‌باشد که هر کدام با یک کاما جدا شده‌اند.
twelve = "1", "2" ;
two hundred one = "2", "0", "1" ;
three hundred twelve = "3", twelve ;
twelve thousand two hundred one = twelve, two hundred one ;
ساختارهایی که می‌توانند حذف یا تکرار شوند درون آکولاد نشان داده می‌شوند.
natural number = digit excluding zero, { digit } ;
در این مورد، رشته‌های 1, 2, … , 10, 12345, … عبارت‌های صحیح هستند. برای نشان دادن این مورد، همه موارد را در داخل پارانتزهای مجاور قرار می‌گیرند. ممکن است اغلب به صورت خودسرانه تکرار شوند. از جمله این که در همه موارد وجود ندارد یک گزینه را می‌توان از طریق براکت مربعی نشان داد و این بدان معنی است که هر چیزی که درون مربع قرار دارد ممکن است فقط یک بار و نه در همه جا باشد.
integer = "0" | ["-"], natural number ;
بنابراین یک عدد صحیح صفر یا یک عدد طبیعی بیش از یک عدد اختیاری باشد.
EBNF همچنین در میان موارد دیگر به نحوی برای توصیف تکرار ما اقدام می‌کند تا برخی از بخش‌های تولید را حذف کرده و نظرات را در دستور زیاد EBNF قرار دهد.
در زیر استاندار ISO/IEC 14977 پیشنهاد شده توسط آر. اس اسکون است در صفحه ۷ و در جدول ۱ نشان داده شده‌است.
حتی EBNF را می‌توان با استفاده از خود EBNF توصیف نمود. دستورالعمل زیر را در نظر بگیرید :
letter = "A" | "B" | "C" | "D" | "E" | "F" | "G"
symbol = "[" | "]" | "{" | "}" | "(" | ")" | "<" | ">"
character = letter | digit | symbol | "_" ;
identifier = letter , { letter | digit | "_" } ;
terminal = "'" , character , { character } , "'"
lhs = identifier ;
rhs = identifier
rule = lhs , "=" , rhs , ";" ;
grammar = { rule } ;
یک زبان برنامه‌نویسی مانند پاسکال تعاریف را می‌تواند در EBNF به شرح زیر تعریف کند.
زبان به راحتی می‌تواند با جریان‌های کنترل، عبارات ریاضی و دستورالعمل‌های ورودی و خروجی گسترش یابد و سپس یک زبان برنامه‌نویسی کوچک قابل استفاده است.
هر دستور زبان EBNF نیز می‌تواند در BNF نمایش داده شود. اگر چه نمایه‌های آن دارای عمر طولانی تری می‌باشند. به عنوان مثال گزینه‌ها و تکرارها نمی‌تواند به‌طور مستقیم در BNF بیان شود و نیازمند استفاده از یک قانون متوسط یا تولید جایگزین است که تعریف شده یا چیزی را به‌طور اختیاری و تکراری تولید کرده‌است. همان سازنده‌ها هنوز هم می‌توانند در EBNF استفاده شوند.
BNF از نماد (<,>, |, ::=) برای خود استفاده می‌کند، اما نقل قول‌ها در اطراف رشته‌های ترمینال را شامل نمی‌شود. این مانع از این کاراکترها در زبان می‌شود و نیاز به یک نماد ویژه برای رشته خاصی دارد. EBNF پایانه‌ها به وضوح در داخل علامت “ “ یا ' ' محصور می‌شوند. براکت زاویه را برای غیرترمینال‌ها می‌توان حذف نمود. همچنین BNF تنها می‌تواند یک قاعده را در یک خط نشان دهد. در حالی که در EBNF دستورهای متناوب وجود داشته‌است. علاوه بر این، EBNF شامل مکانیزیم‌هایی برای پیشرفت بوده که تعریف تعدادی از تکرارها به استثنای جایگزین‌های کامنت و غیره را دارد.
معاهده‌های زیر استفاده می‌شوند.
۱- هر شناسه فرعی BNF به عنوان یک یا چند عبارت با هم ترکیب شده‌اند.
۲- یک فراشناسایی که با استفاده از علایم پایان می‌یابد. براساس نام نماد ترمینال BNF تمدید شده‌است.
کاراکترهای نمادی که هر اپراتور BNF از آن تمدید شده و اولویت ضمنی آن را نشان می‌دهند.
. terminator-symbol
اولویت عادی توسط جفت‌های براکت زیر لغو می‌شود.
' first-quote-symbol first-quote-symbol '
نماد اول آپستروف است که توسط ISO/IEC 646:1991 تعریف شده‌است. با این حال این استاندارد کاراکتر ISO هفت بیتی را برای تبادل اطلاعات را به عنوان یک مرجع قانونی و بدون هیچ نامی از سایر مجموعه کاراکترها را دارد؛ بنابراین به‌طور رسمی، هیچ گونه سردرگمی با کاراکترهای یونیکد خارج از محدوده هفت بیتی ASCTE را ندارد.
به عنوان مثال قوانین زیر برای بیان تکرار نشان داده شده‌اند.
gg = {3 * aa}, "G";
رشته‌های ترمینال تعریف شده توسط این قوانین به شرح زیر می‌باشند.
با توجه به استاندارد ISO 14977، EBNF به معنی توسعه پذیری بوده و دو امکان برای آن ذکر شده‌است. اولین قسمت بخشی از زبان EBNF بوده که دارای دنباله خاصی است و متن دلخواه در یک دنباله خاص فراتر از محدوده استاندارد EBNF می‌باشد.
برای مثال کاراکتر فضای خالی می‌تواند توسط قوانین زیر بیان شود.
دومین حالت برای توسعه با استفاده از این واقعیت است که پرانتز در EBNF نمی‌تواند در کنار شناسه قرار گیرد؛ لذا EBNF زیر معتبر است.
براساس شرایط مثال زیر EBNF معتبر نیست.
بنابراین گسترش EBNF می‌تواند با استفاده از این علامت‌ها انجام شود. به عنوان مثال در گرامر Lisp، تابع کاربردی را می‌توان با قانون زیر بیان نمود.
یادگیری عمیق، یادگیری ژرف یا ژرف‌آموزی (به بیانی دیگر: یادگیری ژرف ماشین، یادگیری ساختار ژرف یا یادگیری سلسله مراتبی) یک زیر شاخه از یادگیری ماشین و بر مبنای مجموعه‌ای از الگوریتم‌ها است که در تلاشند تا مفاهیم انتزاعی سطح بالا در دادگان را مدل نمایند که این فرایند را با استفاده از یک گراف عمیق که دارای چندین لایه پردازشی متشکل از چندین لایه تبدیلات خطی و غیرخطی هستند، مدل می‌کنند. به بیان دیگر پایهٔ آن بر یادگیری نمایش دانش و ویژگی‌ها در لایه‌های مدل است.
به قولی دیگر «یادگیری عمیق» یک نوع «یادگیری ماشین» به همراه شبکه‌های عصبی چندلایه است که با دقتی فزاینده الگو‌های موجود در داده‌ها کشف کرده و به همین‌خاطر می‌تواند علائق کاربر را بشناسد، اشیا را شناسایی کرده و زبان‌ها را بفهمد.
یک نمونه آموزشی (برای نمونه: تصویر یک گربه) می‌تواند به صورت‌های گوناگون بسان یک بردار ریاضی پر شده از مقدار به ازای هر پیکسل و در دید کلی‌تر به شکل یک مجموعه از زیرشکل‌های کوچک‌تر (نظیر اعضای صورت گربه) مدل‌سازی شود. برخی از این روش‌های مدل‌سازی سبب ساده شدن فرایند یادگیری ماشین (برای نمونه: تشخیص تصویر گربه) می‌شوند.
در یادگیری عمیق امید به جایگزینی استخراج این ویژگی‌های تصویر به دست بشر (مانند اعضای گربه) با روش‌های کامل‌خودکار بی‌نظارت و نیمه‌نظارتی وجود دارد.Song, Hyun Ah, and Soo-Young Lee. "Hierarchical Representation Using NMF." Neural Information Processing. Springer Berlin Heidelberg, 2013.
انگیزهٔ نخستین در به وجود آمدن این ساختار یادگیری از راه بررسی ساختار عصبی در مغز انسان الهام گرفته شده‌است که در آن یاخته‌های عصبی با فرستادن پیام به یکدیگر درک را امکان‌پذیر می‌کنند.Olshausen, Bruno A. "Emergence of simple-cell receptive field properties by learning a sparse code for natural images." Nature 381.6583 (1996): 607-609.
بسته به فرض‌های گوناگون در مورد نحوهٔ اتصال این یاخته‌های عصبی، مدل‌ها و ساختارهای مختلفی در این حوزه پیشنهاد و بررسی شده‌اند، هرچند که این مدل‌ها به صورت طبیعی در مغز انسان وجود ندارد و مغز انسان پیچیدگی‌های بیشتری را دارا است. این مدل‌ها نظیر شبکه عصبی عمیق، شبکه عصبی هم‌گشتی، شبکه باور عمیق و چندین نمونه دیگر؛ پیشرفت‌های خوبی را در حوزه‌های پردازش زبان‌های طبیعی، پردازش تصویر ایجاد کرده‌اند.
در حقیقت عبارت یادگیری عمیق، بررسی روش‌های تازه برای شبکه عصبی مصنوعی است. Ca. 7:45.
یادگیری عمیق، رده‌ای از الگوریتم‌های یادگیری ماشین است که از چندین لایه برای استخراج ویژگی‌های سطح بالا از ورودی خام استفاده می‌کنند. به بیانی دیگر، رده‌ای از تکنیک‌های یادگیری ماشین که از چندین لایهٔ پردازش اطلاعات و به‌ویژه اطلاعات غیرخطی بهره می‌برد تا عملیات تبدیل یا استخراج ویژگی نظارت‌شده یا نظارت‌نشده را عموماً با هدف تحلیل یا بازشناخت الگو، کلاس‌بندی، خوشه‌بندی انجام دهد.
برای نمونه، در پردازش تصویر، لایه‌های پست‌تر می‌توانند لبه‌ها را تشخیص دهند، در حالی که لایه‌های عالی‌تر ممکن است ویژگی‌های پرمعناتر برای انسان، همچون حروف یا چهره‌ها، را تشخیص دهند.
یادگیری عمیق زیرشاخه‌ای از یادگیری ماشین است که از لایه‌های متعدد تبدیلات خطی به منظور پردازش سیگنال‌های حسی مانند صدا و تصویر استفاده می‌کند. ماشین در این روش هر مفهوم پیچیده را به مفاهیم ساده‌تری تقسیم می‌کند، و با ادامهٔ این روند به مفاهیم پایه‌ای می‌رسد که قادر به تصمیم‌گیری برای آن‌ها است و بدین ترتیب نیازی به نظارت کامل انسان برای مشخص کردن اطلاعات لازم ماشین در هر لحظه نیست. موضوعی که در یادگیری عمیق اهمیت زیادی دارد، نحوهٔ ارائهٔ اطلاعات است. ارائه دادن اطلاعات به ماشین باید به شیوه‌ای باشد که ماشین در کمترین زمان اطلاعات کلیدی را که می‌تواند با استناد به آن‌ها تصمیم بگیرد را دریافت کند. هنگام طراحی الگوریتم‌های یادگیری عمیق می‌بایست به عوامل دگرگونی (به انگلیسی: factors of variation) که اطلاعات مشاهده شده را توضیح می‌دهند توجه کنیم، این عوامل معمولاً عوامل قابل‌مشاهده‌ای نیستند بلکه عواملی هستند که بر روی دستهٔ قابل‌مشاهده تأثیرگذار بوده یا زادهٔ ساختارهای ذهنی انسان برای ساده‌تر کردن مسائل هستند. برای مثال در هنگام پردازش گفتار عوامل دگرگونی می‌توانند لهجهٔ گوینده، سن یا جنسیت او باشند. در هنگام پردازش تصویر یک ماشین، میزان درخشش خورشید یک عامل دگرگونی است. یکی از مشکلات هوش مصنوعی تأثیر زیاد عوامل دگرگونی بر روی اطلاعات دریافتی است. برای مثال بسیاری از پیکسل‌های دریافتی از یک ماشین قرمز در شب ممکن است سیاه دیده بشوند. برای حل این مشکلات بعضاً به درک بالای اطلاعات (در حدود انسان) نیازمندیم و در واقع گاهی یافتن نحوهٔ مناسب نمایش اطلاعات به اندازهٔ خود مسئله سخت و زمان‌بر است.
نخستین الگوریتم عملی یادگیرنده برای پرسپترون‌های چندلایهٔ نظارت‌شده، عمیق و پیش‌خور، در دههٔ ۱۹۶۰ توسط الکسی ایواخننکو - معروف به «پدر یادگیری عمیق» - و والنتن لاپا منتشر شد.Ivakhnenko, A. G. ; Lapa, V. G. (1967). "Cybernetics and Forecasting Techniques". American Elsevier Publishing Co. ISBN <bdi></bdi>. در سال ۱۹۷۱، مقاله‌ای یک شبکهٔ عمیق با هشت لایه را توصیف کرد که عملیات یادگیری را با متد گروهی مدیریت داده (GMDH) انجام داده بود. سایر معماری‌های یادگیری عمیق و به ویژه آن‌هایی که برای بینایی رایانه ساخته شده بودند، در ۱۹۸۰ و با Neocognitron معرفی‌شده توسط کونیهیکو فوکوشیما آغاز گشتند.
لفظ "یادگیری عمیق"، نخستین‌بار در ۱۹۸۶ و توسط رینا دِختِر در زمینهٔ یادگیری ماشین به کار رفت؛ وی در مقاله‌ای تحت عنوان "یادگیری به هنگام جستجو در مسائل ارضای محدودیت" (Learning While Searching in Constraint-Satisfaction-Problems) از این لفظ برای پروسه‌ای استفاده کرد که در آن تمامی راه‌حل‌ها در یک فضای جستجو که به پاسخ مناسب نمی‌رسیدند نیز ذخیره می‌شدند. تحلیل این راه‌حل‌های ذخیره‌شده امکان کنترل بهتر در تلاش‌های بعدی را ممکن می‌ساخت، و به دنبال آن در همان مراحل نخستین از گیر کردن در بن‌بست‌های احتمالی نیز جلوگیری می‌کرد.Rina Dechter (1986). "Learning while searching in constraint-satisfaction problems" . (PDF) University of California, Computer Science Department, Cognitive Systems Laboratory. با این وجود امروزه لفظ یادگیری عمیق عموماً در حوزهٔ شبکه‌های عصبی مصنوعی به کار می‌رود که نخستین‌بار در سال ۲۰۰۰ و توسط ایگور آیزنبرگ و همکاران در حوزهٔ یادشده استفاده شد؛ به‌طور دقیق‌تر، در کتاب "نورون‌های دودویی چندمقداری و جهانی: نظریه، یادگیری و کاربردها" (Multi-Valued and Universal Binary Neurons: Theory, Learning and Applications) و در زمینهٔ نورون‌های حدآستانهٔ بولی.