Интересно, типа.
Feb. 3rd, 2013 10:33 pmВот есть, типа, такая типа штука, называется типа "зависимые типы". Когда сам тип содержит в себе значение. И два таких типа будут (типа) совместимы, если эти значения равны. А поскольку значения будут известны только в рантайме, приходится давать доказательство того, что значения таки равны.
А вот во всяких джавах с сиплюсплюсами равенств как минимум два. Не помню точно, как они называются, но, в общем, равенство по ссылке и по значению. Первое сильнее второго. То есть, если какие-то штуки лежат в одном и том же месте, то это одна и та же штука, и, значит, они одинаковые. Но если они одинаковые — это ещё не значит, что они лежат в одном и том же месте.
В агде, если мой эклер меня не обманывает, требуется равенство по значению. А есть ли зависимые типы с равенством по ссылке? То есть, для того, чтобы
Такое где-нибудь есть?
Update: подсказали, что это, вроде, называется "path dependent types".
А вот во всяких джавах с сиплюсплюсами равенств как минимум два. Не помню точно, как они называются, но, в общем, равенство по ссылке и по значению. Первое сильнее второго. То есть, если какие-то штуки лежат в одном и том же месте, то это одна и та же штука, и, значит, они одинаковые. Но если они одинаковые — это ещё не значит, что они лежат в одном и том же месте.
В агде, если мой эклер меня не обманывает, требуется равенство по значению. А есть ли зависимые типы с равенством по ссылке? То есть, для того, чтобы
Vector n Int был тем же типом, что и Vector m Int нужно не только n=m, нужно, чтобы n и m были одной и той же переменной.Такое где-нибудь есть?
Update: подсказали, что это, вроде, называется "path dependent types".
no subject
Date: 2013-02-03 06:49 pm (UTC)no subject
Date: 2013-02-03 07:47 pm (UTC)no subject
Date: 2013-02-03 08:01 pm (UTC)no subject
Date: 2013-02-03 08:10 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-03 09:10 pm (UTC)Глупо было бы не иметь бесплатного "точно равно, т.к. физически указатели на один и тот же объект".
no subject
Date: 2013-02-04 07:26 am (UTC)no subject
Date: 2013-02-04 09:51 am (UTC)no subject
Date: 2013-02-04 10:02 am (UTC)no subject
Date: 2013-02-03 07:23 pm (UTC)Конкатенируя Vec A 3 и Vec A 4 мы получим Vec A 7, только эта семёрка гарантировано не будет ссылочно равна никакой другой семёрке.
no subject
Date: 2013-02-03 07:55 pm (UTC)Я имею в виду плюшки такого типа:
data Ord a = Ord {compare :: a -> a -> Ordering} data Set a (Ord a) = какая-то реализация ordInt :: Ord Int ordInt = Ord {compare = compareInt#} a :: Set a ordInt ... ordIntFake :: Ord Int ordIntFake = Ord {compare = flip compare ordInt}Ни в каком случае
aне будет воспринято какSet a ordIntFake. Система классов и инстансов в Хаскеле этого не обеспечивает — можно описать разные инстансы в разных модулях и закрутить всё так, что они не станут друг другу мешать; в результате вполне можно получить, например,Set, содержащий какое-то значение несколько раз. Если же запихивать значение внутрьSet-а, то будет сложно делатьunion, например. А так — всё хорошо.no subject
Date: 2013-02-03 07:28 pm (UTC)no subject
Date: 2013-02-03 07:57 pm (UTC)no subject
Date: 2013-02-03 10:20 pm (UTC)Зависимые типы
Date: 2013-02-03 07:30 pm (UTC)no subject
Date: 2013-02-03 07:40 pm (UTC)no subject
Date: 2013-02-03 07:59 pm (UTC)no subject
Date: 2013-02-03 08:04 pm (UTC)no subject
Date: 2013-02-03 08:11 pm (UTC)no subject
Date: 2013-02-03 09:04 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-03 11:47 pm (UTC)Бывают еще nominal path dependent types, там для равенства совпасть должно лишь место определения в коде, они эмулируются через экзистенциальные типы.
no subject
Date: 2013-02-04 04:29 am (UTC)Э-э-э, почему runtime-то?
> Могут быть реализованы в языках с зависимыми типами
Defeats the purpose.
> они эмулируются через экзистенциальные типы.
КАК?
no subject
Date: 2013-02-04 08:09 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-04 07:22 am (UTC)no subject
Date: 2013-02-04 07:51 am (UTC)Не понял вопроса.
> как на них ссылаться
Не понял вопроса.
> и как доказывать равенство ссылок иначе чем в рантайме?
Чисто синтаксической проверкой. Если используется одна и та же переменная, то они совпадают, если нет - не совпадают.
no subject
Date: 2013-02-07 10:57 pm (UTC)как на них ссылаться -- ну например по адресу... а вообще вопрос наверно был "какой структурой данных представлять в рантайме тип данны", так?
и как доказывать равенство ссылок иначе чем в рантайме -- x.Y=z.Y если и только если компилятор может доказать что x=z; обычно доказательство черезвычайно тупо, но этого хватит