Интересные операторы в Haskell, подчиняющиеся модальным аксиомам

Я просто смотрел на тип map :: (a -> b) -> [a] -> [b], и сама форма этой функции заставила меня задуматься, можем ли мы видеть, что оператор формирования списка [] подчиняется различным аксиомам, общим для нормальной модальной логики (например, T, S4, S5, B), поскольку у нас, кажется, есть по крайней мере K-аксиома нормальной модальной логики с [(a -> b)] -> [a] -> [b].

Это приводит к моему вопросу: есть ли в Haskell знакомые, интересные операторы или функторы, которые имеют синтаксис модальных операторов определенного типа и подчиняются аксиомам, общим для нормальной модальной логики (т. Е. K, T, S4, S5 и B )?

Этот вопрос можно обострить и конкретизировать. Рассмотрим оператор L и его двойственный M. Теперь возникает вопрос: есть ли в Haskell какие-нибудь знакомые, интересные операторы с некоторыми из следующих свойств:

(1) L(a -> b) -> La -> Lb

(2) La -> a

(3) Ma -> L(M a)

(4) La -> L(L a)

(5) a -> L(M a)

Было бы очень интересно увидеть несколько хороших примеров.

Я придумал потенциальный пример, но было бы хорошо знать, прав ли я: перевод двойного отрицания с L как not not и M как not. Этот перевод переводит каждую формулу a в ее перевод двойного отрицания (a -> ⊥) -> ⊥ и, что особенно важно, проверяет аксиомы (1) - (4), но не аксиому (5). Я задал вопрос здесь https://math.stackexchange.com/questions/2347437/continuations-in-matMathematics-nice-examples, и кажется, что перевод двойного отрицания можно смоделировать с помощью монады продолжения, эндофунктор переводит каждую формулу a в ее перевод двойного отрицания (a -> ⊥) -> ⊥. Там Дерек Элкинс отмечает существование пары переводов двойного отрицания, соответствующих через изоморфизм Карри-Ховарда различным преобразованиям стиля передачи продолжения, например Колмогорова соответствует преобразованию CPS по имени.

Возможно, есть другие операции, которые могут быть выполнены в монаде продолжения через Haskell, что может подтвердить аксиомы (1) - (5).


