Domanda

Non sono sicuro che questo è appropriato per StackOverflow, ma non so dove altro chiedere. Sto studiando il B-Metodo per dimostrare la consistenza a specifiche richieste, e ho un problema con la notazione logica matematica quando si specificano le condizioni pre delle operazioni.

La semplificazione del problema originale, ho una variabile che è un sottoinsieme voli del prodotto cartesiano tra FLIGHT_NO x TEMPO x tempo, dove per ogni membro (no, TD, ta), non significa che la il numero del volo, td l'ora di partenza e ta la TME di arrivo. Come posso ottenere, usando la notazione logica matematica, l'elemento di voli che ha la più grande valore della td?

È stato utile?

Soluzione

Vuoi get tale elemento, o per test che un elemento avete soddisfa questa proprietà? Chiedo perché la seconda sembra un presupposto ragionevole per un'operazione. Non so il B-Metodo specifico; Ho guardato alcuni documenti, ma non riesco a trovare un riferimento rapido, quindi questo potrebbe essere sbagliato in alcuni dettagli.

Il secondo dovrebbe essere simile a questo (prj2 viene utilizzato per la seconda proiezione):

HasGreatestTd(flight) = flight \in flights \and \forall flight' (flight' \in flights => prj2(flight) >= prj2(flight'))

Quindi il primo è:

flightWithGreatestTd = choice({flight | HasGreatestTd(flight)})

Altri suggerimenti

Perdonate la mia ignoranza, io non sono a conoscenza della B-Metodo. Ma non si potrebbe usare il quantificatore unicità? Sarebbe simile a:

esiste un tempo td tale che per tutti i tempi td 'td> td'

e

per tutti td, td 'td '', se td> td '' e td'> td '' poi td td == '

Questo, naturalmente, presuppone che vi sia esattamente un elemento dell'insieme. Non posso davvero dire se il B-Metodo consente la piena potenza della logica del primo ordine ma suppongo si potrebbe avvicinarsi a questo.

E 'possibile definire funzioni di B. Le funzioni hanno valori costanti e devono essere elencati nella clausola ABSTRACT_CONSTANTS, e definito nella clausola PROPERTIES. Cerco di spiegare come è possibile utilizzare questo costrutto per risolvere il problema.

Segue un piccolo estratto in cui

  1. viene introdotto un collegamento per il prodotto cartesiano di fornire le informazioni di volo;
DEFINITIONS
    FLIGHT_INFO == FLIGHT_NO * TIME * TIME
  1. quattro costanti vengono dichiarate, le prime tre sono "di accesso", e l'ultima mappa un insieme non vuoto di informazioni di volo per le informazioni di volo con il maggior tempo di partenza.
CONSTANTS
    flight_no, flight_departure, flight_arrival, last_flight
  1. Quindi queste costanti si digitano e definiti come funzioni totali. Si noti che l'ultima funzione deve prendere in input un insieme non vuoto. Qui ho usato per diversi approcci per specificare queste funzioni. Uno è di definizione (con un'uguaglianza), e l'altro è assiomatico.
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)))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top