gds

dependent types

Mar 05, 2012 15:17

(как бы разворачивая каменты из предыдущего поста ( Read more... )

Leave a comment

udpn March 5 2012, 18:50:09 UTC
1. Dimensional analysis пишется просто как некий тип, параметризованый значением вектора заданной длины (или конечного отображения, или записи, по вкусу). Обычного вектора. Для этого не нужно писать изврат на шаблонах с MPL'ем. Сообщения об ошибках типизации адекватные. Кроме того, небольшие модификации позволяют в одной программе использовать несколько различных систем единиц (СИ, СГС, МКС, МКГСС) и переводить одни в другие без боли в заднице. Полезно не только в математике, но и практически во всех остальных областях знаний. Например, в тервере позволяет не путать ковариацию с коэфф. корреляции. "Какие-то утверждение в compile-time" это "любые утверждения в compile-time без необходимости переписывать весь код заново в синтаксисе другого вычислительного контекста того же языка". Это многого стоит ( ... )

Reply

udpn March 6 2012, 15:55:40 UTC
А можно поподробнее про семантику линейных типов? Я вот совершенно хз, как можно заставить юзера закрывать сокет в ЧФЯП.

Reply

thedeemon March 6 2012, 18:03:04 UTC
Поподробнее отдельным постом отпишусь чуть позже ( ... )

Reply

nivanych March 8 2012, 06:47:24 UTC
Да вот, вспомнилось.
Ещё одна область, где в каких-то частях программы очень может быть полезно доказательство, это всякое параллельное.

Reply

e_mmortal March 6 2012, 12:10:14 UTC
Эта мысль "Комбинаторный стиль для того и сделан, чтобы как можно реже (т.е. никогда) не менять уже готовую функцию" очень порадовала (не сарказм). Это интуитивное ощущение или она была где-то развёрнуто сформулирована?

Reply

udpn March 6 2012, 15:49:32 UTC
Prelude

Есть, конечно, Numeric Prelude и Awesome Prelude, но это не переписывание имеющегося кода, это вообще другие библиотеки.

Reply

nivanych March 6 2012, 06:35:31 UTC
> интуиционистской предикативной логики

Несущественная придирка -
В случае Agda2, это так.
В случае CoQ, это не так.

Более существенно то, что чем больше ты хочешь гарантий, тем больше надо писать доказательств. И всякая автоматика пока помогает не очень-то, хотя и сколько-то помогает. Буду пробовать ещё.
Но как минмиум, тесты генерить совсем просто.

> а второй более практичен (классы типов там, всё такое)

Как минимум, на agda-2.3 можно имитировать классы типов. За более ранние не помню, в каком из них это появилось.

> Самый мощный из, Coq

Он не самый мощный, он наиболее развитый.
И как и Agda2, в виде нечто типа "unsafe", позволяет общую рекурсию.

Reply

si14 March 8 2012, 07:52:01 UTC
Вот мне интересно, почему при достаточно активном обсуждении зависимых типов никто не говорит о системах эффектов? Я знаю, пожалуй, только 2 проекта, которые их используют - DDC и Clean (причём, если я не ошибаюсь, в последнем нельзя использовать свои эффекты). При этом эффекты гораздо, гораздо проще и ближе к среднему программисту, это очень низковисящий фрукт, прямо-таки просящий его сорвать. Вывод большинства эффектов тривиален (просто распространение по графу вызовов), мгновенный профит - от предупреждений об использовании аллоцирующих функций в tight loop'е до гарантий, что функция не будет мутировать свои аргументы (примем, что иногда мутируемость, декларируемая явно, удобна).

Reply

udpn March 8 2012, 19:01:50 UTC
Потому что в зависимо типизированных языках свои плюшки. Ynot, например. Они мощнее.

DDC обсуждался неоднократно в ЖЖ у nponeccop.

Reply

si14 March 9 2012, 18:51:41 UTC
Да, я читаю этот ЖЖ. В частности из-за него вдохновился идеей эффектов.

Мне кажется, некорректно сравнивать эти вещи. Да, эффекты можно выразить на уровне системы типов (например, монадами); однако это, всё-таки, перпендикулярные вещи. Просто ещё одна ось - язык с системой эффектов может быть хоть с зависимыми типами, хоть динамическим.

Reply

udpn March 10 2012, 07:13:58 UTC
Смотри.

В Haskell вложение в монаду утверждает, что эффект есть. Алгебра эффектов не развита, коммутирующие монады нужно описывать явно.

В DDC соответствующая аннотация типа (из побочной системы типов) утверждает, что эффект есть. Есть алгебра эффектов.

В Coq + Ynot есть что-то, смахивающее на монаду, утверждающее, что эффект есть, и какой именно. Алгебра эффектов частично реализована в самой библиотеке и существенно может быть расширена пользователем за счёт модульности.

Чем выше желание программиста избавиться от граблей, тем ниже по этой цепочке он уйдёт.

Reply

udpn March 10 2012, 07:15:09 UTC
Прошу воспринимать утверждение как профанацию, сам я хреново разбираюсь во всех трёх вариантах.

Reply

si14 March 10 2012, 07:43:31 UTC
>В DDC соответствующая аннотация типа (из побочной системы типов) утверждает, что эффект есть
Думается мне, суть в том, что это не система типов. В конце концов, в случае эффектов должны быть несколько другие правила вывода эффектов - очевидно, вывод эффекта "функция мутирует свои аргументы" несколько отличается по правилам распространения эффекта от "функция делает ио". В первом случае функция, не использующая функции с эффектом мутации над своими переменными, не будет иметь этого эффекта; во втором же эффект будет в любом случае (вероятно, после dead code elimination, ну да неважно). Поэтому это перпендикулярное термам и их типам явление.

Я тоже не гуру :)

Reply


Leave a comment

Up