Denis
Алексей
Я правда не понимаю что такое экспериментальная математика и какие эксперименты они ставят
Denis
CS это не математика, но есть пересечения
Зигохистоморфный
Алексей
Я не вполне твердо знаю предмет CS, но вычислимость & Со - самая что ни на есть математика
Alexander
Тогда вот вам экспериментальная математика (по моему разумению): доказать, что игра "Жизнь" полна по Тьюрингу.
Alexander
И это было сделано построением машины Тьюринга, но не формальными методами
parket
Alexander
Алексей
Доказывается, полагаю, конструированием машины Тьюринга или чем-то похожим. Где эксперимент?
parket
https://codegolf.stackexchange.com/questions/11880/build-a-working-game-of-tetris-in-conways-game-of-life
Alexander
Alexander
Alexander
Да. Меня крайне поразила в свое время игра Жизнь внутри игры Жизнь, а здесь они пошли еще дальше.
Alexander
Если понимать задачу вычислимости как задачу поиска Тьюринг-полных систем, то математикой (экспериментальной), внезапно, оказывается и исследование компьютерных игр, таких как Dwarf Fortress, Factorio, Minecraft, и парочки других. Они все Тьюринг-полные (впрочем, про Майнкрафт и Факторио это неудивительно).
Alexander
Удивительно то, что в DF и Факторио Тьюринг-машину, а лучше сказать - логические вентили - можно построить несколькими принципиально разными способами.
parket
Если понимать задачу вычислимости как задачу поиска Тьюринг-полных систем, то математикой (экспериментальной), внезапно, оказывается и исследование компьютерных игр, таких как Dwarf Fortress, Factorio, Minecraft, и парочки других. Они все Тьюринг-полные (впрочем, про Майнкрафт и Факторио это неудивительно).
Я думал задача вычислимости, это определение проблем, которые решаемы в рамках тьюринг-полных систем.
Alexander
кана
что делает Sub?
кана
он как-то превращает Bool ~R# Bool в Bool ~R# a
в nokinds писали, что в конструкторах хранится a ~ Bool, например, но по факту туда передается сразу Bool ~ Bool при конструировании, как тогда Sub работает
Alexander
Я думал задача вычислимости, это определение проблем, которые решаемы в рамках тьюринг-полных систем.
Но, допустим, ты нашел новый способ построить вычислительную систему, эквивалентную машине Тьюринга. И с ее помощью смог показать, например, что P!=NP. Тогда можно говорить, что вокруг вычислимости много задач, и часть из них, вероятно, может быть решена вот такими нестандартными подходами.
Aliester
CS похож на дискретку
Aliester
такое же собрание методов решения и экспериментов
Alexander
Но, допустим, ты нашел новый способ построить вычислительную систему, эквивалентную машине Тьюринга. И с ее помощью смог показать, например, что P!=NP. Тогда можно говорить, что вокруг вычислимости много задач, и часть из них, вероятно, может быть решена вот такими нестандартными подходами.
Хотя сразу оговорюсь, мои слова могут идти вразрез с общепринятым, так как я не специалист
Aliester
которое презирают теоретические матетматики
Aliester
континуальная математика имеет много теории, которая много где обогнала адопшн в других областях
Aliester
а у дискретной что-то пока нет истовых теоретиков для теории всего
кана
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 пилить
Aλexander
Математика университетского уровня в жизни не нужна. И почти не нужна программистам. Однако математика ценна сама по себе, как интеллектуальная игра, не хуже шахмат или го. К сожалению, преподаватали поганят этот предмет, превращая его из интеллектуальной игры в бессвязный материал, который требуется тупо выучить.
Не мог обойти стороной. Нужна, программистам, но не вся математика. Я сейчас учусь в универе, и читая чатик теорката или завтипов, ловлю стыд от того, что некоторых вещей не понимаю, хотя в универе проходил.
Oleg
Зигохистоморфный
Dmitrii
Alexander
кана
Aλexander
кана
data IntOrBoolTagged (a :: k) where
TInt :: Int -> IntOrBoolTagged String
TBool :: Bool -> IntOrBoolTagged Bool
TMaybe :: IntOrBoolTagged Maybe
ну и сейчас же так можно
кана
это 8.2.2
Alexander
Во всяком случае, больше знать никогда не плохо.
Если тебе твой мозг это позволяет, то да, безусловно. Есть люди с удивительной памятью, которые однажды изучив, могут воспроизвести в любой момент. Я бы хотел такую память иметь, но увы. Из памяти уходит все, что неиспользуется, и очень быстро.
кана
кана
так
кана
а в чем разница между ними
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 ->
| ^^^^^^^^^^^^^^^^^^^...
как-нибудь такое сделать можно?
чтобы парсер работал с любым источником токенов?
Artem
{-# 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 ->
| ^^^^^^^^^^^^^^^^^^^...
как-нибудь такое сделать можно?
чтобы парсер работал с любым источником токенов?
Чтобы работать с любым типом входного потока нужна не экзистенциальная квантификация, а обычная, универсальная (параметрический полиморфизм). Тут было сделано то, что вы хотите, только не на монадных трансформерах, а на расширяемых эффектах
https://github.com/geo2a/ext-effects-parsers/blob/master/src/Parsers.hs
Anatoly
добрый день, а можете подсказать, я хочу к существующей функции принимающий некоторый тип P разрешить еще принятие другого типа C, внутри преобразовать его к P и вызвать функцию для исходного типа P, пытался сделать как ad-hoc polymorphism, но не получилось
Dmitrii
Anatoly
Оно имеет некоторую рекурсивную структуру, и в вызове для P в итоге может появиться вызов для С
parket
Alexander
@sindb можешь написать типы участвующих функций?
Artem
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
зачем?