B で関数を定義することができます。関数は定数値を持ち、ABSTRACT_CONSTANTS 句にリストされ、PROPERTIES 句で定義されます。この構造を使用して問題を解決する方法を説明しようとしています。
小さな抜粋に従います。
- フライト情報を提供するデカルト積のショートカットが導入されました。
DEFINITIONS
FLIGHT_INFO == FLIGHT_NO * TIME * TIME
- 4 つの定数が宣言され、最初の 3 つは「アクセサー」であり、最後の 1 つは空でない一連のフライト情報を出発時刻が最大のフライト情報にマップします。
CONSTANTS
flight_no, flight_departure, flight_arrival, last_flight
- 次に、これらの定数は型付けされ、合計関数として定義されます。最後の関数は、空でないセットを入力として受け取る必要があることに注意してください。ここでは、これらの関数を指定するためにさまざまなアプローチを使用しました。1 つは (等式で) 定義的であり、もう 1 つは公理的です。
PROPERTIES
// typing
flight_no: FLIGHT_INFO --> FLIGHT_NO &
flight_departure: FLIGHT_INFO --> TIME &
flight_arrival: FLIGHT_INFO --> TIME &
last_flight : POW1(FLIGHT_INFO) --> FLIGHT_INFO &
// value
flight_no = %(no, dt, at).(no |-> dt |-> at : FLIGHT_INFO | no) &
flight_departure = %(no, dt, at).(no |-> dt |-> at : FLIGHT_INFO | dt) &
flight_arrival = %(no, dt, at).(no |-> dt |-> at : FLIGHT_INFO | at) &
!fs.(fs : POW1(FLIGHT_INFO) =>
last_flight(fs) : fs &
!(fi).(fi : FLIGHT_INFO & fi : fs =>
flight_departure(fi) <= flight_departure(last_flight(fs)))