
Alexander
18.09.2017
09:57:36
для unqiue или линейных типов оно автоматом будет
наверное только достаточно чтобы длина совпадала
но это надо доказывать
наши ребята пилящие линейные типы в гхц, сказали что не видят причин почему это неправда, но не знают как доказать

Google

kana
18.09.2017
09:58:23
А, ну да, можно и только длину, уникальные же

Pavel
18.09.2017
09:58:35

Alexander
18.09.2017
09:58:57
ну _я думаю_ что в типы можно заложить реализацию
поскольну ничего формально не запрещает поднять реализацию на уровень типов

kana
18.09.2017
09:59:22
Написать дсл, который будет дублировать стейтменты идриса)

Alexander
18.09.2017
09:59:29
будет у тебя там IF a < b 'THEN ....

kana
18.09.2017
09:59:37
Чтобы реализация и тип совпадали

Alexander
18.09.2017
09:59:58
i.e. у тебя будет реализация на уровне типов, только непонятен толк от этого

kana
18.09.2017
10:00:10
Но старые конструкции никуда не исчезнут, поэтому весь код покрыть будет нельзя

Pavel
18.09.2017
10:01:35

Alexander
18.09.2017
10:01:48
скорее всего
вообще идея инетересная в смысле оптимизаций, ведь если "поднять" формальный код на уровень типов, а потом написать оптимальный и можно будет доказать что они эквивалентны
меня можно не слушать, я в зависимых типах и т.п. понимаю не достаточно

Google

kana
18.09.2017
10:02:37
Ну так ты же хотел биекцию. Может ошибаюсь, но если две вещи эквивалентны, то уже биекция невозможна

Pavel
18.09.2017
10:03:31

Alexander
18.09.2017
10:07:14
но это же то, что система типов принципиально и дает
компилятор проверяет совпадение заявленного типа, и программы?

Pavel
18.09.2017
10:07:56
и желательно более автоматически
а не ручками писать ~200 строк, чтобы доказать, что сортировка работает

Alexander
18.09.2017
10:08:31
ну типы для этого и есть, мы выражаем те свойста, которые хотим иметь

kana
18.09.2017
10:08:59
Было бы все так легко, все бы писали верифицированный код)

Alexander
18.09.2017
10:09:01
а сортировка это достаточно сложная и подлая штука

Pavel
18.09.2017
10:09:19

Alexander
18.09.2017
10:09:22
особенно если не халявить с линейными типами
да, ладно
просто бы сложности программирования перенеслись бы на создание правильных спецификаций

Pavel
18.09.2017
10:10:03
возможно

Alexander
18.09.2017
10:10:26
сейчас то, сложность спецификаций (типов) много меньше, чем сложность программ

kana
18.09.2017
10:11:01
Индуктивные доказательства бы как-нибудь автоматизировать, а то
f A = Refl
f (B A) = rewrite f A in Refl
Такого много

Alexander
18.09.2017
10:11:28
стратегии в coq не для этого?

kana
18.09.2017
10:12:07
Со стратегиями еще не знаком, с доказальствами знаком один день)

Alexander
18.09.2017
10:12:17
ладно наверное соседний чятик больше подойдет, так и людей больше кто с хорошим образованием по теме

Google

illiatshurotshka❄️
18.09.2017
10:12:58
а в идрисе можно писать доказательства как в коке?

kana
18.09.2017
10:13:16
А как их в коке пишут? По моему так декларативно нельзя, все через костыли изоморфизма

Max
18.09.2017
10:13:47
"Монады являются моноидами, ведь как известно, монада — это всего лишь моноид в категории эндофункторов, а монадические законы — не более чем определение моноида в контексте продолжений"
Всего лишь. Как известно. С очевидностью следует.
Пиздить вас кочергой.

illiatshurotshka❄️
18.09.2017
10:13:47
ну тактиками

kana
18.09.2017
10:14:03
Слова "тактики и стратегии" в идрисе точно есть, видел в доке
Ну на самом деле это со временем действительно становится очевидным)

illiatshurotshka❄️
18.09.2017
10:15:30
ну просто редко учат монады по определению которое интуитивно является моноидом

Pavel
18.09.2017
10:15:37

illiatshurotshka❄️
18.09.2017
10:15:40
но зря

Vyacheslav
18.09.2017
10:15:56

Max
18.09.2017
10:15:59

