Не так сложна тема, как язык её изложения (часть 2)

топ 100 блогов lex_kravetski13.06.2022 Часть 1

Приведу ещё один пример, который, кстати, и сподвиг меня на вышеизложенные размышления.

Он приводился с целью «подумать» и «осознать сложность логики», однако я вижу в нём в первую очередь всё ту же проблему: исторически сложившийся язык сам по себе сильно сложнее смыслов, которые им передают.

В общем, задача такова.

Надо пересказать «нормальным языком», как можно более ясно, смысл следующего утверждения:

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)


Скажу сразу, я не хочу здесь оспаривать рассуждения по ссылке — допускаю, их можно было бы сделать проще, но дело не в этом.

Дело в том, что для прочтения этого примера вам надо специально овладеть узкоспециальной системой обозначений. Которая, фактически, «своя собственная» и существует только в двух областях: в формальной логике и отчасти в математике.

Программирование заметно связано с этими областями, но там система обозначений уже совсем иная. И даже в физике, которая берёт из математики и логики очень многое, вы вряд ли встретите «∃» в формулировке физических законов. Нет, там будет написано на разговорном языке…

Существуют инерциальные системы отсчёта.

Как и в программировании было бы вместо «∃» написано что-то вроде…

mySet.exists(_ > 0)

Почему? Да потому что это проще прочитать, записать и понять без подготовки. Свои «исторические» заморочки и в физике, и в программировании тоже есть, но тут ведь уже заморочки из математики — добровольно тащить их в свою область не особо-то хочется, поскольку оно ведь усложняет процесс. Усложняет, не возвышая при этом носителя «сложных знаний» на ровном месте: и физики, и программисты обычно до какой-то степени знают математику, но это всё-таки не основная их область, а потому у них нет столь хорошего ранее полученного знания «традиционной» системы обозначений.

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

Однако, быть может, всё-таки пример не столь-то и сложен? Ведь не так тяжело запомнить, что «∃» — это «существует», а «∀» — «выполняется для всех».

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

Ну да, в операции «следование» есть некоторая сложность. Однако это всё-таки сложность очень относительная — на её постижение требуются некоторые усилия, но речь о годах и даже о месяцах на понимание тут не идёт, а смысл операции, вообще говоря, укладывается в одно предложение.

Если из первого «следует» второе, то это означает, что второе гарантированно верно, если верно первое, и, соответственно, первое гарантированно ложно, если ложно второе.

Почему оно именно так, а не «…соответственно, если первое ложно, то и второе ложно», конечно, придётся отдельно пояснять, но на это тоже уйдёт десять минут, а не десять лет, поэтому сложность явно не в этом.

Проблема, на мой взгляд, тут не в буковках и не в запредельно сложных идеях, а в самом «формате обозначений», который своей неудобочитаемостью и одновременно с тем неоднозначностью во многом подобен «традиционной» нотной записи.

Я, кстати, неоднократно встречал признания математиков и логиков, что довольно часто при чтении математических текстов они просто пропускают все формулы, читая только объяснения на разговорном языке. Хотя это ведь довольно странно — пропускать примеры: как правило, с ними всё понятно гораздо быстрее и лучше.

Дело в том, что, несмотря на бытующее мнение, будто бы «язык математики/логики очень точен и однозначен», на самом деле, он очень сильно контекстозависим, а потому точным в лучшем случае может быть только весь текст рассуждения целиком, а каждый его фрагмент при этом мог бы иметь совершенно разный смысл в разных контекстах.

Что-то подобное происходит в разговорном языке, когда мы используем в речи слова «он», «тот», «этот», «там» и т.п. Вне контекста невозможно однозначно сказать, кто именно этот «он» и где именно находится «там». Мы так говорим для краткости и благозвучности, однако отдаём себе отчёт, что точной наша речь от этого не становится, а, напротив, из-за этого иногда фразы звучат неоднозначно даже в контексте.

«Кот вскочил на диван, а Василий положил на него шляпу».

