Differenza tra semantica operativa di piccole e grandi dimensioni


28

Qual è la differenza fondamentale tra la semantica operativa di piccole e grandi dimensioni?

Sto facendo fatica a capire di cosa si tratta e la motivazione per avere i due.


1
L'articolo di Wikipedia sulla semantica operativa sembra promettente ... fino a quando non ci si rende conto che la somma totale delle informazioni nella sezione "Semantica a grande passo" è "Questa sezione richiede l'espansione. (Febbraio 2011)".
David Richerby,

1
Qual è la tua fonte di apprendimento? Cosa contiene in merito? Cosa pensi? Suggerimento: qual è la semantica del grande passo x = 0; while ( true ) { x = x + 1; }?
Raffaello

@Raphael, sto leggendo Comprensione del calcolo . I miei pensieri sono che l'approccio a piccoli passi è quello di ridurre un'espressione in sottoespressioni fino a quando non può essere ulteriormente ridotta e quindi valutarla. Il grande passo sembra riguardare la valutazione immediata delle cose, ma in realtà non ho alcuna differenza interessante tra i due metodi in quanto entrambi sembrano riguardare la perforazione di costrutti di livello superiore.
Simon Morgan,

Il grande passo riguarda la perforazione da costrutti di livello superiore valutando i sotto-costrutti e i piccoli passi riducendo di nuovo un costrutto più grande nei suoi sotto-costrutti.
Simon Morgan,

Risposte:


32

La semantica a piccoli passi definisce un metodo per valutare le espressioni un passo di calcolo alla volta. Formalmente parlando, una semantica a piccoli passi per un linguaggio di espressione è una relazione chiamato la relazione di riduzione . La semantica a piccoli passi descrive in dettaglio ciò che accade a un'espressione. È in grado di fornire un resoconto preciso anche di programmi non terminanti, con una catena infinita da . Un programma di terminazione è tale che termina con un valore tale che . \ newcommand {\ llbracket} {[\! [} \ newcommand {\ rrbracket} {] \!]}: E × E e 0e 1e 2e 0e 1vE→:E×Ee0e1e2e0e1v e E , v e veE,ve

All'altra estremità dello spettro c'è la semantica denotazionale . La semantica denotazionale assegna un "significato" a ciascuna espressione. È una funzione dalle espressioni alle denotazioni: ( è chiamato dominio). Lo spazio delle denotazioni può essere completamente estraneo allo spazio sintattico, ad esempio potrebbero essere espressioni valutate in un numero e potrebbe essere un insieme di numeri come o .[[]]:EDDEDNR

La semantica dei grandi passi è un po 'nel mezzo. Una semantica big-passo su un linguaggio di espressione e un insieme di valori è un rapporto . Collega un'espressione al suo valore (possibilmente valori multipli se la lingua non è deterministica). Spesso, un valore speciale viene utilizzato per le espressioni non terminanti.V : E × V EV⇓:E×V

