# 半環とは

## 「足し算」と「かけ算」

半環(semiring)を一言でいうなら「『足し算』と『かけ算』」です。

かぎかっこがついているのが重要です。

条件を満たすものなら何でも「足し算」と「かけ算」にできるのです。

## そもそも足し算とかけ算って？

足し算とかけ算の特徴をおさらいしてみましょう。

1. 足し算の1つ目と2つ目の数を交換しても結果は同じ
例: 3 + 4 = 4 + 3 = 7
1. 0に何を足しても、何に０を足しても元の数のまま
例: 0 + 5 = 5 + 0 = 5
1. 3つの数を足す時、足す順序を変えても結果は同じ
例: (3 + 5) + 8 = 3 + (5 + 8) = 16 
1. 1に何をかけても、何に1をかけても元の数のまま
例: 1 × 8 = 8 × 1 = 8
1. 3つの数をかける時、かける順序を変えても結果は同じ
例: (3 × 5) × 8 = 3 × (5 × 8) = 120
1. 0に何をかけても、何に0をかけても０になる
例: 0 × 10000 = 10000 × 0 = 0
1. 2つの数を足した結果にある数をかけるのと、2つの数のそれぞれにある数をかけてからその足し算をするのは同じ
例: (2 + 5) × 3 = (2 × 3) + (5 × 3) = 21
## 半環の例(1): 足し算とかけ算

半環で最も有名なのが、小学校で習う(かぎかっこがつかない)足し算とかけ算でしょう。

上の例で示したとおり、足し算とかけ算は7つの条件を全て満たします。

「これ以外に足し算とかけ算なんてないだろ」って？

小学校ではそうだったかもしれません。しかし半環の世界では違います。

あなたが「これは『足し算』と『かけ算』だ」と宣言し、それが7つの条件を満たすなら、それが「足し算」と「かけ算」なのです。

足し算とかけ算以外の半環の例として、トロピカル代数 (Tropical Algebra) を紹介しましょう。

## 半環の例(2): トロピカル代数

### 「足し算」min

トロピカル代数の「足し算」は min です。これは2つの数のうちで小さい方を取る、という意味です。
例: min(3, 5) = 3

### 「かけ算」+

トロピカル代数の「かけ算」は + です。

え？「 + は足し算じゃないか」って？ それは小学校の中での話です。

ここでは「これをかけ算とする」と宣言すればそれがかけ算なのです。たとえ小学校の足し算であっても。

### 「0」と「1」

 さて、上に書いた足し算とかけ算の性質には、0と1が出てきます。

トロピカル代数にも「0」と「1」が存在します。

トロピカル代数の「0」は$+\infty$であり、「1」は0なのです。

え？「1は1だろうが」って？それは小学校の(以下略)

### トロピカル代数と7つの条件

トロピカル代数は7つの条件を満たします。ちょっと確かめてみましょう。

1. min の1つ目と2つ目の数を交換しても結果は同じ
例: min(3, 4) = min(4, 3) = 3
1. $+\infty$と何の min をとっても、何と$+\infty$の min をとっても元の数のまま
例: min($+\infty$, 5) = min(5, $+\infty$) = 5
1. 3つの数の min をとる時、とる順序を変えても結果は同じ
例: min(min(3, 5), 8) = min(3, min(5, 8)) = 3 
1. 0に何を足しても、何に0を足しても元の数のまま
例: 0 + 8 = 8 + 0 = 8
1. 3つの数を足す時、足す順序を変えても結果は同じ
例: (3 + 5) + 8 = 3 + (5 + 8) = 16
1. $+\infty$に何を足しても、何に$+\infty$を足しても$+\infty$になる
例: ($+\infty$) + 10000 = 10000 + ($+\infty$) = $+\infty$
1. 2つの数を min をとった結果にある数を足すのと、2つの数のそれぞれにある数を足してからその min をとるのは同じ
例: min(2, 5) + 3 = min(2 + 3, 5 + 3) = 5
## その他の半環

今回紹介したトロピカル代数は、数ある半環のほんの一例に過ぎません。

[英語版Wikipediaの"Semiring"の項](https://en.wikipedia.org/wiki/Semiring#Examples)には、他にも様々な ~~どうかしてる~~ 興味深い半環が紹介されています。

本当に7つの条件を満たすのか、ぜひ確かめてみてください。

## そもそもこのサイトは何？

このサイト「ログツー」は学習時間を記録したり、学習したことをブログで共有したりできる、今までにない新しいタイプのプラットフォームです。

詳しくは[公式の解説記事](https://log2.app/users/official/articles/1753871d-224c-5763-9070-177139d9060d)をどうぞ。

学習する分野に特に決まりはありません。

[Vimの使い方](https://inthebloom.github.io/post/uecpg-advent2025/)、[Gitに関する仮説](https://qiita.com/nzp89/items/dd5053ed8d907babba9c)、[入試科目の情報I](https://qiita.com/Tachysuki/items/22d613f498720f46fb56)、[言語相対論の視点で見たプログラミング](https://note.com/hello_mate/n/nca2fcb5ad668)、[プログラミングで作ったもの](https://note.com/wsan/n/n8fbb22058908)、[美味しいケーキの作り方](https://note.com/bold_fowl1907/n/nbc28dcd1f74b?app_launch=false)、あるいは[壬申の乱に関わった人々について](https://gakuryokuup.blogspot.com/2025/12/1251732.html)など、あなたが学習した内容について気軽に共有してください。

この記事は [__電通大プログラミング教室 Advent Calendar 2025__](https://adventar.org/calendars/12393) の24日目の記事です。
