-
Notifications
You must be signed in to change notification settings - Fork 0
some info on type systems #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -114,33 +114,151 @@ TODO терм к примеру | |
| TODO техническая проблема - введение уровня косвенности | ||
|
|
||
|
|
||
| ## Типы | ||
| ## Системы типов | ||
|
|
||
| Пробуем типизировать фрагменты графа из примера и их переставлять | ||
|
|
||
| ### Просто типизированное не катит | ||
| Основаная идея в том, чтобы приписать контакту тип. Самая простая система типов - это | ||
| просто типизированное люямбда исчисление. Далее будет показано почему нам она не подходит и | ||
| почему не подходят более сложные системы типов. | ||
|
|
||
| TODO | ||
|
|
||
| ### Лямбда с аркой | ||
| ### Просто типизированное $\lambda$-исчисление | ||
|
|
||
| TODO | ||
| Тут будет рассмотрен подход, когда каждому контакту сопостовляется простой тип. | ||
| Для начала определим правила вывода типов. | ||
|
|
||
| ### Subtyping | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Тут я подразумевал то, что предлагал Никита. Это какое-то техническое решение больше.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. На сколько я понимаю это укладывается либо в наследование, либо в типы-пересечнеия |
||
| #### Правила вывода: | ||
|
|
||
| TODO | ||
| ``` | ||
| x:a -> G | ||
| (I) ---------- | ||
| G |- x:a | ||
|
|
||
| G |- e : a -> b G |- x : a | ||
| (E->) ------------------------------ | ||
| G |- e x : b | ||
|
|
||
| G |- e : b G |- x : a | ||
| (I->) ------------------------- | ||
| G |- \x -> e : a -> b | ||
| ``` | ||
|
|
||
| #### Достоинства: | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. По-моему нужно писать в формате: что выразимо из контрактов + методы перебора населяющих термов.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. не, это котлеты и мухи мешать. Алгоритм перебора не совсем по этим правилам работает. Те например он не учитывает (I->) и явно наследование или пересечения будут. А тут некоторая теоретическая база
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Не совсем понял. У нас два параметра: гибкость перестановки, сложность переборного алгоритма. Вот по этим параметрам и придется сравнивать, а не по рандомным плюсам и минусам.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. А, я неправильно понял к чему ты это говорил. Да, тогда ты прав |
||
|
|
||
| - Существует алгоритм населения типов | ||
| - ? | ||
|
|
||
| #### Недостатки: | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Тут везде будут нужны пруфы, но надо пример дописать сначала. |
||
| - Не обладает достаточной выразительностью для описания сложных графов вычислений. | ||
| - Нельзя переиспользовать термы для разных источников данных, | ||
| т.к. источники разныех типов, хотя семнатика их данных может быть очень похожа. | ||
|
|
||
|
|
||
| ### Лямбда с аркой $\lambda \cap$ | ||
|
|
||
| Это расширение простого лямбда исчисления, которое позоваляет избавиться от некоторых его недостатков | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Фраза-водичка |
||
| описанных выше. | ||
|
|
||
| #### Правила вывода: | ||
| Они тут те же что и обычном лямбда исчислении плюс несколько новых. | ||
| Знак ```<``` ниже будет использоваться как отношение "вхождения" типов друг в друга: | ||
|
|
||
| ``` | ||
| a < a | ||
| a∩b < a | ||
| a∩b < b | ||
| c < a && c < b => c < a∩b | ||
| a < b && b < c => a < c | ||
| ``` | ||
|
|
||
| Там был загадачный тип ```w``` он выполняет роль наиболее общего типа: | ||
|
|
||
| ``` | ||
| a < w | ||
| w < (a -> w) | ||
|
|
||
| (a -> b) ∩ (a -> c) < a -> (b∩c) | ||
| a < a' && b < b' | ||
| (a -> b) < (a' -> b') | ||
|
|
||
| ``` | ||
|
|
||
| Теперь сами правила вывода: | ||
|
|
||
|
|
||
| ``` | ||
| x:a -> G | ||
| (I) ---------- | ||
| G |- x:a | ||
|
|
||
| G |- e : a -> b G |- x : a | ||
| (E->) ------------------------------ | ||
| G |- e x : b | ||
|
|
||
| G |- e : b G |- x : a | ||
| (I->) -------------------------- | ||
| G |- \x -> e : a -> b | ||
|
|
||
|
|
||
| G |- M : a G |- M : b | ||
| (I∩) -------------------------- | ||
| G |- M : a∩b | ||
|
|
||
| G |- M:a | ||
| (<) ---------- a < b | ||
| G |- M:b | ||
|
|
||
| (w) G |- x:w | ||
|
|
||
| ``` | ||
|
|
||
|
|
||
| #### Subtyping | ||
|
|
||
| Если присмотреться к этой системе типов немного внимательнее, | ||
| то окажется, что это очень похоже на модель множетсвенного наследования в объектно ориентированных | ||
| языках вроде Java или Python. ```w``` выполняет роль некоторого общего типа Object, а пересечение - | ||
| наследование от каких-то произвольных типов. | ||
|
|
||
| #### Достоинства | ||
| - Позволяет переиспользовать термы для разных источников | ||
| - Задача населения типов "semi-решаема" | ||
|
|
||
| #### Недостатки | ||
| - До сих пор не обладает дотстаточной выразительностью | ||
| - ? | ||
|
|
||
|
|
||
| ### Более сложные системы типов | ||
|
|
||
| - Слишком сложные :) | ||
| - Задача населения неразрешима | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Значит ли это, что мы в принципе как-то не сможем перебирать термы, типизированные определённым образом?
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. нет, не значит. Но я не знаю как это правильно делать. Сейчас я так и делаю для полиморфных типов, но я не знаю корректно ли это и не знаю как проверить корректность перебора такого. |
||
|
|
||
| ### Менее строгая система, а потом проверка контрактов ручками или через Z3 | ||
|
|
||
| TODO | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ну прям ТУДУ тут никуда и близко пока не девается |
||
| Добавим к выбранной системе типов возможность аннтирования типов предикатами. А потом будем | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ну к системе типов мы ничего не добавляем, строго говоря
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Да, это правда пожалуй |
||
| их проверять. Это разделит задачу генерации графов исполнения на две подзадачи: | ||
| 1. Население желаемого типа. Тут выбранная система типов будет ограничивать свободу перебора | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Идея - позволить системе типов задавать больше графов, но среди которых могут быть некорректные, их надо отсеивать, как-то проверяя контракты. |
||
| и защищать от комбинаторного вызрыва. | ||
| 2. Проверка аннтоаций на выполнение с помощью SAT-solver'а. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Сомневаюсь, что сатсолвер нам нужен, проще написать ручками проверку контрактов в каком-то виде
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Я не очень хочу проверять предикаты на совместимость, но мне кажется, что нужно уже ближе к реализации смотреть |
||
|
|
||
| ### Просто типизированное $\lambda$-исчисление | ||
| Но тут есть некоторая проблема: | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Фраза-водичка |
||
|
|
||
| ``` | ||
| G = { f :: a -> b, x :: a { x:a | Q(x) } } | ||
|
|
||
| Чтобы переставить местами две функции, требуется, чтобы они были эндоморфизмами. | ||
| Из двух типов можно лишь понять, равны ли они. | ||
| G |- f x :: b { y:b | P(y) }, где P = ?? | ||
|
|
||
| ``` | ||
|
|
||
| TODO пруф: не катит | ||
| Возможно она решается как-то так: | ||
| ``` | ||
| G = { f :: a -> b, x :: a { x:a | Q(x) } } | ||
|
|
||
| G |- f x :: b { y:b | P(y) }, где P(y) = ( y = f x && Q(x) ) | ||
|
|
||
| ``` | ||
|
|
||
| ## Функция оценки | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Очень категорично и безысходно
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я бы пока не был так уверен