Anonymous
Ща пишу либу для преобразования вигнера-вилли, и там GC жестит.
Alexander
@HaskellMouse ты уже с настройками GC игрался?
Alexander
-A, -n
Alexander
они очень неудачные по дефолту
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
Сейчас будет очень плохо сформулированные вопросы :с
1) Существует ли возможность в идрисе создать биекцию между значениями и типами
т.е.
42 :: Num 42, например?
2) Существует ли возможность автоматизировать это создание?
3) Существует ли возможность при этом всём сохранить человечность кода?
Евгений
кана
Синглтоны хочешь?
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
Евгений
Конечно. Правда завсегдатаи с этим чатом сильно пересекаются: https://t.me/joinchat/AAAAAD9SWO_tLd7rJ9S7Ig
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
Синглтоны хочешь?
не совсем
хочу, чтобы когда я делаю вот так:
pls : Num a -> Num b -> Num (a + b)
pls = +
мне можно было бы выводить тип по реализации, а не реализацию по типам
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
Alexander
идрис же выводит тип по реализации, минимум чтобы проверить
Alexander
другое дело, что там для функций надо тип писать самому
Alexander
это ж не haskell какой-нить, где это может рабоать
Alexander
это невозможно в общем случае
Alexander
с другой стороны типы функций недостаточные для описания
Alexander
например если сделать sort :: UniqueList a -> AscendingUniqueList a
Евгений
Alexander
то тогда любая функция которая имеет такой тип будет сортировкой
Alexander
при этом как известно из практики существует много разных сортировок отличающихся сложностью
Alexander
любая подходит
кана
Нужно так жн вернуть доказательство, что на выходе столько же и такие же элементы, иначе тип не говорит про эквивалентность
Alexander
автоматически её вывести из такого плохого описания нельзя
Alexander
для unqiue или линейных типов оно автоматом будет
Alexander
наверное только достаточно чтобы длина совпадала
Alexander
но это надо доказывать
Alexander
наши ребята пилящие линейные типы в гхц, сказали что не видят причин почему это неправда, но не знают как доказать
кана
А, ну да, можно и только длину, уникальные же
Alexander
ну _я думаю_ что в типы можно заложить реализацию
Alexander
поскольну ничего формально не запрещает поднять реализацию на уровень типов
кана
Написать дсл, который будет дублировать стейтменты идриса)
Alexander
будет у тебя там IF a < b 'THEN ....
кана
Чтобы реализация и тип совпадали
Alexander
i.e. у тебя будет реализация на уровне типов, только непонятен толк от этого
кана
Но старые конструкции никуда не исчезнут, поэтому весь код покрыть будет нельзя
Alexander
скорее всего
Alexander
вообще идея инетересная в смысле оптимизаций, ведь если "поднять" формальный код на уровень типов, а потом написать оптимальный и можно будет доказать что они эквивалентны
Alexander
меня можно не слушать, я в зависимых типах и т.п. понимаю не достаточно
кана
Ну так ты же хотел биекцию. Может ошибаюсь, но если две вещи эквивалентны, то уже биекция невозможна
Alexander
но это же то, что система типов принципиально и дает
Alexander
компилятор проверяет совпадение заявленного типа, и программы?
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
и желательно более автоматически
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
а не ручками писать ~200 строк, чтобы доказать, что сортировка работает
Alexander
ну типы для этого и есть, мы выражаем те свойста, которые хотим иметь
кана
Было бы все так легко, все бы писали верифицированный код)
Alexander
а сортировка это достаточно сложная и подлая штука
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
Alexander
особенно если не халявить с линейными типами
Alexander
да, ладно
Alexander
просто бы сложности программирования перенеслись бы на создание правильных спецификаций
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
возможно
Alexander
сейчас то, сложность спецификаций (типов) много меньше, чем сложность программ
кана
Индуктивные доказательства бы как-нибудь автоматизировать, а то
f A = Refl
f (B A) = rewrite f A in Refl
Такого много
Alexander
стратегии в coq не для этого?
кана
Со стратегиями еще не знаком, с доказальствами знаком один день)
Alexander
ладно наверное соседний чятик больше подойдет, так и людей больше кто с хорошим образованием по теме
Anonymous
а в идрисе можно писать доказательства как в коке?
кана
А как их в коке пишут? По моему так декларативно нельзя, все через костыли изоморфизма
Max
"Монады являются моноидами, ведь как известно, монада — это всего лишь моноид в категории эндофункторов, а монадические законы — не более чем определение моноида в контексте продолжений"
Всего лишь. Как известно. С очевидностью следует.
Пиздить вас кочергой.
Anonymous
ну тактиками
кана
Слова "тактики и стратегии" в идрисе точно есть, видел в доке
кана
Ну на самом деле это со временем действительно становится очевидным)
Anonymous
ну просто редко учат монады по определению которое интуитивно является моноидом
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
Anonymous
но зря
Viacheslav
Max
кана
Я пост как раз про моноиды и монады пишу. Заочка началась просто
Viacheslav
И идрис в целом не очень для доказательств подходит
Anonymous
Max
Max
Max
уже второй раз псит на программистов и всяких айтишников