이론적으로 나에게 가장 도움이 된 글은 이 글이였다.
https://www.johndcook.com/blog/2018/07/08/weak-groups/
Weak groups: semigroups, monoids, quasigroups, loops, etc.
Weakening the axioms of a group give a variety of other structures: associative or not, with or without identity elements, with or without division, etc.
www.johndcook.com
fp-ts에서 semigroup은 이 Magma의 instance 중 하나이다.
fp-ts에서 semigroup은 닫혀있는(closed) 이항 연산을 정의한다.
- 닫혀있다는 것은 임의의 군(group)G, f, g∈G, 임의의 연산 *라고 했을때 f * g = z에서 z는 z∈G 만족시킨다는 것이다.
- 예로 들자면 number인 군에 속하는 2, 3와, 임의의 연산 +를 했을때 2 + 3 = 5처럼 5도 number군에 속하는 것처럼 말이다.
fp-ts에서 semigroup은 semigroup이라는 군의 역할보다는 군에 대한 닫혀 있는 이항연산을 정의하는 것에 가깝다. 현대대수학에 나온 semigroup처럼 추상적이고 큰 개념까지 알 필요가 없다.
삼항연산부터는 정의할 의미가 없는 게, A + B + C 같은 연산은 일단 A + B 를 구한 뒤 거기다가 + C 를 하면 되기 때문에 결국엔 이항연산으로 환원된다.
a + b + c + d ... = z 라고 할때
(((a + b) + c) + d) ... 처럼 이항연산만으로 모든 항의 연산을 할 수 있다.
interface Semigroup<A> { readonly concat: (x: A, y: A) => A }
1. 결합법칙(Associativity)
- concat(x, concat(y, z)) = concat(concat(x, y), z)
2. 교환법칙(commutative)
- zx = xz
예)
a * (b * c) === (a * b) * c
a + (b + c) === (a + b) + c
나눗셈의 경우 괄호에 따라 결과가 달라지기 때문에 결합법칙을 통과하지 못한다.
ref)
https://book.naver.com/bookdb/book_detail.nhn?bid=15621769
알기 쉬운 추상 대수학
대칭은 자연의 근본원리를 이해하는 가장 유용한 도구이다. 하지만 그 개념에 내포된 고도의 추상성으로 인해 전공자조차 이해하기 어려운 것이라 오인되어 왔다. 대칭이 거대한 중요성에 비해
book.naver.com
내가 군에 대해 공부했던 것들 정리한 것...
https://www.notion.so/01f55ada5f6548b3a071275a984e03a7#24390b98ff6b4baa8eaa3beb5978e134
'개발 > typescript, web' 카테고리의 다른 글
[21-07-07 개인스터디] Domain class 기본 골격 고안 (1) | 2021.07.07 |
---|---|
[21-06-29 사내모각코] 컴포넌트 카테고라이징 예시 (0) | 2021.07.01 |
[21-06-27 개인스터디] fp-ts: Ord (0) | 2021.06.27 |
[21-06-23 사내모각코] pipeline에서 각 함수의 결과를 측정하여 처리할 수 있게 하는 작업 (0) | 2021.06.23 |
[21-06-18 개인스터디] fp-ts Eq 알아보기 + combinators pattern, contramap (0) | 2021.06.19 |