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
- обратный бинарный оператор:
|-|
,-
(двоичный),/
Ссылки: