Введение 3
Постановка задачи 5
1. Обзор литературы 6
2. Основные понятия 7
3. Полиномиальные теории 10
3.1. Синтаксическая эквивалентность 10
3.2. Теория U 11
3.3. Теория I 13
3.4. Теория A 14
3.5. Теория AIU 16
3.6. Теория ADU 18
4. NP Теории 25
4.1. Теория C 25
4.2. Теория ACUI 32
5. Полиномиальное сравнение типов нормальных форм 42
Заключение 44
Список литературы 45
Задача вывода типов актуальна для языков программирования с неявной типизацией, где типы в большинстве случаев выводятся самим компилятором, чтобы пользователю не приходилось явно указывать тип каждой
переменной или выражения. Помимо этого вывод типов является основой
для систем интерактивных доказательств, таких как Сoq [18] или Agda [19].
При выводе типов часто требуется выбирать новые имена переменных,
обозначающие типовые атомы. При этом новое имя может либо возникнуть
при работе самого алгоритма типизации, либо изначально быть задано пользователем, например это может быть имя шаблонного типа класса. Но в любом случае, конкретно выбранное имя не имеет значения, при условии, что
оно уникально определяет типовой атом, поэтому имя может выбираться
произвольным образом. Впоследствии, например при соотнесении двух выражений, может потребоваться сравнить два типа между собой. При этом
сравнение должно быть по модулю выбранных имен переменных. Иными словами, возникает задача поиска переименования переменных внутри одного
типа в переменные другого, так чтобы типы стали эквивалентны. Отметим,
что изначально до применения переименования, сами типы не являются эквивалентными. Они становятся эквивалентными уже после того, как к одному
из этих типов применяется переименование.
Данная задача сравнения типов с переименованием имеет простой линейный алгоритм, когда речь идет о синтаксической эквивалентности. Однако,
если начать сравнивать типы не только по модулю переименования переменных, но и по модулю некоторой системы аксиом для равенства двух типов,
которую в дальнейшем будем называть теорией эквивалентности, то задача
становится NP-полной уже при простых теориях эквивалентности.
Эта задача является частным случаем задачи сопоставления (matching)
типов, в которой S может быть не только переименованием, но и подстановкой. То есть разрешается не просто давать переменным другие имена, но
еще и подставлять вместо любой переменной произвольный тип. Такая задача
подробно рассматривается в статье Benanav, Kapur, Narendran [1], где авторы доказывают ее NP полноту для ассоциативных и коммутативных теорий
3эквивалентности. Задача сопоставления, в свою очередь, является частным
случаем задачи унификации типов, где подстановка применяется не только к
типу слева, но и к типу справа.
Выведены классы сложности для задачи сравнения типов пересечений с
переименованием. Доказана NP полнота данной задачи для теории C и C2.
Был адаптирован эффективный NP алгоритм для теории ACUI. Стоит
отметить, что этот алгоритм легко расширить и на другие NP-полные
теории. Например, на ACUID. Достаточно просто добавить приведение
типов к нормальное форме для дистрибутивности nfD.
Также было подробно рассмотрено несколько улучшений, которые можно
применить для ускорения данного алгоритма. И наконец, были произведены
замеры времени работы на случайно сгенерированных типах для наивного
алгоритма, алгоритма 5, а также его улучшений.
В качестве бонуса, был описан способ полиномиального сравнения типов
пересечений нормальных форм в теории ACU.
Все реализованные NP алгоритмы для теории ACUI доступны на
гитхаб.
[1] Benanav, D., Kapur, D., Narendran, P.: Complexity of Matching Problems. J. Symb. Comput. 3(1/2), 203-216, 1987.
[2] B. Dudder, M. Martens, and J. Rehof. Intersection Type Matching with Subtyping. In Proceedings of TLCA’13, Springer LNCS, 2013.
[3] D. Basin, A term equality problem equivalent to graph isomorphism, Inform. Process. Lett. 51 (2) (1994) 61-66.
[4] Schmidt-SchauB, Manfred & Rau, Conrad & Sabel, David. (2013).
Algorithms for Extended Alpha-Equivalence and Complexity. Leibniz International Proceedings in Informatics, LIPIcs. 21. 255-270.
10.4230/LIPIcs.RTA.2013255.
[5] Hermann, M., Kolaitis, P.G. (1995). Computational complexity of simultaneous elementary matching problems. In: Wiedermann, J., Hajek, P. (eds) Mathematical Foundations of Computer Science 1995. MFCS 1995. Lecture Notes in Computer Science, vol 969. Springer, Berlin, Heidelberg.
[6] Steven M. Eker. Improving the efficiency of AC matching and unification. [Research Report] RR-2104, INRIA. 1993.
[7] S. M. Eker. Associative-commutative matching via bipartite graph matching. The Computer Journal, Volume 38, Issue 5, 1995, Pages 381-399.
[8] Erik Tiden, Stefan Arnborg, Unification problems with one-sided distributivity, Journal of Symbolic Computation, Volume 3, Issues 1-2, 1987, Pages 183¬202.
[9] Dudenhefner, A., Martens, M., & Rehof, J. (2017). The algebraic intersection type unification problem. Logical Methods in Computer Science, 13.
[10] Contejean, E. (2004). A Certified AC Matching Algorithm. In: van Oostrom, V. (eds) Rewriting Techniques and Applications. RTA 2004. Lecture Notes in Computer Science, vol 3091. Springer, Berlin, Heidelberg.
[11] Gramlich, B., & Denzinger, J. (1988). Efficient AC-matching using constraint propagation.
[12] Rakesh M. Verma, I.V. Ramakrishnan, Tight complexity bounds for term matching problems, Information and Computation, Volume 101, Issue 1,1992, Pages 33-69.
[13] M. Coppo and M. Dezani-Ciancaglini, An extension of the basic functionality theory for the 2-calculus, Notre Dame, J. Formal Logic 21 (4) (1980) 685-693.
[14] M. Coppo, M. Dezani-Ciancaglini and B. Venneri, Functional characters of solvable terms, Zeitschrift fiir Mathematische Logik und Grundlagen der Mathematik 27 (1981) 45-58.
[15] Hindley, J. R. (1982). The simple semantics for Coppo-Dezani-Salle types. In International Symposium on Programming: 5th Colloquium Turin, April 6-8, 1982 Proceedings 5 (pp. 212-226). Springer Berlin Heidelberg.
[16] GAREY, M. R., AND JOHNSON,D. S. (1979), “Computers and Intractability: A Guide to the Theory of NP-Completeness,” Freeman, San Francisco.
[17] Hvllot, J. M. (1979, August). Associative commutative pattern matching. In Proceedings of the 6th international joint conference on Artificial intelligence-Volume 1 (pp. 406-412).
[18] The Coq Proof Assistant. URL: https://coq.inria.fr (дата обр. 16.05.2024).
[19] Agda Programming Language, URL: https://en.wikipedia.org/wiki/ Agda_(programming_language)