(И чтобы исключить один пример: между так называемой логикой Слабости https://www.sciencedirect.com/science/article/pii/S0890540197926274 и Monads в Haskell, при этом операция возврата подчиняется законам модального оператора этой логики (который является эндофунктором). Меня это не интересует. много в этих примерах, но в примерах операторов Haskell, которые подчиняются некоторым аксиомам модальных операторов в классической нормальной модальной логике)


person user65526    schedule 13.03.2018    source источник
comment
Это не мусор, это просто список функций, отображающих as в bs.   -  person Willem Van Onsem    schedule 13.03.2018
comment
Я не знаю, в чем заключается ваш вопрос, но [a -> b] -> [a] -> [b] - это тип (<*>), специализированный для [] экземпляра Applicative.   -  person Rein Henrichs    schedule 13.03.2018
comment
У нас есть (<*>) :: [a -> b] -> [a] -> [b], а также для модальности функции у нас есть (<*>) :: (e -> (a -> b)) -> (e -> a) -> (e -> b), который является хорошо известным комбинатором K. Вероятно, это просто совпадение, что они разделяют имя К. ;-)   -  person Daniel Wagner    schedule 13.03.2018
comment
@DanielWagner Также вероятно совпадение, что эти совпадения продолжают появляться повсюду.   -  person Rein Henrichs    schedule 13.03.2018
comment
Подчиняется ли оператор <*> какой-либо другой аксиоме нормальной модальной логики?   -  person user65526    schedule 13.03.2018
comment
Вот его законы.   -  person Rein Henrichs    schedule 13.03.2018
comment
Подчиняются ли другие операторы в Haskell другим аксиомам, общим для нормальной модальной логики. Например, аксиома T, аксиома S4, аксиома S5 и т. Д.?   -  person user65526    schedule 13.03.2018
comment
О слишком большом количестве близких голосов: FWIW, я не считаю, что этот вопрос следует закрывать. Он сформулирован довольно умозрительно (вероятно, из-за незнания OP с Haskell, о котором упоминалось в первоначальной редакции вопроса); однако, по сути, возникает довольно разумный вопрос о том, имеют ли классы функторов какое-либо отношение к модальным операторам.   -  person duplode    schedule 13.03.2018
comment
L конечно же выглядит как комонада, но не уверен, что это M было бы навскидку. Но, например, известные комонады, такие как непустые списки a, пары (w,a) подойдут.   -  person luqui    schedule 14.03.2018
comment
Итак, extract похож на (2) выше (аксиома T в модальной логике), duplicate похож на (4) (аксиома S4). Простой пример оператора для (3) потребует M для обозначения False и L для обозначения Truth, и эта интерпретация (очевидно) работает для некоторых других примеров.   -  person user65526    schedule 14.03.2018
comment
Известные комонады, такие как непустые списки a, пары (w,a), чего бы удовлетворили, извините?   -  person user65526    schedule 14.03.2018
comment
Вам обязательно стоит прочитать Как быстро исправить на Comonads, в котором говорится о (ограниченном использовании) ComonadApply для некоторых модальная логика.   -  person dfeuer    schedule 14.03.2018
comment
Действительно очень интересно! Однако это все еще не помогает с аксиомами (3) и (5) в моем вопросе. Я придумал потенциальный пример: перевод двойного отрицания с L как not not и M как not подтверждает все вышеприведенные аксиомы. Я задал этот вопрос здесь, math.stackexchange.com/ questions / 2347437 /, в которых я утверждал, что перевод двойного отрицания был примером монады продолжения. Эндофунктор в этом случае будет переводить каждую формулу a в свой перевод двойного отрицания (a -> ⊥) -> ⊥.   -  person user65526    schedule 14.03.2018
comment
Вы уверены насчет (5)? Если L - нет, а M - нет, это дало бы a -> not (not (not a)), что кажется неприятным прикосновением.   -  person pigworker    schedule 14.03.2018
comment
Ах, извините, моя ошибка. Очевидно, что это не выполняется (5)!   -  person user65526    schedule 14.03.2018
comment
Может ли кто-нибудь придумать какие-либо другие примеры продолжений, которые подчиняются некоторым аксиомам (1) - (5)?   -  person user65526    schedule 14.03.2018
comment
Да, повторяя то, что люди уже сказали, мое первое впечатление здесь таково: MMonad и LComonadApply (# 1: (Applicative f) => f (a -> b) -> f a -> f b; # 2: extract :: (Comonad f) => f a -> a; # 4: duplicate :: (Comonad f) => f a -> f (f a)) или, возможно, MonadTrans (# 3: lift :: (MonadTrans t, Monad m) => m a -> t (m a); # 5: instance (MonadTrans t, Monad m) => Monad (t m) where return :: a -> t (m a)). Но я действительно работал только с эпистемической модальной логикой (□ = «заведомо истинно», ◇ = «заведомо не ложно»), не слишком знаком с модальной логикой в ​​целом.   -  person Jon Purdy    schedule 15.03.2018
comment
Комонады подчиняются аксиоме T (my (1)), аксиоме S4 (my (4)). Подчиняются ли комонады аксиоме K (my (1))? То есть делает (Applicative f) => f (a -> b) -> f a -> f b, когда f - комонада? Если это так, то оператор Comonadic синтаксически ведет себя как оператор необходимости модальной логики S4 (модальная логика, взаимно переводимая с интуиционистской логикой через знаменитый перевод Гёделя). Подчиняются ли монадные преобразователи какой-либо из других аксиом, перечисленных в моем вопросе?   -  person user65526    schedule 15.03.2018
comment
Хм, К, Т, С4, С5 в норме ...   -  person Stanislav Kralin    schedule 18.03.2018
comment
Я хотел писать нормально, но в моей голове были необычные модальные логики, я только что прочитал о них книгу!   -  person user65526    schedule 19.03.2018
comment
@DanielWagner <*> - это комбинатор S, а не K.   -  person Will Ness    schedule 03.10.2018
comment
@WillNess Ой, ты абсолютно прав!   -  person Daniel Wagner    schedule 03.10.2018


Ответы (1)


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


Модальный оператор в пропозициональной слабой логике (PLL) является аналогом Карри-Ховарда конструкторов типа Monad. Обратите внимание на соответствие между его аксиомами ...

DT: x -> D x
D4: D (D x) -> D x
DF: (x -> y) -> D x -> D y

... и типы return, join и fmap соответственно.

Валерия де Пайва опубликовала ряд статей, в которых обсуждаются интуиционистские модальные логики и, в частности, ФАПЧ. Замечания о ФАПЧ здесь в значительной степени основаны на Alechina et. др., Категориальная семантика и семантика Крипке для конструктивной модальной логики S4 (2001). Интересно, что в этой статье приводятся доводы в пользу того, что ФАПЧ менее странная, чем может показаться на первый взгляд (см. Fairtlough и Mendler, Propositional Lax Logic (1997):" Как модальная логика она особенная, потому что в ней есть один модальный оператор [ ...], в котором есть как возможность, так и необходимость "). Начиная с CS4, версия интуиционистского S4 без распределения возможностей по дизъюнкции ...

B stands for box, and D for diamond

BK: B (x -> y) -> (B x -> B y)
BT: B x -> x
B4: B x -> B (B x)

DK: B (x -> y) -> (D x -> D y)
DT: x -> D x
D4: B (B x) -> B x

... и добавление x -> B x к нему приводит к тому, что B становится тривиальным (или, на языке Haskell, Identity), упрощая логику PLL. При этом ФАПЧ можно рассматривать как частный случай варианта интуиционистского S4. Кроме того, он представляет D ФАПЧ как возможный оператор. Это интуитивно привлекательно, если мы возьмем D как аналог Haskell Monads, который часто имеет привкус возможностей (рассмотрите Maybe Integer - "Здесь может быть Integer" - или IO Integer - "Я получу Integer, когда программа выполняется ").


Еще несколько возможностей:

person duplode    schedule 03.10.2018