Кіріспе

Семантикалық кодтау – формальды тілдер арасындағы аударма. Бағдарламашылар үшін кодтаудың ең таныс түрі – бағдарламалау тілін машиналық кодқа немесе байт-кодқа компиляциялау. Құжат форматтарын түрлендіру де кодтаудың бір түрі болып табылады. TeX немесе LaTeX құжаттарын PostScript форматына компиляциялау да жиі кездесетін кодтау процесі. Кейбір жоғары деңгейдегі препроцессорлар, мысалы OCaml-дің Camlp4 сияқты, бір бағдарламалау тілін екіншісіне кодтауды да қамтиды. Формальды түрде, А тілінің В тіліне кодтауы – А тілінің барлық терминдерін В тіліне бейімдеу. Егер А тілінің В тіліне қанағаттанарлық кодтауы болса, В тілі А тілінен кем болмаған күшке (немесе кем болмаған экспрессивтілікке) ие деп есептеледі.

Қасиеттері

Аударманың бейресми түсінігі тілдердің көркемдігін анықтауға көмектеспейді, себебі ол A-ның барлық элементтерін B-нің бір ғана элементіне шамалап бейнелеу сияқты қарапайым кодтауларға жол береді. Сондықтан, "жеткілікті жақсы" кодтаудың анықтамасын белгілеу қажет. Бұл түсінік қолданысқа қарай өзгеріп отырады. Көбінесе, кодтау бірнеше қасиеттерді сақтауға тиіс деп есептеледі.

Төлемдерді сақтау

Бұл А және В тілдерінде азайту ұғымының бар екенін қарастырады. Әдетте, бағдарламалау тілі үшін азайту – бағдарламаның орындалуын модельдейтін қатынас. Бір қадамдық азайтуды , ал кез келген сандық азайтуды деп жазамыз. Дұрыстық: Егер болса, онда барлық А тілінің терминдері үшін. Толықтық: Егер болса, онда дейтін бар, барлық А тілінің термині және барлық В тілінің терминдері үшін. Бұл сақталу екі тілдің де бірдей әрекет етуін қамтамасыз етеді. Дұрыстық барлық мүмкін әрекеттердің сақталуын қамтамасыз етеді, ал толықтық – кодтау арқылы ешқандай жаңа әрекеттердің қосылмауын қамтамасыз етеді. Атап айтқанда, бағдарламалау тілін компиляциялау кезінде дұрыстық және толықтық бірге компиляцияланған бағдарламаның бағдарламалау тілінің жоғары деңгейлі семантикасына сәйкес әрекет ететінін білдіреді.

Таратуды сақтау

Бұл сонымен қатар А және В тілдерінде азайту ұғымының бар екенін қарастырады. Дұрыстық – кез келген термин үшін, егер барлық азайтулар жинақталса, онда барлық азайтулар жинақталады. Толықтық – кез келген термин үшін, егер барлық азайтулар жинақталса, онда барлық азайтулар жинақталады. Бағдарламалау тілін компиляциялау кезінде, дұрыстық компиляцияның шексіз циклдар немесе шексіз рекурсиялар сияқты тоқтаусыздықтарды енгізбейтініне кепілдік береді. Толықтық қасиеті, А тілінде жазылған бағдарламаны В тілінде зерттеу немесе тексеру үшін пайдалы, мүмкін кодтың маңызды бөліктерін шығарып алу арқылы: егер осы зерттеу немесе тест бағдарламаның В-де тоқтағанын дәлелдесе, онда ол А-да да тоқтайды.

Байқауларды сақтау

Бұл А және В тілдерінде байқау ұғымының бар екенін болжайды. Бағдарламалау тілдерінде, таза есептеулерге қарама-қарсы, кіріс және шығыстардың нәтижелері әдеттегі байқалатын элементтер болып табылады. HTML сияқты сипаттама тілінде, әдеттегі байқалатын нәрсе – беттің көрсетілу нәтижесі. Дұрыс болу: А тіліндегі әрбір байқалатын үшін, В тілінде сол байқалатынды қамтитын байқалатын бар, және А тілінде байқалатынға ие кез келген термин үшін, В тілінде де сол байқалатын болады. Толықтық: А тіліндегі әрбір байқалатын үшін, В тілінде сол байқалатынды қамтитын байқалатын бар, және А тілінде байқалатынға ие кез келген термин үшін, В тілінде де сол байқалатын болады.

Симуляцияларды сақтау

Бұл А және В тілдерінде симуляция ұғымының бар екенін болжайды. Бағдарламалау тілдерінде, егер бір бағдарлама басқа бағдарламаның барлық бірдей (көрінетін) міндеттерін және мүмкін басқаларын да орындай алса, онда ол оны симуляциялайды. Симуляциялар көбінесе компиляция уақытындағы оңтайландыруларды сипаттау үшін қолданылады. Барлық терминдер үшін дұрыстық: егер симуляцияласа, онда симуляциялайды. Барлық терминдер үшін толықтық: егер симуляцияласа, онда симуляциялайды. Симуляцияларды сақтау, байқауларды сақтаудан әлдеқайда күшті қасиет, және оны қамтиды. Ал, бисимуляцияларды сақтау қасиетінен әлсіз. Бұрынғы жағдайлардағыдай, дұрыстық компиляция үшін маңызды, ал толықтық – тестілеу немесе қасиеттерді дәлелдеу үшін пайдалы.

Теңдестіктерді сақтау

Бұл А тілі мен В тілінде эквиваленттілік ұғымының бар екенін қарастырады. Әдетте, бұл құрылымдалған деректердің теңдігі немесе синтаксистік тұрғыдан әртүрлі болғанымен семантикалық жағынан сәйкес келетін бағдарламалар, мысалы, құрылымдық конгруенция немесе құрылымдық эквиваленттілік болуы мүмкін. Егер екі термин және А-да эквивалентті болса, онда және В-да да эквивалентті болады. Егер екі термин және В-да эквивалентті болса, онда және А-да да эквивалентті болады.

Таратуды сақтау

Бұл А және В тілдерінде таралу ұғымының бар екенін қарастырады. Әдетте, Acute, JoCaml немесе E тілдерінде жазылған таратылған бағдарламаларды компиляциялау үшін бұл процестер мен деректердің бірнеше компьютер немесе процессор арасында таратылуын білдіреді. Дұрыстық: егер бір өрнек екі агенттің қосындысы болса, онда ол екі агенттің қосындысы болуы керек. Толықтық: егер бір өрнек екі агенттің қосындысы болса, онда ол екі агенттің қосындысы болуы керек, мұндағы және .