본문 바로가기
개발/typescript, web

[21-07-08 개인스터디] fp-ts: semigroup

by 꾸루루 2021. 6. 27.

이론적으로 나에게 가장 도움이 된 글은 이 글이였다.

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