185 похожих чатов

Но это же не связано с изначальным утверждением, что язык

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

Или я не понимаю вашу логику?

23 ответов

6 просмотров

Не могу сказать связано или не связано, зато точно могу ответить что "язык с ограничениями в виде той же системы типов обязательно не позволяет выразить какие-то вполне корректные программы, выразимые, не будь этих ограничений". Это свойство называется "полнота" (aka completeness). Если система типов (или любая другая система ограничений) полна, это значит, что можно написать все корректные программы. Среди динамических (runtime) систем ограничений/проверок/мониторов встречаются полные, среди статических — нет. Во всяком случае таких чтобы sound and complete не встречается. Зато среди SAST-систем подавляющее большинство (все промышленные, КМК) — и unsound, и incomplete.

Konstantin-Romanov Автор вопроса
Alexander Chichigin
Не могу сказать связано или не связано, зато точно...

А можно пример "полной динамической системы"? Насколько я понимаю, даже типичный ассемблер не полный.

Konstantin Romanov
А можно пример "полной динамической системы"? Наск...

Я имел в виду "динамические мониторы", которые в рантайме следят. В известном смысле, таким монитором можно считать ОС, и она полна в некотором смысле. Помнится, бывают мониторы, полные по отношению к некоторому классу ошибок многопоточности.

Alexander Chichigin
Не могу сказать связано или не связано, зато точно...

> Если система типов (или любая другая система ограничений) полна, это значит, что можно написать все корректные программы. Не понял: корректные программы с какой точки зрения? А если не полна?

Антонидзе Кучпилип
> Если система типов (или любая другая система огр...

С той самой, которую Вы читали у Пирса: https://t.me/symboliclogic/7354 Грубо говоря, не зацикливаются, не бросают исключений, не выполняют "недопустимых операций". А если не полна, то забракует часть корректных программ.

Alexander Chichigin
С той самой, которую Вы читали у Пирса: https://t....

То есть не полная система может забраковать программы, даже те которые удовлетворяют ограничениям которые накладываются этой системой?

Антонидзе Кучпилип
То есть не полная система может забраковать програ...

Нет. Ограничения (синтаксические) накладываются системой типов или ещё чем. А корректность определяется runtime поведением программы. Очевидно, что система ограничений пропускает все программы, которые удовлетворяют её ограничениям. Но это ничего не говорит (само по себе) про корректность runtime-поведения этих программ. Про связь с корректностью говорят теоремы soundness and completeness.

Антонидзе Кучпилип
То есть не полная система может забраковать програ...

Те, которые удовлетворяют, она забраковать не может, по определению. Может она корректные программы, которые не удовлетворяют.

TOV_MULTIMASSO
Те, которые удовлетворяют, она забраковать не може...

Вот не понятно: как программы могут быть корректными если они не удовлетворяют ограничениям. Опять таки, корректные с какой точки зрения? Блин, я чего-то недопонимаю, но не могу понять что именно🤪

Антонидзе Кучпилип
Вот не понятно: как программы могут быть корректны...

Функции g f = (f 1, f "foo") невозможно приписать тип в рамках Rank1 системы. Но возможно в хаскелле со всключённым RankNTypes g :: (forall x. x -> x) -> (Int, String) g f = (f 1, f "foo") где forall n . type - это аналог генерика. Rank1 разрешает генерик-аргументам объявляться только для всей функции разом, а RankN - для любой части её сигнатуры. Например, g :: forall x. (x -> x) -> (Int, String) g f = (f 1, f "foo") не скомпилируется, потому что тайпчекер будучи внутри forall x заменит x -> x на x0 -> x0, т.е., освежит переменную типа и не сможет найти решение, так как x0 ~ Int, x0 ~ String. В варианте с внутренним forall тайпчерек заменит x два раза: x -> x -> x0 -> x0 и x -> x -> x1 -> x1 и будет удовлетворён набором констрейнтов x0 ~ Int, x1 ~ String.

Konstantin-Romanov Автор вопроса
Антонидзе Кучпилип
Вот не понятно: как программы могут быть корректны...

Ну вы нормы ГТО удовлетворяете? А полезным человеком являетесь.

> Пирс написал, что корректные программы (в лямбда-исчислении) — это те, которые редуцируются в значения. Вот после этой фразы у меня почти сложилась картинка. Напоследок, маленький вопрос: "Недопустимые операции" это например какие?

Антонидзе Кучпилип
> Пирс написал, что корректные программы (в лямбда...

В лямбда-исчислении это все те, для которых нет правил редукции. "В жизни" — всё то самое, что вызывает "системную ошибку" или "необрабатываемое исключение": division by zero, null pointer dereference, out-of-bounds access и далее по списку.

Дежурное напоминание, что зацикливание (бесконечное) сюда тоже относится (строго говоря).

Alexander Chichigin
В лямбда-исчислении это все те, для которых нет пр...

мне кажется, это скорее про бесконечные циклы

Alexander Chichigin
Дежурное напоминание, что зацикливание (бесконечно...

Ну вообще, скорее нет, обычно все таки разделяют safety и liveness свойства, бесконечные циклы это про liveness как раз

Evgenii Moiseenko
Ну вообще, скорее нет, обычно все таки разделяют s...

Смотря где разделяют. В другом месте разделяют partial correctness и total correctness примерно по той же линии. Но мое мнение -- что "по честному" зацикливание тоже нужно считать за проблему. По крайней мере там, где зацикливание не было преднамеренным. А это на практике -- везде, потому что нужен аккуратный shutdown всего по пинку.

Konstantin-Romanov Автор вопроса

Нет, посылкой WM_EXIT или какого-то подобного сообщения, по которому этот бесконечный цикл заканчивается.

Konstantin Romanov
Нет, посылкой WM_EXIT или какого-то подобного сооб...

> бесконечный цикл > заканчивается Ну, что и требовалось доказать. 😂

Konstantin-Romanov Автор вопроса
Alexander Chichigin
> бесконечный цикл > заканчивается Ну, что и треб...

Это вы про то, что в подлунном мире всё преходяще?

Похожие вопросы

Обсуждают сегодня

Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
2
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
у меня программа тысяч на 10 строк. Там в основном моя собственная логика. А по содержанию она просто работает с файловой системой (мастер для бэкапов) и таблицей с данными о ...
Дмитрий Завгородний
5
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Карта сайта