AMN e la logica notazione matematica
-
19-09-2019 - |
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?
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
- viene introdotto un collegamento per il prodotto cartesiano di fornire le informazioni di volo;
DEFINITIONS FLIGHT_INFO == FLIGHT_NO * TIME * TIME
- 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
- 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)))