Alexander
Почему?
Влод
вот например ещё один вариант, назовём его "синтаксическая эквивалентность" undefined и void по буквам не совпадает, так что они не эквивалентны
Alexander
А let loop = loop in loop?
Влод
void очевидно населяет тип Void. Но если она совпадает с undefined, который населяет любой тип, то ок
кстати ещё интересно: ты про теорию или про компайл-тайм, рантайм?
Ilya
Хорошо, допустим. Для закрепления: Если мы определим data Void = Void Void void = Void void То void НЕ будет bottom, верно? Потому что находится в СЗНФ? А для newtype Void = Void Void void невозможно привести к СЗНФ, поэтому это bottom
Ilya
Так?
Ilya
Сорри, с телефона пишу, опечатки
Нурлан
Декомпозиция в Haskell определяет бесконечные циклы
Нурлан
Ты можешь с ними работать не можешь вычислить
Нурлан
Скажите мне в чем проблема? Я не понимаю
Нурлан
Выражение void = Void void верное
Ilya
Выражение void = Void void верное
Погоди, пожалуйста
Ilya
Ща я разберусь, а потом тебе объясню
Нурлан
Это как определение бесконечности для целых чисел
Влод
Скажите мне в чем проблема? Я не понимаю
человек не уточняет вопрос, но думает что уже сейчас есть точный ответ
Ilya
в 1м случае боттом
Почему в первом то bottom??
Ilya
data же ленивый
Alexander
data Void = Void Void не bottom
Ilya
data Void = Void Void не bottom
Вот, это хорошо
Влод
потому что невычислимое выражение? разве что можно прикопаться к тому что боттом = невычислимое для каждого типа, а здесь для данного конкретного
Ilya
Видел же стримы?
Ilya
Там то же самое
Ilya
И это никакой не боттом
Влод
нет не видел
Ilya
От них можно брать take и т.д.
Влод
но и не видел определения боттома зависещего от ленивости
Нурлан
Если выражение не вычисляемое это не значит что его нельзя вычислять. Невычисляемый (bottom) это значит что неизвестно будет ли формула упрощена (вычеслена)
Ilya
Ну как список, только без конструктора пустого списка
Влод
ну ок идею понимаю
Ilya
Мы же определяем поток как data Stream a = a :& Stream a
Нурлан
А вычислять и упрощать да сколько влезет
Влод
легко определить бесконечный список
Влод
и ты про то же самое
Ilya
Вот тебе специальная data
Нурлан
Мы же определяем поток как data Stream a = a :& Stream a
Но ты же этот поток не вычисляешь полностью
Ilya
Но ты же этот поток не вычисляешь полностью
Да, но с ним можно делать много чего другого
Нурлан
Поток можно пустить на декомпозицию
Нурлан
Вычислить нельзя
Ilya
Например напечатать первые 10 элементов или мапнуть
Нурлан
Печать первых 10 идёт через декомпозицию
Нурлан
Не через полное вычисление
Влод
тогда допустим 1) a = 1:a 2) length a 1е не боттом. 2е боттом?
Нурлан
По мне так да
Влод
по мне так одно и то же
Нурлан
А как проверить что что-то Боттом ?
Нурлан
В компиляторе такое есть?
Влод
нет
Влод
про компилятор забудь
Ilya
тогда допустим 1) a = 1:a 2) length a 1е не боттом. 2е боттом?
У тебя в первом clause, а во втором значение
Влод
мы тут наверное про теорию
Ilya
Как ты их вообще сравниваешь
Ilya
Я не понял
Ilya
bottom это ЗНАЧЕНИЕ
Влод
а харошо
Влод
блин да это я смачно тут народ обманул
Ilya
Ты имеешь в виду, является ли a bottom?
Влод
a и length a
Ilya
a не bottom
Ilya
length a думаю, что да
Ilya
Но блин это на самом деле разговор трех нубов
Влод
всё таки боттом?
Ilya
Да
Влод
ну да, стоит как бы забыть про то что мы все некомпетентны
Влод
это только мешает
Влод
если бы здесь заявился бы авторитет то каждый бы просто сказал – ага ок я понял
Влод
и всё, а так рассуждение
Ilya
я вот попробую резюмировать
Ilya
1. Для любого выражения в Haskell можно сказать, что либо его верхний конструктор вычисляется за конечное время (приведение к СЗНФ, слабой заголовочной нормальной форме), либо нет. Нам не важно, что эта задача в общем случае алгоритмически неразрешима (всем известная "проблема останова"). Главное, что это так. 2. Если верен второй случай (верхний конструктор невычислим), то мы называем такое значение bottom 3. Тем не менее, даже для значений bottom можно вывести их тип. Например length (бесконечный список) — bottom типа Int 4. Мы говорим, что все bottom одного и того же типа эквивалентны и суть одно и то же значение этого типа. 5. Дополнительно мы определяем полимофный undefined, который являет собой bottom любого типа. bottom любого конкретно типа и undefined - одно и то же.
Ilya
@qnikst это не бред?
Alexander
Попозже прочитаю отвечу
Влод
>Мы говорим, что все bottom одного и того же типа эквивалентны плюс бесконечность и минус бесконечность
Alexander
Я тут сына домой веду неудобно читать
Ilya
Влод
ну или рекурсия по разным конструкторам, хотя в итоге конечно не важно какое будет значение
Ilya
ну или рекурсия по разным конструкторам, хотя в итоге конечно не важно какое будет значение
Если конструкторы ленивые, то это конечно разные значения, и оба не bottom
Ilya
А если энергичные, то одинаковые, bottom
Ilya
я так думаю
Ilya
А насчёт плюс бесконечности и минус бесконечности — ты какой тип имеешь в виду?