scalabook

Форк
0
/
semigroup.md 
121 строка · 3.9 Кб

Semigroup, Monoid и Group

Самые основные классы алгебраических типов, поддерживаемые Spire, включают один ассоциативный бинарный оператор (называемый op

и представленный как |+|
): Операции варьируются от сложения и умножения до объединения строк или списков и не только!

Полугруппа

Semigroup

:

  • op
    (|+|
    ): ассоциативная бинарная операция
import spire.algebra.Semigroup
import spire.syntax.semigroup.*
1 |+| 2 // 3
("hello", 123) |+| ("world", 321) // ("helloworld",444)
Semigroup.combineN(3, 5) // 15

Моноид

Monoid

- полугруппа, которая также имеет единичный элемент id
. Monoid
расширяет Semigroup
.

  • id
    : единичный элемент моноида
  • isId
    : проверка на равенство единичного элемента (вместе с Eq
    )
1 |+| Monoid.empty[Int] // 1
Monoid.isEmpty(Monoid.empty[Int])

Группа

Group

- моноид, который также имеет обратную операцию (inverse
или |-|
). Group
расширяет Monoid
.

  • inverse
    : унарный оператор
import spire.algebra.Group
import spire.syntax.group.*
1.inverse // -1
1 |+| 1.inverse // 0

Коммутативная полугруппа

CSemigroup[A]

- полугруппа, которая является коммутативной.

import spire.algebra.CSemigroup
CSemigroup.combine(1, 2) == CSemigroup.combine(2, 1)

Коммутативный моноид

CMonoid[A]

- моноид, который коммутативен.

import spire.algebra.CMonoid
CMonoid.combine(100, CMonoid.empty[Int]) // 100

Абелева группа

AbGroup[A]

- "абелева группа", группа, которая является коммутативной.

import spire.algebra.AbGroup
AbGroup[Int].inverse(1) // -1

Действия

(Left/Right/)Action[P, G]

- действия влево/вправо для полугрупп/моноидов/групп

import spire.algebra.*
import spire.syntax.action.*
import spire.syntax.group.*
given LeftAction[Int, String] with
def actl(g: String, p: Int): Int =
g.toIntOption.getOrElse(0) - p
given RightAction[Int, String] with
def actr(p: Int, g: String): Int =
g.toIntOption.getOrElse(0) - p
"100" |+|> 10 // 90
10 <|+| "100" // 90

Описание

Большинство типов имеют множество возможных реализаций этих классов типов. В этих случаях Spire требует от пользователей явного выбора желаемой реализации.

Spire также определяет две параллельные иерархии групп для аддитивных и мультипликативных групп. Они имеют одинаковые свойства, но разные имена и символы. В следующем списке представлены общие, аддитивные и мультипликативные варианты:

  • операторный метод: op
    , plus
    , times
  • символ оператора: |+|
    , +
    , *
  • единичный элемент: id
    , zero
    , one
  • обратный метод: inverse
    , negate
    , reciprocal
  • обратный символ: inverse
    , -
    (унарный), reciprocal
  • обратный бинарный оператор: |-|
    , -
    (двоичный), /

Ссылки:

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.