かな入力とローマ字入力を定義するver.2
「かな入力とローマ字入力を定義する - tomoemonの日記」の続き
この前の定義だとそもそもかな入力すら正しく定義できなかったので考えなおしてみました。前の記事で言いたかった本題に変わりはありません。
この定義は、日本語入力配列について共通の枠組みの下で形式的に評価や議論ができるようになることを期待して作りました。枠組みは一つではないので、より実用的な枠組みがすでにあったり、新しく作られたら教えていただきたいです。
本題
n個の(入力→出力)の組み合わせを持った日本語入力配列を以下のように定義する。
は、キーボードを使った日本語入力システムimにの組を入力すると文字列を出力する関係を持つ。はキーの列、はの各キーをいつまで押し下げ続けるかを表し、に従っての要素であるキーを順に押し下げていくことでimへの入力を行う。
をそれぞれ以下のように定義する。
ここで、はキーボードで押下可能なキーの集合、はすべての文字集合を表す。また、は、対応するのキーをのキーを押すまで下げ続けることを意味する。
同時押しを定義できるようにするため、はの要素ではなく部分集合(1つ以上のキーの組)と定義している。特に、が複数のキーの組であるとき、「押し下げる」とはのすべてのキーが押し下げられている状態にすることを表す。
例
以上の定義を使うと、任意のパターンを組み合わせることで様々な配列を定義できる。以下の例ではを英数記号を使って表記している。また、同時押しの組については{}で表している。
ローマ字入力
- im(asu, 000) -> あす
- im(kyou, 0000) -> きょう
かな入力(押し続ける定義を含む)
- im(3r, 00) -> あす
- im(gS94, 0100) -> きょう (SはShiftキーを表す)
姫踊子草配列(同時押しの定義を含む)
- im(l{er}, 00) -> してぃ