こういう記事を見かけた。 コードをベクトルを使って表そう!|31Z(ミズ)皆さんこんにちは、おみずさんですよ。 CM、Dm、Am7、G7、Ebdim7…. この世にはいろんなコードがありますね そしてこれらって、 スカラー→A m7←コードの構造を表すベクトル ってな感じで …note(ノート)note.comコードをベクトルを使って表そう!|31Z(ミズ)

なんかめっちゃ洗練化したい‼️(?)の欲求に駆られました、ので色々考えていこうと思います。 全然群論とか知ってる前提で話します。

音律の構造 見出しへのリンク

ここでは任意の純正音程からなる集合、つまり純正律を\( \specialset{J} \)と書き、\(p(n)\)-limit純正律を\( \specialset{J}_n \)と書きます。堆積の演算を\( \cdot \)と書いた場合、これらの組\( (\specialset{J}_n, \cdot) \)はアーベル群になります。 更に順序を定義でき、順序を\(\leq\)とした時、\( (\specialset{J}_n, \cdot, \leq) \)は順序アーベル群という構造になります。多分あんま使わないけど知っておくだけ損ではないと思います(ピタゴラス音律とかで行う、音程をピリオド(オクターブ)内に押し込む操作の一意性とかが示せる)。 証明とかは端折ります。

音程の表記 見出しへのリンク

有理数表記 見出しへのリンク

何かしら純正音程を持ってきた時、例えばオクターブを何の単語も付けずに単純に\(2\)と表記したり、完全五度を\(\dfrac{3}{2}\)と表記することができると思います。これを個人的には「有理数表記」とか呼んだりしています。 多分この記事ではこっちがメインです。

モンゾベクトル表記 見出しへのリンク

音程の累乗\( x^n: X \times \specialset{Z} \rightarrow X \)を以下のように定義します。

\[ x^n = \begin{cases} \underbrace{ x \cdot x \cdot \ldots \cdot x }_{n} & (n > 0) \\ 1 & (n = 0) \\ \underbrace{ x^{-1} \cdot x^{-1} \cdot \ldots \cdot x^{-1} } _{-n} & (n < 0) \\ \end{cases} \]

これは音程xをn回堆積する演算であり、これを利用すると以下の性質が成り立ちます。

\( p(n) \)-limit純正律\(\specialset{J} _ n\)は、基底を\( \lbrace q \in \specialset{P} \mid q \leq p(n) \rbrace \)\( \)とするランクnの自由アーベル群である。

\( p(n) \)-limit純正律の音程\(j \in \specialset{J} _ n\)は、モンゾベクトル \( \vector{m} = \ket{\vector{m}_0, \vector{m}_1, \ldots, \vector{m}_n} \) を用いて以下のように一意に表される。 \[ \displaystyle j=\prod_{i=1}^{n} p(i)^{\vector{m}_i} \]

「自由アーベル群」というのはベクトル空間に似た性質を持つ構造で、要するに音程はベクトルのように表記することができます。実際この値を「モンゾベクトル」といい、上記に記した有理数表記に対して負の数まで許した素因数分解を行い、指数部分だけ取ったある種のベクトルとも言えます(ていうか寧ろこっちの説明の方がメジャー)。

「基底」はXenharmonicでいう「ジェネレーター」にも相当する用語、というか基底の要件が「線形独立な生成系」であり、生成系の元を「生成元(generator)」というので専ら数学とXenharmonicで奇跡の用語衝突が起きているんですね~

和音の表記 見出しへのリンク

単なる和音の表記として、まず考えられるのが、純正律\(\specialset{J}\)の直積\(\specialset{J}^n\)と言うものを考え、純正音程の組\( (\vector{j}_1, \vector{j}_2, \ldots, \vector{j}_n) \in \specialset{J}^n \)というものが考えられます。31Z氏の記事では「コード比ベクトル」と呼んでいました。ここでもそう呼ぶことにします。 当該記事では従来のコード表記においてスカラー倍との類似性を指摘し、第一成分が単位元となるようなコード比ベクトルを「基本コード比ベクトル」と呼び、それに対してスカラー倍を行うことによって様々なコードを生成しています。 ただ、この記事においてはベクトル加法について触れられていません。 これは単純に考える必要が無いからだと思いますが、では逆に、「スカラー倍だけの構造」と言ったものを考えてもよいのではないか?というのがこの記事の趣旨でもあります。

そもそも「スカラー倍」って? 見出しへのリンク