kana
18.09.2017
10:16:06
Я пост как раз про моноиды и монады пишу. Заочка началась просто

Vyacheslav
18.09.2017
10:16:11
И идрис в целом не очень для доказательств подходит

illiatshurotshka❄️
18.09.2017
10:16:38

Pavel
18.09.2017
10:16:39

Max
18.09.2017
10:16:51
уже второй раз псит на программистов и всяких айтишников
или третий

illiatshurotshka❄️
18.09.2017
10:18:27
аа это канал какого-то политолога

Google

illiatshurotshka❄️
18.09.2017
10:19:05
ну пусть дальше изучает с таким отношением

kana
18.09.2017
10:22:44
Почему-то канал его не открывается

Alexander
18.09.2017
10:35:32

Vyacheslav
18.09.2017
10:35:51
в idris

Alexander
18.09.2017
10:35:52
а не на моё сообщение было, ок

kana
18.09.2017
10:40:32
Так, вернёмся к другой околохаскелевой теме - определение монады как моноида на эндофункторах.
Я понимаю, почему это моноид: (F : C -> C, Indentity : F, Compose : (F, F) -> F), где C - какая-то категория, но не понимаю, как из этого определения следуют join и bind

Alexander
18.09.2017
10:42:00
join это _3, так?
просто по определению

kana
18.09.2017
10:42:13
что за _3?

Alexander
18.09.2017
10:42:19
третий элемент тройки

kana
18.09.2017
10:42:26
Ну да
Стоп, нет

Alexander
18.09.2017
10:42:42
все же да

kana
18.09.2017
10:42:44
Там Compose, не джоин
Compose дает нам возможность работать с композиций функторов как функтором, но не заменяет функтор. Или это одно и то же?
А, ну в принципе да, одно и то же)

Alexander
18.09.2017
10:43:40
щас, должно переписываться одно через другое

kana
18.09.2017
10:43:51
Окей, а unit?

Alexander
18.09.2017
10:46:00
Definition 1.1 A monad over a category C is a triple (T, η,µ), where T: C → C is a functor, η: IdC
T and µ:T2 . →T are natural transformations and the following equations hold:
• µTA; µA = T(µA);µA
• ηTA;µA = idTA = T(ηA);µA A
я к этому определеню больше привык

Google

Alexander
18.09.2017
10:46:38
There is an alternative description of a monad (see [7]), which is easier to justify computationally.
Definition 1.2 A Kleisli triple over C is a triple (T, η, ∗), where T:Obj(C) → Obj(C), ηA:A → TA, f∗:TA→ TB for f:A→TB and the following equa- tions hold:
• η∗ A = idTA
• ηA; f∗ = f • f∗; g∗ = (f; g∗)∗
Every
инетерсно здеть картинку можно пихать или копировлся бы латех сразу :/
тут какое-то третье определение..

Alex
18.09.2017
10:58:31
я даже пару тактик туда контрибутнул

Vyacheslav
18.09.2017
10:59:04
http://docs.idris-lang.org/en/latest/reference/tactics.html

Alex
18.09.2017
10:59:09
другое дело что дебажить их еще сложнее чем обычный идрис

Vyacheslav
18.09.2017
10:59:22
теперь там элаборатор

Alex
18.09.2017
10:59:33
это старые, новые через elab да, pruviloj называются
выходит повербознее чем в коке, но суть та же самая
вербозность в основном за счет того что имплициты сырые, приходится термы руками раздавать
вроде в блодвене имплициты как-то поудобнее в ядро будут вшиты

kana
18.09.2017
11:02:41
Блодвен?

Alex
18.09.2017
11:02:56
кодовое название для идриса на идрисе

kana
18.09.2017
11:03:11
О, нашел

Alex
18.09.2017
11:03:13
точнее пока только чекера для tt

Ilya
18.09.2017
11:04:36

kana
18.09.2017
11:06:23
В смысле? Нет, вернуть пруфы, что элементы те же, относительно легко, нужно просто доказать, что при перестановке двух элементов элементы остаются такими же, и каждая операция свопа будет этот пруф возвращать, они будут наслаиваться друг на друга. Сам я такое сейчас не напишу, но код видел

Ilya
18.09.2017
11:08:54
Я говорю, что доказательством того, что новый массив - это отсортированный старый, может служить явное предъявление перестановки