На кого положил? На диван или на кота?


Но математика, такое впечатление, что не только не отдаёт себе в этом отчёта, но даже форсирует декларацию точности и однозначности своего нынешнего языка, что ощутимо мешает разработке и внедрению более однозначных и удобочитаемых способов записи. Которые, разумеется, будут ещё и сильно более понятными.

Взглянем ещё раз на сабжевое высказывание на «точном и однозначном» языке.

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

Ну, Ок, про «игреки» тут слева от стрелки говорится, что «игреки существуют такие, что…», однако, что с «иксами» и «зэтами»?

Они тоже «существуют»? Заранее известны? Известны, но только внутри выражения? Откуда-то извне в него приходят? Постоянны? Переменны?

Если бы в языке программирования нам бы встретилась строка вида…

val z = y + 1

…то вне контекста мы бы могли знать только то, что «игрек» — это что-то такое, для чего определена операция «+» с аргументом «1».

Такая строка не является законченным высказыванием и в ряде языков даже не скомпилируется в отрыве от всего остального. В менее строгих языках это дело можно будет запустить и там либо сработают какие-то умолчания (чаще всего будет предположено, что «игрек» — это целочисленная переменная, и раз не сказано иного, сейчас в ней лежит ноль), либо же программа рухнет во время исполнения, поскольку с точки зрения среды мы полезли в неинициализированную память.

Однако внутри каждого языка программирования эта строка совершенно однозначна, независимо от контекста.

Её однозначный смысл может быть разным в разных языках, но в среднем, тут объявляется новая константа «зэт», в которую в качестве значения складывается результат вызова операции «+» для некого неизвестного объекта «игрек» с аргументом «1». Либо же, как вариант, вызывается операция «+» с аргументами «некий неизвестный игрек» и «1».

Казалось бы, математику изучают с младших классов школы, а программирование многие не изучали вообще никогда, однако эта запись, как показывает практика, оказывается гораздо более понятной по своему смыслу среднестатистическому человеку после самых минимальных объяснений.

Почему?

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

Это — линейный текст, с привычными буквами, но, самое главное, он регулярен относительно всего остального, что человек встречает вокруг себя. При подсчёте денег в магазине, пройденного пути и чего угодно, человек ровно так же записывает это через тот же знак «+».

Результаты промежуточных вычислений он мысленно или письменно «складывает» в «промежуточные константы», а зачастую даже их именует.

— Ну, Ок, получается, что на продукты я вчера потратил триста рублей, и ещё двести пятьдесят — на напитки. В сумме, значит, ушло пятьсот пятьдесят рублей.

«На продукты» и «на напитки» — это как раз именованные промежуточные константы и есть. Как и «в сумме ушло».


Разве что только «val» он не пишет. Однако смысл «val» — «с этого момента у нас есть константа зэт» — соответствует тому, как построена наша разговорная речь. Мы пользуемся этим регулярно, причём не только в расчётах. Упомянув, например, «соседа Васю», мы подобным же способом сказали «с этого момента у нас есть такой вот персонаж повествования».

Сабжевая же логическая фраза на «точном языке» выглядит так, будто бы внезапно в середине абзаца появились некие «Вася» и «Петя», о которых раньше ни разу не упоминалось, однако рассказчик говорит о них так, будто бы все их отлично знают.

То есть написанное, вместо того чтобы концентрировать внимание и направлять интеллектуальные усилия на анализ смысла самой фразы, переключает часть внимания на «побочный сюжет»: надо вычислить, кто такие «Вася» и «Петя», или, в данном случае, «икс» и «зэт».

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

Судя по тому, что «игрек» упоминается со знаком «существует», он не «задан извне заранее». Поэтому, надо полагать, «икс» и «зэт» как раз заданы извне — ведь иначе не надо было бы оговаривать это для «игрека». Тем более, что в правой части у нас ещё и написано «для всех икс».

Поскольку же в данном высказывании фигурирует сравнение, наверно предполагается, что внутри частей фразы те штуки, которые не обёрнуты в «существует» и «все», остаются постоянными.

