60
задан 6 May 2019 в 03:06

3 ответа

Делает он имеет в виду, Строка типа данных и Интервал являются моноидом.

Никакой , ни String, ни Int моноиды. Моноид является с 3 кортежами (S, ⊕ e) , где ⊕ бинарный оператор ⊕: S× S → S, такой это для всех элементов a, b, c∈ S это содержит это (a⊕ b) ⊕ c=a⊕ (b⊕ c) , и e∈ S является "нейтральным элементом", таким образом что a⊕ e=e⊕ a=a. String и Int типы, так в основном множества значений, но не 3 кортежа.

в статье говорится:

Позволяют нам взять String конкатенация и Int дополнение как пример моноиды , которые имеют отношения.

, Таким образом, автор ясно также упоминает бинарных операторов ((++) в случае String, и (+) в случае Int). Идентификационные данные (пустая строка в случае [1 110] и 0 в случае [1 112]) оставляют неявными; при отъезде идентификационных данных, поскольку осуществление для читателя распространено в неофициальном английском дискурсе.

Теперь, учитывая, что у нас есть две структуры моноида (M, ⊕ e m) и (N, ⊗ en) , функция f: M → N (как [1 113]) затем называют , гомоморфизм моноида [Wiki] , учитывая его содержит тот f (m1⊕ m2) =f (m1) ⊗ f (m2) для всех элементов m1, m2∈ M и что отображение также сохраняет нейтральный элемент: f (e m) =en.

, Например length :: String -> Int гомоморфизм моноида, так как мы можем рассмотреть моноиды (String, (++), "") и (Int, (+), 0) . Это содержит это:

  1. length (s1 ++ s2) == length s1 + length s2 (для всего String s s1 и s2); и
  2. length "" == 0.
72
ответ дан 1 November 2019 в 10:32

В разговорной речи гомоморфизм является функцией, которая сохраняет структуру. В примере эти length функционируют, сохраненная структура является суммой длин к строкам, являющимся равным продолжительности конкатенации тех же строк. И начиная со строки и начиная с целые числа могут рассматриваться как моноиды (при оборудовании идентификационными данными и ассоциативная бинарная операция, подчиняющаяся законам о моноиде) length, назван гомоморфизмом моноида.

См. также другие ответы для более технического объяснения.

2
ответ дан 1 November 2019 в 10:32

Тип данных не может быть моноидом самостоятельно. Для моноида Вам нужен тип данных T и еще две вещи:

  • ассоциативная бинарная операция , давайте назовем его |+|, который берет два элемента типа T и производит элемент типа T
  • нейтральный элемент из типа T, давайте назовем его i, таким, что для каждого элемента t из типа T следующее содержит: t |+| i = i |+| t = t

Вот некоторые примеры моноида:

  • набор целых чисел с операцией = дополнение и идентификационные данные = нулевой
  • набор целых чисел с операцией = умножение и идентификационные данные = один
  • набор списков с операцией = добавление и идентификационные данные = пустой список
  • набор строк с операцией = конкатенация и идентификационные данные = пустая строка

гомоморфизм Моноида

моноид Конкатенации строк может быть преобразован в целочисленный дополнительный моноид путем применения .length ко всем его элементам. Оба тех набора формируют моноид. Между прочим, помните, что мы не можем только сказать, что "набор целых чисел формирует моноид"; мы должны выбрать ассоциативную операцию и соответствующий нейтральный элемент. Если мы берем, например, подразделение в качестве операции, мы нарушаем первое правило (вместо того, чтобы произвести элемент целого числа типа, мы могли бы произвести элемент типа, плавающего/двойного).

Метод length позволяет нам идти от моноида (конкатенация строк) к другому моноиду (целочисленное дополнение). Если такая операция также сохраняет структуру моноида, это считается гомоморфизм моноида .

Сохранение средств структуры:

length(t1 |+| t2) = length(t1) |+| length(t2)

and

length(i) = i'

то, где t1 и t2 представляют элементы "исходного" моноида, i, является идентификационными данными "исходного" моноида, и i' идентификационные данные "целевого" моноида. Можно попробовать его сами и видеть, что length действительно сохраняющая структуру операция на моноиде конкатенации строк, в то время как, например, indexOf("a") не.

изоморфизм Моноида

, Как продемонстрировано, length карты все строки к их соответствующим целым числам и формам моноид с дополнением как операция и нуль как идентификационные данные. Но мы не можем возвратиться - для каждой строки, мы можем выяснить ее длину, но, учитывая длину мы не можем восстановить "исходную" строку. Если мы могли, то операция "продвижения", объединенного с операцией "возвращения", сформируется изоморфизм моноида .

Изоморфизм означает способность пойти назад и вперед без любой потери информации. Например, столь же установленный ранее, список формирует моноид при добавлении как операция и пустой список как нейтральный элемент. Мы могли пойти из "списка при добавлении" моноида к "вектору при добавлении" моноида и назад без любой потери информации, что означает, что операции .toVector и .toList вместе формируют изоморфизм. Другой пример изоморфизма, который Runar, упомянутый в его тексте, String вџ · List[Char].

19
ответ дан 1 November 2019 в 10:32

Другие вопросы по тегам:

Похожие вопросы: