Не совсем понимаю `F(1A) = 1F(A) ∀ A ∈ C1` как закон функтора

Я читаю эту статью о категории и функторе в scala: https://hseeberger.wordpress.com/2010/11/25/introduction-to-category-theory-in-scala/

В этой части:

Чтобы сохранить структуру категорий, это отображение должно сохранять карты идентичности и композиции. Более формально:

F(1A) = 1F(A) ∀ A ∈ C1

F(g ο f) = F(g) ο F(f) ∀ f: A → B, g: B → C, где A, B, C ∈ C1

Я плохо понимаю: F(1A) = 1F(A)

Почему правая часть 1F(A), а не F(A)?

Я вижу в других статьях закон тождества для Functor:

fa.map(a => a) == fa

Что не относится к 1F(A)


person Freewind    schedule 12.09.2015    source источник
comment
1 кажется, это имя для функции идентификации   -  person Bergi    schedule 12.09.2015


Ответы (2)


Я думаю, вы смущены тем, что представляет собой обозначение.

1A представляет стрелку идентификации, которая является просто стрелкой/сопоставлением объекта A в категории с самим собой, то есть A -> A.

Точно так же 1F(A) представляет тождественный функтор, который является просто стрелкой от функтора F(A) к самому себе, т.е. F(A) -> F(A).

Следовательно, стрелка 1F(A) не совпадает с функтором F(A), поэтому было бы неправильно говорить, что 1F(A) = F (А) как вы предлагаете.

Чтобы ответить на ваш вопрос, почему F(1A) = 1F(A), рассмотрите следующее в свете приведенного выше объяснения:

F(1A) = F(f : A -> A) = F(f) : F(A) -> F(A) = 1F(A)

Также теперь, когда мы прояснили значение обозначений, фрагмент кода согласуется с определением функтора:

fa.map(a => a) == fa

fa — это функтор, и карта использует функцию идентификации для сопоставления каждого элемента функтора с самим собой. Это воспроизводит функтор, который эквивалентен исходному функтору fa, и поэтому отображение может быть представлено как 1F(A) на языке теории категорий.

Итак, вы можете видеть, что в теории категорий есть понятие стрелки и объекта, которые вы должны уметь различать и понимать, глядя на обозначения. Я настоятельно рекомендую прочитать первую главу Теория категорий Стива Авуди, если вам действительно интересна эта тема.

person M.K.    schedule 12.09.2015
comment
@IK, спасибо, теперь я правильно понимаю? Если F — функтор, F(f: A=>B) должно быть F(A) => F(B). Если A==B, слева F(A=>A) = F(1<sub>A</sub>), а справа F(A)=>F(A) = 1<sub>F(A)</sub>,, поэтому F(1<sub>A</sub>)==1<sub>F(A)</sub> - person Freewind; 13.09.2015
comment
Давайте проясним, что может быть много функций (в общем случае морфизмов) из A в A и много функций из F(A) в F(A). Но всегда есть одна функция тождества от A до A и одна функция тождества от F(A) до F(A). Функтор F должен отображать первое во второе. Я написал сообщение в блоге о функторах, если вам интересно. - person Bartosz Milewski; 13.09.2015

Если A — объект в исходной категории, то F(A) — соответствующий объект в новой категории. Если в исходной категории есть стрелка A->B, то в новой категории должна быть соответствующая стрелка F(A)->F(B). Поскольку 1A — это просто стрелка A->A, это означает, что должна быть и стрелка F(A)->F(A), которая будет записана как 1F(A ). Более компактно, F(1A) = 1F(A).

person chepner    schedule 12.09.2015