То есть, видимо, подразумевается, что слева от стрелки заранее заданы и постоянны «икс» и «зэт», а справа заранее задан и постоянен «зэт».

Чтобы прочитать это высказывание и понять его смысл, надо проводить анализ так, будто бы это вообще совсем неродной для читателя язык. И при этом всё равно остаются сомнения, что её смысл трактован правильно.

И это даже при большом опыте чтения на этом языке — что уж тут говорить про тех, кто ещё не очень опытен?

Чувствуете аналогию с нотной записью?

В одном случае смысл практически однозначно понятен даже почти ничего по теме не знающему, а во втором некоторые сомнения будут даже у опытного — придётся перепроверять, а то мало ли.

В одном случае прочтение практически мгновенно даже при малом опыте. Во втором требуется определённая дешифровка даже при большом.

При том, что записано-то абсолютно одно и то же по смыслу.

Однако снова вернёмся к фразе.

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

Итак, какими свойствами тут обладают буквы, мы, предположим, вычислили.

Но какой у тип у тех сущностей, которые они обозначают?

Дальше для сокращения длины сравнений с альтернативой я буду предполагать, что в качестве альтернативы используется язык программирования со строгой типизацией.

Так вот, в таком языке программирования у нас два варианта: либо сравниваемые сущности имеют совместимый тип, либо у нас будет ошибка при компиляции, то есть это — как бы некорректное, ошибочное рассуждение (именно «некорректное», а не «ложное»).

Если мы предполагаем, что ошибка не возникла, это означает, что типы везде совместимы.

А тут как?

А по записи неизвестно. Наверно совместимы, если уж значения сравнивают. Ну или хотя бы совместимы в рамках операции «≠». Но, быть может, она работает и для несовместимых типов тоже, давая в результате своего применения «ложь».

Кстати, тут сравнивают значения или ссылки на значения?

Кто-то скажет, «в математике всегда сравниваются значения», но здесь ведь нет никаких указаний на то, что это строго про математику. В логике в целом ссылки вполне себе используются. «То, что лежит в десятом ящике» — вполне нормальная логическая сущность. Как и «та девушка, которую любит Вася Пупкин».

Казалось бы, да какая вообще разница? Но разница есть.

Дело в том, что десятом ящике у нас может лежать вырезанная из бумаги цифра «1», и в третьем ящике тоже цифра «1». По численному значению это — одна и та же цифра. Но мы при этом понимаем, что это не один и тот же фигурно обрезанный лист бумаги, а два разных в двух разных ящиках. Если мы порвём бумажную цифру из десятого ящика, то цифра из третьего никак не поменяется.

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

Опять же, первый попавшийся читатель, возможно, не знает термина «ссылка» и какого-то особого смысла термина «значение», однако в его постоянном опыте сама идея различения одного и другого постоянно встречается, а потому, прочитав «точное и однозначное» логическое высказывание, он всё равно испытывает сомнения — даже если не может их изложить при помощи использованной мной терминологии.

Автор, возможно, находится в среде, где трактовка почти всегда однозначна (например, он — математик, и машинально думает о любых множествах как о множествах чисел, причём таких, в которых элементы всегда сравниваются только по значению), однако читатель совершенно не обязательно находится в той же среде и имеет те же умолчания. Для программиста, например, совершенно естественно сравнение ссылок, а не только значений. Да и, положа руку на сердце, большинство непрограммистов тоже вполне способны представить себе ситуацию, в которой «его девушка» и «девушка Васи» — это одна и та же девушка.

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

Ну ладно, предположим, что автор — математик, и тут речь о сравнении по значению, хотя это никак не оговорено.

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

Слева от стрелки «икс» — константа, а справа он обёрнут в «для всех», и потому он — переменная. Как одно сочетается с другим?

