
Yuriy
22.05.2018
13:42:39

Dmitry
22.05.2018
13:43:13
Дак зачем на всех наборах проверять? Это худший случай, когда не удалось внутри всё посворачивать.

Yuriy
22.05.2018
13:43:25
пока человечество научилось решать проблему останова только для специально ограниченных нетьюринговых машин (языков)

Dmitry
22.05.2018
13:43:39
Суперкомпиляторы ж как-то более-менее сворачивают программки?

Google

Yuriy
22.05.2018
13:44:11

Dmitry
22.05.2018
13:44:42
Ну невезение -- оно постоянно? Или только время от времени встречается?

Yuriy
22.05.2018
13:45:36
понимаешь разницу между ∃ и ∀?

Dmitry
22.05.2018
13:45:48
Ну немного
И что?
Я ж пишу про ограниченный вход и ограниченное время проверки.

dimiii
22.05.2018
13:46:49
Отставить токсичность! Меня вот, например и нетьюринговые устраивают

Pineapple
22.05.2018
13:47:15

Yuriy
22.05.2018
13:47:18
проверить останов некоторых МТ можно. проверить останов всех МТ — вообще всех возможных — нельзя

Антон
22.05.2018
13:47:19

Dmitry
22.05.2018
13:47:48
Да я и не хочу проверять все МТ

Yuriy
22.05.2018
13:47:56

Google

Dmitry
22.05.2018
13:50:03
Ну ладно, упрощу вопрос. Можете привести примеры, скажем так, "практических функций", например, из стандартной библиотеки Хаскеля, на которой проверяльщик зациклится?
Т.е., если я пишу очередную опердень, насколько вероятно, что её нельзя будет проверить проверяльщиком завершённости?
(предположим, что библиотеки и фреймворки, которые я при этом использую, каким-то образом верифицированы)

Yuriy
22.05.2018
13:54:20
универсального проверяльщика нет, и не может быть, как известно
если опердень — веб-сервер, то она по ТЗ должна работать вечно, то есть точно не завершается

Pineapple
22.05.2018
13:56:38

Dmitry
22.05.2018
13:57:06
Да
Ну вот нашёл инструменты: http://termination-portal.org/wiki/Category:Tools
Ну и сам сайт интересный, кажется.

Yuriy
22.05.2018
13:58:51
из стандартной библиотеки, например, map не завершимая

Евгений
22.05.2018
13:58:54
Ну всё довольно просто же. Есть разнообразные классы алгоритмов, для каждого из которых есть более сложная функция (не входящая в этот класс процедур), и соответсвующая ей очень сложная синтаксическая структура. Чем более широкий класс процедур рассматриваем, тем сложнее синтаксическая структура.

Dmitry
22.05.2018
13:59:30

Евгений
22.05.2018
13:59:45
У большинства функций вход бесконечный

Yuriy
22.05.2018
13:59:54

Евгений
22.05.2018
14:00:36
На практике функции из конечных множеств в конечные множества никому не нужны
Если вы не свойства группы монстра изучаете

Pineapple
22.05.2018
14:01:46
На практике у нас все множества конечные

Dmitry
22.05.2018
14:01:54
На 100% нет, а скажем на 90% — уже практически полезно, 99% — отлично
Я вообще вот именно про это говорил. Сделаем проверяльщик. Да, он не тотален. Будем натравливать его на программы и давать ему, к примеру, час времени. Если справился за час -- значит, ставим на программу шильдик "проверена". Вот и всё. Спрашивается, насколько он будет полезен? Если он за час сможет проверять кучу полезных программ, то и пусть себе будет нетотальным.

Google

Евгений
22.05.2018
14:02:12

Pineapple
22.05.2018
14:02:20
???

Yuriy
22.05.2018
14:02:25

Pineapple
22.05.2018
14:02:49
Что угодно Double → Double
Вполне конечные множества

Евгений
22.05.2018
14:03:13
А потом кто-то доставляет памяти в сервер и всё падает

Yuriy
22.05.2018
14:03:23
да, все Double за час не переберёшь

Евгений
22.05.2018
14:03:39
Бесконечность это возможность к расширению и всё

Dmitry
22.05.2018
14:03:41
Да зачем их все-то перебирать?

Pineapple
22.05.2018
14:04:29

Yuriy
22.05.2018
14:04:32

Евгений
22.05.2018
14:05:08

Pineapple
22.05.2018
14:05:34

Dmitry
22.05.2018
14:07:11
Разбор частных случаев. Ну вот есть программа bug :: Double -> Double ; bug x = if x = 2 then bug 2 else 1 / x. Тут всё множество поделится на (-inf, 0), 0, (0, 2), 2, (2, inf). Для случая 2 есть рекурсивный вызов без изменения аргумента, следовательно -- это явный цикл. Для 0 -- деление, типа, тоже программа завершается. остальные значения обрабатываются.

Pineapple
22.05.2018
14:07:16
Разбор частных случаев. Ну вот есть программа bug :: Double -> Double ; bug x = if x = 2 then bug 2 else 1 / x. Тут всё множество поделится на (-inf, 0), 0, (0, 2), 2, (2, inf). Для случая 2 есть рекурсивный вызов без изменения аргумента, следовательно -- это явный цикл. Для 0 -- деление, типа, тоже программа завершается. остальные значения обрабатываются.
И NaN
И бесконечности, и отрицательный ноль

Dmitry
22.05.2018
14:08:55
Ну да, я, кажется, начинаю понимать... Всё-таки множество таких разбиений может сильно вырасти, что будет почти эквивалентно полному перебору.
Ладно, надо матчасть подтягивать по завершителям

Google

