Кіріспе
Есептеуге қабілеттілік теориясындағы теорема. Есептеуге қабілеттілік теориясында Райс теоремасы бағдарламалардың барлық тривиальды емес семантикалық қасиеттерінің шешілмейтінін көрсетеді. Семантикалық қасиет – бағдарламаның іс-әрекетіне қатысты қасиет (мысалы, "бағдарлама барлық деректер үшін тоқталады ма?"), синтаксистік қасиеттен (мысалы, "бағдарламада if-then-else операторы бар ма?") өзгеше. Тривиальды емес қасиет – бұл әрбір бағдарлама үшін де рас, немесе әрбір бағдарлама үшін де жалған емес. Теорема тоқтау мәселесінің шешілмейтіндігін жалпылайды. Ол бағдарламаларды статикалық талдау мүмкіндігіне елеулі әсер етеді. Мысалы, берілген бағдарламаның дұрыс екенін, тіпті қатесіз жұмыс істейтінін тексертін құралды жасау мүмкін емес. Теорема Генри Гордон Райс есімімен аталады, ол оны 1951 жылы Сиракуз университетіндегі докторлық диссертациясында дәлелдеген.
In computability theory, Rice's theorem states that all non trivial semantic properties of programs are undecidable. A semantic property is one about the program's behavior (for instance, "does the program terminate for all inputs? "), unlike a syntactic property (for instance, "does the program contain an if then else statement?"). A non trivial property is one which is neither true for every program, nor false for every program. The theorem generalizes the undecidability of the halting problem. It has far reaching implications on the feasibility of static analysis of programs. It implies that it is impossible, for example, to implement a tool that checks whether a given program is correct, or even executes without error. The theorem is named after Henry Gordon Rice, who proved it in his doctoral dissertation of 1951 at Syracuse University.
Кіріспе
Райс теоремасы статикалық талдаудың қандай түрлерін автоматты түрде жүргізуге болатынына теориялық шектеулер қояды. Бағдарламаның синтаксисі мен семантикасын ажыратуға болады. Синтаксис – бағдарламаның қалай жазылғанының ерекшеліктері немесе оның "интенциясы", ал семантика – бағдарламаның орындалғанда қалай жұмыс істейтіні немесе оның "экстенсиясы". Райс теоремасы, егер қасиет тривиальды болмаса (барлық бағдарламалар үшін рас немесе барлық бағдарламалар үшін жалған), тек семантикаға ғана емес, сонымен қатар синтаксиске байланысты бағдарламалардың қасиеттерін анықтау мүмкін емес деп тұжырымдайды. Райс теоремасы бойынша, бағдарлама мен спецификацияны кіріс ретінде алып, бағдарламаның спецификацияны орындап-орындамайтынын тексеріп, басқа бағдарламалардағы қателердің жоқтығын автоматты түрде тексеруге қабілетті бағдарлама жасау мүмкін емес. Бұл кейбір түрдегі қателерді болдырмау мүмкін емес дегенді білдірмейді. Мысалы, Райс теоремасы динамикалық түрде терілген және Тьюринг толық бағдарламалау тілдерінде типтік қателердің жоқтығын тексерудің мүмкін емес екенін көрсетеді. Керісінше, статикалық түрде терілген бағдарламалау тілдері типтік қателерді статикалық түрде болдырмайтын типтік жүйеге ие. Бұл, негізінен, осы тілдердің синтаксисінің (кең мағынада) ерекшелігі ретінде қарастырылуы керек. Бағдарламаның типін тексеру үшін оның бастапқы кодына қарау қажет; бұл операция бағдарламаның гипотетикалық семантикасына ғана емес, басқа да факторларға байланысты. Жалпы бағдарламалық жасақтаманы тексеру тұрғысынан алғанда, бұл белгілі бір бағдарламаның берілген спецификацияға сәйкес келе ме екенін алгоритмдік түрде тексеру мүмкін болмаса да, бағдарламаның дұрыстығын дәлелдейтін қосымша ақпаратты бағдарламаға қосуды немесе бағдарламаны тексеруді жеңілдететін белгілі бір шектеулі форматта жазуды және тек осылайша тексерілген бағдарламаларды қабылдауды талап етуге болады. Тип қауіпсіздігі жағдайында, бұл екі жағдайдың біріншісі типтік түсіндірмелерге, ал екіншісі типтік қорытындыға сәйкес келеді. Тип қауіпсіздігінен асып түсу арқылы, бұл идея Хоар логикасындағы сияқты дәлелдеу түсіндірмелері арқылы бағдарламалардың дұрыстығын дәлелдеуге алып келеді. Райс теоремасын еңсерудің тағы бір жолы – көптеген қателерді ұстайтын, бірақ толық емес әдістерді іздеу. Бұл – абстрактты интерпретация теориясы. Тексерудің тағы бір бағыты – модельдік тексеру, ол тек шекті күйлі бағдарламаларға ғана қолданылады, Тьюринг толық тілдерге емес.
Ресми мәлімдеме
φ — жартылай есептеуге болатын функциялардың қабылданған нөмірлеуі болсын. P — жиынның ішкі жиыны болсын. Егер:
P тривиалды емес: P бос емес және өзіне тең емес. P экстенсиялық: барлық бүтін сандар m және n үшін, егер φm = φn болса, онда m ∈ P ⟺ n ∈ P.
Онда P шешілмейді. Индекстер жиындары тұрғысынан айтқанда, мынаны айтуға болады: Тек ∅ және толық жиын ғана шешіледі.
P is non trivial: P is neither empty nor itself. P is extensional: for all integers m and n, if φm = φn, then m ∈ P ⟺ n ∈ P.
Then P is undecidable. A more concise statement can be made in terms of index sets: The only decidable index sets are ∅ and .
Клиннің рекурсиялық теоремасы бойынша дәлелдеу
Қарама-қайшылық тудыру үшін, берілген жиын табиғи сандардың тривиальді емес, кеңейтілген және есептелетін жиыны болсын. Бір табиғи сан және бір табиғи сан бар. функцияны былай анықтаймыз: егер , онда , және егер , онда . Клиннің рекурсия теоремасы бойынша, сондай бар, осылайша . Егер болса, онда , бұл жиынның кеңейтілмелілігіне қайшы, себебі , ал керісінше, егер болса, онда , бұл қайтадан кеңейтілмелілікке қайшы, себебі .