Ну, в языках программирования обычно есть концепция «области видимости переменной», поэтому всё всегда понятно: если в каком-то «блоке» кода у нас объявлен некий «икс» и в его внутреннем «блоке» тоже объявлен некий «икс», то это — разные иксы. Если же икс объявлен во внешнем блоке, а во внутреннем не объявлен, но используется, то это — один и тот же икс.

Например,

val x = 10

{

// тут другой «икс»

val x = 20

val y = x + 1

}


…или…

val x = 10

{

// тут тот же «икс»

val y = x + 1

}


А в сабжевом «точном и однозначном» языке оно как?

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

Как узнать, что тут произошло? «Икс» сначала был задан извне, а потом мы его переопределили справа от стрелки?

Ведь в ином случае, если сказать «для всех икс», когда «икс» уже, например, имеет значение «3», то получится «для всех 3».

Видимо, «для всех икс» тоже как бы «открывает новый блок», внутри которого «икс» — уже новая одноимённая переменная, а не заранее заданная константа, как чуть раньше.

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

Хотя могла бы иметься в виду и одна и та же. Синтаксис языка это в явном виде никак не определяет, а потому надо всё это отдельно вычислять — причём даже не из контекста по определённым единообразным правилам, а перебором в этом контексте возможных вариантов, с исключением большинства из них по принципу «а то в этой фразе не будет никакого смысла».

То есть, убери мы «для всех икс» из правой части…

∃ y (x ≠ y and y ≠ z) → ∃ y (x ≠ y and y ≠ z)

…этот контекст вообще сделал бы варианты «тот же икс» и «другой икс» равновероятными: данное высказывание не заведомо бессмысленно в обоих из них. Пришлось бы пытаться угадать, следует ли исключить вариант «тот же икс» по той причине, что с ним фраза оказывается чересчур тавтологичной, либо же следует исключить вариант «не тот же икс», поскольку в его рамках эта фраза в общем случае не будет истинной.

Ну ладно, в данном случае «для всех» всё-таки вносит какую-то ясность, поэтому, видимо, во фразе…

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

  1. Левая часть содержит заранее заданные, хотя и не указанные константы «икс» и «зэт».

  2. Правая часть содержит заранее заданную, хотя и не указанную константу «зэт».

  3. Константы и переменные имеют один и тот же тип и сравниваются по значению.


Далее.

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

Или, быть может, вообще говорим о том, что мы так определили фигурирующие тут операции, что они будут выполняться во всех системах аксиом, если не менять определений этих операций?

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

Причём даже если этот текст есть, такая форма записи всё равно сбивает с толку даже опытных. Поскольку надо возвращаться назад и перечитывать сопроводительный текст — а то мало ли что.

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

Например, вот здесь…

val z = if (x == 0) y == 0 else false

…мы можем однозначно сказать, что в скобках написана проверка того, что «икс» в данный момент равен нулю. Если это так, то проверяется равенство нулю «игрека» и результат этой проверки — true или false — записывается в только что определённую константу «зэт». Если же «икс» был не равен нулю, то в «зэт» записывается значение false.

Это можно было бы записать и короче:

val z = (x == 0 && y == 0)

Однако в более длинной записи всё равно всё однозначно и совершенно понятно, где проверка равенства, а где запись в константу, где что вычислилось и куда оно потом попало. И в чём вообще состоит результат исполнения этой строки. Даже если вне контекста мы не всё знаем про текущие значения и точные типы отдельных констант и/или переменных.

Фраза же…

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

…выглядит «подвешенной в воздухе». Как будто бы это — некий фрагмент выражения, а не законченное высказывание.

И это, надо отметить, бросается в глаза практически каждому, кто пытается понять формальную логику, пользуясь «традиционной» записью. Часть людей через какое-то время, возможно, смиряется, но другой части стоящие в отдельной строке выражения вида…

A and B

…продолжают резать глаз своей «незавершённостью». «А и Б» что? Мы таким способом утверждаем, что они верны одновременно? Или мы тут проверяем, что они верны одновременно? Если так, то куда девается результат этой проверки? — мы же никуда его не складываем в явном виде. В общем, без сопроводительного текста на разговорном языке вообще неясно, что тут происходит.