Pineapple
22.05.2018
14:11:40
Ах да, для 32 бит есть ещё excess precision, так что нет гарнтий, что равенство будет работать как ожидается

Dmitry
22.05.2018
14:11:40
Интересно, а в Лаборатории Касперского уже сталкивались с такими программами, про которые не удавалось за конечное время сказать, что они точно вирусы или не вирусы?
@cblp_su ^ ;)

Blini
22.05.2018
14:13:36
*шутка про макось и бэкдоры*

Евгений
22.05.2018
14:13:40
Я думаю что спустя конечное время на них натравливают вирусологов

Yuriy
22.05.2018
14:13:57
задача любого вируса — не быть распознанным как вирус

Dmitry
22.05.2018
14:16:00
Задача максимум

Yuriy
22.05.2018
14:16:22
раз в несколько лет такое случается
компьютеры не всесильны

Dmitry
22.05.2018
14:17:41
"Такое" -- что?

Yuriy
22.05.2018
14:17:49
простите. вернёмся к Хаскелю и машинам Тьюринга
пишите опердень на Coq/Agda/Idris, чтобы она завершалась

Dmitry
22.05.2018
14:22:22
Будем стараться!
Главное, самим при этом завершаться
http://aprove.informatik.rwth-aachen.de/eval/Haskell/
Библиотека хаскеля более-менее завершается ;)

Антон
22.05.2018
14:29:38

Yuriy
22.05.2018
14:30:10
есть анализ завершимости для Хаскеля в Liquid Haskell. работает примерно так же, как в тотальных языках. грубо говоря, если функция имеет известную структуру для тотальных функций, то она тотальна, иначе — завершимость не доказана

Google

Yuriy
22.05.2018
14:31:08
жестокий предложил бы ATS

kir
22.05.2018
14:35:51

dimiii
22.05.2018
14:38:09

Alexander
22.05.2018
15:25:22
Я правильно понимаю, что Control.Category не предназначен для описания категорий с объектами-объектами?
то есть он чисто для объектов-типов?
и если не прездназначен, то есть ли либа чтобы сразу получить много полезных функций?


Andy
22.05.2018
16:01:01
Всем привет! решил ФП попробовать и haskell в частности)
Пока еще ничего не писал, только читаю чат да статьи разные про хаскел, окамл, дизайн в фп стиле и тп, и даже много чего на удивление понятно)
Но это как с иностранным - читаешь- понимаешь - но сам написать еще не можешь. В целом код в разных хело-ворд примерах понятен (вроде бы :) ) - на монады, трансоформеры, линзы, сервантовские type-level "шткуки" , free-монады. Но вот как бы это все сложить вместе в конкретном случае непонятно. Поэтому решил на практике сделать какойто микросервис и походу разбираться.
Есть 2 вопроса (на самом деле больше)
edit - Вопросы отдельными сообщиниями сделал
1) Есть ли в каком то из фреймворков (пока рассматриваю только scotty или servant) возможность отдавать статические файлы? Но так, чтобы range header правильно обрабатывать и прочие стандарты соблюдать и не делать все самому.
Знаю, что есть stream servant-а, но он не соблюдает все эти стандарты и надо самому все это делать - не подходит.
Как вариант еще предлагают мидлварь из wai "заворачивать" в сервантовский Raw - но мне тоже не подходит, так как по условию задачи файл нужно отдавать только при соблюдении ряда условий, проверяемых внутри хендлера (разного рода авторизация закачек) - поэтому нужно как бы динамически "подсовывать" статик-хендлер , в противном случае отдавать 404. А в wai просто статичный роут на папку и все.
2) Есть ли какой-то сайт с задачками на "комбинаторы" ?) Типа, хитро скомбинировать zip'ы, fold-ы, map-ы, "совы" , аппликативы, bind и тп, чтобы поинт фри запись не вызывала стопор на 5 минут )


dimiii
22.05.2018
16:06:07
Всем привет! решил ФП попробовать и haskell в частности)
Пока еще ничего не писал, только читаю чат да статьи разные про хаскел, окамл, дизайн в фп стиле и тп, и даже много чего на удивление понятно)
Но это как с иностранным - читаешь- понимаешь - но сам написать еще не можешь. В целом код в разных хело-ворд примерах понятен (вроде бы :) ) - на монады, трансоформеры, линзы, сервантовские type-level "шткуки" , free-монады. Но вот как бы это все сложить вместе в конкретном случае непонятно. Поэтому решил на практике сделать какойто микросервис и походу разбираться.
Есть 2 вопроса (на самом деле больше)
edit - Вопросы отдельными сообщиниями сделал
Напиши бота, который из группы выделяет полезные сообщения (все сообщения с ссылками и сообщения ответы на сообщения с ссылками, а также все сообщения от админов - последнее опционально, т/к например не работает в этой группе)

Andy
22.05.2018
16:07:51

Alexander
22.05.2018
16:13:36
у нас аренда сервера CI стоит в 2 раза больше чем сервер прода, причем на CI даже свапфайл сделали от безнадеги :)

Andy
22.05.2018
16:16:08
ради серванта ? или есть еще "известные" прожорливые пакеты?

Alexander
22.05.2018
16:25:51


Andy
22.05.2018
16:27:26
статические файлы через wai middleware
тоесть я смогу динамически подсовывать middlware ? допустим нужно сходить на другой сервер, проверить ссылку и если ОК - тогда "отдать" через мидлварь ?

Alexander
22.05.2018
16:27:50

Andy
22.05.2018
16:29:03
можно
а можно еще одну подсказку? - тут нужен этот пакет wai-app-static? а то я все время про этот wai-middleware-static говорил, и он вроде не подходит

Alexander
22.05.2018
16:46:46