Кіріспе
Семантикалық кодтау – формальды тілдер арасындағы аударма. Бағдарламашылар үшін кодтаудың ең таныс түрі – бағдарламалау тілін машиналық кодқа немесе байт-кодқа компиляциялау. Құжат форматтарын түрлендіру де кодтаудың бір түрі болып табылады. TeX немесе LaTeX құжаттарын PostScript форматына компиляциялау да жиі кездесетін кодтау процесі. Кейбір жоғары деңгейдегі препроцессорлар, мысалы OCaml-дің Camlp4 сияқты, бір бағдарламалау тілін екіншісіне кодтауды да қамтиды. Формальды түрде, А тілінің В тіліне кодтауы – А тілінің барлық терминдерін В тіліне бейімдеу. Егер А тілінің В тіліне қанағаттанарлық кодтауы болса, В тілі А тілінен кем болмаған күшке (немесе кем болмаған экспрессивтілікке) ие деп есептеледі.
Қасиеттері
Аударманың бейресми түсінігі тілдердің көркемдігін анықтауға көмектеспейді, себебі ол A-ның барлық элементтерін B-нің бір ғана элементіне шамалап бейнелеу сияқты қарапайым кодтауларға жол береді. Сондықтан, "жеткілікті жақсы" кодтаудың анықтамасын белгілеу қажет. Бұл түсінік қолданысқа қарай өзгеріп отырады. Көбінесе, кодтау бірнеше қасиеттерді сақтауға тиіс деп есептеледі.
Төлемдерді сақтау
Бұл А және В тілдерінде азайту ұғымының бар екенін қарастырады. Әдетте, бағдарламалау тілі үшін азайту – бағдарламаның орындалуын модельдейтін қатынас. Бір қадамдық азайтуды , ал кез келген сандық азайтуды деп жазамыз. Дұрыстық: Егер болса, онда барлық А тілінің терминдері үшін. Толықтық: Егер болса, онда дейтін бар, барлық А тілінің термині және барлық В тілінің терминдері үшін. Бұл сақталу екі тілдің де бірдей әрекет етуін қамтамасыз етеді. Дұрыстық барлық мүмкін әрекеттердің сақталуын қамтамасыз етеді, ал толықтық – кодтау арқылы ешқандай жаңа әрекеттердің қосылмауын қамтамасыз етеді. Атап айтқанда, бағдарламалау тілін компиляциялау кезінде дұрыстық және толықтық бірге компиляцияланған бағдарламаның бағдарламалау тілінің жоғары деңгейлі семантикасына сәйкес әрекет ететінін білдіреді.
This preservation guarantees that both languages behave the same way. Soundness guarantees that all possible behaviours are preserved while completeness guarantees that no behaviour is added by the encoding. In particular, in the case of compilation of a programming language, soundness and completeness together mean that the compiled program behaves accordingly to the high level semantics of the programming language.
Таратуды сақтау
Бұл сонымен қатар А және В тілдерінде азайту ұғымының бар екенін қарастырады. Дұрыстық – кез келген термин үшін, егер барлық азайтулар жинақталса, онда барлық азайтулар жинақталады. Толықтық – кез келген термин үшін, егер барлық азайтулар жинақталса, онда барлық азайтулар жинақталады. Бағдарламалау тілін компиляциялау кезінде, дұрыстық компиляцияның шексіз циклдар немесе шексіз рекурсиялар сияқты тоқтаусыздықтарды енгізбейтініне кепілдік береді. Толықтық қасиеті, А тілінде жазылған бағдарламаны В тілінде зерттеу немесе тексеру үшін пайдалы, мүмкін кодтың маңызды бөліктерін шығарып алу арқылы: егер осы зерттеу немесе тест бағдарламаның В-де тоқтағанын дәлелдесе, онда ол А-да да тоқтайды.
soundness for any term , if all reductions of converge, then all reductions of converge. completeness for any term , if all reductions of converge, then all reductions of converge. In the case of compilation of a programming language, soundness guarantees that the compilation does not introduce non termination such as endless loops or endless recursions. The completeness property is useful when language B is used to study or test a program written in language A, possibly by extracting key parts of the code: if this study or test proves that the program terminates in B, then it also terminates in A.
Байқауларды сақтау
Бұл А және В тілдерінде байқау ұғымының бар екенін болжайды. Бағдарламалау тілдерінде, таза есептеулерге қарама-қарсы, кіріс және шығыстардың нәтижелері әдеттегі байқалатын элементтер болып табылады. HTML сияқты сипаттама тілінде, әдеттегі байқалатын нәрсе – беттің көрсетілу нәтижесі. Дұрыс болу: А тіліндегі әрбір байқалатын үшін, В тілінде сол байқалатынды қамтитын байқалатын бар, және А тілінде байқалатынға ие кез келген термин үшін, В тілінде де сол байқалатын болады. Толықтық: А тіліндегі әрбір байқалатын үшін, В тілінде сол байқалатынды қамтитын байқалатын бар, және А тілінде байқалатынға ие кез келген термин үшін, В тілінде де сол байқалатын болады.
Симуляцияларды сақтау
Бұл А және В тілдерінде симуляция ұғымының бар екенін болжайды. Бағдарламалау тілдерінде, егер бір бағдарлама басқа бағдарламаның барлық бірдей (көрінетін) міндеттерін және мүмкін басқаларын да орындай алса, онда ол оны симуляциялайды. Симуляциялар көбінесе компиляция уақытындағы оңтайландыруларды сипаттау үшін қолданылады. Барлық терминдер үшін дұрыстық: егер симуляцияласа, онда симуляциялайды. Барлық терминдер үшін толықтық: егер симуляцияласа, онда симуляциялайды. Симуляцияларды сақтау, байқауларды сақтаудан әлдеқайда күшті қасиет, және оны қамтиды. Ал, бисимуляцияларды сақтау қасиетінен әлсіз. Бұрынғы жағдайлардағыдай, дұрыстық компиляция үшін маңызды, ал толықтық – тестілеу немесе қасиеттерді дәлелдеу үшін пайдалы.
Preservation of simulations is a much stronger property than preservation of observations, which it entails. In turn, it is weaker than a property of preservation of bisimulations. As in previous cases, soundness is important for compilation, while completeness is useful for testing or proving properties.
Теңдестіктерді сақтау
Бұл А тілі мен В тілінде эквиваленттілік ұғымының бар екенін қарастырады. Әдетте, бұл құрылымдалған деректердің теңдігі немесе синтаксистік тұрғыдан әртүрлі болғанымен семантикалық жағынан сәйкес келетін бағдарламалар, мысалы, құрылымдық конгруенция немесе құрылымдық эквиваленттілік болуы мүмкін. Егер екі термин және А-да эквивалентті болса, онда және В-да да эквивалентті болады. Егер екі термин және В-да эквивалентті болса, онда және А-да да эквивалентті болады.
completeness if two terms and are equivalent in B, then and are equivalent in A.
Таратуды сақтау
Бұл А және В тілдерінде таралу ұғымының бар екенін қарастырады. Әдетте, Acute, JoCaml немесе E тілдерінде жазылған таратылған бағдарламаларды компиляциялау үшін бұл процестер мен деректердің бірнеше компьютер немесе процессор арасында таратылуын білдіреді. Дұрыстық: егер бір өрнек екі агенттің қосындысы болса, онда ол екі агенттің қосындысы болуы керек. Толықтық: егер бір өрнек екі агенттің қосындысы болса, онда ол екі агенттің қосындысы болуы керек, мұндағы және .