Мы записали фразу одной строкой на «точном и однозначном языке» и уже которую страницу пытаемся дешифровать, что же она означает. Это действительно эффективный способ траты сил? Ну если целью, конечно, было передать нам какое-то знание, а не потренировать нас в решении головоломок и не продемонстрировать нам все проблемы такого способа записи?

Ну ладно, предположим, что автор имел в виду, что он тут приводит свойство некой системы аксиом, а потому фраза означает «в этой системе аксиом верно, что из одного всегда следует другое».

Заметьте, про «всегда» в самой фразе ни слова, хотя «для всех икс» в это время фигурирует в явном виде.

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

  1. Левая часть содержит заранее заданные, хотя и не указанные константы «икс» и «зэт».

  2. Правая часть содержит заранее заданную, хотя и не указанную константу «зэт».

  3. Константы и переменные имеют один и тот же тип и сравниваются по значению.

  4. Это — утверждение о чём-то, что всегда выполняется в некоторой системе аксиом.


Мы предположили, что сравнение делается по значению, а не по ссылке, но тогда вопрос: «икс» и «зэт» — это в обязательном порядке разные значения, для коей цели автор и назвал их разными буквами, или же они просто независимые имена для констант, но по значению могут и совпадать?

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

К подразумеванию неравенства разноимённых величин, вдобавок, склоняет и наличие в сложившейся традиции неких «совсем константных констант»: например, «π» практически во всех текстах будет означать одно и то же число, которое почти наверняка никогда не будет обозначено другой буквой. С другой стороны, ничто не мешает написать и «x = π», то есть допускается, что под разными буквами может скрываться одно и то же значение.

То есть этот язык записи вместо того чтобы сужать область возможных трактовок написанного и сокращать тем самым время на передачу информации, равно как вероятность ошибочного её понимания, наоборот, порождает необходимость обдумывания всех этих «побочных веток сюжета».

В языках программирования обычно однозначно определено: если мы меняем значение, лежащее по некоторой ссылке, то оно поменяется у всех переменных и констант, которые ссылаются на то же значение, поскольку, по сути, все они — один и тот же адрес в памяти, который в разных местах назвали разными именами. Чтобы их сделать независимыми, надо чтобы они указывали на разные адреса.

То есть при идентичности ссылок в двух переменных или константах гарантируется и равенство этих переменных или констант по значению.

Но это — единственная гарантия. В остальном же разноимённые или объявленные в разных блоках переменные или константы могут быть равны по ссылке, равны по значению, не равны по ссылке и не равны по значению (последнее, согласно единственной гарантии, может быть только при неравенстве ссылок).

То есть запись вида…

val z = (x == 0 && y == 0)

…говорит лишь о том, что «икс» и «игрек» можно сравнить с нулём, но ничего не говорит о том, что в них обязательно разные значения или ссылки на разные ячейки памяти: последнее надо всегда проверять отдельно в явном виде.

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

Увы, в формальной логике такое не оговорено, поэтому, опять же, надо читать сопроводительный текст и/или пытаться вычислить ход мыслей автора по принципу «а иначе совсем ерунда получится».

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

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

А с «зэт» в левой и правой частях как? Это — одна и та же по значению константа или разные? Ну вот, икс, например, слева константа, а справа — переменная. Вдруг и с зэт так же?

Опять же, по самой фразе это узнать невозможно: «традиционный» язык записи формальной логики просто ничего об этом не говорит.

Наверно автор имеет в виду, что, хотя «игреки» и «иксы» разные, «зэт» — один и тот же. Я понимаю это, потому что так чаще всего бывает и потому что так фраза получается более осмысленной, но я не могу этого гарантировать — только предположить.

