결합 법칙, 교환 법칙, 항등원, 합성

Posted on December 12, 2022

아래처럼 정리한 텍스트를 본 적은 없습니다. 뜬 구름 잡는 얘기일 수도 있고, 틀린 얘기일 수도 있습니다. 하지만, 저는 분명 아래 눈으로 이론, 패턴을 보거나, 설계를 할 때 편한 경우가 있었습니다.

결합 법칙

(a 연산 b) 연산 c = a 연산 (b 연산 c)

교환 법칙

a 연산 b = b 연산 a

항등원

id 연산 a = a
a 연산 id = a

2023-1-2 추가
아래는 “아무것도 안함” 요소가 왜 필요한가에, 대해 위와 같은 내용으로 얘기를 꺼냈을 때 받은 지적입니다.

오개념 위의 오개념

눈물나게 웃기다는 이모지도 붙어 있습니다. –; !

저의 이상해 보이는 의견들도 잘 받아 주시는 분들인데 이 번엔, 뭔가 많이 모자랐나 봅니다. 어디가 오개념인지 전혀 감이 안와 더 물어보고 싶지만, 분위기가 그렇게 안되어 블로그에라도 이어서 남깁니다. 분명 어딘가 오개념이 누적되고 있을 겁니다. 이런, 긴 질문은 할만한데가 별로 없습니다. 여기 글들에 전반적으로 적용될 말일 수도 있다는 생각에 캡처해 봤습니다.

“항등원은 추상화할 때 쓸 수 있는 도구다”

일반화는 특수화보다 더 많은 정보량을 채워 넣을 공간을 마련해 두고, 그 공간들을 일부 “아무것도 안함”으로 채워 특수화를 표현하곤 합니다. 이럴 때 아무것도 안함으로 항등원을 이용하게 된다는 의견을 올렸는데, “자기만의 해석에 빠진다”는 지적을 받았습니다. 하지만, 아직도 어느 부분을 잘 못 이해했는지 모릅니다.

“항등원은 ‘오직’ 추상화를 위해서만 존재한다”로 받아 들이게끔 제가 잘 못 전달한 것인가 아니면, “항등원”을 너무 informal하게 쓴 것인가 정도 추측하고 있습니다. 항등원이 있으려면 연산부터 정의해야 하는데, 전 일반화의 각 속성들이 나중에 어떤 연산, 동작과 만났을 때, 그 연산, 동작들에 대한 항등원을 의미했습니다.

반군semigroup에서 항등원이 추가되어 모노이드가 되면서 얻는 가장 큰 특징이, 가지고 있는 연산으로 모든 원소들을 표현할 수 있다고 생각했습니다. 예를 들어 자연수, 더하기 모노이드에서는 0이 있어, 00 + 0으로 11 + 0으로 표현할 수 있습니다. 만일, 항등원 0이 없다면 모두 더하기 연산으로 표현할 수 없습니다. 다시 말해 하나의 모양으로 추상화 할 수 없습니다. 그래서, 함수형에서는 모나드란 구조까지 가져오며, 기를 쓰고 모노이드 구조로 만드는구나로 추측하고 있습니다.

대화를 나눴던 여러 분들이 “오해”를 하고 있다고 하니, 분명 문제가 있는 의견일 겁니다. 정확한 이론으로 받아 들이진 마시기 바랍니다. 저의 상상일 뿐입니다. 그럼에도 글을 올리는 이유는, 틀리면 틀린대로 남아 있는 이야기를 더 이어 나갔으면 해서 입니다.

2023-11-29 추가
둘이 동형isomorphic이란(혹은 같다?) 걸 수학적으로 표현represent할 때 쓰입니다. Adjunction에선 둘이 isomorphic하다는 걸 식으로 표현하기 위해, 둘 사이에 존재하는 펑터 합성이 항등 펑터 Id와 같다는 걸 보이는 것으로 표현합니다.

-- C, D 카테고리. F: C -> D, G: D -> C 펑터
-- Id_C C에서 항등 펑터, Id_D D에서 항등 펑터
FG = Id_D, GF = Id_C

2023-12-05 추가
Q. 모나드에서 join이 연산이고, return이 항등원 역할을 하는 모노이드인데, returna -> m a로 아무 것도 안하는게 아니지 않나?
A. 항등원이 아무 것도 안하는 역할을 하는 건, 스스로, 혹은 혼자만이 아니라, “연산과 만났을 때” 아무 일도 안한다는 뜻입니다. 누군가가 가지고 있는 속성은 결국 어떤 오퍼레이션(연산), 함수를 만나서 그 성질이 드러납니다. 위 생각 스트레칭에 있는 절차에 아무것도 안함이라 넣어 놓은 항등원은 결국 만나게 될 어떤 오퍼레이션에 대한 항등원이란 뜻입니다. return도 마찬가지로 join을 만나는 걸 염두에 둔 동작을 해야 합니다. 타입 모양만 봐도 바로 보입니다. joinm을 줄이고 있으니, join이 아무 일도 못하게 하려면, (아무 일도 못한 것으로 만들어 버리려면) returnm을 늘려야 합니다. (+)가 항상 두 개의 정보를 필요로 하는데, 1은 하나의 정보니 여기에 0을 추가해 1+0으로 만드는 것처럼요.
항등원은 혼자서는 아무 의미도 없고, 꼭 파트너(오퍼레이션)가 누군지 알아야 의미가 생깁니다.

Q. 그냥 가만히 있는 속성도 있지 않나?
A. 화면에 Display되는(우리가 알게 되는) 속성은, 속성을 화면에 내보내 누군가가 보는 것이 오퍼레이션입니다. 웃긴 영화의 속성은, 우리에게 그 속성이 닿아 느끼기 전엔 아무 의미도 없습니다.

“속성은 반드시 누군가(함수)와 만나야 의미가 있습니다.”

합성

함수형 프로그래밍은 함수를 계속 합성해 가며 프로그램을 완성합니다. 단순히 작업의 연속성을 뜻하는 것 말고 다른 정보를 줄 때도 있습니다.

a -> bb -> d가 있고, 이 둘을 합성한 a -> d가 있고, f a -> f bf b -> f d가 있을 때, 펑터 f로 변환된 세계가 원래의 세계와 구조가 같다는 걸 보려면 f a -> f d가 있는지를 확인합니다. 합성도 보존이 된다면, 전체 구조가 보존된다로 이어집니다.

함수형에서 중요한 근간이 되는 이유일지도 모르겠습니다.

함수형은 마치, 하나의 세계를 구조가 같은 다른 세계로 표현하거나, 필요한 조건하에서는 같게 볼 수 있다거나 하는 것들을 계속 변환(혹은 매핑)하면서 완성해가는 모양입니다. 이 때 구조가 같음을 알려주는 장치로 볼 수 있습니다.

Github 계정이 없는 분은 메일로 보내주세요. lionhairdino at gmail.com