Quindi perché abbiamo queste tre nozioni? Tutte queste nozioni possono modellarsi a vicenda, ma il modello aggiunge un certo grado di complessità.

  • Data una semantica a piccoli passi , è possibile definire una corrispondente semantica a grandi passi che mette in relazione ogni espressione con il suo valore (o valori, se la riduzione non è deterministica): se esiste una catena e non può ridurre ulteriormente. Si noti che in generale non è possibile ricostruire la semantica a piccoli passi dalla semantica a grandi passi. Ad esempio, tutte le espressioni non terminanti sono indistinguibili sotto la semantica del grande passo.e v e e 1v vevee1vv
  • Dato un grande passo semantica , si può dire che si tratta di un piccolo passo semantica su . Questo non è particolarmente utile.E V⇓:E×VEV
  • Data una semantica a piccoli passi , è possibile definire una semantica denotazionale corrispondente in cui la denotazione di un'espressione è l'insieme di catene di riduzione a partire da essa. Ciò soddisfa la definizione formale, ma non è particolarmente utile, perché aggiunge un insieme di sovraccarico teorico agli oggetti che sono più facili da ragionare guardando direttamente la sintassi.
  • Data una semantica denotazionale , è possibile definire una semantica a piccoli passi aggiungendo tutte le possibili denotazioni come valori nella lingua. Ciò richiede la creazione di valori che non fanno parte della sintassi che il programmatore può scrivere, il che significa che alcuni risultati interessanti devono indicare "per tutti i programmi che il programmatore può scrivere" piuttosto che "per tutti i programmi". Anche questo non è molto utile.[[]]
  • Data una semantica big-step , è possibile definire una semantica denotazionale corrispondente in cui il dominio è l'insieme di set di valori: . Se la semantica a grandi passi è deterministica (ogni espressione si riduce a un singolo valore), è possibile definire una semantica denotazionale più semplice in cui il dominio è l'insieme di valori.[[[e]]={vev}
  • Viceversa, data una semantica denotazionale , è possibile definire una semantica di grande passo . Anche in questo caso è un po 'inutile.E [[[]]E[[]]

Dal punto di vista operativo, la semantica a piccoli passi corrisponde a guardare ogni operazione eseguita da un interprete per la lingua. La semantica big-step esamina solo il valore risultante. La semantica denotazionale esamina un'interpretazione matematica che può o meno avere a che fare con ciò che accade su un computer.

La semantica a piccoli passi è la più ovvia. Fornisce chiaramente informazioni utili su programmi non terminanti. Più in generale, fornisce informazioni dettagliate sul comportamento del programma.

La semantica denotazionale trasforma i costrutti sintattici in oggetti matematici arbitrari; può esprimere ciò che gli scienziati vogliono (puoi definire la denotazione di un'espressione come tutte le possibili catene di riduzione da essa), ma a costo di aggiungere un livello di complessità. Viene utilizzato quando vogliamo sottrarre alcuni dettagli, ad esempio come viene valutata l'espressione.

La semantica del grande passo è nel mezzo: estrae i dettagli della valutazione ma mantiene la natura sintattica del risultato. Di solito il concetto viene utilizzato quando è presente una semantica a piccoli passi sottostante, come modo per esprimere concisamente “ "come" ". In tali costruzioni, mentre i concetti sono molto diversi (uno ci consente di parlare di singole fasi di calcolo e di programmi non terminanti, l'altro no), le definizioni appariranno molto simili, perché in questo caso le regole che definiscono il la semantica big-step ha fondamentalmente la forma "if e ... e e(e1,,en),ee1en and e,eneeene1e2envvè un valore quindi ”.e1v


Sto anche imparando questo, ma ho un problema con qualcosa che hai detto nella tua risposta che vorrei che tu chiarissi. Hai detto "La semantica dei grandi passi è un po 'nel mezzo". Tuttavia, il piccolo passo non sarebbe in realtà il modello "intermedio"? Considera le espressioni: A: ((5 + 7) + 3) B: ((5 + 5) + 5) C: ((1 + 2) + 1) D: ((2 + 1) + 1) Denotazionale classificherebbe anche C e D con valori diversi (possibilmente "C" e "D"), e il passo grande li classificherebbe entrambi come "4" e sia A che B come "15" Tuttavia, il passo piccolo ti darebbe "(12 + 3) "e" (10 + 5) "per A e B e" (3 + 1) "per C e D.
Timothy Swan,

@TimothySwan Supponendo che tu voglia definire la solita valutazione aritmetica, una semantica denotazionale non distinguerebbe C e D. Una semantica a piccoli passi definirebbe una catena di riduzione come . Una semantica a grande passo sarebbe molto simile a una semantica denotazionale: vs . Il nella semantica del grande passo è quello nella sintassi del linguaggio mentre il nella semantica denotazionale è quello della metatetica, ma la distinzione non è visibile o importante in questo semplice esempio. ( ( 2 + 1 ) + 1 ) 3 [((2+1)+1)3+14((2+1)+1)34 4[[((2+1)+1)]]=444
Gilles 'SO- smetti di essere malvagio' il

Quindi, quando hai detto, "La semantica denotazionale assegna un" significato "a ciascuna espressione." non intendevi identificare in modo univoco le espressioni stesse, ma una sorta di significato indipendente dalla valutazione? Potete fornire un semplice esempio che mostri chiaramente la differenza tra semantica big-step e denotazionale? Inoltre, ti prego di spiegare che 3in ((2+1)+1)⇓3"suppongo che" denotazionale sia un valore fondamentale, ma in quale caso il "grande passo" non si assocerebbe necessariamente direttamente a quello? La differenza ha qualcosa a che fare con il contesto, ad esempio a (a + 1)seconda dell'ambiente che contiene a?
Timothy Swan,

@TimothySwan Finché non ci sono effetti collaterali, nessun non determinismo e nessuna funzione, la semantica denotazionale di un'espressione è il valore a cui valuta. Il non determinismo è un buon modo per illustrare la differenza tra big-step e denotazionale: la denotazione di un'espressione sarebbe l'insieme di valori che può avere: , mentre una semantica di grande passo avrebbe più giudizi ammissibili: e e ... Era un errore di battitura. r a n d ( 1 .. n ) 1 r a n d ( 1 .. n ) 2[[rand(1..n)]]={1,2,,n}rand(1..n)1rand(1..n)23
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.