Заметьте, я не могу гарантировать не истинность фразы, а то, что моя трактовка оной совпадает с трактовкой оной тем, кто её написал. Видимо, на всякий случай, каждому читателю надо рассмотреть все комбинации предположений о трактовке — вдруг он не угадает, что именно предполагал автор.

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

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

  1. Левая часть содержит заранее заданные, хотя и не указанные константы «икс» и «зэт».

  2. Правая часть содержит заранее заданную, хотя и не указанную константу «зэт».

  3. Константы и переменные имеют один и тот же тип и сравниваются по значению.

  4. Это — утверждение о чём-то, что всегда выполняется в некоторой системе аксиом.

  5. Значения «икс» и «зэт» могут совпадать, а могут не совпадать.

  6. «Зэт» в правой части — точно тот же заранее заданный «зэт», что и в левой.


Совместимость типов мы предположили ранее. Но ведь даже при совместимости типов у констант вполне может быть разный набор возможных значений. Тут про какие наборы возможных значений идёт речь? Они совпадают для «икс», «игрек» и «зэт»? Или только пересекаются? Наверно, как минимум, пересекаются — если уж делается проверка на неравенство, которая при полном несовпадении была бы бесполезной? Но язык этого снова никак не проясняет. Опять остаётся чисто по контексту и «иначе не было бы смысла».

Ладно, тут я уже не буду подробно про языки программирования, а то мы никогда не закончим. Скажу кратко: там и по этому пункту тоже правила однозначны. Но в формальной логике не так. И в математических её приложениях тоже рулит сопроводительный текст и попытки угадать.

Но можно ведь случайно и не угадать.

Например, мы предположили, что наборы возможных значений как минимум пересекаются. Но не исключено, что это — слишком сильное требование, и для непересекающихся наборов фраза всё равно верна. Однако заранее мне это просто неоткуда узнать: придётся закончить анализ трактовки и только после этого, возможно, станет ясно, верна ли вот эта гипотеза. Гипотеза, замечу, по поводу смысла уже написанного, а не по поводу какой-то закономерности, о которой в написанном идёт речь.

А пара «икс» и «зэт» имеется в виду какая угодно произвольная или это выполняется только для какой-то конкретной? Или тут вообще говорится о том, что «если для какой-то пары выполняется то, что слева, то из этого следует то, что справа»?

Опять же, тут снова можно было бы написать ещё одну страницу гаданий по традициям, осмысленности результатов и кофейной гуще.

Ну ладно, пусть будет, например, «если для какой-то пары выполняется».

∃ y (x ≠ y and y ≠ z) → ∀ x ∃ y (x ≠ y and y ≠ z)

  1. Левая часть содержит заранее заданные, хотя и не указанные константы «икс» и «зэт».

  2. Правая часть содержит заранее заданную, хотя и не указанную константу «зэт».

  3. Константы и переменные имеют один и тот же тип и сравниваются по значению.

  4. Это — утверждение о чём-то, что всегда выполняется в некоторой системе аксиом.

  5. Значения «икс» и «зэт» могут совпадать, а могут не совпадать.

  6. «Зэт» в правой части — точно тот же заранее заданный «зэт», что и в левой.

  7. Возможные значения «икс», «игрек» и «зэт» пересекаются.

  8. Имеется в виду, «если для какой-то пары выполняется то, что слева от стрелки, то выполняется и то, что справа».


Может показаться, будто бы я специально подобрал такой плохой пример, а «настоящий математик всё это записал бы точно и однозначно». Но нет, примерно такое же наблюдается и в лекциях, и в статьях, и в учебниках: вычислять истинный смысл написанного на формальном языке приходится по написанному в тексте на разговорном.

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

Это как на естественном языке каждый раз говорить: «Я вчера съездил в город — тут я использовал прошедшее совершённое время, предлог, означающий направление, местоимение первого лица единственного числа и обстоятельство времени в форме наречия», — а то без этих разъяснений никто не поймёт сказанного.

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

Ну смотрите.

У нас заранее заданы какие-то две константы (возможно, равные между собой).

И мы смогли подобрать такое значение, которое не равно ни одной из констант.

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

