このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

身近なトランスデューサ:文字のエンコード

Aを文字(とりあえず文字番号、またはコードポイント;最近はコードユニット?)だとして、Bはバイト(8ビット・コンビネーション)の集合だとする。エンコーディングがA→B*という関数で与えられというのは嘘で、それはISO-2022-JPを考えれば明らかだろう。

状態をSとして、エンコーディングは A×S→B*×Sとして与えられる。Aに未定義な文字があれば、出力は空だし、エンコード表現に曖昧性/多義性があれば、遷移+出力は部分的かつ非決定性となるから、A×S→Pow(B*×S)となる。状態遷移は確定的にしたいなら、A×S→Pow(B*)×Sとなるが、Powが強モナドなので、テンソル強度:Pow(X)×Y→Pow(X×Y)があるから、A×S→Pow(B*)×SをA×S→Pow(B*×S)に埋め込める。

Aに合成文字の素片が含まれると、A×Sでは遷移が定義できないがA*×Sでは定義できることになる。A×S→Pow(B*×S)をA*×S→Pow(B*×S)に埋め込むのは簡単だ。

まとめると:

  1. エンコーディングには状態が必要になることもある。
  2. 1つの文字に複数のエンコード表現(encoded representation)があるかも知れない。
  3. エンコードが定義されてない文字が含まれるかもしれない。
  4. 合成文字の素片が含まれるかもしれない。
  5. 状態遷移だけ引き起こす制御信号があるかもしれない。