Notice: file_put_contents(): Write of 22326 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50
Пых@phpyh P.614
PHPYH Telegram 614
👀 Бессмысленная истина

Недавно в Пыхтелке кто-то возмутился, что для пустой коллекции Illuminate\Support\Collection::every() возвращает true. Я сходу ответил:

Так и должно быть. В PHP 8.4 аналогично для пустого массива array_all вернёт true, array_any — false.


Согласитесь, ответ неубедительный. Давайте формально докажем, что функция array_all должна возвращать true для пустого массива. В качестве примера возьмём фильтр положительных чисел:


/** @var list<int> */
$ints = [];
$isPositive = static fn (int $x): bool => $x > 0;

assert(array_all($ints, $isPositive));


Чтобы не рассуждать по-дилетантски, попробуем вспомнить классическую логику. Там есть такая операция — импликация (логическое следование). Она описывает связь посылка ⇒ следствие. Таблица истинности:


Пример | a | b | a ⇒ b
-----------------------------------------------------
Верно, что если Солнце куб, то 3 <= 0 | 0 | 0 | 1
Верно, что если Солнце куб, то 3 > 0 | 0 | 1 | 1
Ложно, что если Солнце шар, то 3 <= 0 | 1 | 0 | 0
Верно, что если Солнце шар, то 3 > 0 | 1 | 1 | 1


Выглядит наивно, потому что это так называемая материальная импликация. В ней посылка и следствие не связаны по смыслу, что приводит к парадоксам. Но для нашей задачи она подойдёт.

Что говорит нам эта таблица?
1. из истины (Солнце — шар) следует только истина (3 > 0),
2. из лжи (Солнце — куб) следует всё что угодно (3 > 0, 3 <= 0).

Кстати, второе свойство мы иногда используем в быту: "Когда рак на горе свистнет, тогда можно будет купить запись Хардкорного курса PHP".

Теперь к массиву. Что такое any в PHP и every в Laravel? Это квантор всеобщности ∀, то есть условие, которое выполняется для всех элементов. Выражение array_all($ints, $isPositive) === true на языке формальной логики можно записать так:


∀ $x ∈ int : $x in $ints ⇒ $x > 0
для любого целого числа $x такого, что $x принадлежит массиву $ints, верно, что $x — положительное


Так как массив $ints пустой, то утверждение "$x принадлежит массиву $ints" ложно. Сделаем замену:


∀ $x ∈ int : false ⇒ $x > 0
для любого целого числа $x такого, что ложь, верно, что $x — положительное


А теперь применим то, что мы осознали выше: из лжи следует всё что угодно. Значит, вне зависимости от того, положительное число $x или нет, вся импликация истинна:


∀ $x ∈ int : true
для любого целого числа $x верно


Получается, что array_all($ints, $isPositive) === true всегда выполняется для пустого массива $ints.

Такая истинность называется бессмысленной (vacuous truth), так как она основана на невыполнимой посылке. По аналогии, можно будет с уверенностью сказать, что все присутствующие на Пыхапе хаскелисты боготворят PHP. 🤫
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥54👍25😐10💩6🥱6💯52👎2🤔2



tgoop.com/phpyh/614
Create:
Last Update:

👀 Бессмысленная истина

Недавно в Пыхтелке кто-то возмутился, что для пустой коллекции Illuminate\Support\Collection::every() возвращает true. Я сходу ответил:

Так и должно быть. В PHP 8.4 аналогично для пустого массива array_all вернёт true, array_any — false.


Согласитесь, ответ неубедительный. Давайте формально докажем, что функция array_all должна возвращать true для пустого массива. В качестве примера возьмём фильтр положительных чисел:


/** @var list<int> */
$ints = [];
$isPositive = static fn (int $x): bool => $x > 0;

assert(array_all($ints, $isPositive));


Чтобы не рассуждать по-дилетантски, попробуем вспомнить классическую логику. Там есть такая операция — импликация (логическое следование). Она описывает связь посылка ⇒ следствие. Таблица истинности:


Пример | a | b | a ⇒ b
-----------------------------------------------------
Верно, что если Солнце куб, то 3 <= 0 | 0 | 0 | 1
Верно, что если Солнце куб, то 3 > 0 | 0 | 1 | 1
Ложно, что если Солнце шар, то 3 <= 0 | 1 | 0 | 0
Верно, что если Солнце шар, то 3 > 0 | 1 | 1 | 1


Выглядит наивно, потому что это так называемая материальная импликация. В ней посылка и следствие не связаны по смыслу, что приводит к парадоксам. Но для нашей задачи она подойдёт.

Что говорит нам эта таблица?
1. из истины (Солнце — шар) следует только истина (3 > 0),
2. из лжи (Солнце — куб) следует всё что угодно (3 > 0, 3 <= 0).

Кстати, второе свойство мы иногда используем в быту: "Когда рак на горе свистнет, тогда можно будет купить запись Хардкорного курса PHP".

Теперь к массиву. Что такое any в PHP и every в Laravel? Это квантор всеобщности ∀, то есть условие, которое выполняется для всех элементов. Выражение array_all($ints, $isPositive) === true на языке формальной логики можно записать так:


∀ $x ∈ int : $x in $ints ⇒ $x > 0
для любого целого числа $x такого, что $x принадлежит массиву $ints, верно, что $x — положительное


Так как массив $ints пустой, то утверждение "$x принадлежит массиву $ints" ложно. Сделаем замену:


∀ $x ∈ int : false ⇒ $x > 0
для любого целого числа $x такого, что ложь, верно, что $x — положительное


А теперь применим то, что мы осознали выше: из лжи следует всё что угодно. Значит, вне зависимости от того, положительное число $x или нет, вся импликация истинна:


∀ $x ∈ int : true
для любого целого числа $x верно


Получается, что array_all($ints, $isPositive) === true всегда выполняется для пустого массива $ints.

Такая истинность называется бессмысленной (vacuous truth), так как она основана на невыполнимой посылке. По аналогии, можно будет с уверенностью сказать, что все присутствующие на Пыхапе хаскелисты боготворят PHP. 🤫

BY Пых


Share with your friend now:
tgoop.com/phpyh/614

View MORE
Open in Telegram


Telegram News

Date: |

More>> A few years ago, you had to use a special bot to run a poll on Telegram. Now you can easily do that yourself in two clicks. Hit the Menu icon and select “Create Poll.” Write your question and add up to 10 options. Running polls is a powerful strategy for getting feedback from your audience. If you’re considering the possibility of modifying your channel in any way, be sure to ask your subscribers’ opinions first. The best encrypted messaging apps Ng was convicted in April for conspiracy to incite a riot, public nuisance, arson, criminal damage, manufacturing of explosives, administering poison and wounding with intent to do grievous bodily harm between October 2019 and June 2020. As of Thursday, the SUCK Channel had 34,146 subscribers, with only one message dated August 28, 2020. It was an announcement stating that police had removed all posts on the channel because its content “contravenes the laws of Hong Kong.”
from us


Telegram Пых
FROM American