Так вот, по нашей системе аксиом мы всё равно всегда сможем подобрать ещё какое-то значение, которое не равно ни одной из этих констант.


Вот что написано в этом формально-логическом выражении.

Во сколько я уложился? В четыре строки?

Да. На длинном и неточном разговорном языке. И без специальных терминов.

Против одной короткой строки со странными символами и четырёх–пяти страниц очень неуверенных, но необходимых догадок о том, что предполагал автор на самом деле, когда писал это высказывание на «точном и однозначном» языке.

Это если исключить из реальных десяти страниц ссылки на языки программирования, философские рассуждения и т.п.

Причём догадки и предположения на четырёх страницах всё ещё не охватили всех возможных вариантов трактовки, не объяснили всей терминологии и не описали используемый язык.

Хм. А мы точно что-то там выгадали, когда пользовались этим «традиционным» формальным языком — разговорный-то по ощущениям оказался гораздо более подходящим? На нём вышло и в сумме короче, и с передачей смысла как-то надёжнее. И уж точно гораздо понятнее для любого жителя планеты. Возможно, есть способ записать ещё короче, надёжнее и понятнее, но явно не тот, который использован в исходном формальном выражении.

Подозреваю, начни я сразу с разговорного, объяснение мысли заняло бы минут пять максимум.

Да, выглядела бы эта мысль гораздо более тривиально и понять её смог бы наверно даже учащийся младших классов, а не только отдельные специалисты по матлогике, но нам шашечки или ехать?

Мы тут хотим потренировать людей разбираться в специально запутанных вещах и дешифровывать тексты на неудачных языках или донести до них какую-то полезную для чего-то там мысль, научить их анализу подобных мыслей, а ещё лучше их выведению? Для первого, конечно, подходит абсолютно любая головоломка, включая и вот такую, но для второго лучше было бы использовать язык попонятнее.

А в случае с музыкой у нас цель какая?

Нам надо научить людей дешифровке записанного триста лет назад?

Тогда, сто пудов, нам нужна «традиционная» запись.

Или мы хотим научить их известным на данный момент музыкальным закономерностям и наибыстрейшему способу записи и чтения музыки?

В этом случае, «традиционная» запись будет просто сжирать прорву времени безо всякой того компенсации.

Быть может, нам надо отсеять как можно больше желающих быть композиторами и музыкантами, а то их что-то и так слишком много?

Ну да, «традиционная» запись для этого отлично подходит — до первой своей мелодии дотянет только горстка самых упорных.

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

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

Иными словами, если нам нужно и дальше поддерживать иллюзию того, что в математику, музыку и почти всё остальное могут только избранные, то сложные для изучения и использования языки давних времён при наличии гораздо более простых с даже большей выразительностью — правильный подход.

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



doc-файл
публикация на сайте «XX2 Век»

Оставить комментарий

Предыдущие записи блогера :
Архив записей в блогах:
СК 20-100 - 30 жетонов, нужно 10 репостов+комментов. http://sisj.livejournal.com/146323.html Ну и вообще посмотрите таблицу, многим пригодится! Оплата сегодня ...
Вроде бы мы много знаем про мощи святых. Про разные там пальцы, головы и т.д. Не говоря про тела, хранящиеся целиком, хочу спросить про отдельные фрагменты: 1. Как верующими принимается решение о расчленении тела святого на мощи? Например, умирает ...
Массовые гуляния выпускников московских школ, для которых сегодня прозвенел «последний звонок», пока обходятся без эксцессов. Об этом заявили представители ГУВД Москвы. По данным милиции, по состоянию на вечер вторника гуляния выпускников в ...
В этой подборке находятся необычные существа, бросающие вызов нашему воображению. Здесь нет никаких доисторических монстров, в списке только создания природы, живущие в наше время. Эти существа не большие и не страшные, но выглядят они просто ...
Гейзер Флай, штат Невада, США. Озера с серной кислотой в Эфиопии. Devils Punch Bowl, штат Орегон, США. Озеро Байкал ...