Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

時相演算子の意味論

Liloは、離散的な時間と連続的な時間の両方を取り扱うという意味で、やや非標準的な時相論理の意味論を採用しています。

Tを型とします。型Tのサンプルとは、{time : Real, value : T}というペアです。型Tの信号とは、時間値が狭義単調増加である型Tのサンプルが少なくとも2つ以上並んだ有限列です。Signal[T]を型Tの全ての信号の集合と記します。信号の最初のサンプルが時刻0である必要はありません。信号σが与えられたとき、σの要素をσ[0]σ[1]、…、σ[n-1]と表記します(nσのサンプル数)。σのサンプル数とσの持続時間(σ[n-1].time - σ[0].time)は区別することに注意してください。

信号σのサポート(support(σ)と表記)は、σのサンプルに紐づいた時間値の集合、すなわちsupport(σ) = {σ[i].time | 0 ≤ i < n}です。時刻tにおけるσの値をσ[time = t]と記します。すなわちσ[time = t] = σ[i].value(ここでiσ[i].time = tとなるインデックス)。σ[time = t]t ∈ support(σ)の場合にのみ定義されることに注意してください。

各Lilo式φは、Liloの型システムによって何らかの型Tを持つと判定されます(φ : Tと記します)。型TのLilo式の意味論は、Signal[S] → Signal[T]型の関数として理解されます(Sはシステムの入力信号の型)。この関数はサポートを保存、すなわち出力信号は入力信号と全く同じ時間値上で定義されます。型Tの式φに対して、〚φ〛でこの関数を表します。

非時相演算子には、標準的なブール演算子、算術演算子、比較演算子、条件分岐などが含まれます。ある式がポイントワイズな式であるとは、任意の固定時間値tに対して、出力信号〚φ〛(σ)[time = t]の値が入力信号の値σ[time = t]のみに依存することをいいます。Lilo式が非時相的であるとは、その解釈が入力信号に依存しないことをいいます。したがって、ポイントワイズな式は入力信号と非時相演算子から構成され、非時相式はパラメータ、定数、および非時相演算子から構成されます。

実数の区間は[a, b]というペアで書きます(a: Realb: Real | infinitya ≤ b)。binfinityである場合、その区間は非有界であるといい、そうでない場合は有界であるといいます。時間点tと区間Iに対して、t + Iまたはt - Iでそれぞれ{t + x | x ∈ I}または{t - x | x ∈ I}を表します。各時相演算子がサポートを保存するため、このドキュメントではt + Iおよびt - I(t + I) ∩ support(σ)および(t - I) ∩ support(σ)の省略形として使います。

Liloの時相演算子は、一部の例外を除いて区間で注釈されます。φ : Boolが与えられたとき、以下の時相演算子を定義します。

  • Always: 〚always[I] φ〛(σ)[time = t] = trueは、全てのt' ∈ (t + I)に対して〚φ〛(σ)[time = t'] = trueであるとき、かつそのときに限り成立します。
  • Eventually: 〚eventually[I] φ〛(σ)[time = t] = trueは、〚φ〛(σ)[time = t'] = trueとなるt' ∈ (t + I)が存在するとき、かつそのときに限り成立します。
  • Historically: 〚historically[I] φ〛(σ)[time = t] = trueは、全てのt' ∈ (t - I)に対して〚φ〛(σ)[time = t'] = trueであるとき、かつそのときに限り成立します。
  • Past: 〚past[I] φ〛(σ)[time = t] = trueは、〚φ〛(σ)[time = t'] = trueとなるt' ∈ (t - I)が存在するとき、かつそのときに限り成立します。
  • Until: 〚φ until[I] ψ〛(σ)[time = t] = trueは、〚ψ〛(σ)[time = t'] = trueとなるt' ∈ (t + I)が存在し、かつt ≤ t'' < t'を満たす全てのt'' ∈ support(σ)に対して〚φ〛(σ)[time = t''] = trueであるとき、かつそのときに限り成立します。
  • Since: 〚φ since[I] ψ〛(σ)[time = t] = trueは、〚ψ〛(σ)[time = t'] = trueとなるt' ∈ (t - I)が存在し、かつt' < t'' ≤ tを満たす全てのt'' ∈ support(σ)に対して〚φ〛(σ)[time = t''] = trueであるとき、かつそのときに限り成立します。

alwayseventuallyは互いに論理的双対であることに注意してください。untilの論理的双対はreleasesであり、φ releases[I] ψ!(!φ until[I] !ψ)として定義されます。演算子sincehistoricallypastはそれぞれuntilalwayseventuallyの過去時相版です。

will_changedid_changeは、等号が定義されている任意の型(現在は関数型でない型)φ : Tに対して次のように定義されます。

  • Will Change: 〚will_change[I] φ〛(σ)[time = t] = trueは、〚φ〛(σ)[time = t'] ≠ 〚φ〛(σ)[time = t'']となる2点t', t'' ∈ (t + I)が存在するとき、かつそのときに限り成立します。
  • Did Change: 〚did_change[I] φ〛(σ)[time = t] = trueは、〚φ〛(σ)[time = t'] ≠ 〚φ〛(σ)[time = t'']となる2点t', t'' ∈ (t - I)が存在するとき、かつそのときに限り成立します。

以下の演算子には区間を付けることができません。また重要なこととして、これらは離散時間意味論で定義されます。すなわち、関連付けられたtimeではなく、サンプルに関連付けられた離散的なインデックスに依存します。式φの型がTであり、vが型Tの非時相的な値である場合、式next φprevious φnext_with v φprevious_with v φも同様に型Tを持ちます。nを入力信号σのサンプル数とします。

  • Next: 0 ≤ i < n - 1に対して〚next φ〛(σ)[i] = 〚φ〛(σ)[i + 1]〚next φ〛(σ)[n - 1] = 〚φ〛(σ)[n - 1]
  • Previous: 0 < i < nに対して〚previous φ〛(σ)[i] = 〚φ〛(σ)[i - 1]〚previous φ〛(σ)[0] = 〚φ〛(σ)[0]
  • Next With: 0 ≤ i < n - 1に対して〚next_with v φ〛(σ)[i] = 〚φ〛(σ)[i + 1]〚next_with v φ〛(σ)[n - 1] = v
  • Previous With: 0 < i < nに対して〚previous_with v φ〛(σ)[i] = 〚φ〛(σ)[i - 1]〚previous_with v φ〛(σ)[0] = v

以下のスライディングウィンドウ演算子は、値が数値型である任意の式φに対して定義されます。また、関連する区間は[0, b]の形式(binfinityを含む)である必要があります。

  • Future Maximum: 〚max_future [0, a] φ〛(σ)[time = t] = max{〚φ〛(σ)[time = t'] | t' ∈ support(σ), t ≤ t' ≤ t + a}
  • Past Maximum: 〚max_past [0, a] φ〛(σ)[time = t] = max{〚φ〛(σ)[time = t'] | t' ∈ support(σ), t - a ≤ t' ≤ t}
  • Future Minimum: 〚min_future [0, a] φ〛(σ)[time = t] = min{〚φ〛(σ)[time = t'] | t' ∈ support(σ), t ≤ t' ≤ t + a}
  • Past Minimum: 〚min_past [0, a] φ〛(σ)[time = t] = min{〚φ〛(σ)[time = t'] | t' ∈ support(σ), t - a ≤ t' ≤ t}