Max
или третий
Anonymous
аа это канал какого-то политолога
Anonymous
ну пусть дальше изучает с таким отношением
кана
Почему-то канал его не открывается
Alexander
Viacheslav
в idris
Alexander
а не на моё сообщение было, ок
кана
Так, вернёмся к другой околохаскелевой теме - определение монады как моноида на эндофункторах.
Я понимаю, почему это моноид: (F : C -> C, Indentity : F, Compose : (F, F) -> F), где C - какая-то категория, но не понимаю, как из этого определения следуют join и bind
Alexander
join это _3, так?
Alexander
просто по определению
кана
что за _3?
Alexander
третий элемент тройки
кана
Ну да
кана
Стоп, нет
Alexander
все же да
кана
Там Compose, не джоин
кана
Compose дает нам возможность работать с композиций функторов как функтором, но не заменяет функтор. Или это одно и то же?
кана
А, ну в принципе да, одно и то же)
Alexander
щас, должно переписываться одно через другое
кана
Окей, а unit?
Alexander
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
Alexander
я к этому определеню больше привык
Alexander
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
Alexander
инетерсно здеть картинку можно пихать или копировлся бы латех сразу :/
Alexander
тут какое-то третье определение..
Alex
я даже пару тактик туда контрибутнул
Viacheslav
http://docs.idris-lang.org/en/latest/reference/tactics.html
Alex
другое дело что дебажить их еще сложнее чем обычный идрис
Viacheslav
теперь там элаборатор
Alex
это старые, новые через elab да, pruviloj называются
Alex
выходит повербознее чем в коке, но суть та же самая
Alex
вербозность в основном за счет того что имплициты сырые, приходится термы руками раздавать
Alex
вроде в блодвене имплициты как-то поудобнее в ядро будут вшиты
кана
Блодвен?
Alex
кодовое название для идриса на идрисе
кана
О, нашел
Alex
точнее пока только чекера для tt
Ilya
кана
В смысле? Нет, вернуть пруфы, что элементы те же, относительно легко, нужно просто доказать, что при перестановке двух элементов элементы остаются такими же, и каждая операция свопа будет этот пруф возвращать, они будут наслаиваться друг на друга. Сам я такое сейчас не напишу, но код видел
Ilya
Я говорю, что доказательством того, что новый массив - это отсортированный старый, может служить явное предъявление перестановки
кана
Ну тайпчекеру этот пруф мало что скажет ведь. А самому в рантайме проверять валидность перестановки - не то
Ilya
В смысле валидность перестановки?
Anonymous
Ребята, а игры на хаскеле никто не пробовал делать?
кана
Зачем?)
Ilya
Существование такой перестановки уже говорит нам, что массивы из одних и тех же эл-ов
Ilya
Любой алгоритм сортировки должен уметь её выдавать. Некоторые по сути так и работают даже. Но не всё.
кана
Ну да, цепочка пруфов, что перестановка двух элементов дает те же элементы, пруфом перестановки и будет являться)
Евгений
https://hackage.haskell.org/package/Raincat же
Влод
в твитерке все так восторжено к ней отнеслись
Евгений
Хотя хз собираются ли сейчас дождекоты
Влод
Home page http://raincat.bysusanlin.com/
Евгений
Правильный -> http://bysusanlin.com/raincat/
Anonymous
Спасибо. Но там вроде бы 2008 год.
Anonymous
Помню была какая-то библиотека, крутецкая.
Евгений
Ну она клёвая
Alexander
ещё про танки было что-то
Ilya
Ну да, цепочка пруфов, что перестановка двух элементов дает те же элементы, пруфом перестановки и будет являться)
Если функция сортировки записана как
sort :: Vec n a -> Vec n a
то нам нужно гарантировать, что
а) элементы нового вектора = элементы старого вектора
б) новый вектор отсортирован
Теперь, если функция сортировки записана как
sort :: Vec n a -> AscVec n a
где AscVec n a - вектор с возрастающими элементами длины n
то нам достаточно гарантировать только а), б) уже следует автоматом
А другой подход может быть в том, чтобы записать сортировку как
sort :: Vec n a -> Perm n a
где Perm n a - перестановка длины n
теперь нам надо проверять б), а а) уже есть
Ilya
я не знаю, какой подход лучше. с идрисом не знаком
Alexander
в сортировке надо нужно выдать на выходе перестановку элементов, которая приводит к сортированному списку, если я правильно понимаю
Alexander
собственно вот "другой подход"
Ilya
ну я это и написал:)
Alexander
с unqiue types есть халяву (неформальная)
Alexander
если у нас есть длина и новый список, то из этого должно следовать, что это перестановка
Alexander
т.к. мы не можем ни дублировать, ни брать элементы из ниоткуда, ни забывать
Alexander
это верно если метод полиморфный по элементу только
Alexander
доказать не просите =)
Misha
Ilya
насчёт дублирования непонятно как следует из полиморфности
Alex
еще на сортировку иногда навешивают пруф complexity
Alexander
уникальность/линейность требует
Alexander
в смысле что дублировать нельзя
Alexander
если нету полиморфности, то ничего не запрещает создать новый элемент
Alexander
т.е. если есть Unique a то мы не можем создать, a
Alexander
а если это Unqiue Int мы можем сделать Unique 0
Alexander
если у нас a то мы не можем ничего с элементами делать
Ilya
Alexander
наверное