上でサラっと言いましたが、「ベクトル空間」というのは単純にベクトルのなす空間のことを言います。 ベクトル空間の公理というのがあり、要約としては以下の通り。

  • ベクトル空間\(\vectorspace{V}\)はベクトル加法\(+\)に関してアーベル群である。
  • スカラー倍、つまり体\(K\)からベクトル空間\(\vectorspace{V}\)への作用\(\cdot: K \times \vector{V} \rightarrow \vectorspace{V} \)が定義されている。
  • ベクトル空間\(\vectorspace{V}\)において、ベクトル加法\(+\)とスカラー倍\(\cdot\)は分配法則を満たす。

群が積という一つの演算を考えていたのに対して、体は「積」と「和」と言う二つの演算を考えます。 そしてスカラー倍は体の「作用」として定義されています。 作用というのは一応数学用語で、上記に記したような写像、つまり「体Kと集合Sの元を引数にとって、Sの元を返す演算」である訳です(※ただもう少し条件はある)。 ただ、音楽の構造的に、音楽理論において体論とは無縁がち、ここでも群に関して考えています。 「群のスカラー倍」のような演算を定義できないのか?と思って調べてみたら普通にありました

「群作用」が普通にあるらしい。 見出しへのリンク

群作用の公理としては以下の通り。

群G、集合Xに対して二項演算\(g\cdot x: G \times X \rightarrow X\)があり、

  • Gの単位元eとXの任意の元xに対して\(e \cdot x=x\)が成り立つ
  • Gの任意の元g, hとXの任意の元xに対して結合法則\((g \cdot h) \cdot x = g \cdot (h \cdot x)\)が成り立つ

以上を満たす二項演算を群作用と呼ぶ。

コード比ベクトル\(\vector{v}=(\vector{v}_1, \vector{v}_2, \ldots, \vector{v}_n) \in \specialset{J}^n\)と、純正音程\(j \in \specialset{J}\)に対して、「コード比ベクトルのスカラー倍」\(j\cdot\vector{v}: \specialset{J} \times \specialset{J}^n \rightarrow \specialset{J}^n; (j, \vector{v}) \mapsto (j\cdot \vector{v}_1, j\cdot \vector{v}_2, \ldots, j\cdot \vector{v}_n)\)を定義します。終域で用いられている演算はスカラー倍ではなく堆積の演算ですが、紛らわしいので\(j\vector{v} := j\cdot \vector{v}\)と置くとします。 さてこの二項演算は群作用の公理を満たしているでしょうか?

証明 見出しへのリンク

AIと一緒に考えました。

単位元の公理 見出しへのリンク

群\(\specialset{J}\)における単位元は1倍音(つまり基音)であり、これを単に\(1\)と表記することとする。 コード比ベクトル\(\vector{v}=(\vector{v}_1, \vector{v}_2, \ldots, \vector{v}_n) \in \specialset{J}^n\)に対して、式\(1\vector{v}\)は \[ \begin{split} 1\vector{v} &= 1(\vector{v}_1, \vector{v}_2, \ldots, \vector{v}_n) \\ &= (1\cdot \vector{v}_1, 1\cdot \vector{v}_2, \ldots, 1 \cdot \vector{v}_n) \end{split} \] のように変形される。各成分\(\vector{v}_i\)は群\(\specialset{J}\)の元であり、\(1 \cdot \vector{v}_i = \vector{v}_i\)が成り立つ。したがって \[ \begin{split} 1\vector{v} &= (1\cdot \vector{v}_1, 1\cdot \vector{v}_2, \ldots, 1 \cdot \vector{v}_n) \\ &= (\vector{v}_1, \vector{v}_2, \ldots, \vector{v}_n) \\ &= \vector{v} \end{split} \] となり、単位元の公理を満たす。

結合法則の公理 見出しへのリンク

任意の音程\(g, h \in \specialset{J} \)とコード比ベクトル\(\vector{v}=(\vector{v}_1, \vector{v}_2, \ldots, \vector{v}_n) \in \specialset{J}^n\)に対して、式\((g\cdot h)\vector{v} \)は、 \[ \begin{split} (g\cdot h)\vector{v} &= (g\cdot h)(\vector{v}_1, \vector{v}_2, \ldots, \vector{v}_n) \\ &= ((g\cdot h)\cdot v_1, (g\cdot h)\cdot \vector{v}_2, \ldots, (g\cdot h)\cdot \vector{v}_n) \end{split} \] のように変形される。一方、式\(g(h\vector{v}) \)は \[ \begin{split} g(h\vector{v}) &= g(h(\vector{v}_1, \vector{v}_2, \ldots, \vector{v}_n)) \\ &= g(h \cdot \vector{v}_1, h \cdot \vector{v}_2, \ldots, h \cdot \vector{v}_n) \\ &= (g\cdot(h \cdot \vector{v}_1), g\cdot(h \cdot \vector{v}_2), \ldots, g\cdot(h \cdot \vector{v}_n)) \end{split} \] のように変形される。 群\(\specialset{J}\)の堆積において、各成分について\((g \cdot h)\cdot \vector{v}_i =g\cdot(h \cdot \vector{v}_i)\)が成り立つ。よって\((g\cdot h)\vector{v} = g(h\vector{v})\)が成り立ち、結合法則の公理を満たす。

