deniok: (lambda cube)
deniok ([personal profile] deniok) wrote2012-12-08 09:36 pm
Entry tags:

термологический вопрос

Коллеги! Не будет ли слишком изощренным издевательством во вводной части обзора Агды, при самом начале обсуждения типа Vec привести такие примеры
[true,false,true] : Vec Bool 3
[2,12,85,0,6] : Vec ℕ 5
Поясню - я не хочу в этом месте вдаваться в детали описания конструкторов, а скрытый здесь грандиозный обман я честным образом раскрою позже.

[identity profile] ulysses4ever.livejournal.com 2012-12-08 05:41 pm (UTC)(link)
Я Агды не знаю совсем, но пример мне нравится! Интуитивно понятно. Готов потерпеть обман ради такого.

[identity profile] deni-ok.livejournal.com 2012-12-08 05:47 pm (UTC)(link)
на самом деле в Агде все лексемы должны быть отделены друг от друга пробелами. То что стоит слева от каждого оператора типизации (:) - просто идентификатор (причём валидный :)

[identity profile] ulysses4ever.livejournal.com 2012-12-08 05:48 pm (UTC)(link)
А, круто…

[identity profile] alexey bakhirkin (from livejournal.com) 2012-12-08 06:37 pm (UTC)(link)
Сурово. Кто-нибудь на автомате с пробелами напечатает - и твой обман раскроется.
Edited 2012-12-08 18:37 (UTC)
ext_615659: (Default)

[identity profile] akuklev.livejournal.com 2012-12-08 08:08 pm (UTC)(link)
Эм, тонкое, тонкое извращение. :)

[identity profile] deni-ok.livejournal.com 2012-12-08 08:16 pm (UTC)(link)
так а в любом случае это не валидное замкнутое утверждение, которое можно поселить в модуле. В действительности так
[2,12,85,0,6] : Vec ℕ 5
[2,12,85,0,6] = 2 ∷ 12 ∷ 85 ∷ 0 ∷ 6 ∷ []
Правда тип выражения можно в минибуфере глядеть по C-c C-d

[identity profile] dmytro starosud (from livejournal.com) 2012-12-08 08:44 pm (UTC)(link)
Я думаю, в вводной части обязательно нужно сказать о пробелах, юникоде и синтаксисе - это ведь база, и здесь ничего сложного нету, просто пробелы, всего то.
Кстати, а как вы такой вектор сделали? Это в стандартной библиотеке? Или это псевдокод?

[identity profile] deni-ok.livejournal.com 2012-12-08 08:58 pm (UTC)(link)
Это форменное издевательство, как и было объявлено:
module VecTest where

open import Data.Nat
open import Data.Vec

[2,12,85,0,6] : Vec ℕ 5
[2,12,85,0,6] = 2 ∷ 12 ∷ 85 ∷ 0 ∷ 6 ∷ []

[identity profile] deni-ok.livejournal.com 2012-12-08 09:05 pm (UTC)(link)
Надо сказать этим извращением активно пользуются в стандартной библиотеке, за милую душу обзывая переменную типа m ≤ n идентификатором m≤n.

[identity profile] dmytro starosud (from livejournal.com) 2012-12-08 09:09 pm (UTC)(link)
Ну это будет тогда на приключенческий фильм похоже, где в конце зритель внезапно осязает всю суть происходящего.
Скажите, пожалуйста, а как вы до кульминации планируете такое довести?

[identity profile] deni-ok.livejournal.com 2012-12-08 09:13 pm (UTC)(link)
Да нет, это случайно вышло. Я во введении хотел рассказать общие вещи про зависимые типы, но нужны какие-то примеры. Полезла Agda, ну и следовательно всякие детали синтаксиса. А вдаваться в них там не очень к месту.

Буду думать.

[identity profile] nivanych.livejournal.com 2012-12-09 06:12 am (UTC)(link)
Если в сноске признаться, что тут обман, который честным образом раскроется позже, то нормально, думаю.

[identity profile] nivanych.livejournal.com 2012-12-09 06:15 am (UTC)(link)
"Ви так говорите, как будто, в этом есть что-то плохое"
Ну так, если знать простое правило про идентификаторы, то ничего страшного-то нет.
В большинстве текстовых редакторов и просто средств для просмотра кода, визуально "m ≤ n" легко отличить от "m≤n".

[identity profile] nivanych.livejournal.com 2012-12-09 06:17 am (UTC)(link)
Хотя и помнится, по-первости, меня слегка раздражало "идентификатор a+b неизвестен".
Причём, я не сразу на это натолкнулся — обычно, я пишу через пробел ;-)

[identity profile] nivanych.livejournal.com 2012-12-09 06:23 am (UTC)(link)
Но надо сказать, что 2 ∷ 12 ∷ 85 ∷ 0 ∷ 6 ∷ [] выглядит не так и плохо, чтобы зачем-то надо было обманывать.
Можно оператор составить и из одного символа, только с более простым набором.
Но для чтения, это малосущественно.

[identity profile] deni-ok.livejournal.com 2012-12-09 06:40 am (UTC)(link)
Да, так пока и сделал.

[identity profile] deni-ok.livejournal.com 2012-12-09 08:51 am (UTC)(link)
не, я согласен, что это хороший способ именования, просто к нему привыкнуть надо, очень уж он необычный

[identity profile] nivanych.livejournal.com 2012-12-09 09:04 am (UTC)(link)
Я считаю, что агдочка достаточно красиво, чтобы её рассказывать без обману! ;-)

[identity profile] deni-ok.livejournal.com 2012-12-09 09:06 am (UTC)(link)
Хорошо, так и поступим!

[identity profile] nivanych.livejournal.com 2012-12-09 09:19 am (UTC)(link)
Нет, ну правда — неужели, этот мелкий синтаксический трюк что-то значит?

[identity profile] deni-ok.livejournal.com 2012-12-09 09:31 am (UTC)(link)
я уже вполне согласен, что идея была дурацкой

[identity profile] nivanych.livejournal.com 2012-12-09 09:32 am (UTC)(link)
Нет, я буду доказывать! ;-)