Алексей
Я правда не понимаю что такое экспериментальная математика и какие эксперименты они ставят
Alexander
Я правда не понимаю что такое экспериментальная математика и какие эксперименты они ставят
У меня есть встречный вопрос, и после ответа на него я смогу привести пример. CS - это математика или нет? В частности, вычислимость. (Я считаю да, т.к. теоремы и строгие доказательства)
Denis
CS это не математика, но есть пересечения
Алексей
Я не вполне твердо знаю предмет CS, но вычислимость & Со - самая что ни на есть математика
Alexander
Тогда вот вам экспериментальная математика (по моему разумению): доказать, что игра "Жизнь" полна по Тьюрингу.
Alexander
И это было сделано построением машины Тьюринга, но не формальными методами
Alexander
Я не вполне твердо знаю предмет CS, но вычислимость & Со - самая что ни на есть математика
Свидетельств, что CS часть математики - много. Хотя найдутся и противоположные точки зрения. Просто потому, что само понятие математики не имеет четкого и единственного определения. Поэтому я предлагаю считать, что там, где есть аксиомы, правила вывода и четкие доказательства - все это математика.
Alexander
И это было сделано построением машины Тьюринга, но не формальными методами
А на заре изучения клеточных автоматов вообще было неясно, могут ли они бесконечно производить новые живые клетки.
Alexander
Последнее предложение и есть определение математики. Набор непротиворечивых аксиом + правила вывода.
Одно из. Потому что даже в самой математике есть разделы, не обоснованные пока еще аксиоматически
Алексей
Доказывается, полагаю, конструированием машины Тьюринга или чем-то похожим. Где эксперимент?
Alexander
Доказывается, полагаю, конструированием машины Тьюринга или чем-то похожим. Где эксперимент?
И вот здесь мы опять пришли к тому, что надо договариваться о понятии "эксперимент".
Alexander
Доказывается, полагаю, конструированием машины Тьюринга или чем-то похожим. Где эксперимент?
Чтобы ее (машину Тьюринга) построить, понадобилось несколько десятков лет экспериментов с игрой Жизнь, чтобы найти и заставить работать все эти структуры.
parket
https://codegolf.stackexchange.com/questions/11880/build-a-working-game-of-tetris-in-conways-game-of-life
Alexander
Чтобы ее (машину Тьюринга) построить, понадобилось несколько десятков лет экспериментов с игрой Жизнь, чтобы найти и заставить работать все эти структуры.
О начале работы в этом направлении хорошо написано в книге "Хакеры - герои компьютерной революции".
parket
Круто. Очень сложно, наверное.
Ребята большие молодцы :) Всегда восхищали подобные вещи.
Alexander
Да. Меня крайне поразила в свое время игра Жизнь внутри игры Жизнь, а здесь они пошли еще дальше.
Alexander
Если понимать задачу вычислимости как задачу поиска Тьюринг-полных систем, то математикой (экспериментальной), внезапно, оказывается и исследование компьютерных игр, таких как Dwarf Fortress, Factorio, Minecraft, и парочки других. Они все Тьюринг-полные (впрочем, про Майнкрафт и Факторио это неудивительно).
Alexander
Удивительно то, что в DF и Факторио Тьюринг-машину, а лучше сказать - логические вентили - можно построить несколькими принципиально разными способами.
кана
что делает Sub?
кана
он как-то превращает Bool ~R# Bool в Bool ~R# a в nokinds писали, что в конструкторах хранится a ~ Bool, например, но по факту туда передается сразу Bool ~ Bool при конструировании, как тогда Sub работает
Alexander
Я думал задача вычислимости, это определение проблем, которые решаемы в рамках тьюринг-полных систем.
Но, допустим, ты нашел новый способ построить вычислительную систему, эквивалентную машине Тьюринга. И с ее помощью смог показать, например, что P!=NP. Тогда можно говорить, что вокруг вычислимости много задач, и часть из них, вероятно, может быть решена вот такими нестандартными подходами.
Aliester
CS похож на дискретку
Aliester
такое же собрание методов решения и экспериментов
Aliester
которое презирают теоретические матетматики
Alexander
CS похож на дискретку
Да, я тоже думал подобное. Но скорее, про методы оптимизации
Aliester
континуальная математика имеет много теории, которая много где обогнала адопшн в других областях
Aliester
а у дискретной что-то пока нет истовых теоретиков для теории всего
Alexander
а у дискретной что-то пока нет истовых теоретиков для теории всего
К дискретке относят много чего. Комбинаторика, например, хорошо обоснована теоретически.
кана
он как-то превращает Bool ~R# Bool в Bool ~R# a в nokinds писали, что в конструкторах хранится a ~ Bool, например, но по факту туда передается сразу Bool ~ Bool при конструировании, как тогда Sub работает
https://gist.github.com/kana-sama/d2de303e39715acce70d5c64e2e46f0a#file-gadts-hs вот тут например в TBool передается Bool ~ Bool для построения IntOrBoolTagged Bool (смысла в этом я не вижу), который в extractFromTagged переворачивается (зачем?) и применяется какой-то Sub, Bool в итоге в Bool и кастуется
кана
https://gist.github.com/kana-sama/d2de303e39715acce70d5c64e2e46f0a#file-adt-hs выхлоп для adt уже он очень сильно отличается обновил, не то залил
кана
все выглядит так, будто в этом случае data IntOrBoolTagged a = (a ~ String) => TInt Int допускаются поликаинд-равенства (~~), хоть явно указаны только ~
кана
я сделал вывод, что data IntOrBoolTagged a = (a ~ String) => TInt Int | (a ~ Bool) => TBool Bool даже лучше, чем аналогичный gadt data IntOrBoolTagged a where TInt :: Int -> IntOrBoolTagged String TBool :: Bool -> IntOrBoolTagged Bool
кана
потому что более полиморфен, так как работает с поликаиндными (~~) пруфами, хоть нигде явно об этом не написано
Зигохистоморфный
кана
никто с этим не спорит, если бы это было не так я бы и не сравнивал выхлопы)
кана
в пурсе немного не такое равенство: data a ~ b = Refl (forall f. f a -> f b) очевидео что такая функция есть только одна, и это id :: f a -> f a
Зигохистоморфный
да, вы пурсе нельзя сделать поликаинд
Leonid 🦇
Опять всякую ерунду обсуждаете вместо того чтоб postgresql-wire пилить
Dmitrii
потому что более полиморфен, так как работает с поликаиндными (~~) пруфами, хоть нигде явно об этом не написано
В GHC-8.4.1 это допилили. Теперь и GADT так может. Следующее тайпчекается: data G :: forall k. k -> * where GInt :: G Int GMaybe :: G Maybe
Зигохистоморфный
Oleg
Я думал задача вычислимости, это определение проблем, которые решаемы в рамках тьюринг-полных систем.
моделей много, если ты готов смириться с тьюринг-полнотой, ок. Но некоторым нужна тотальность и всякое такое
кана
В GHC-8.4.1 это допилили. Теперь и GADT так может. Следующее тайпчекается: data G :: forall k. k -> * where GInt :: G Int GMaybe :: G Maybe
ох, ну наконец-то я чувствую, что начал понимать что сейчас происходит в ghc
кана
data IntOrBoolTagged (a :: k) where TInt :: Int -> IntOrBoolTagged String TBool :: Bool -> IntOrBoolTagged Bool TMaybe :: IntOrBoolTagged Maybe ну и сейчас же так можно
кана
это 8.2.2
Alexander
Во всяком случае, больше знать никогда не плохо.
Если тебе твой мозг это позволяет, то да, безусловно. Есть люди с удивительной памятью, которые однажды изучив, могут воспроизвести в любой момент. Я бы хотел такую память иметь, но увы. Из памяти уходит все, что неиспользуется, и очень быстро.
кана
data IntOrBoolTagged (a :: k) where TInt :: Int -> IntOrBoolTagged String TBool :: Bool -> IntOrBoolTagged Bool TMaybe :: IntOrBoolTagged Maybe ну и сейчас же так можно
причем компилятор достаточно умный чтобы не учитывать TMaybe при паттерн-метчинге в функции IntOrBoolTagged a -> a и не кидать ворнинг про non-exhaustive pm
кана
так
кана
а в чем разница между ними data T (a :: k) where A :: T Int B :: T Maybe data G :: forall k. k -> * where C :: G Int D :: G Maybe ? разве в первом случае forall просто не неявный?
кана
почему второй требует TypeInType? каинды у них одинаковые
кана
в core и конструкторы (иои что это за хрень) одинаковые
Dmitrii
@kana_sama Я не знаю. Могу только кинуть ссылку на release notes: https://downloads.haskell.org/~ghc/master/users-guide/8.4.1-notes.html#language
кана
спасибо, почитаю
кана
похоже, что то, что такой код работает в 8.2 без TypeInType, является багом, в 8.4 пофикшен: data T (a :: k) where A :: T Int B :: T Maybe причины вроде тоже понятны, нужно же как-то с TypeApplications передать k
Aliester
Aliester
deep
кана
{-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE MultiParamTypeClasses #-} class Source s t where get :: s -> Maybe (t, s) data Parser t a = forall s. Source s t => Parser (s -> [(a, s)]) sat :: (t -> Bool) -> Parser t t sat pred = Parser $ \source -> case get source of Just (t, source') | pred t -> [(t, source')] _ -> [] ---------------------- • No instance for (Source s0 t) arising from a use of ‘Parser’ • In the expression: Parser $ \ source -> case get source of Just (t, source') | pred t -> [...] _ -> [] In an equation for ‘sat’: sat pred = Parser $ \ source -> case get source of Just (t, source') | pred t -> ... _ -> ... | 10 | sat pred = Parser $ \source -> | ^^^^^^^^^^^^^^^^^^^... как-нибудь такое сделать можно? чтобы парсер работал с любым источником токенов?
Anatoly
добрый день, а можете подсказать, я хочу к существующей функции принимающий некоторый тип P разрешить еще принятие другого типа C, внутри преобразовать его к P и вызвать функцию для исходного типа P, пытался сделать как ad-hoc polymorphism, но не получилось
Anatoly
Оно имеет некоторую рекурсивную структуру, и в вызове для P в итоге может появиться вызов для С
Alexander
@sindb можешь написать типы участвующих функций?
Anatoly
такс, я понял что я дурак в другом месте
Anatoly
проще начать с другого конца
Anatoly
пытаюсь сделать "regexp" парсер
Anatoly
data Pattern = Lit Char -- "a" | Eps -- "" | Con Pattern Pattern -- "ab" | Uni Pattern Pattern -- "a|b" | Ite Pattern -- "a*" deriving Showхочется вот здесь Lit Char на просто Char заменить
Alexander
зачем?