You are viewing the community [info]ru_deptypes

Программирование с зависимыми типами [entries|archive|friends|userinfo]
Программирование с зависимыми типами

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

coq затык [Nov. 17th, 2010|09:51 pm]
zelych
Подскажите, пожалуйста.
Вот у меня есть индуктивный предикат:
  Inductive last (a: A): list A -> Prop :=
  | last_one: last a (a :: nil)
  | last_many: forall (l: list A) (x: A), last a l -> last a (x :: l).

Очевидно?, что last a nil быть не может. Как тогда доказать что-нибудь типа такого?
  Lemma last_nil: forall (a: A), last a nil -> False.

Спасибо.
Link5 comments|Leave a comment

кортежи с именованными компонентами как dependent product [Jul. 20th, 2010|04:11 am]

beroal
Рассмотрим типизированные кортежи с именованными компонентами. Множество имён компонентов KS одно для всех кортежей, но кортеж может иметь не все компоненты. Есть функция typeof, которая отображает имя компонента на тип компонента. Множество функций с зависимым типом, у которых зависимость типа результата от значения аргумента задаётся typeof, и есть множество кортежей с компонентами из KS.

KS0 ⊆ KS ∧ KS1 ⊆ KS. Если истинно KS0 ⊆ KS1, то существует проекция, которая берёт кортеж с именами KS1 и возвращает кортеж с именами KS0. Проекция всего лишь выбрасывает те компоненты кортежа, имена которых ∈ KS1 и ∉ KS0, потому я назвал её проекцией. KS0 ⊆ KS1 можно превратить как каноническую инъекцию inj : KS0 → KS1. Тогда интуитивно это описывается как «инъекция превращается в проекцию». Если построить категорию (обозначим её (P KS)) из ЧУМ подмножеств KS, имею контравариантный функтор D : P KS → Set (и пучок).

Как доказать свойства D из свойств dependent product? typeof использовать не получится, вместо typeof имеем bundle для каждого KS0, KS0 ⊆ KS. pullback functor inj* должен отображать bundle для KS1 в bundle для KS0, bundle-ы разумеется связаны. Морфизм KS0→1 (назову его (final KS0)) (1 — это singleton, я работаю в Set) задаёт функтор Π (final KS0), который берёт bundle для KS0 и возвращает собственно множество кортежей с именами KS0.

Дальше затык. Информация по dependent product у меня очень скудная.
Link2 comments|Leave a comment

сайт вопросов и ответов, посвящённый информатике [Jul. 16th, 2010|02:39 am]

beroal
то бишь computer science. Здесь собирают подписи.
LinkLeave a comment

coq-загадка [Jul. 6th, 2010|11:24 pm]

zelych
А вот если выразить логические связки в таком виде:

Definition and (p q : Prop) := forall a : Prop, (p -> q -> a) -> a.
Definition or (p q : Prop) := forall a : Prop, (p -> a) -> (q -> a) -> a.

то для них, наверное, можно доказать какие-нибудь простые свойства:

Lemma or_distr : forall p q r, or p (and q r) -> and (or p q) (or p r).
Lemma or_assoc : forall p q r, or (or p q) r -> or p (or q r).

Только у меня почему-то, хоть убей, не получается.

Думал на хаскеле будет привычнее, перевёл or_assoc на него -- тоже не решается:

{-# LANGUAGE RankNTypes #-}

type OR p q = (forall a. (p -> a) -> (q -> a) -> a)

or_assoc :: OR (OR p q) r -> OR p (OR q r)
or_assoc h1 h2 h3 = undefined

h1 :: OR (OR p q) r -- ((forall b . (p -> b) -> (q -> b) -> b) -> a) -> (r -> a) -> a
h1 or_pq ra = undefined

h2 :: p -> a
h2 = undefined

h3 :: OR q r -> a
h3 or_qr = undefined


Отгадка для or_distrRead more... )
Отгадка для or_assocRead more... )
Подскажите что-нибудь, пожалуйста.
Link14 comments|Leave a comment

She. [Apr. 3rd, 2010|07:09 pm]

thesz
[Tags|, ]

She is the Strathclyde Haskell Enhancement.

Препроцессор, добавляющий в Хаскель полезные вещи из области зависимых типов. Например, типы, индексированные данными.

Написан Конором МакБрайдом на его пути к Эпиграмму.

Узнал об этом через PFP Planet, из записи [info]nealar.
Link2 comments|Leave a comment

Окончательная версия Coq 8.2 [Feb. 15th, 2009|12:30 am]

alexey_rom
[Tags|]

Сабж вышел.
Link5 comments|Leave a comment

observational type theory [Feb. 9th, 2009|07:48 pm]

beroal
Кто-нибудь раскусил, что такое «observational type theory» и с чем её едят? (См. пример задачи ниже.) Иль её не едят, ею любуются? ;) P. S. Статьи просматривал, голова всё равно осталась пустой.

Например, нужно записать высказывание «у морфизма m:a→b есть прообраз по функтору F». Должно получиться ∃a0.F a0 = a → ∃b0.F b0 = b → ∃m0:a0→b0.F m0 = m. Проблема в том, что в равенстве F m0 = m правая и левая части имеют разные типы, а именно: F m0:F a0→F b0 и m:a→b. Чтобы приравнять типы, надо применить равенства F a0 = a и F b0 = b.
Link11 comments|Leave a comment

Вышел Release Candidate Coq 8.2 [Jan. 25th, 2009|01:31 am]

alexey_rom
[Tags|]

Изменения:
Классы типов (!)
Более производительные и новые библиотеки для арифметики
Много других изменений

Полное описание изменений
Качать
Link4 comments|Leave a comment

Знающие люди, подскажите! [Dec. 26th, 2008|01:22 pm]
nivanych
Категорная модель higher order типов -- это топос.
Категорная модель зависимых типов -- это Local CCC.

Естественно, что все-все возможные системы
с зависимыми типами на практике не нужны.
Какие-то из них вполне впихиваются в топосы.

Так вот, меня взяло сомнение, а все ли "полезные"
системы типов могут упихаться в некоторый топос?...
Есть ли какая очень нужная и полезная система
с зависимыми типами, которая не описывается топосом
(топосом из топосов и функторов между ними)?...

Дополнение )

P.S.
Надеюсь, это не оффтопик.
Есличо, подскажите, куда лучше запостить?...
Link2 comments|Leave a comment

Это не совсем про зависимые типы данных. [Dec. 24th, 2008|12:04 am]

thesz
[Tags|, , ]

Type safe pattern matching combinators.

При чтении этой статьи у меня всё время было стойкое чувство, что я это видел в районе generic programming with dependent types.

К тому же там есть пример написания функции наподобие taut на этих комбинаторах.

Вот taut:
boolPower : {n : Nat} -> Set
boolPower Zero = Bool
boolPower (Succ n) = Bool -> boolPower n

taut : {n : Nat} -> boolPower n -> Bool
taut Zero v = v
taut (Succ n) f = taut n (f true) && taut n (f false)
Иными словами, функция, принимающая на вход функцию с произвольным числом аргументов.

И используемый в статье Хаскель очень простой, даже, по-моему, Haskell 98.
Link1 comment|Leave a comment

navigation
[ viewing | most recent entries ]
[ go | earlier ]