Кіріспе

Есептеуге қабілеттілік теориясындағы теорема. Есептеуге қабілеттілік теориясында Райс теоремасы бағдарламалардың барлық тривиальды емес семантикалық қасиеттерінің шешілмейтінін көрсетеді. Семантикалық қасиет – бағдарламаның іс-әрекетіне қатысты қасиет (мысалы, "бағдарлама барлық деректер үшін тоқталады ма?"), синтаксистік қасиеттен (мысалы, "бағдарламада if-then-else операторы бар ма?") өзгеше. Тривиальды емес қасиет – бұл әрбір бағдарлама үшін де рас, немесе әрбір бағдарлама үшін де жалған емес. Теорема тоқтау мәселесінің шешілмейтіндігін жалпылайды. Ол бағдарламаларды статикалық талдау мүмкіндігіне елеулі әсер етеді. Мысалы, берілген бағдарламаның дұрыс екенін, тіпті қатесіз жұмыс істейтінін тексертін құралды жасау мүмкін емес. Теорема Генри Гордон Райс есімімен аталады, ол оны 1951 жылы Сиракуз университетіндегі докторлық диссертациясында дәлелдеген.

Кіріспе

Райс теоремасы статикалық талдаудың қандай түрлерін автоматты түрде жүргізуге болатынына теориялық шектеулер қояды. Бағдарламаның синтаксисі мен семантикасын ажыратуға болады. Синтаксис – бағдарламаның қалай жазылғанының ерекшеліктері немесе оның "интенциясы", ал семантика – бағдарламаның орындалғанда қалай жұмыс істейтіні немесе оның "экстенсиясы". Райс теоремасы, егер қасиет тривиальды болмаса (барлық бағдарламалар үшін рас немесе барлық бағдарламалар үшін жалған), тек семантикаға ғана емес, сонымен қатар синтаксиске байланысты бағдарламалардың қасиеттерін анықтау мүмкін емес деп тұжырымдайды. Райс теоремасы бойынша, бағдарлама мен спецификацияны кіріс ретінде алып, бағдарламаның спецификацияны орындап-орындамайтынын тексеріп, басқа бағдарламалардағы қателердің жоқтығын автоматты түрде тексеруге қабілетті бағдарлама жасау мүмкін емес. Бұл кейбір түрдегі қателерді болдырмау мүмкін емес дегенді білдірмейді. Мысалы, Райс теоремасы динамикалық түрде терілген және Тьюринг толық бағдарламалау тілдерінде типтік қателердің жоқтығын тексерудің мүмкін емес екенін көрсетеді. Керісінше, статикалық түрде терілген бағдарламалау тілдері типтік қателерді статикалық түрде болдырмайтын типтік жүйеге ие. Бұл, негізінен, осы тілдердің синтаксисінің (кең мағынада) ерекшелігі ретінде қарастырылуы керек. Бағдарламаның типін тексеру үшін оның бастапқы кодына қарау қажет; бұл операция бағдарламаның гипотетикалық семантикасына ғана емес, басқа да факторларға байланысты. Жалпы бағдарламалық жасақтаманы тексеру тұрғысынан алғанда, бұл белгілі бір бағдарламаның берілген спецификацияға сәйкес келе ме екенін алгоритмдік түрде тексеру мүмкін болмаса да, бағдарламаның дұрыстығын дәлелдейтін қосымша ақпаратты бағдарламаға қосуды немесе бағдарламаны тексеруді жеңілдететін белгілі бір шектеулі форматта жазуды және тек осылайша тексерілген бағдарламаларды қабылдауды талап етуге болады. Тип қауіпсіздігі жағдайында, бұл екі жағдайдың біріншісі типтік түсіндірмелерге, ал екіншісі типтік қорытындыға сәйкес келеді. Тип қауіпсіздігінен асып түсу арқылы, бұл идея Хоар логикасындағы сияқты дәлелдеу түсіндірмелері арқылы бағдарламалардың дұрыстығын дәлелдеуге алып келеді. Райс теоремасын еңсерудің тағы бір жолы – көптеген қателерді ұстайтын, бірақ толық емес әдістерді іздеу. Бұл – абстрактты интерпретация теориясы. Тексерудің тағы бір бағыты – модельдік тексеру, ол тек шекті күйлі бағдарламаларға ғана қолданылады, Тьюринг толық тілдерге емес.

Ресми мәлімдеме

φ — жартылай есептеуге болатын функциялардың қабылданған нөмірлеуі болсын. P — жиынның ішкі жиыны болсын. Егер:
P тривиалды емес: P бос емес және өзіне тең емес. P экстенсиялық: барлық бүтін сандар m және n үшін, егер φm = φn болса, онда m ∈ P ⟺ n ∈ P.
Онда P шешілмейді. Индекстер жиындары тұрғысынан айтқанда, мынаны айтуға болады: Тек ∅ және толық жиын ғана шешіледі.

Клиннің рекурсиялық теоремасы бойынша дәлелдеу

Қарама-қайшылық тудыру үшін, берілген жиын табиғи сандардың тривиальді емес, кеңейтілген және есептелетін жиыны болсын. Бір табиғи сан және бір табиғи сан бар. функцияны былай анықтаймыз: егер , онда , және егер , онда . Клиннің рекурсия теоремасы бойынша, сондай бар, осылайша . Егер болса, онда , бұл жиынның кеңейтілмелілігіне қайшы, себебі , ал керісінше, егер болса, онда , бұл қайтадан кеңейтілмелілікке қайшы, себебі .