История изменений
Исправление SZT, (текущая версия) :
Refinement type — это когда ты объявляешь, что функция, принимающая векторы длиной M и N вернёт вектор длиной M + N, где M и N задаются в рантайме, а компилятор тебе в compile time проверяет доказательство, что твоя функция именно так себя ведёт.
Ну вообще-то я б не сказал. Вот допустим есть у нас функция concat(a,b), принимающая векторы a, b и возвращающая c. Если мы потом где-то в коде программы сравниваем veclen(a) <= veclen(c) то компилятор может эту проверку выкинуть, заменив на true т.к. из свойств функции concat и истории жизни переменных a, c следует, что сравнение veclen(a) <= veclen(c) обязательно вернет true. Это и будут частичные вычисления.
По-моему тут есть явная связь и есть смысл это совместить
Исходная версия SZT, :
Refinement type — это когда ты объявляешь, что функция, принимающая векторы длиной M и N вернёт вектор длиной M + N, где M и N задаются в рантайме, а компилятор тебе в compile time проверяет доказательство, что твоя функция именно так себя ведёт.
Ну вообще-то я б не сказал. Вот допустим есть у нас функция concat(a,b), принимающая векторы a, b и возвращающая c. Если мы потом где-то в коде программы сравниваем veclen(a) <= veclen(c) то компилятор может эту проверку выкинуть, заменив на true т.к. из свойств функции concat и истории жизни переменных a, c следует, что сравнение veclen(a) <= veclen(c) обязательно вернет true. Это и будут частичные вычисления