「和音空間」? 見出しへのリンク

「コード比ベクトルのスカラー倍」という演算が群作用の公理を満たすことが証明できました。が、この演算は厳密には「スカラー倍」ではありません。 「ベクトル空間のスカラー倍」ではなく「群から直積集合の群作用」であり、スカラー倍は単に比喩としての呼称だからです。 そもそもここで定義したコード比ベクトルそれ自体さえ単なる音程の組であって(ベクトル空間の元としての)ベクトルですらなく、線形代数の範囲かも怪しい。 群Gによる群作用を持つ集合のことを「G-集合」と呼びますが、要するに群\(\specialset{J}\)による群作用を持つコード比ベクトルのなす集合\(\specialset{J}^n\)は\(\specialset{J}\)-集合であるわけです。 これらが本質的に線形代数であるというよりかは、もう\(\specialset{J}\)-集合\(\specialset{J}^n\)とスカラー倍\(\cdot\)の組\((\specialset{J}^n, \cdot)\)の事を「群\(\specialset{J}\)上の和音空間」とでも呼んでいいんじゃないでしょうか。知らんけど。

番外: モンゾベクトル表記 見出しへのリンク

諸々の計算 見出しへのリンク

例えばmaj7は\(\displaystyle (1, \frac{5}{4}, \frac{3}{2}, \frac{15}{8})\)となり、一方モンゾベクトル表記では\((\ket{0,0,0}, \ket{-2, 0, 1}, \ket{-1, 1, 0}, \ket{-3,1,1})\)となります。ダルいね。ここに\(\dfrac{3}{2}\)を作用させる時、式は以下のようになります。 \[ \ket{-1, 1, 0}(\ket{0,0,0}, \ket{-2, 0, 1}, \ket{-1, 1, 0}, \ket{-3,1,1}) \]埋めようかなモンゾベクトルにおいて音程の堆積は加法で示され、モンゾベクトルの表記でのスカラー倍は、コード比ベクトルの各成分であるモンゾベクトルの各成分が作用する側のモンゾベクトルの各成分によって加算されることと同じになります。何を言ってるんですか???

つまりこういう事です。 \[ \begin{split} &\ket{-1, 1, 0}(\ket{0,0,0}, \ket{-2, 0, 1}, \ket{-1, 1, 0}, \ket{-3,1,1}) \\ &=(\ket{-1, 1, 0}+\ket{0,0,0}, \ket{-1, 1, 0}+\ket{-2, 0, 1}, \ket{-1, 1, 0}+\ket{-1, 1, 0}, \ket{-1, 1, 0}+\ket{-3,1,1}) \\ &=(\ket{-1+0,1+0,0}, \ket{-1+-2, 1+0, 1}, \ket{-1+-1, 1+1, 0}, \ket{-1+-3,1+1,1}) \\ &=(\ket{-1, 1, 0}, \ket{-1, 1, 1}, \ket{0, 2, 0}, \ket{-2, 2, 1}) \end{split} \]

つまりどういうことですか?

コード差ベクトルの話 見出しへのリンク

元記事ではコード比ベクトルの各成分をstep数に変換する演算を用意して、「コード差ベクトル」というベクトルも用意していました。単純に各成分のモンゾとヴァルで内積取れば良いかな~って思うじゃないですか。ヴァルってマジで何???

こんな感じなので、理解できたらまた別で書こうと思います。

後書き 見出しへのリンク

今回は31Z氏のコード比ベクトルを群論の言葉で再定義して洗練させたわけですが、 「音律は群」という元からよく知られてた話と、今回のコード比ベクトルという考え方を良い感じに合体できたと私は勝手に思っています(あとXenharmonic以外でも普通に数理音楽理論全般で群論使うらしいね)。 これからもXenharmonicを、よろしくお願いします‼️

P.S.モンゾベクトルが自由アーベル群になる話を理解するまで半年以上かかった。