Size: a a a

Теория категорий

2019 September 24

NI

Nick Ivanych in Теория категорий
Если использовать слово "пучок" для чего-то, кроме пучков ;-), то на мой взгляд, следует это специально пояснять.
источник

NI

Nick Ivanych in Теория категорий
Однако, "(co)fibration object" часто просто транскрибируют, как "(ко)фибрантный объект".
Можно открыть какие-нибудь "методы гомологической алгебры" и вспомнить, как там.
источник

O

Osman in Теория категорий
Евгений Омельченко
На днях в хаскеляч залетел фанат Idris'а. Замечу, что любые попытки построить тьюринг-полный язык с тотальным подмножеством, основанном на MLTT, должны вызывать справедливый интерес haskell-коммьюнити, а чаты по идрису и хаскелю в значительной мере пересекаются. Естественно в дискуссии всплывал вопрос о целесообразности ленивой стратегии редукции. Кроме стандартных аргументов в духе "это сложно и не нужно" всплыл ещё один, претендующий на объективность и достоверность.
 Утверждалось, что ленивая стратегия редукции -- основная причина сложности построения денотационной семантики хаскеля, основанной на теории категорий. Но так ли это?
 По языку программирования мы хотим построить такую категорию, что каждому типу будет соответствовать объект категории, а каждой функции из A в B -- соответствующую стрелку. При этом мы хотим, чтобы функциям f,g :: A-> B соответствовали одинаковые стрелки тогда и только тогда, когда для любого a из A f(a) = g(a)
 Сложность наступает как только мы берём тьюринг-полный язык. Ведь далеко не все функции останавливаются! Как приравнять функции, которые работают бесконечно долго? Есть два выхода из этой ситуации. Оба работают только для языков с энергичной редукцией. Первый -- просто выкинуть нетотальные функции из категории, сделать вид что их просто нет. Естественно при этом теряется всякая доказательная сила рассуждений об этом языке с помощью теории категорий, ведь о частичных функциях мы не может сказать вообще ничего.
Второй -- "добавить" внутрь типа специальный элемент _|_ и сказать, что дополнить f(a) = _|_, если она f(a) не останавливается. Так мы получим корректное равенство на стрелках, но что будет, если мы начнём над этой категорией рассматривать эндофункторы и интерпретировать их в терминах computer science? Ничего хорошего: ведь мы можем легко переводить тотальные функции в нетотальные и наоборот, информация о том кто из них кто абсолютно теряется. Мы столкнулись с той же проблемой, что и в первом случае, но подошли с ней с другой стороны.
Резюмируя: корректной категориальной денотационной семантики не может быть ни у одного тьюринг-полного языка. Но что же делать со всеми наработками в этой области? Ведь на практике они работают. Чуть позже я постараюсь сделать наброски ответа на него
А если говорить о некоторой подкатегории категории частично определённых функций на множествах и о функторах сохраняющих полную определенность (или даже сохраняющих мощность области определения)? Чем это плохо?
источник

O

Osman in Теория категорий
Берём дуальную получается подкатегория Rel, правда надо будет отличать функции от отношений,  для этого там есть структура  framed bicategory. И вроде бы даже получается, что чисто алгебраически можно все охарактеризовать. Я правда далёк об этой темы, могу и ошибаться, но навскидку ничего невыполнимого...
источник

ЕО

Евгений Омельченко in Теория категорий
Osman
А если говорить о некоторой подкатегории категории частично определённых функций на множествах и о функторах сохраняющих полную определенность (или даже сохраняющих мощность области определения)? Чем это плохо?
Это может работать для строго языка, но не очень подходит для ленивого. Например как отличить [0..] от [1..]? Очевидно, что это разные стрелки :: 1 -> [Int], но при этом они нигде не останавливаются. Нигде не определённая частиная функция в любом случае одна, поэтому [0..] и [1..] будут обозначаться одной стрелкой. При этом head [0..] и head [1..] это тотальные функции и они разные
источник

ЕО

Евгений Омельченко in Теория категорий
На самом деле вы пытаетесь решить проблему над которой Дана Скотт бился в конце 60'ых годов и у которой есть только одно адекватное решение — домены Скотта
источник

O

Osman in Теория категорий
Евгений Омельченко
На самом деле вы пытаетесь решить проблему над которой Дана Скотт бился в конце 60'ых годов и у которой есть только одно адекватное решение — домены Скотта
Не, я только спрашиваю. Говорю же ничего не понимаю в этом 😀
источник

AZ

Alex Zhukovsky in Теория категорий
Considering that 𝐹 𝑎 is the same as 𝐺𝑎 and 𝐹 𝑏 is the same as 𝐺𝑏,
the whole trip can be described as: 𝐺𝑓 ∷ (𝑏 → 𝑎) → (𝐺𝑎 → 𝐺𝑏)
It’s a “functor with a twist.” A mapping of categories that inverts the
direction of morphisms in this manner is called a contravariant functor.
источник

AZ

Alex Zhukovsky in Теория категорий
как из b -> a -> (ga -> gb) можно получить что-то полезное?
источник

KV

Kirill Valyavin in Теория категорий
Alex Zhukovsky
как из b -> a -> (ga -> gb) можно получить что-то полезное?
a -> b для фиксированного b — контравариантный функтор, например
источник

KV

Kirill Valyavin in Теория категорий
Можно представить себе какие нибудь предикаты a -> Bool для фильтров
источник

AZ

Alex Zhukovsky in Теория категорий
К сожалению не понял примера
источник

KV

Kirill Valyavin in Теория категорий
Alex Zhukovsky
К сожалению не понял примера
Haskell> import Data.Functor.Contravariant
Haskell> myOdd = getPredicate $ contramap (+1) (Predicate even)
Haskell> myOdd 1
True

Так лучше?
источник

AZ

Alex Zhukovsky in Теория категорий
Пока не очень. Пойду сигнатуру contramap читать
источник

KV

Kirill Valyavin in Теория категорий
Ну по сути  b -> a -> (ga -> gb) и есть
источник

AZ

Alex Zhukovsky in Теория категорий
ну да, сигнатура та же
источник

AZ

Alex Zhukovsky in Теория категорий
пока мои хачкель-скиллы не настолько круты. Спасибо, буду пытаться дальше понять
источник

AZ

Alex Zhukovsky in Теория категорий
я так понимаю это \x even (x+1)
источник

KV

Kirill Valyavin in Теория категорий
Alex Zhukovsky
пока мои хачкель-скиллы не настолько круты. Спасибо, буду пытаться дальше понять
Да ладно, разговор-то не про хаскель. Просто берётся предикат a -> Bool. Имея функцию b -> a, легко из него сделать предикат b -> Bool
источник

KV

Kirill Valyavin in Теория категорий
Alex Zhukovsky
я так понимаю это \x even (x+1)
Да
источник