Всем известно про такой клеточный автомат, как "Conway's Game Of Life".
У этого автомата есть такое свойство как необратимость, то есть у данного расположения клеток может быть от 0 до бесконечного числа предков, которые приводят к этому состоянию. Состояния, у которых не может быть предка, называются Садом Эдема.
Легко понять что этот автомат необратим: в нём возможно создать состояния, приводящие к пустому пространству. Очевидно, у пустоты существует бесконечное число предков.
Для устранения этого свойства придумали обратимые клеточные автоматы, то есть у такого автомата всегда может быть потомок и причём только один, и его можно легко алгоритмически вычислить.
По сути такой автомат позволяет заглянуть в прошлое, если нам известно настоящее!
По этим автоматам очень мало информации в сети, из-за чего они меня так сильно заинтересовали. Пример такого автомата - Critters. Алгоритм его работы такой: без пересечений смотрятся все квадратики 2x2 и заменяются согласно трансформации на вики. Затем сетка квадратиков смещается на 1 по диагонали и делается то же самое. Теперь считается что прошёл один шаг и сетка снова двигается на 1 по диагонали (возвращается в прошлое состояние).
Введу пару обозначений:
* 0 - текущее состояние,
* 10 - симуляцию 10 шагов вперёд от текущего состояния,
* -10 - симуляцию 10 шагов назад.
Меня интересовало в этом автомате:
* как будет выглядеть -10, если я что-то нарисую в 0;
* как будет выглядеть 0, если просимулировать до 10, затем там что-то модифицировать, а затем просимулировать обратно.
По этим автоматам информации в сети настолько мало, что я не смог найти симуляцию Critters. Поэтому пришлось писать программу самому.
Быстренько накидал программку и выложил на github:critters.
⬇️
У этого автомата есть такое свойство как необратимость, то есть у данного расположения клеток может быть от 0 до бесконечного числа предков, которые приводят к этому состоянию. Состояния, у которых не может быть предка, называются Садом Эдема.
Легко понять что этот автомат необратим: в нём возможно создать состояния, приводящие к пустому пространству. Очевидно, у пустоты существует бесконечное число предков.
Для устранения этого свойства придумали обратимые клеточные автоматы, то есть у такого автомата всегда может быть потомок и причём только один, и его можно легко алгоритмически вычислить.
По сути такой автомат позволяет заглянуть в прошлое, если нам известно настоящее!
По этим автоматам очень мало информации в сети, из-за чего они меня так сильно заинтересовали. Пример такого автомата - Critters. Алгоритм его работы такой: без пересечений смотрятся все квадратики 2x2 и заменяются согласно трансформации на вики. Затем сетка квадратиков смещается на 1 по диагонали и делается то же самое. Теперь считается что прошёл один шаг и сетка снова двигается на 1 по диагонали (возвращается в прошлое состояние).
Введу пару обозначений:
* 0 - текущее состояние,
* 10 - симуляцию 10 шагов вперёд от текущего состояния,
* -10 - симуляцию 10 шагов назад.
Меня интересовало в этом автомате:
* как будет выглядеть -10, если я что-то нарисую в 0;
* как будет выглядеть 0, если просимулировать до 10, затем там что-то модифицировать, а затем просимулировать обратно.
По этим автоматам информации в сети настолько мало, что я не смог найти симуляцию Critters. Поэтому пришлось писать программу самому.
Быстренько накидал программку и выложил на github:critters.
⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
Так эволюционируют криттерсы при обычной симуляции вперёд из рисунка
⬇️
hi.⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
А вот эволюция рисунка
⬇️
hi в обратную сторону.⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
Сверху показано текущее состояние поля. Снизу показано как будет выглядеть поле, если его симулировать до 0 шага. Сначала происходит симуляция до 95 шага. Видно, что поле снизу остаётся неизменным. Но, затем я начинаю менять поле в настоящем, удаляя белые точки в некоторых местах. Видно, что от удаления одного глайдера или пары пикселей сразу сильно меняется прошлое. Причём эффект взрывной, ломается целая конструкция.
⬇️
⬇️
Здесь показано как выглядят правила преобразования с википедии, и как они записаны у меня в программе. Массив для обратной симуляции вычисляется из этого. Вообще любая перестановка этого массива тоже является обратимым клеточным автоматом, наверное среди всех этих перестановок можно найти что-то интереснее.
⬇️
⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
Пример одной из перестановок, данного массива.
⬇️
⬇️
Я сделал этот автомат на зацикленном поле, следовательно количество состояний конечно, и ограничено
Ещё этот автомат не может потерять информацию, потому что он должен быть обратимым. Что это значит можно объяснить на примере: допустим, вы захотели сделать на этом конечном автомате устройство для умножения двух чисел. Тогда такое устройство должно уметь симулироваться обратно, а значит оно должно уметь получать для одного числа два других, которые при умножении дали это число. Но самого числа будет недостаточно, нужна будет ещё мета-информация или "мусор", чтобы вернуться в изначальное состояние. Скорее всего этот "мусор" будет кучей глайдеров, которые вышли из устройства умножения в процессе. Так что взломать RSA не получится)) Кстати, существуют обратимые языки программирования! Пример: Janus.
В "Игре Жизнь" при создании устройства умножения никаких глайдеров не вылетает, всё работает очень чисто, и после умножения устройство может вернуться в изначальное состояние. Это потому что данный автомат теряет информацию.
А наш мир можно симулировать в обратную сторону? Я слышал, что согласно классической механике, да. Насчёт квантовых эффектов уже не уверен. Кстати, в физике существует такая проблема как исчезновение информации в чёрных дырах.
На гифках видно, что critters выглядит довольно скучно в динамике, не сравнимо с тем как красиво выглядит "игра жизнь". Возможно правила не очень удачные, но мне кажется главная проблема что critters не может терять информацию, поэтому его эволюция выглядит так скучно, и вообще там толком не происходит эволюции, просто шум шумит, благо хотя бы глайдеры существуют.
Хотя если учесть что наш мир тоже обратим, то он выглядит слишком интересно. Думаю всё дело в том, что с первого взгляда он выглядит как "игра жизнь", но при более внимательном взгляде весь "мусор", нужный чтобы симулировать его обратно, хранится в виде тепла и электромагнитного излучения. Причём интересные состояния (атомы) сильно влияют на мир, а неинтересные состояния нужные для сохранения информации (тепло, электромагнитное излучение, фотоны), мало влияют на мир. Видимо надо тоже пытаться проектировать клеточный автомат, который всю скуку будет преобразовыватьh в слабые состояния, а самое интересное в сильные состояния.
В общем я немного разочарован с этим автоматом, его прошлое не интересно, будущее тоже, видимо надо придумывать более сложный автомат с большим числом состояний у одной клетки, может как-то воспользоваться идеей из прошлого абзаца.
До нескорой связи.
El. Psy. Kongroo.
2^(WxH). А учитывая что у любого состояния всегда существует один потомок и один предок, любое состояние через какое-то количество шагов обязательно вернётся в самого себя. Таким же образом можно объяснить почему при применении одной и той же комбинации для Кубика Рубика, он всегда вернётся в изначальное состояние, через определённое число шагов. Таким же образом, если наш мир является конечным обратимым автоматом, то через определённое число больших взрывов и схлопываний он полностью повторит сам себя (напоминает одну серию в Футураме :) ).Ещё этот автомат не может потерять информацию, потому что он должен быть обратимым. Что это значит можно объяснить на примере: допустим, вы захотели сделать на этом конечном автомате устройство для умножения двух чисел. Тогда такое устройство должно уметь симулироваться обратно, а значит оно должно уметь получать для одного числа два других, которые при умножении дали это число. Но самого числа будет недостаточно, нужна будет ещё мета-информация или "мусор", чтобы вернуться в изначальное состояние. Скорее всего этот "мусор" будет кучей глайдеров, которые вышли из устройства умножения в процессе. Так что взломать RSA не получится)) Кстати, существуют обратимые языки программирования! Пример: Janus.
В "Игре Жизнь" при создании устройства умножения никаких глайдеров не вылетает, всё работает очень чисто, и после умножения устройство может вернуться в изначальное состояние. Это потому что данный автомат теряет информацию.
А наш мир можно симулировать в обратную сторону? Я слышал, что согласно классической механике, да. Насчёт квантовых эффектов уже не уверен. Кстати, в физике существует такая проблема как исчезновение информации в чёрных дырах.
На гифках видно, что critters выглядит довольно скучно в динамике, не сравнимо с тем как красиво выглядит "игра жизнь". Возможно правила не очень удачные, но мне кажется главная проблема что critters не может терять информацию, поэтому его эволюция выглядит так скучно, и вообще там толком не происходит эволюции, просто шум шумит, благо хотя бы глайдеры существуют.
Хотя если учесть что наш мир тоже обратим, то он выглядит слишком интересно. Думаю всё дело в том, что с первого взгляда он выглядит как "игра жизнь", но при более внимательном взгляде весь "мусор", нужный чтобы симулировать его обратно, хранится в виде тепла и электромагнитного излучения. Причём интересные состояния (атомы) сильно влияют на мир, а неинтересные состояния нужные для сохранения информации (тепло, электромагнитное излучение, фотоны), мало влияют на мир. Видимо надо тоже пытаться проектировать клеточный автомат, который всю скуку будет преобразовыватьh в слабые состояния, а самое интересное в сильные состояния.
В общем я немного разочарован с этим автоматом, его прошлое не интересно, будущее тоже, видимо надо придумывать более сложный автомат с большим числом состояний у одной клетки, может как-то воспользоваться идеей из прошлого абзаца.
До нескорой связи.
El. Psy. Kongroo.
#мысли
Сейчас проблема подписок в том, что однажды подписавшись, ты скорее всего вряд ли отпишешься, потому что принимать такое решение очень сложно: "Ну зачем-то же я подписался", "Ну он же делал годноту". Обычно отписка происходит только если человек начал делать что-то очень плохое. Да и вообще отписываются очень сознательные люди, которые анализируют контент что они потребляют.
Из-за этого у среднего человека становится слишком много подписок и ему становятся необходимы всякие умные ленты.
Другой вариант решения этой проблемы - это предоставление статистики потребления контента на каждого автора, на которого ты подписан.
Как может выглядеть такая статистика на примере ютуба: показывается как часто ты ставишь лайки, дизлайки этому каналу; сколько проходит времени с момента выпуска видео и как ты его посмотришь (заинтересованность); сколько видео ты не смотришь.
И ещё эта статистика должна быть разделена на два периода: до подписки и после. Потому что может быть так, что ты подписался на человека за то что он делал раньше, а щас он делает фигню, которую ты не смотришь.
Далее должна быть возможность ранжировать по этим критериям все каналы что у тебя есть и на основании этой статистики принимать решение об отписке, смотря в конец.
Может пусть сам ютуб предлагает каналы от которых нужно отписаться (умная анти-лента).
Конечно, эту идею надо распространить на всё: вк, твиттер, телега итд.
С такими инструментами станет проще жить, и возможно число подписчиков действительно начнёт что-то значить.
Сейчас проблема подписок в том, что однажды подписавшись, ты скорее всего вряд ли отпишешься, потому что принимать такое решение очень сложно: "Ну зачем-то же я подписался", "Ну он же делал годноту". Обычно отписка происходит только если человек начал делать что-то очень плохое. Да и вообще отписываются очень сознательные люди, которые анализируют контент что они потребляют.
Из-за этого у среднего человека становится слишком много подписок и ему становятся необходимы всякие умные ленты.
Другой вариант решения этой проблемы - это предоставление статистики потребления контента на каждого автора, на которого ты подписан.
Как может выглядеть такая статистика на примере ютуба: показывается как часто ты ставишь лайки, дизлайки этому каналу; сколько проходит времени с момента выпуска видео и как ты его посмотришь (заинтересованность); сколько видео ты не смотришь.
И ещё эта статистика должна быть разделена на два периода: до подписки и после. Потому что может быть так, что ты подписался на человека за то что он делал раньше, а щас он делает фигню, которую ты не смотришь.
Далее должна быть возможность ранжировать по этим критериям все каналы что у тебя есть и на основании этой статистики принимать решение об отписке, смотря в конец.
Может пусть сам ютуб предлагает каналы от которых нужно отписаться (умная анти-лента).
Конечно, эту идею надо распространить на всё: вк, твиттер, телега итд.
С такими инструментами станет проще жить, и возможно число подписчиков действительно начнёт что-то значить.
👍1
Продолжить писать такие мысли и философствования?
Anonymous Poll
80%
Да
20%
Нет, давай только программирование
Меня давно интересует такая тема как симуляция эволюции. Впервые об этом я узнал из программы Амёбы, оттуда же я впервые узнал как работает эволюция. Вероятно именно симуляция эволюции является той причиной почему мне было так интересно программирование в школе. Я всегда мечтал написать свою самую лучшую симуляцию, и искал в интернете подобные творения, изучал их.
Затем я понял, что за всё это время набрал достаточно материала чтобы это можно было систематизировать и собрать в одном месте.
По чату @metageometria я понял что отличный способ систематизировать информацию - это сначала кидать её в чат в несформированном виде, давать комментарии, обсуждать, а затем пройтись по чату и собрать это в один документ. Заодно можно найти единомышленников и обсуждать это с ними; собирать людей с одними интересами вместе.
Именно так и родились репозитории о 4D и гиперболической геометрии.
После этого успеха я создал чат @emergevolution для сбора и систематизации информации по симуляции эволюции. Постепенно я туда кидал всё что мне было известно, к текущему моменту там накопилось много информации, и я рад объявить что наконец собрал её воедино!!! Всё находится здесь:
https://github.com/optozorax/emergevolution
Заодно там есть немного писанины от меня о том как работают методы оптимизации. Конечно, он систематизирован не идеально, не везде даны абсолютно подробные комментарии, но хоть когда-то же надо опубликоваться?)
Так же пока делал это всё, описал как можно автоматически генерировать и вставлять оглавление в markdown.
Затем я понял, что за всё это время набрал достаточно материала чтобы это можно было систематизировать и собрать в одном месте.
По чату @metageometria я понял что отличный способ систематизировать информацию - это сначала кидать её в чат в несформированном виде, давать комментарии, обсуждать, а затем пройтись по чату и собрать это в один документ. Заодно можно найти единомышленников и обсуждать это с ними; собирать людей с одними интересами вместе.
Именно так и родились репозитории о 4D и гиперболической геометрии.
После этого успеха я создал чат @emergevolution для сбора и систематизации информации по симуляции эволюции. Постепенно я туда кидал всё что мне было известно, к текущему моменту там накопилось много информации, и я рад объявить что наконец собрал её воедино!!! Всё находится здесь:
https://github.com/optozorax/emergevolution
Заодно там есть немного писанины от меня о том как работают методы оптимизации. Конечно, он систематизирован не идеально, не везде даны абсолютно подробные комментарии, но хоть когда-то же надо опубликоваться?)
Так же пока делал это всё, описал как можно автоматически генерировать и вставлять оглавление в markdown.
5-бальная шкала оценки неверна. #мысли
На данный пост меня вдохновило следующее сообщение: klavaorgwork/159174. В нём чувак говорит что оценка
Мне кажется это проблема не только из-за школы, но ещё сам способ задания оценок неверен, он противоречит интуиции. Итак, у нас практически везде предлагается ставить оценку либо от
"Хорошо" надо оценивать положительными числами, а "плохо" отрицательными. Поэтому система оценки должна быть в целых числах от
Я предлагаю называть это симметричной шкалой оценки.
Помимо неинтуитивности, у пятибальной шкалы существует такое наследие как идеология. Согласно этой идеологии любая оценка ниже
Ещё одна проблема любой положительной оценки - это то, что её промежуточные значения можно трактовать различным образом, и это трактование может отличаться от человека к человеку,
С приходом новой шкалы должна прийти и новая идеология. Во-первых все должны перестать гнаться за максимальной оценкой, социально допустимой нормой должно стать
Я считаю, что все шкалы оценки должны стать симметричными. Не только в школах, но ещё и в магазинах приложений, кинопоиске, imdb итд.
На эту тему советую ещё заценить статью моего друга: bpblog/111.
P.S. погуглил про пятибальную шкалу, и на каждом углу говорят что она плохая, и в школах надо её заменить другой положительно-определённой шкалой: 10, 12, 15 😂 ИМХО, без отрицательных чисел, а особенно нуля, это будет лишь полумерой.
Если найдёте упоминания симметричной шкалы - скидывайте мне в личку @optozorax.
На данный пост меня вдохновило следующее сообщение: klavaorgwork/159174. В нём чувак говорит что оценка
3 - это оценка "удовлетворительно", когда сервис работает как полагается. 4 он ставит когда есть что-то действительно хорошее. И тут я прозрел, что всю жизнь считал что оценку 3 надо ставить за плохую работу. Поэтому по умолчанию ставил 5 звёзд, а если что-то работало нехорошо, то ставил оценку ниже, в зависимости от того насколько плохо. То есть для меня оценка 5 была аналогом "удовлетворительно". И, думаю, я не один такой. Наше понимание этих оценок сломала школьная система, которая говорит что на 3 нельзя учиться, истина только в 4, а лучше в 5. Мне кажется это проблема не только из-за школы, но ещё сам способ задания оценок неверен, он противоречит интуиции. Итак, у нас практически везде предлагается ставить оценку либо от
1 до 5, либо от 0 до 10. Первая очевидная проблема этих оценок: они все состоят из положительных чисел. Нам предлагается оценивать что-то только степенью хорошести. То что "хорошо" на 1 из 5 означает на самом деле "плохо" - это контринтуитивно."Хорошо" надо оценивать положительными числами, а "плохо" отрицательными. Поэтому система оценки должна быть в целых числах от
-2 до +2, где оценка 0 будет считаться нейтральной, "удовлетворительно". ±2 будет считаться как максимальная степень хорошего и плохого. +1 должно стать оценкой для обозначения чего-то достаточно хорошего, чтобы не быть нейтральным, но ещё не самое лучшее, то есть промежуточное. Больше не нужно промежуточных, иначе будет слишком сложно выбрать.Я предлагаю называть это симметричной шкалой оценки.
Помимо неинтуитивности, у пятибальной шкалы существует такое наследие как идеология. Согласно этой идеологии любая оценка ниже
5 считается плохой, и никто не хочет получать 3. То есть "удовлетворительно" - это "плохо", как бы противоречиво это не звучало. В школах же оценка 5 считается достигнутой, когда ты выполнил все задания. Например, на контрольной, ты решил все задачи - значит ты получаешь 5. Оценка 5 - это не самая лучшая оценка, это просто когда ты всё решил. Выше нету, существует только ниже. Если получил 4 или 3, то ты считаешься ущербным, потому что не сделал все задания. Видимо поэтому я по умолчанию всем приложениям ставил 5.Ещё одна проблема любой положительной оценки - это то, что её промежуточные значения можно трактовать различным образом, и это трактование может отличаться от человека к человеку,
10-бальная шкала в этом плане ещё хуже. Симметричную же шкалу трактовать иным образом очень сложно, там чётко обозначено понятие нейтралитета, негативного, позитивного и максимального.С приходом новой шкалы должна прийти и новая идеология. Во-первых все должны перестать гнаться за максимальной оценкой, социально допустимой нормой должно стать
0. Должно быть нормально и не позорно делать что-то на 0 баллов. Аналогично в школе должно стать абсолютно нормально учиться на 0, этой оценкой должен быть минимально необходимый минимум. Во-вторых, раз 0 стал нормальной оценкой, контрольные должны быть переделаны. Контрольные теперь не могут давать +2 балла за полное их решение, они должны содержать различные секции: необходимое к решению (полное решение их даёт 0), и дополнительные задания, которые уже позволяют показать что вы умнее необходимого минимума. Для получения оценки +2 должны даваться задачи по сложности сопоставимые с профильными лицеями или олимпиадами. Так у школ появится возможность оценивать сверх-преуспевающих учеников, а не просто тех, кто упёрся в стенку 5 баллов.Я считаю, что все шкалы оценки должны стать симметричными. Не только в школах, но ещё и в магазинах приложений, кинопоиске, imdb итд.
На эту тему советую ещё заценить статью моего друга: bpblog/111.
P.S. погуглил про пятибальную шкалу, и на каждом углу говорят что она плохая, и в школах надо её заменить другой положительно-определённой шкалой: 10, 12, 15 😂 ИМХО, без отрицательных чисел, а особенно нуля, это будет лишь полумерой.
Если найдёте упоминания симметричной шкалы - скидывайте мне в личку @optozorax.
А ещё я наконец решил "фундаментальные проблемы математики" , которые описывал в /230.
Повторю суть: я хочу написать программу для символьных (аналитических) вычислений. Хочу чтобы там можно было выводить формулы из аксиом и других формул. Для этого мне нужно записать аксиомы над стандартными операциями и функциями. Всякие коммутативности/ассоциативности для сложения-деления-умножения я легко записал. Проблемы начались когда мне надо было придумать представление для частично заданных функций, например: модуль, знак. Как задавать такие функции, чтобы над ними можно было совершать операции, и как записать аксиомами их структуру?
Я придумал такие операторы как
После этого я встрял в разработке, я не мог двигаться дальше из-за этой проблемы, потому что она находится в самой основе. Я пытался придумать односторонние формулы, думал над типизацией, ничего не помогало.
Но вот недавно, после релиза репозитория с эволюцией, я сел за
Надо ввести одну функцию для этого дела:
⬇️
Повторю суть: я хочу написать программу для символьных (аналитических) вычислений. Хочу чтобы там можно было выводить формулы из аксиом и других формул. Для этого мне нужно записать аксиомы над стандартными операциями и функциями. Всякие коммутативности/ассоциативности для сложения-деления-умножения я легко записал. Проблемы начались когда мне надо было придумать представление для частично заданных функций, например: модуль, знак. Как задавать такие функции, чтобы над ними можно было совершать операции, и как записать аксиомами их структуру?
Я придумал такие операторы как
ifval и many, которые подробно описаны в /99. Я надеялся комбинацией этих операторов записать частично заданную функцию. В итоге оказалось, что эти операторы настолько широкие, что они приводят к противоречиям, и на практике их использовать невозможно.После этого я встрял в разработке, я не мог двигаться дальше из-за этой проблемы, потому что она находится в самой основе. Я пытался придумать односторонние формулы, думал над типизацией, ничего не помогало.
Но вот недавно, после релиза репозитория с эволюцией, я сел за
fopply, немного подумал, и нашёл решение! Надо ввести одну функцию для этого дела:
part(cond, then, else). То есть эта функция возвращает then, если в cond находится $true, либо else иначе.⬇️
Telegram
zorax trash
Это я, когда мне нужно решить фундаментальные проблемы математики прежде чем писать хоть какой-то код.
Здесь показаны свойства этой функции. Напоминаю что формулами можно пользоваться как в прямую сторону, так и в обратную. Здесь я записал базовые свойства над этой функцией и как её можно превратить в логические операторы.
Правда последняя формула уже требует от меня реализации типизации с разделением на число и логическое значение, иначе оно не будет иметь смысла, если превратить модуль в логическую структуру посередине обычной формулы.
⬇️
Правда последняя формула уже требует от меня реализации типизации с разделением на число и логическое значение, иначе оно не будет иметь смысла, если превратить модуль в логическую структуру посередине обычной формулы.
⬇️
С помощью этой функции я смог записать модуль,
Так же я избавился от такой концепции как
В общем, чувствую, я наконец могу начать писать код и получать свой дофамин.
sign, и даже смог из базовых формул вывести эту: a <-> part(b == 0, a, a*b/b) (к формуле можно добавить умножение чего-то на самого себя, если это что-то не равно нулю). А раз я смог формально вывести такую экзотику, значит я иду по правильному пути.Так же я избавился от такой концепции как
anypos, принцип которой описан в /101. Я пытался в структуре формулы записать что она способна быть в любом аргументе функции. То есть если записано: $$anypos(x+1), то оно может сматчиться с функцией f(y-2, z+3, 2+1) в третьем аргументе. Затем выдумывал множество способов записать когда этих аргументов два, как записать перестановки итд. Но потом понял что подготавливать выражение к такому виду чтобы оно смогло сматчиться с формулой - дело пользователя. То есть, если у пользователя есть функция: f(y-2, z+3, 2+1), то он делает замену g(x) := f(y-2, z+3, x), и затем записывает g(2+1), которая уже легко сматчится с формулой, работающей над формулами с одним аргументом. Таким же образом можно заставить работать формулы глубоко внутри, а не только в каком-то аргументе. Благодаря этому основа программы очень сильно упростится.В общем, чувствую, я наконец могу начать писать код и получать свой дофамин.
А тем временем у меня большой апдейт по
Для начала дизайнерские штуки.
1. Биндинг.
Предположим, у нас есть формула:
Я придумал что можно вручную записать чему будут равны неизвестные переменные формулы следующим образом:
2. Задание положения.
Например, у нас есть формула
Хотя вчера друг предложил мне что можно прямо внутри формулы записывать задание позиции, например так:
Замечание: нельзя записать:
3. Матчинг произвольной функции.
Итак, у нас есть формула:
То есть данная формула может быть применена к:
С первыми двумя этот подход сработает, но проблемы начнутся на третьем. Мы должны сматчить первое совпадение? Второе? Третье? А если я хочу заменить на единицу только второе и третье с четвёртым совпадение с
И вот для таких случаев я придумал, что нужно вручную записать паттерн, который будет считаться
В данном случае сматчится следующим образом:
Для формулы
Конечно, в будущем для этого будет сделан интерфейс, чтобы такое можно было натыкать мышкой.
⬇️
fopply!!!Для начала дизайнерские штуки.
1. Биндинг.
Предположим, у нас есть формула:
part(x, a, a) <-> a и есть выражение x+1, я хочу применить эту формулу справа-налево, тогда чем у меня должен быть x из формулы? По идее там должно быть что угодно, ведь если я применяю слева-направо, то информация о x тупо стирается. Я придумал что можно вручную записать чему будут равны неизвестные переменные формулы следующим образом:
x := x = 0 (это я называю биндингом), тогда результат будет: part(x = 0, x+1, x+1). У формулы и выражения собственное пространство имён, так что коллизий с иксом с одной стороны и с другой не возникает.2. Задание положения.
Например, у нас есть формула
a+b <-> b+a и есть выражение 2*(3+4). Как мне применить эту формулу внутрь выражения? Можно вручную записать позицию в виде массива: [1], и применять формулу к внутренней части. Но это неудобно для пользователя, поэтому я придумал следующую запись:2*(3+4)При парсинге будет сохранена вся информация о расположении частей формулы, и мы сможем восстановить позицию в виде массива по такой записи. Точка вначале нужна, потому что мне пока лень парсить отступы, и она нужна чтобы указать начало.
. ^^^
Хотя вчера друг предложил мне что можно прямо внутри формулы записывать задание позиции, например так:
2+({3+4}).Замечание: нельзя записать:
1+2+3+4потому что формула представляется деревом следующего вида:
. ^^^
+(1, +(2, +(3, 4))). Соответственно не существует такого под-дерева в этом дереве, которое было бы равно +(2, 3). Здесь нужно только преобразовывать исходное выражение.3. Матчинг произвольной функции.
Итак, у нас есть формула:
a = b & $f(a) <-> a = b & $f(b). Эта формула означает, что если у нас где-то записано a = b, то мы можем в местах, где это равенство записано через логический оператор И, заменить переменную a на переменную b. $f(a) здесь означает "любая функция с одним аргументом, который матчится в паттерн a". То есть данная формула может быть применена к:
1. a = 1 & aПервый случай тривиальный. А что делать со вторым и третьим? Как нам найти то самое место что матчится с
2. a = 1 & c+a = 0
3. a = 1 & (x*a + b*a + a*a = 0 | x = 5)
a? Первое что приходит на ум - это брать известную нам информацию с чем оно должно матчиться и рекурсивно пройтись и произвести замену.С первыми двумя этот подход сработает, но проблемы начнутся на третьем. Мы должны сматчить первое совпадение? Второе? Третье? А если я хочу заменить на единицу только второе и третье с четвёртым совпадение с
a, а первое в x*a оставить? И вот для таких случаев я придумал, что нужно вручную записать паттерн, который будет считаться
$f, например: $f(x) := a + b*x + x*x | c для третьего случая.В данном случае сматчится следующим образом:
a := x*aЗаметьте, что в этом паттерне можно описать только структуру, не надо описывать один в один всё выражение.
b := b
c := x = 5
Для формулы
$f(sin(a)) и выражения sin(1+2) * sin(1+2) можно записать паттерн $f(x) := x * x, в итоге оно сматчится с x := sin(a), а затем a сматчится с 1+2.Конечно, в будущем для этого будет сделан интерфейс, чтобы такое можно было натыкать мышкой.
⬇️
4. Аксиомы и доказательства.
Следующее что я придумал - это что должны быть формулы которые записываются как аксиомы, и формулы, которые выводятся из других, и это можно доказать.
Для такой системы все формулы должны быть записаны в каком-то файле, с именами и номерами, чтобы на них можно было ссылаться и использоваться в выводе или "доказательстве".
Именно такое я и сделал в этом файле: math.fpl. Весь сложный синтаксис я уже описал ранее, оставшийся синтаксис в этом файле интуитивно понятен.
Кстати, я там заложил на будущее формулу
В этом файле я записал базовые формулы и даже доказательства, использовал всё что рассказал ранее. Поэтому теперь главной задачей стоит: запрогать считывание этого файла во внутреннюю структуру и проверку доказательств.
Успехи в программировании
И я сделал эту проверку и всё что описано выше, всё работает! 🎉🎉🎉
Можно зайти в репозиторий, модифицировать
В плане кода там пока что неоптимальный говнокод, ибо я стараюсь экономить время, всё сделано чтобы просто работать. Доказательство проверяется, и если в каком-то шаге специально сделать ошибку, программа об этом скажет, но без места где эта ошибка возникла. Поэтому пожалуйста, если знаете, поскидывайте в только что созданный чат у данного канала, статей как архитектурно организовать вывод ошибок для своего языка.
А следующей проблемой, с которой предстоит разобраться - это как работать с числами внутри формул, чтобы можно было записать что подобные можно приводить, что числа можно сокращать и умножать, а ещё делать это в обратную сторону.
А, ну и раз я поступил в магистратуру, надо бы найти преподавателя, который согласится взять эту тему на магистерскую диссертацию. Надеюсь найду, а то я не хочу тратить своё время на какую-нибудь фигню.
Следующее что я придумал - это что должны быть формулы которые записываются как аксиомы, и формулы, которые выводятся из других, и это можно доказать.
Для такой системы все формулы должны быть записаны в каком-то файле, с именами и номерами, чтобы на них можно было ссылаться и использоваться в выводе или "доказательстве".
Именно такое я и сделал в этом файле: math.fpl. Весь сложный синтаксис я уже описал ранее, оставшийся синтаксис в этом файле интуитивно понятен.
Кстати, я там заложил на будущее формулу
unsafe, которая имеет следующий вид: a <-> b, то есть с помощью неё можно заменить что угодно на что угодно 😄В этом файле я записал базовые формулы и даже доказательства, использовал всё что рассказал ранее. Поэтому теперь главной задачей стоит: запрогать считывание этого файла во внутреннюю структуру и проверку доказательств.
Успехи в программировании
И я сделал эту проверку и всё что описано выше, всё работает! 🎉🎉🎉
Можно зайти в репозиторий, модифицировать
fpl/math.fpl, писать свои аксиомы, свои доказательства, и запускать проверку доказательств через cargo run.В плане кода там пока что неоптимальный говнокод, ибо я стараюсь экономить время, всё сделано чтобы просто работать. Доказательство проверяется, и если в каком-то шаге специально сделать ошибку, программа об этом скажет, но без места где эта ошибка возникла. Поэтому пожалуйста, если знаете, поскидывайте в только что созданный чат у данного канала, статей как архитектурно организовать вывод ошибок для своего языка.
А следующей проблемой, с которой предстоит разобраться - это как работать с числами внутри формул, чтобы можно было записать что подобные можно приводить, что числа можно сокращать и умножать, а ещё делать это в обратную сторону.
А, ну и раз я поступил в магистратуру, надо бы найти преподавателя, который согласится взять эту тему на магистерскую диссертацию. Надеюсь найду, а то я не хочу тратить своё время на какую-нибудь фигню.
Forwarded from Блог*
#blogrecommendation
Этот канал не существует в вакууме. Есть и другие каналы, которые интересны мне и которые я бы мог назвать друзьями Блог*а. Так что без лишних слов представляю вам их, с описаниями от авторов.
@ihatereality
Личный блог вафли, где он в основном пишет о извращениях с растом. Или просто о чём ему в голову взбредёт. Но в основном о расте.
(^берегите его, он умный и он няша)
@optozorax_dev
Илья программирует всякое и периодически пишет о результатах. При этом он старается объяснить как проблему, так и решение, не забывая ссылаться на известные результаты. Поэтому читатель может узнать что-то новое для себя. Не репостит другие каналы, поэтому контента мало, зато он уникальный.
(а ещё он обожает кастомные клавиатуры)
@ShadyBytes
Личный блог айтишника-либертарианца про технологии и общество. Меньше пресс-релизов крупных компаний, больше личного опыта.
@nlinker_rust
Собираю ржавые и лямбдообразные новости, прикольные цитатки с форумов, ссылки на статьи и всё такое. В-общем, сюда я тащу такие крупицы, которые мне будет жаль потерять в цифровой бездне. Возможно, они покажутся интересными и вам.
@repushko_channel
Один шизоид ругается на IT индустрию и постит иногда смешные мемы.
(любитель философии)
@tipaproit
Типа про IT и вот это вот всё. Прокрастинируем и программируем программы на компьютере. Авторский блог exclusively for Telegram.
@rustamann
(микро) блог @mersinvald о Rust, разработке, и жизни экспата в Германии. Ахтунг! Повышенное содержание мемов.
Этот канал не существует в вакууме. Есть и другие каналы, которые интересны мне и которые я бы мог назвать друзьями Блог*а. Так что без лишних слов представляю вам их, с описаниями от авторов.
@ihatereality
Личный блог вафли, где он в основном пишет о извращениях с растом. Или просто о чём ему в голову взбредёт. Но в основном о расте.
(^берегите его, он умный и он няша)
@optozorax_dev
Илья программирует всякое и периодически пишет о результатах. При этом он старается объяснить как проблему, так и решение, не забывая ссылаться на известные результаты. Поэтому читатель может узнать что-то новое для себя. Не репостит другие каналы, поэтому контента мало, зато он уникальный.
(а ещё он обожает кастомные клавиатуры)
@ShadyBytes
Личный блог айтишника-либертарианца про технологии и общество. Меньше пресс-релизов крупных компаний, больше личного опыта.
@nlinker_rust
Собираю ржавые и лямбдообразные новости, прикольные цитатки с форумов, ссылки на статьи и всё такое. В-общем, сюда я тащу такие крупицы, которые мне будет жаль потерять в цифровой бездне. Возможно, они покажутся интересными и вам.
@repushko_channel
Один шизоид ругается на IT индустрию и постит иногда смешные мемы.
(любитель философии)
@tipaproit
Типа про IT и вот это вот всё. Прокрастинируем и программируем программы на компьютере. Авторский блог exclusively for Telegram.
@rustamann
(микро) блог @mersinvald о Rust, разработке, и жизни экспата в Германии. Ахтунг! Повышенное содержание мемов.
Сразу как у нас открыли кинотеатры, я побежал смотреть фильм "Довод" от Нолана. Мне очень понравилось. И весь дальнейший пост будет основан на концепции из этого фильма, так что если вы не любите спойлеры, то лучше не читайте дальше. Хотя, возможно, я рассказываю спойлеры только максимум на уровне трейлера, я хз, не смотрю трейлеры из-за ненависти к любым спойлерам. Короче, я вас предупредил.
Меня не особо интересуют всякие персонажи и прочие кожаные мешки, а вот концепции и идеи - очень даже. Поэтому мне ОООЧЕНЬ понравился этот фильм. И в "Доводе" как раз показывается ОЧЕНЬ интересная концепция, когда вещество, идущее обратно во времени, существует параллельно с веществом, идущим вперёд во времени. Это даже путешествием во времени назвать нельзя, потому что это не то читерство с гитовыми ветками, которое нам показывают в других фильмах, это очень органичная, сложная, противоречивая и интересная вещь. Сразу после фильма я задался единственным главным вопросом: возможно ли и как такое симулировать?! Интересует как минимум возможность симуляции такого через клеточный автомат, не то что физика. Как раз хорошим совпадением стало то, что я за пару месяцев до этого наконец реализовал обратимый автомат Critters и немного его поисследовал (/235). Я сразу подумал, что обратимость Critters должна как-то помочь с концепцией Довода, но в первые дни я так и ничего не смог придумать.
Так же я начал думать каким образом прошлое может знать о том каким будет будущее, так что наверняка обязательно придётся решать какую-то астрономически огромную систему уравнений, чтобы реализовать что-то подобное "Доводу", поэтому концепция обычной пошаговой симуляции тут может быть неприменима.
Затем я начал целенаправленно думать как это симулировать и наконец придумал. Обратимость Critters действительно помогла, и я сделал на основе него обратимый клеточный автомат, где существует одновременно три вещества:
* пустота - чёрные клетки,
* вещество идущее вперёд во времени - синие клетки,
* вещество идущее обратно во времени - красные клетки.
(Блин, у меня цвета походу с фильмом не сходятся :( )
При этом:
* Если свапнуть цвет красного и синего, и ещё сделать одну мелочь, то симуляция времени вперёд будет равна симуляции времени назад до свапа. То есть все состояния корректно идут во времени в нужную сторону, и существует относительность направления времени!: красным кажется что они идут вперёд, а синие назад во времени, а синим что они идут вперёд, а красные назад.
* Наборы клеток, которые состоят из пустоты, красных и синих клеток корректно обрабатываются.
* Если правила для обычных Critters имеют размер 2^4, то в моём автомате они размером 2*3^4. Такой большой размер тоже составляет некоторую сложность в разработке правил.
Назвал я этот автомат гордым именем и с уважением к вдохновителю: The Tenet Of Life (Critters является самым близким аналогом The Game Of Life в мире обратимых автоматов, поэтому вполне логично).
⬇️
Меня не особо интересуют всякие персонажи и прочие кожаные мешки, а вот концепции и идеи - очень даже. Поэтому мне ОООЧЕНЬ понравился этот фильм. И в "Доводе" как раз показывается ОЧЕНЬ интересная концепция, когда вещество, идущее обратно во времени, существует параллельно с веществом, идущим вперёд во времени. Это даже путешествием во времени назвать нельзя, потому что это не то читерство с гитовыми ветками, которое нам показывают в других фильмах, это очень органичная, сложная, противоречивая и интересная вещь. Сразу после фильма я задался единственным главным вопросом: возможно ли и как такое симулировать?! Интересует как минимум возможность симуляции такого через клеточный автомат, не то что физика. Как раз хорошим совпадением стало то, что я за пару месяцев до этого наконец реализовал обратимый автомат Critters и немного его поисследовал (/235). Я сразу подумал, что обратимость Critters должна как-то помочь с концепцией Довода, но в первые дни я так и ничего не смог придумать.
Так же я начал думать каким образом прошлое может знать о том каким будет будущее, так что наверняка обязательно придётся решать какую-то астрономически огромную систему уравнений, чтобы реализовать что-то подобное "Доводу", поэтому концепция обычной пошаговой симуляции тут может быть неприменима.
Затем я начал целенаправленно думать как это симулировать и наконец придумал. Обратимость Critters действительно помогла, и я сделал на основе него обратимый клеточный автомат, где существует одновременно три вещества:
* пустота - чёрные клетки,
* вещество идущее вперёд во времени - синие клетки,
* вещество идущее обратно во времени - красные клетки.
(Блин, у меня цвета походу с фильмом не сходятся :( )
При этом:
* Если свапнуть цвет красного и синего, и ещё сделать одну мелочь, то симуляция времени вперёд будет равна симуляции времени назад до свапа. То есть все состояния корректно идут во времени в нужную сторону, и существует относительность направления времени!: красным кажется что они идут вперёд, а синие назад во времени, а синим что они идут вперёд, а красные назад.
* Наборы клеток, которые состоят из пустоты, красных и синих клеток корректно обрабатываются.
* Если правила для обычных Critters имеют размер 2^4, то в моём автомате они размером 2*3^4. Такой большой размер тоже составляет некоторую сложность в разработке правил.
Назвал я этот автомат гордым именем и с уважением к вдохновителю: The Tenet Of Life (Critters является самым близким аналогом The Game Of Life в мире обратимых автоматов, поэтому вполне логично).
⬇️
Там были интересные проблемы и их решения, так что я хочу всё это подробно рассказать вместе с картинками, но телеграм слишком слаб для такого формата. Поэтому я думаю написать статью. И вместо того чтобы писать статью в свой блог optozorax.github.io, куда зайдут только мои читатели, думаю эту статью надо опубликовать на Хабр. Ну и сразу в статье на Хабре намного подробнее рассмотрю тему простых обратимых автоматов, которые я не очень подробно раскрыл раньше.
В статье на хабре хочу вставить гифки и оставить ссылку на веб-симуляцию моего автомата. Естественно, эту веб-симуляцию я пишу на Rust'е и компилирую в WASM. Сейчас как раз использую macroquad и заново учусь программировать графику. В частности недавно я научился рендеринть из текстуры в текстуру при помощи шейдеров. А раньше я такое делал на CPU. Ну и спасибо Феде за макроквад, интерфейс делается очень просто, и много полезных примеров :)
А по поводу полученных результатов: ну ничего интересного или революционного я не увидел. Просто красные и синие клетки кипишатся и обладают хорошими математическими свойствами. Поэтому самое интересное - то как я его сделал, а не сам результат. Результаты не интересные потому что сам изначальный автомат Critters не очень интересный. Тут надо другие обратимые автоматы исследовать с таким подходом.
Ну и ещё результаты не очень интересные, потому что у меня нет самой главной фичи из фильма - устройства, которое обращает назад во времени всё что в него войдёт. Ведь именно такое устройство и создаёт интересные парадоксы и вынос мозга. А судя по тому что получилось у меня, просто параллельное существование двух временных типов материи не очень интересно и не очень противоречиво.
Мне кажется ввести клетки, которые делают такое инвертирование либо невозможно, либо придётся решать астрономическую систему уравнений, либо очень сложно. И если такое вводить, то надо заранее просчитывать вселенную чтобы она была согласована с этим устройством, потому что оно на вход должно принимать два одинаковых объекта с разными направлениями времени. То есть надо заранее пускать обратный и прямой глайдер в эту машину, чтобы они вошли в неё и исчезли, тогда результат этой машины будет как в фильме.
Если суметь создать такую машину, и направить туда прямой глайдер, но не направить обратный, то мне кажется что эта машина ещё до входа создаст много всякого шума, который самоаннигилируется с этим глайдером, и он умрёт, так и не попав назад во времени.
Ещё, касательно простых обратимых автоматов могу посоветовать смотреть это:
* Большой обзор клеточных автоматов от Онигири
* Квантовый компьютер и обратимые вычисления от Онигири
* Принцип Ландауэра на Википедии
Я знаком с Онигири, и так интересно случается что у нас абсолютно случайно темы с этими автоматами пересеклись по времени и по смыслу в видео что я посоветовал) У него к сожалению видео не изобилуют сложными подробностями, и ориентированны на более молодую аудиторию, но в целом много нового можно узнать)
Ладно, а теперь время картинок!
⬇️
В статье на хабре хочу вставить гифки и оставить ссылку на веб-симуляцию моего автомата. Естественно, эту веб-симуляцию я пишу на Rust'е и компилирую в WASM. Сейчас как раз использую macroquad и заново учусь программировать графику. В частности недавно я научился рендеринть из текстуры в текстуру при помощи шейдеров. А раньше я такое делал на CPU. Ну и спасибо Феде за макроквад, интерфейс делается очень просто, и много полезных примеров :)
А по поводу полученных результатов: ну ничего интересного или революционного я не увидел. Просто красные и синие клетки кипишатся и обладают хорошими математическими свойствами. Поэтому самое интересное - то как я его сделал, а не сам результат. Результаты не интересные потому что сам изначальный автомат Critters не очень интересный. Тут надо другие обратимые автоматы исследовать с таким подходом.
Ну и ещё результаты не очень интересные, потому что у меня нет самой главной фичи из фильма - устройства, которое обращает назад во времени всё что в него войдёт. Ведь именно такое устройство и создаёт интересные парадоксы и вынос мозга. А судя по тому что получилось у меня, просто параллельное существование двух временных типов материи не очень интересно и не очень противоречиво.
Мне кажется ввести клетки, которые делают такое инвертирование либо невозможно, либо придётся решать астрономическую систему уравнений, либо очень сложно. И если такое вводить, то надо заранее просчитывать вселенную чтобы она была согласована с этим устройством, потому что оно на вход должно принимать два одинаковых объекта с разными направлениями времени. То есть надо заранее пускать обратный и прямой глайдер в эту машину, чтобы они вошли в неё и исчезли, тогда результат этой машины будет как в фильме.
Если суметь создать такую машину, и направить туда прямой глайдер, но не направить обратный, то мне кажется что эта машина ещё до входа создаст много всякого шума, который самоаннигилируется с этим глайдером, и он умрёт, так и не попав назад во времени.
Ещё, касательно простых обратимых автоматов могу посоветовать смотреть это:
* Большой обзор клеточных автоматов от Онигири
* Квантовый компьютер и обратимые вычисления от Онигири
* Принцип Ландауэра на Википедии
Я знаком с Онигири, и так интересно случается что у нас абсолютно случайно темы с этими автоматами пересеклись по времени и по смыслу в видео что я посоветовал) У него к сожалению видео не изобилуют сложными подробностями, и ориентированны на более молодую аудиторию, но в целом много нового можно узнать)
Ладно, а теперь время картинок!
⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
В прошлом посте про Critters я не осилил управление мышью, поэтому там были очень шакальные картинки, и вы даже не смогли рассмотреть глайдера. Чтож, я исправил это недоразумение, теперь я сделал управление мышью и можно масштабировать, передвигать. И ещё интерфейс есть вместо клавиш на клавиатуре.
⬇️
⬇️
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Это глайдер в обычном автомате Critters. Так как он синего цвета, видно что он идёт вперёд во времени. Здесь показывается как этот глайдер двигается в направлении куда он указывает. Так же здесь показывается сетка, чтобы можно было видеть как работают блочные правила обычного Critters, о которых я ранее рассказывал в /239.
⬇️
⬇️
👍1