線形時相論理式(LTL)を分かりやく説明

線形時相論理式(Linear Temporal Logic:LTL)をできるだけ分かりやすく説明していこうと思います。

もともとはシステムが正しく動くかどうかを検証するために研究されていたものなのですが、最近ではロボットの移動経路に用いられたり、機械学習の一つである強化学習の報酬設計などにも応用されています。

ただ、この漢字が多いのと「論理式」というだけで、難しそうと感じられてしまうこともしばしば…

ということで、できるだけ分かりやすく、LTLが市民権を得られるように説明していきます。

論理式とは

論理式とは何か?と考えると一番最初に思い浮かべるのは、

AかつBならばC

ではないでしょうか。このフレーズを聞いたことがある方はきっと多いと思います。

そうです。これが論理式です。

ポイントは

  1. 書き方が決まっている
  2. 今のこと・普遍的なことしか表現できない

です。

1つ目は論理式のメリットになります。 書き方が決まっているので、誰でも書き方のルールを覚えれば論理式が書け、 同じことを違う論理式で表現したときは、変形することで同じ論理式になります。

ドモルガンの法則がそのよい例です。

2つ目は普通の論理式のデメリットになります。 このことを交差点の2つの信号の具体例で考えていきます。

f:id:totopepe:20210528084906p:plain
交差点にある信号のイメージ図

これらの信号に守ってほしいこととして

「いつも一つの信号が青ならば、もう一つの信号は青でない」

があるとします。

しかし、普通の論理式では未来の話やシステムが動作している様子については表現できません。 今、「両方の信号が青でない」ことは表現できるのですが、「信号が稼働している間はずっと」となるとダメなんです…

そういったことを解決するために考えられたのが時相論理で、その中でも最も基本で重要なものとして、線形時相論理(LTL)があります。

線形時相論理(LTL)とは

漢字が多いので、分割します。

  • 線形:時間の流れが一直線のことです。枝分かれしてパラレルワールドに入らないことを表します
  • 時相:時間に関することも表現できるということです。具体的には、「いつも~」「いつか~」「次に~」といったことが表現できるようになります。

つまり、一直線で順番につながっているものに対して、「いつも~」「いつか~」「次に~」を含めて真か偽かを判定できる論理式です

なんやそれ?という感じなのでLTL式で表現できる具体例を考えていきます。

  1. いつも、両方の信号の色が青で揃うことはない
  2. 信号が赤になったら、いつか青になる
  3. 黄色の信号の次は必ず赤になる

1つ目について、

f:id:totopepe:20210528085315p:plain
1つ目について真になる信号1と信号2
は真(正しい信号の動作)と判定できるですが、
f:id:totopepe:20210528085443p:plain
1つ目について偽になる信号1と信号2
は偽(危険な信号の動作)と判定されます。

2つ目について、

f:id:totopepe:20210528085629p:plain
2つ目について、偽と判定される信号の色の変化
というようにずーっと赤の信号はダメなので、偽と判定されます。

3つ目について、

f:id:totopepe:20210528085759p:plain
3つ目について偽と判定される信号の色の変化
こんなのは言わずもがなダメですよね…

このようにシステムのふるまい・動作について、真か偽かを判定することができる論理式がLTL式です

「こんなのLTL式なんか使わなくても表せるのでは?」と思った方はきっといらっしゃると思います。

ここで論理式の説明で挙げたポイント1つ目が活きてきます。 書き方さえ守っていれば、長いLTL式=複雑な命令も表現できます。 そして、LTL式は長くても短くても処理の方法そのものは同じで、形式的に決まりきった形で行われます。

まじめに

ここからは真面目なLTLを紹介します。 興味のない方は読み飛ばしてください。

LTLで与えた命令が真か偽かを判定する対象を定義します。

さきほどの信号の動作(色の変化)を実行列と呼び、\piで表記します。この実行列\piは無限の長さで考えるのですが、最初から数えてk番目の途中からの実行列を\pi(k...)とします。

具定例としては、このようなイメージです。

