LINUX.ORG.RU
ФорумTalks

Алгебраические типы данных, инволюция и квантовая логика

 , ,


1

4

Размышления о математической логике и программировании.

Когда-то давно я изобретал инволюцию, расширяющую натуральные числа, которая бы меняла местами умножение и сложение. Вот так:

(a + b)` = a` * b`
(a * b)` = a` + b`
a`` = a

все началось с уравнений:

a * a = a
a + a = a

первое в действительных (и комплексных?) числах имеет два корня: 0 и 1, а второе - только один корень: 0. А хотелось сделать сложение и умножение равноправными. И тогда я подумал, а пусть первое уравнение тоже имеет только один корень: 1, но не 0. То есть

0 * 0 != 0

как натуральные числа N - свободный моноид с генератором 1 и сложением, так и «звездные» натуральные числа N* - свободный моноид с генератором 0 и умножением. Тогда,

n` := 0 ^ n

пусть все такие числа различные и не нули (кроме первого, конечно же).

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

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

(a -> b)` = (b -> a)

чувствуете это?

(Void -> T)` = (T -> Void)

это же ах*енно...

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

Естественно, что бы определить смешанные операции, нужно что-то делать с дистрибутивностью, она явно нарушает симметрию между сложением и умножением. Оказывается, все уже сделали, есть такая теорема (я не спал всю ноч когда о ней узнал), которая повлияла на квантовую теорию поля и дает... континуум (действительные числа). Интересно, что в ней пришлось отказаться от дистрибутивности в пользу более слабой (и более симметричной) связи между умножением и сложением, в пользу модулярного закона.

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

Вот вопрос номер один этого топика, как кто видит теорию типов на квантовой логике? Не жрать же Q# от MS для квантовых вычислений. Нужен язык программирования отражающий суть.

Ну и второй вопрос более математический. Есть такое пространство Гильберта, это бесконечномерное пространство над действительными или комплексными числами, в котором все скалярные произведения конечны. Так вот, штриховые простые числа образуют что-то вроде базиса такого пространства в... натуральных числах. Их же нельзя разложить в сумму других чисел. Другими словами, простые числа не раскладываются на множители (кроме единицы), значит простые штриховые не раскладываются на слагаемые (кроме нуля, который и есть штриховая единица). Значит простые штриховые образуют аналог базиса? Но ведь их бесконечно много. Значит уже на натуральных числах есть... пространство Гильберта (конечно же, это не оно, ведь нету поля, да и вообще, упоротость какая-то). Так вот вопрос, а скорее не вопрос, а просто информация к размышлению... Как эта инволюция связанна с проблемами Гольдбаха и гипотезой Римана?

Может кто-то когда-то будет гуглить что-то такое и найдет эту тему. Может кто-то угостит вкусной ссылкой.



Последнее исправление: vlad9486 (всего исправлений: 2)

Еще, интересный момент. Есть такая логическая связка - импликация

a -> b = !a or b

Даже обозначение намекает на функцию. Если отрицание заменить на мой штрих, а дизъюнкцию на... еще не понятно что, то получится образование функции из двух типов данных (тип аргумента и результата). Круто что здесь нужно применять инволюцию к чему-то одному. Например, функция - это контравариантный функтор по аргументу и ковариантный по результату. Опять же, отрицание вариантности только с одной стороны.

vlad9486
() автор топика

Совсем не интересно.

Deleted
()

Был бы помоложе завел бы диванчик и принимал пациентов с математическими и квантовыми отклонениями, непаханное поле.

ilovewindows ★★★★★
()

Может кто-то угостит вкусной ссылкой.

В таком формате изложения могу предложить только одну вкусную ссылку http://natribu.org/

Поправьте стартовый пост, выкиньте всё лишнее, чётко изложите тезисы и вопросы. Если, конечно, хотите получить хоть один серьезный комментарий.

Crocodoom ★★★★★
()
Ответ на: комментарий от Pythagoras

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

madcore ★★★★★
()

ОП, здесь тебе не помогут. Иди в ближайший университет и ищи подмогу.

Valman_old
()

как кто видит теорию типов на квантовой логике?

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

Значит простые штриховые образуют аналог базиса?

Зачем он (не)нужен? Квантовую логику нужно творить на известных свойствах квантовых систем, а не наоборот. Обычный сюръективный гомоморфизм вполне адекватно отображает редукцию квантового состояния (локального базиса) при измерениях/вычислениях.

quickquest ★★★★★
()
Ответ на: комментарий от deep-purple

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

madcore ★★★★★
()
Ответ на: комментарий от madcore

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

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

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

madcore ★★★★★
()

Спасибо, раньше я не понимал фразу «во многая знания — многая печали».

Miguel ★★★★★
()

недавно читал какую-то статью по хаскеллю, в которой автор операцию «антиданных» юзал направо и налево, потому что так записывать проще. Найду - брошу

stevejobs ★★★★☆
()
Ответ на: комментарий от Crocodoom

Кратко.

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

Также есть подозрение, что это будет проще сделать, если программировать сразу квантовый компьютер, потому что там и так есть инволюция (но не такая как у меня, мою вообще можно не смотреть) и еще там есть теорема Solèr, в которой пространство состояний квантовой теории поля (Гильбертово пространство) получается из бесконечномерного векторного пространства (модуля на самом деле), в котором дистрибутивность (умножения состояний относительно сложения) обобщена на бесконечномерный случай вот так.

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

Наперед спасибо за потраченное время и интерес к теме (если есть).

vlad9486
() автор топика
Ответ на: комментарий от quickquest

Ссылка у меня где-то в закрепленных. Замечательное чтиво, но все не осилил, читал попроще. Буду пытаться.

Квантовую логику нужно творить на известных свойствах квантовых систем, а не наоборот.

Хочу язык программирования квантового компьютера с инволюцией (штрихом) типов данных.

Обычный сюръективный гомоморфизм вполне адекватно отображает редукцию квантового состояния (локального базиса) при измерениях/вычислениях.

Это да, но меня больше интересует не редукция, а эволюция, а она в гамильтониане. Это место обходят языки программирования для квантовых вычислителей. Предлагают программировать по старинке, а профит получать при коллапсе (редукции).

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

a -> b

и

⟨ ϕ | H | ψ ⟩

?

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

vlad9486
() автор топика
Ответ на: комментарий от vlad9486

А 2.6 на 3.8 умножить сможешь через сложение?

вообще-то сможет. Это же рациональные числа.

dikiy ★★☆☆☆
()
Ответ на: комментарий от vlad9486

Нет. Это отсутствие собеседника. Пришлось писать на сюда, люблю лор.

Я бы и рад тебе помочь чем-то, но не могу понять чего-ты там конкретно хочешь.

dikiy ★★☆☆☆
()
Ответ на: комментарий от system-root

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

Null = [] // пустое сложение, bottom type
Void = {} // пустое умножение, unit type
Bool = [false: Void, true: Void] // сложение двух юнитов
UInt = [0: Void, ..., 65535: Void] // здесь перечисляем целые
...

Целые числа можно определить как функции из индекса бита в бул

Bit64 = [0: Void, ..., 63: Void]
UInt64 = Bit64 -> Bool

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

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

Есть класс операций - инволюции. В физике одна из них делает эволюцию системы. В программировании эволюция - это и есть функция. Есть надежда (одержимость), что введя инволюцию на типах, можно выразить тип функции. Тогда останутся примитивными только сложение, умножение и этот самый штрих. Но для этого надо ему придать смысл.

vlad9486
() автор топика
Ответ на: комментарий от dikiy

Если честно, то я и сам понимаю только на половину. Мне один преподаватель казал что все творчество в том, что бы задать вопрос, получить ответ - дело техники.

vlad9486
() автор топика
Ответ на: комментарий от vlad9486

Вот эта предлагаемая инволюция и есть что-то типа гамильтониана.

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

Интересно, прав ли я?

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

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

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

P.S. Как глаголили древнеримские физики: «Что дозволено Юпитеру бозону, не дозволено быку фермиону» :)

quickquest ★★★★★
()
Последнее исправление: quickquest (всего исправлений: 1)
Ответ на: комментарий от system-root

которая бы меняла местами умножение и сложение

кажется до меня начинает доходить. нужно поменять product и coproduct местами и отменить изоморфизм.
a + Void = a * Void. яснопонятно.

system-root ★★★★★
()
Последнее исправление: system-root (всего исправлений: 1)
Ответ на: комментарий от system-root

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

Попробуем расширить натуральные числа, добавим штрих, определим его так:

a`` = a // для любого натурального a
(a` + b`)` = a * b // для любых натуральных a и b
a != b <=> a` != b` // для любых натуральных a и b

