| |
[Dec. 30th, 2020|09:43 pm] |
Упорядоченность пары, списка
Математика и программирование сражаются на этом уровне - что брать за основной составной тип. Вводить ли упорядоченную пару через неупорядоченную или наоборот? В схеме пара упорядоченная, а список - это пара, определяется через неё (значит, тоже упорядочен). И в других языках программирования пары, туплы, списки и пр. - структуры упорядоченные. В математике, наоборот, корневая структура - это множество, неупорядоченное. Пара же не получает отдельного онтологического статуса.
Если отталкиваться от лингвистики, кажется, что в дуальности упорядоченность-неупорядоченность главенствует первая. Вторая ведь получается из первой при помощи негации. Но и первая из второй отрицанием берётся. И беспорядок, хаотичность, может так случиться, быть более глубоко укоренён в структуре идейной иерархии, быть более базовым.
Вообще, отсутствие всяких свойств и порядка, в частности, ставит форму ближе к великому ничто. А ведь "всё должно же с чего-то начинаться". Тут я апеллирую несколько некорректно к тому, что мы сами должны зацепиться за какой-то конец нити, чтобы начать распутывать этот клубок. Однако, хоть и некорректно, а без этого изначального зацепления останется только апофатика, афазия, непознаваемость и необходимость "персонального мистического опыта". (Заметки на полях: короче, останется только мычать как корова).
Поэтому возьмём за рабочую гипотезу, что основной тип должен быть неупорядоченным, как в математике. Порядок там вводится, вообще, не за шаг, а за несколько. Примерно: множество - функция - отношение как индикаторная функция - произведение множеств - отношение как подмножество - 3 свойства порядка - порядок. Пока я не видел "оснований математики", строящихся на чём-то упорядоченном, типа последовательности. (Заметки на полях: надо поискать или подумать, можно ли так строить "основания").
Но почему такая разница с программированием? В нём нужно так же долго и нудно вводить неупорядоченность, и часто она там неестественна. Может быть, всё начинается с факта, что ячейки памяти пронумерованы? Ну, а в ленточном компьютере ячейки, не имея явной нумерации, всё равно, имеют последовательность, порядок, направленность? И сам факт, что компьютер "построил человек, а не бог"? Или всё же упорядоченность более корневая, чем хаос?
Ладно, конкретизируя это в программировании, функциональном, естественно, выписал упорядоченную пару как тип. Определил конструктор pair, предикат pair?, проекции former и latter, и две обычных функций (преобразования пары): swap и sort. Последняя, однако, высосана из пальца: для неё нужен предопределённый оператор сравнения (или передавать его параметром). Больше для этого типа определять, кажется, нечего.
Допустим, теперь мы берёмся за определение типа неупорядоченной пары. Неважно, что будет внутри black box. Пусть будут две переменные, и со случайным периодом будем их менять местами, смеха ради. С конструктором, предикатом всё понятно, а также понятно, что swap и sort не имеют смысла, разве что sort будет отображать в упорядоченную пару.
Но что делать с проекциями? Точнее, с проекцией, ведь нету ни former, ни latter. Проекция должна отделять один элемент или расщеплять пару на атомы. Важно то, что при таком расщеплении будет неизбежно фиксироваться порядок в паре (как вскрытие ящика с "квантовым котом"). Ведь одна из составляющих будет возвращена первой. (Заметки на полях: разве что изобрести новое устройство вывода а-ля round-robin-подпись, чтобы эта пара динамично вращалась с такой скоростью, что будет визуально непонятно, что следует за чем, или перекрыть одно другим с прозрачностью).
Есть два варианта: первый более реальный, но проигрышный. Операция расщепления неупорядоченной пары будет возвращать (случайно фиксированную) упорядоченную пару, кортеж, тупл, вектор, последовательность, список, - суть одна, это упорядоченная пара. Однако, хоть и практично это в смысле программирования, но правилами игры запрещено. Ведь тогда получается, неупорядоченная пара опирается на упорядоченную. (Заметки на полях: будет чётко видно по графу зависимостей).
Второй вариант логичней, но непонятно как его запрограммировать. Расщепление будет выбирать случайным образом элемент, фиксируя "голову" воображаемой упорядоченной пары, и "оставлять" второй, "хвостовой" элемент. Но что значит "оставлять"? В функциональном языке есть только чистые функции, на входе должна быть пара, на выходе будет атом и, с неизбежностью, то, что осталось. Проблема в том, что функции не возвращают множественных значений.
Некоторые скажут "а у меня в питоне так можно". В схеме тоже можно использовать values, и в других многих языках. Но суть та же, и она ломает всю игру. Потому что функции, возвращающие множественные значения, по сути, возвращают тупл, кортеж, упорядоченную пару. И опять одно опирается на другое, а не наоборот.
Итак, не выходит определить неупорядоченную пару в программировании без упорядоченной пары или подобных ей типов. По крайней мере в стандартной архитектуре компьютера с линейной памятью. Надо будет изучить этот же вопрос, но для квантового компьютера. (Заметки на полях: вот будет смешно, если тяжесть разработки "сильного" искусственного интеллекта сводится в конечном счёте к этой проблеме упорядоченности-неупорядоченности... впрочем, вряд ли).
P. S. Для простоты я опустил ещё одно важное отличие определения пары между математикой и программированием. А именно, тот факт, что пара в программировании соответствует не множеству, а мультимножеству в математике. И невозможно в теории множеств атом объединить в пару с собой же, он будет "схлопываться" на себя в синглетон (об этом стоит подумать отдельно).
P. P. S. А, вот, я сообразил, как запрограммировать второй вариант. Нужно проекцию one, в смысле, взятия одного из элементов (случайным образом), оформить, как я сказал. А вторая проекция будет зваться another, на вход ей будет приходить (та же) пара и элемент, а на выходе будет (второй) элемент взятый как множество минус (теоретико-множественный минус) этот элемент. Подставлять параметром надо элемент, возвращённый первой функцией. Иначе придётся бросать ошибку (а есть ли она на этом уровне определений?). С виду кривовато, но тогда не будет опираться определение ни на какую упорядоченную структуру. Полностью ли отменяет это построение конец моей истории? Надо думать дальше. |
|
|