Кіріспе
Twelf – Фрэнк Пфеннинг пен Карстен Шюрманның Карнеги Меллон университетінде жасаған LF логикалық жүйесінің іске асырылуы. Ол логикалық бағдарламалау және бағдарламалау тілі теориясын формалдау үшін пайдаланылады.
Кіріспе
Ең қарапайым жағдайда Twelf бағдарламасы ("қолтаңба" деп аталады) типтік отбасылардың (қатынастардың) жарияланымдарының жиынтығы және осы типтік отбасылардағы тұрақтылар болып табылады. Мысалы, төмендегісі – нөлді және оның ізбасарын білдіретін оператормен бірге натурал сандардың стандартты анықтамасы: nat: тип. z: nat. s: nat > nat. Мұнда тип бар, ал z және s – тұрақты мүшелер. Тәуелді типтелген жүйе ретінде типтерді мүшелер бойынша индекстеуге болады, бұл көбірек қызығушылық тудыратын типтік отбасыларды анықтауға мүмкіндік береді. Міне, қосудың анықтамасы: plus: nat > nat > nat > тип. plus zero: {M:nat} plus M z M. plus succ: {M:nat} {N:nat} {P:nat} plus M (s N) (s P) < plus M N P. Типтік отбасы үш натурал сан – M, N және P арасындағы қатынас ретінде түсіндіріледі, мұндай, ... Біз қатынасты анықтайтын тұрақтыларды келтіреміз: тұрақты «барлық M түрі үшін» деп оқылады. Тұрақты, екінші аргумент басқа санның (N) ізбасары болған жағдайда анықталады (үлгіге сәйкес келуді қараңыз). Нәтижесі – s P, мұнда P – M және N-нің қосындысы. Бұл рекурсивті шақыру < plus M N P> кіші мақсат арқылы жасалады, ол енгізілді. Жебе Prolog-тың , логикалық импликация ("егер M + N = P болса, онда M + (s N) = (s P)") немесе типтік теорияға ең адал түрде, тұрақтының типі ("егер типтің мүшесі берілсе, типтің мүшесі қайтарылады") ретінде операциялық тұрғыдан түсіндірілуі мүмкін. Twelf типті қайта құру мүмкіндігіне ие және жасырын параметрлерді қолдайды, сондықтан практикада әдетте (және т.б.) жоғарыда көрсетілгендерді жазбауға болады. Бұл қарапайым мысалдар LF-тің жоғары деңгейдегі мүмкіндіктерін, сондай-ақ теоремаларды тексеру қабілеттерін көрсетпейді. Оның мысалдарымен Twelf дистрибуциясын қараңыз.
plus : nat > nat > nat > type. plus zero : {M:nat} plus M z M.
plus succ : {M:nat} {N:nat} {P:nat}
plus M (s N) (s P)
< plus M N P.
The type family is read as a relation between three natural numbers , and , such that We then give the constants that define the relation: the constant indicates that The quantifier can be read as "for all of type ". The constant defines the case for when the second argument is the successor of some other number (see pattern matching). The result is the successor of , where is the sum of and This recursive call is made via the subgoal , introduced with The arrow can be understood operationally as Prolog's , or as logical implication ("if M + N = P, then M + (s N) = (s P)"), or most faithfully to the type theory, as the type of the constant ("when given a term of type , return a term of type "). Twelf features type reconstruction and supports implicit parameters, so in practice, one usually does not need to explicitly write (etc.) above. These simple examples do not display LF's higher order features, nor any of its theorem checking capabilities. See the Twelf distribution for its included examples.
Қолданылуы
Twelf бірнеше әртүрлі тәсілмен қолданылады.
Логикалық бағдарламалау
Он екі қолтаңба іздеу процедурасы арқылы орындалуы мүмкін. Оның негізі Prolog-дан күрделі, себебі ол жоғары деңгейлі және тәуелді типтеуге ие, бірақ тек таза операторлармен ғана шектеледі: Prolog ішкі жүйелерінде жиі кездесетін кесу (cut) немесе басқа экстралогикалық операторлар (мысалы, кіріс-шығыс операциялары үшін) жоқ, бұл оны практикалық логикалық бағдарламалау қолданбалары үшін кем пайдалы етеді. Prolog-тың кесу ережесінің кейбір қолданыстарын белгілі бір операторлардың детерминистік типтік топтарға жататынын көрсету арқылы қол жеткізуге болады, бұл қайта есептеуді болдырмайды. Сонымен қатар, λProlog сияқты, Twelf Horn шарттарын мұрагерлік Harrop формулаларына кеңейтеді, бұл жаңа атауларды логикалық тұрғыдан негізделген операциялық жолмен жасауға және шарттар базасын кеңейтуге мүмкіндік береді.
Математиканы ресмилендіру
Twelf негізінен математиканы, әсіресе бағдарламалау тілдерінің метатеориясын формалдау жүйесі ретінде қолданылады. Осыған байланысты, ол Coq және Isabelle/HOL/HOL Light жүйелерімен тығыз байланысты. Дегенмен, аталған жүйелерден өзгеше, Twelf-тегі дәлелдемелер көбінесе қолмен жасалады. Бұл кемшілікке қарамастан, Twelf өте жақсы қолданылатын мәселелер саласында автоматтандырылған, көп мақсатты жүйелерге қарағанда дәлелдемелер жиі қысқа және жасауға оңай болады. Twelf-тің байлау және алмастыру ұғымы бағдарламалау тілдері мен логикаларды кодтауды жеңілдетеді, олардың көпшілігі байлау мен алмастыруды қолданады, оларды жоғары деңгейлі абстрактілі синтаксис (HOAS) арқылы тікелей кодтауға болады, онда метатілдің байлаушылары объектілік деңгейдегі байлаушыларды көрсетеді. Осылайша, типті сақтауға қатысты алмастыру және альфа түрлендіру сияқты стандартты теоремалар "тегін" беріледі. Twelf көптеген түрлі логикалар мен бағдарламалау тілдерін формалдау үшін пайдаланылды (мысалдары дистрибутивпен бірге келтірілген). Ірі жобалардың арасында Standard ML үшін қауіпсіздікті дәлелдеу, CMU-дан негізгі типтелген ассемблерлік тіл жүйесі және Принстоннан негізгі кодты тасымалдау жүйесі бар.
Іске асыру
Twelf Standard ML-де жазылған, Linux және Windows үшін бинарлық файлдар қолжетімді. Ол негізінен Карнеги Меллон университетінде белсенді түрде әзірленуде.