Cos'è questa notazione in stile "matematica discreta" simile a una frazione usata per le regole formali?


18

Nel documento "Un tipo di dati JSON replicato senza conflitti" , ho riscontrato questa notazione per la definizione formale di "regole":

Alcune delle "regole" mostrate nel documento] [1

Come si chiama questa notazione? Come lo leggo?

Per esempio:

  • la DOCregola non ha nulla nel suo "numeratore" - perché no?
  • le regole EXECe GETsembrano avere due termini separati sopra la linea, cosa significa?
  • anche la VARregola si distingue un po ', dal momento che mentre molte altre regole usano una sorta di freccia (che definirei "implicito") in alto questa sembra solo dire che x è un elemento di qualcosa.
  • quasi tutto è disseminato di un'iniziale Ap,che il testo descrive come "lo stato della replica p è descritto da Ap, una funzione parziale finita" - in che modo un lettore esperto di questa notazione tende a "vedere" quella parte di ogni regola?

Questo sito ha suggerito una domanda correlata che ha una notazione dall'aspetto molto simile, oltre alla domanda Qual è il significato di ⟨B, s⟩ -> ⟨B ', s'⟩ come regola iniziale in questa domanda sul piccolo passo semantica? - questo è etichettato come semantica operativa , e sembra essere un indizio forte. È davvero questo il quadro in cui dovrei interpretare queste cifre? Potresti facilmente riassumere questo in forma di "corso intensivo" in modo che, anche se non riesco a verificare la correttezza delle loro prove, potrei almeno ottenere un po 'più di comprensione di ciò che stanno dicendo in questa sezione?

Risposte:


25

Questa è una notazione standard per una regola di inferenza . I locali sono posti sopra una linea orizzontale e la conclusione è posta sotto la linea. Quindi, sembra una "frazione", ma con una o più proposizioni logiche sopra la linea e una singola proposizione sotto la linea. Se vedi un'etichetta (ad esempio, "LET" o "VAR" nel tuo esempio) accanto ad essa, è solo un nome leggibile dall'uomo per identificare la particolare regola.

Potresti anche vederlo indicato come deduzione naturale o deduzione naturale in stile Gentzen .

Questa è una notazione comune nella letteratura dei linguaggi di programmazione. Lo vedrai ovunque. È molto conveniente per i tipi di conclusioni e prove strutturate ricorsive che sorgono in quel campo.

Vedrai questa notazione usata per esprimere assiomi / regole. Puoi considerare ogni assioma come un modello con "meta-variabili" (es. Expr ); puoi sostituire ogni meta-variabile con una certa sintassi dal linguaggio di programmazione (ad esempio, qualsiasi espressione valida nel linguaggio di programmazione) e otterrai un'istanza della regola. La regola di inferenza promette che se tutte le proposizioni sono sopra la linea sono vere (per qualche istanza del modello, dove si sostituisce costantemente ogni metavariabile con lo stesso valore in tutta la regola), allora anche la proposizione sotto la linea sarà vera .


2
Un uso notevole è specificare l'inferenza di tipo Hindley-Milner: questa risposta a "Quale parte di Milner-Hindley non capisci?" Illustra come leggere e utilizzare quel set di regole.
DylanSp

Una piccola correzione: le premesse e le conclusioni sono giudizi , non proposizioni . Le proposte sono una forma specifica di giudizio. In tal senso, i giudizi sono evidenti , non veri (perché la nozione di verità è difficile da definire e non molto interessante per la semantica del linguaggio di programmazione).
gardenhead

7

Ecco una spiegazione molto informale che potrebbe aiutare le persone che non hanno familiarità con le notazioni formali a mettere un piede nella porta. Non sostituisce una definizione formale!

L' Ap è lo stato del sistema o il vostro programma in esecuzione. "Stato" può significare molte cose, ma in questo caso sembra includere un elenco di tutte le variabili locali definite e dei loro valori. Perché Ap è una funzione? Perché è un modo conveniente per esprimere le assegnazioni di variabili: Ap (x) fornisce il valore della variabile x .

Ora prendiamo la regola EXEC come esempio. Definisce la semantica dell'esecuzione di un comando cmd1 seguito da un comando cmd2 , ovvero cosa succede con lo stato Ap del sistema quando si esegue cmd1 seguito da cmd2 .

  • Sopra la linea: questi sono i presupposti. Cosa dicono: "Lascia che cmd1 sia un comando. Se esegui il comando cmd1 quando il tuo sistema è nello stato Ap , il tuo sistema finirà con un nuovo stato Ap ' ."
  • Sotto la riga: qui la regola descrive cosa significa eseguire due comandi cmd1 e cmd2 in sequenza. Cosa dice: "Supponendo che il tuo sistema sia nello stato Ap , eseguendo cmd1 e quindi cmd2 significa eseguire cmd2 quando il tuo sistema è nello stato Ap ' " (ricorda che Ap' è lo stato che ottieni dopo aver eseguito cmd1 , come definito nella locali).

Le altre regole descrivono la semantica dei singoli comandi ed espressioni. Ad esempio, la regola VAR descrive cosa significa "eseguire" una variabile: Se x è una variabile locale (sopra la linea), cosa significa valutare / eseguire la variabile x ? È scritto sotto la riga: quando il programma è nello stato Ap , la valutazione di x ti dà il valore di x , cioè Ap (x) .

Spero che aiuti.


Grazie, questo è di grande aiuto per capire esattamente cosa stavo cercando! Tuttavia lascia la mia prima domanda senza risposta: questa notazione ha un nome, generalmente e / o in questo particolare contesto? La mia ipotesi era "Semantica operativa", ma l'altra risposta qui finora dice che sono semplicemente "regole di inferenza". Immagino che se faccio una domanda in due parti che merito di ottenere le risposte divise, ma ora sono diviso tra quale accettare :-)
natevw

1
@natevw Sono regole di inferenza. La semantica operativa è solo una delle tante cose che sono comunemente espresse con regole di inferenza.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.