Не совсем понимаю `F (1A) = 1F (A) ∀ A ∈ C1 ' как закон функтора
Я читаю эту статью о категории и Функторе в scala: https://hseeberger.wordpress.com/2010/11/25/introduction-to-category-theory-in-scala/
В этой части:
Для сохранения структуры категорий это отображение должно сохранять карты идентичности и композиции. Более формально:
F (1 A) = 1F (A) ∀ A ∈ C1
F (g ο f) = F (g) ο F (f) ∀ f: A → B, g: B → C, где A, B, C ∈ C1
I не могу хорошо понять о: F(1 A) = 1F (A)
Почему правая часть равна 1 F (A) , а не F(A)
?
Я вижу в других статьях закон тождества для функтора:
fa.map(a => a) == fa
Который не относится к 1 F (A)
2 ответа:
Я думаю, что вы путаетесь в том, что представляет собой нотация.
1A представляет собой стрелку идентичности, которая является просто стрелкой / отображением от объекта A в категории к себе, т. е. A -> A.
Аналогично, 1F (A) представляет собой тождественный функтор, который является просто стрелкой от функтора F(A) к самому себе, т. е. F(A) -> F(A).
Поэтому стрелка 1 F (A) не совпадает с функтором F (A), и поэтому было бы неверно говорить, что 1F (A) = F(A) как ты и предлагаешь.Чтобы ответить на ваш вопрос, почему F (1 A) = 1F (A) , рассмотрим следующее В свете приведенного выше объяснения:
F (1 A ) = F(f : A - > A) = F (f) : F (A) - > F (A) = 1F (A)
Кроме того, теперь, когда мы прояснили значение обозначения, фрагмент кода согласуется с определением функтора:
fa.map(a => a) == fa
Таким образом, вы можете видеть, что в теории категорий есть понятие стрелки и объекта, которое вы должны уметь различать и понимать, глядя на обозначения. Я настоятельно рекомендую прочитать первую главутеории категорий Стива Аводи , Если вы действительно заинтересованы в этом предмете.
fa
является функтором, и карта использует функцию идентификации, чтобы сопоставить каждый элемент функтора самому себе. Этот воспроизводит функтор, эквивалентный исходному функторуfa
, и поэтому отображение может быть представлено как 1 F(A) на языке теории категорий.
Если A-объект в исходной категории, то F(A) - соответствующий объект в новой категории. Если в исходной категории имеется стрелка A->B, то в новой категории должна быть соответствующая стрелка F(A)->F(B). Поскольку 1 A-это просто стрелка A->A, это означает, что должна быть также стрелка F(A) - >F(A), которая была бы записана 1 F(A). Более компактно, F (1A) = 1F (A) .