Кіріспе

Формалды тілдегі өрнектің типін автоматты түрде анықтау

Типтік шешім шығару, кейде типтік реконструкция деп те аталады, формалды тілдегі өрнектің типін автоматты түрде анықтау процесін білдіреді. Мұндай тілдерге бағдарламалау тілдері мен математикалық типтік жүйелер ғана емес, сонымен қатар компьютерлік ғылым мен лингвистиканың кейбір салаларындағы табиғи тілдер де жатады.

Техникалық емес түсіндірме

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

Техникалық сипаттама

Типтік тұжырымдау – өрнектің түрін компиляция кезінде толық немесе ішінара автоматты түрде анықтау мүмкіндігі. Компилятор көбінесе типтік белгілер берілмеген жағдайда да, айнымалының түрін немесе функцияның типтік сипаттамасын анықтай алады. Көп жағдайда, типтік тұжырымдау жүйесі жеткілікті деңгейде сенімді болса немесе бағдарлама немесе тіл жеткілікті қарапайым болса, бағдарламадан типтік белгілерді толығымен жоюға болады. Өрнектің түрін анықтау үшін қажетті ақпаратты алу үшін компилятор бұл ақпаратты оның кіші өрнектеріне берілген типтік белгілердің жиынтығы және одан кейінгі қысқарту арқылы немесе әртүрлі атомдық мәндердің түрін жасырын түсіну арқылы жинайды (мысалы, true: Bool; 42: Integer; 3.14159: Real; және т.б.). Өрнектердің түпкілікті түрлендіруге алынған, жасырын типтелген атомдық мәндерге дейін тоғысуын тану арқылы, типтік тұжырымдау тілінің компиляторы типтік белгілерсіз толыққанды бағдарламаны құрастыра алады. Жоғары деңгейдегі бағдарламалаудың және полиморфизмнің күрделі формаларында компилятордың барлық жағдайларда анықтауы мүмкін емес, сондықтан кейде түсініктілікті арттыру үшін типтік белгілер қажет болады. Мысалы, полиморфты рекурсияда типтік тұжырымдаудың шешілмейтіні белгілі. Сонымен қатар, кодты оңтайландыру үшін нақтырақ (жылдамырақ/кішкентайрақ) типті қолдануға компиляторды мәжбүрлеу арқылы эксплицитті типтік белгілерді пайдалануға болады. Типтік тұжырымдаудың кейбір әдістері шектеулерді қанағаттандыруға немесе теориялар бойынша қанағаттандыруға негізделген.

Хиндли-Милнер типті қорытынды алгоритмі

Алғаш рет типтік тұжырымдауды орындау үшін қолданылған алгоритм қазіргі кезде бейресми түрде Хиндли-Милнер алгоритмі деп аталады, бірақ бұл алгоритмді дұрысырақ Дамас пен Милнерге жатқызу керек. Ол сондай-ақ дәстүрлі түрде типтік қайта құру деп те аталады. Хиндлидің жұмысынан тәуелсіз, эквивалентті алгоритм, W алгоритмі ұсынылған. 1982 жылы Луис Дамас Типтік тұжырымдау алгоритмдері табиғи тілдер үшін кейбір грамматикалық индукция және шектеулерге негізделген грамматикалық жүйелерде де қолданылады.