Штрих натурального числа не натуральное число, а совсем новый элемент. Вот у нас уже в два раза больше элементов.

Замечаем что 1` ведет себя как 0. Вот это вот все не противоречит обычной арифметике. Все что верно для обычной арифметики натуральных чисел верно и здесь, кроме одного мелкого момента, здесь различаются степени нуля. Так и получается симметрия между + и *.

Идем дальше, функции - это «степени». Мощность множества функций с множества «a» в множество «b» равна b ^ a, это математический факт. А еще, математический факт:

(a * b) ^ c = (a ^ c) * (b ^ c)
c ^ (a + b) = (c ^ a) * (c ^ b)

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

Кроме того,

(a ^ b) ^ c = a ^ (b * c)
c -> (b -> a) = (b, c) -> a // (каррирование)

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

vlad9486
() автор топика
Ответ на: комментарий от quickquest

Ссылка занятная.

Язык не может и не должен

И не будет. Это вообще не обязательно на квантовом компьютере будет работать. Я пытаюсь ухватить идею, что *любые* вычисления, если в них внимательно всмотреться, наиболее экономно и естественно описываются в квантовой логике. Может быть квантовый компьютер здесь ничего нового и не даст.

Например, квантовая логика на куперовской паре электронов (фермионы) работает иначе, чем на паре запутанных фотонов (бозоны).

И бозоны и фермионы - состояния, но бозоны действуют на фермионы как операторы. Это намекает на обогащенные категории. В одной категории объекты и морфизмы (бозоны и фермионы), я ее обогащаю, получаю другую категорию, в которой все они становятся объектами, а морфизмы - это уже наблюдаемые... И получается обычная квантовая механика. Похоже что квантовая теория поля для квантовой механики - это как обогащенная категория для обычной.

Так можно понять откуда берутся функции. В основе функции действуют на не функциональные типы, а в обогащенной категории все они равноправные объекты.

Я об этом не думал ранее, все таки полезно писать на лор. Еще надо суперсимметрию розботанить, там фермионы превращаются в бозоны и наоборот. Возможно все уже построено до нас.

Еще интересны алгебры Кэли-Диксона, там ассоциативность пропадает на октонионах, точно как на операции степени, или при обогащении категории...

vlad9486
() автор топика
Ответ на: комментарий от system-root

Короче, сложение и умножение можно менять местами, но не просто так (очевидно, ведь со школьной арифметикой спорить глупо). Нужно еще и время разворачивать в другую сторону. Ну или штрихи какие-то рисовать.

vlad9486
() автор топика
Ответ на: комментарий от vlad9486

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

(a * b) ^ c = (a ^ c) * (b ^ c)
c ^ (a + b) = (c ^ a) * (c ^ b)
это
c -> (a,b) = (c -> a, c -> b)
(a,b) -> c = (a -> c, b -> c)

степень превращает сложение в умножение и наоборот

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

system-root ★★★★★
()
Ответ на: комментарий от system-root

Правильно будет

c -> struct(a, b) = struct(c -> a, c -> b)
enum(a, b) -> c = struct(a -> c, b -> c)

Если смотреть из прошлого в будущее, то превращение *перечисления* во что-то - это пара превращений (второе уравнение),

А если смотреть из будущего в прошлое, то превращение *пары* во что-то - это пара превращений.

Да, функции разные. «Превращение» здесь в более абстрактном смысле.

vlad9486
() автор топика
Ответ на: комментарий от vlad9486

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

system-root ★★★★★
()
Ответ на: комментарий от vlad9486

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

system-root ★★★★★
()
Ответ на: комментарий от system-root

Там полно диаграмм. Человек рисует на доске и дает комментарии, камера все снимает. Нужно, всего лишь посмотреть 3-4 ролика по 40 минут. Я буду рассказывать почти так само долго и скучно, только мне еще и лень. Вот в коде

-> 
Вполне себе диаграмма.

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

vlad9486
() автор топика
Ответ на: комментарий от vlad9486
(a -> c, b -> c)
   reverse
(a <- c, b <- c)
(a,b) <- c

и я не получаю нужного.

(a,b) -> c
(a,b) <- c
как мне поможет Бартош, если я не понимаю во временные приколы и как их представлять или даже думать о них.

system-root ★★★★★
()
Ответ на: комментарий от system-root

Потому что ты знаки путаешь. Вообще не отличаешь сложение от умножения.

Было:

(a + b) -> c = (a -> c) * (b -> c)
c -> (a * b) = (c -> a) * (c -> b)

Обращай внимание на знаки.

Если стрелки поменять на степени, то выйдет школьная алгебра (обрати внимание, результат в степени аргумент, не наоборот).

Теперь тоже самое по-русски.

Первое уравнение. Что-бы реализовать функцию которая принимает a ИЛИ b и возвращает c, нужна одна функция, которая принимает a и возвращает c И вторая, которая принимает b и возвращает c. Никакой больше информации не нужно. У тебя просто if в коде и две ветки, обе нужны.

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

В первом случае нельзя поменять ИЛИ на И, потому что a И b могут взаимодействовать хитрым образом и вместе означать больше чем по отдельности, умения из только a сделать c и из только b сделать c не хватит, если тебе пришло два значения одновременно, нужно реагировать по разному для каждой их комбинации, просто пары функций не хватит.

Во втором случае нельзя менять И на ИЛИ, потому что две ветки, обе нужны.

Второе уравнение. Что-бы реализовать функцию которая принимает c и возвращает a И b, нужны опять две сразу функции c -> a И c -> b. Опять же a И b могут означать больше чем по отдельности, но это не важно. Это не могло влиять на их «рождение», это важно уже после того, как они начали существовать. Умения сделать их по отдельности достаточно, что бы потом собрать вместе.

А теперь поменяй местами результат с аргументом и сумму с умножением. Первое уравнение станет вторым, а второе - первым.

Функция (в математическом смысле) - это лучшая интуитивная модель времени. Разворот времени вместе с перестановкой сложения и умножения оставляет все утверждения верными.

vlad9486
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.