f:id:totopepe:20210528094320p:plain
実行列の例
f:id:totopepe:20210528094336p:plain
k=2からの実行列

LTLはSyntaxとSemanticsで定義されます。

Syntaxはポイントの一つ目で述べた書き方です。SemanticsはSyntaxで出てきた記号がどのような意味なのか、を表します。

Synatax: \phi = True~ |~ ap ~ |~ \lnot \phi ~ |~ \phi _ 1 \land \phi _ 2~ |~ \bigcirc \phi ~ |~ \phi _ 1 U \phi _ 2

Semantics:実行列 \pik番目でLTL式 \phiを満たすことを \pi(k...) \models\phiで表す。

  •  \pi(k...) \models True,

  •  \pi(k...) \models ap if and only if  ap \in L(\pi(k)),

  •  \pi(k...) \models \lnot \phi if and only if  \pi(k...) \not\models \phi,

  •  \pi(k...) \models \phi _ 1\land \phi _ 2 if and only if  \pi(k...) \models \phi _ 1 \land \pi(k...)\models \phi _ 2,

  •  \pi(k...) \models \bigcirc \phi if and only if  \pi(k+1...) \models \phi,

  •  \pi(k...) \models \phi _ 1 U \phi _ 2 if and only if there exists j such that \pi(j...) \models \phi _ 2 and \pi(i...) \models \phi _ 1, \forall i \in [k,j-1].

Trueは真を表します。 apは原子命題(Atomic Proposition)です。これは真か偽かを判定できるものなのですが、とっつきにくいので具体例の中で示していきます。

\lnotは否定を表します。\phiが偽のとき、\lnot\phiが真になります。 \land論理積です。\phi _ 1\phi _ 2が両方とも真の時 \phi _ 1\land \phi _ 2が真になります。

ここまでは、普通の論理式と同じです。

そして、\bigcirc\phiは「次に\phiを満たす」を表すもので、 \phi _ 1 U \phi _ 2は「 \phi _ 2をどこかで満たす、その時まではずっと \phi _ 1を満たし続ける」ということを表し、時相論理特有のものになります。

この U を用いて、「いつか\phiを満たす」は

 \Diamond \phi = True U \phi

で表現されます。「その時まではずっと \phi _ 1を満たし続ける」の \phi _ 1で指定される制約・条件が無い、ということです。 そして「いつも\phiを満たす」は

 \Box \phi = \lnot (\Diamond (\lnot \phi) )

で表されます。どこかのタイミングで\phiを満たさない(\Diamond (\lnot \phi) )、ということはない(一番左の否定 \lnot)、という意味です。

これでLTLの定義はおしまいです。

では、先ほどの信号機の例を実際にLTL式で表現してみると、次のようになります。

  1. いつも、両方の信号の色が青で揃うことはない : \Box (\lnot ( (信号1が青) \land (信号2が青) )  )
  2. 信号が赤になったら、いつか青になる : (信号が赤)\to \Diamond(信号が青)
  3. 黄色の信号の次は必ず赤になる : \Box( (黄色の信号)\land \bigcirc (赤の信号) )

ここで出てきた

  • 信号1が青

  • 信号2が青

  • 信号が赤

などが原子命題になります。

どうやってコンピュータに読み取らせるのか

論理式だけ与えてはコンピュータは読み取れません。コンピュータはビット情報の計算しかできないからです。

そこで、この論理式を変換する手法として2つあり、

  1. オートマトンに変換する
  2. 等式や不等式に変換する

1つ目の手法で変換先のオートマトンの種類は多くあります。 2つ目の手法では、LTL式から変換された等式・不等式を最適化問題の制約式として使うことが多いです。

今回は詳しくは述べませんが、論理式を実際に使うことができるということを知ってもらいたくて紹介しました。

まとめ

まとめます。線形時相論理は

  • 書き方が決まっている⇒複雑なことも表現できる

  • 今のことだけでなく、未来のことも表現できる

  • コンピュータに読み取らせるための変換方法がある(実用できる)

間違えている箇所などがありましたら、教えていただければと思います!