Presentazione Riscrittura come computazione Calcolo di un espressione: Parte del corso • Passo da un espressione all’altra. dedicato alla presentazione dei sistemi di riscrittura di termini (term rewriting system). • Insieme finito di regole. teoria alla base • Non determinismo - confluenze. • Riscrittura locale. • programmazione funzionale, • Terminazione risultato. • logica, Macchine di Turing. • funzionale-logica, Sistemi di riscrittura di Post. • sistemi concorrenti. Lambda calcolo. Testo di riferimento Terese-Light. Programmazione funzionale. P. Di Gianantonio (Udine) Rewriting Systems 1 / 111 P. Di Gianantonio (Udine) Abstract reduction system Rewriting Systems 2 / 111 ARS, notazione e definizioni Trascuro la natura degli oggetti riscritti. Guardo il grafo delle riduzioni. a →α b: Definizione • a riduce a b in un passo di α-riduzione (computazione)., [Abstract reduction system] • b e` l’α ridotto in un passo di a, • a e` l’α espansione in un passo di b. A := (A , →) Definizione • sequenza di riduzione (finita o infinita) • A insieme • → relazione binaria su A rappresenta il passo di riduzione. a0 → a1 → . . . → an → • a0 riduce a an , an e` il ridotto di a0 , In alcuni ambiti (concorrenza), si definisce un insieme di relazioni di riduzione. A := (A , {→α | α ∈ I}) Altro nome per questo concetto: label transition system (LTS) P. Di Gianantonio (Udine) Rewriting Systems 3 / 111 P. Di Gianantonio (Udine) Rewriting Systems 4 / 111 Proprieta` degli ARS: confluenza ARS, relazioni derivate Posso fare convergere ad un unico risultato riduzioni diverse. Un ARS puo` essere visto come grafo orientato, eventualmente etichettato. →+ chiusura transitiva di → a →∗ b sse a riduce in n passi a b, con n > 0 →∗ Definizione come grafo: esiste un cammino non vuoto da a a b Un elemento a e` debolmente confluente, debolmente Church Rosser (WCR) ∀b , c. b ← a → c implica che ∃d. b →∗ d ∗← c. chiusura riflessiva e transitiva di → per ogni a, a →∗ a. ∀b , c. b ∗← a →∗ c implica che ∃d. b →∗ d ∗← c. Un elemento a e` confluente, Church Rosser (CR) a = b chiusura simmetrica, riflessiva e transitiva di → implicitamente: a → b allora considera a e b uguali, come grafo: a e b appartengono alla stessa componente connessa. Un ARS si dice (debolmente) Church Rosser se lo sono tutti i suoi elementi. CR ci assicura che possiamo far confluire qualsiasi coppia di riduzioni. WCR e` piu` semplice da verificare. Notazione: L’Identita` sintattica si rappresenta con ≡ WCR e` una proprieta` strettamente piu` debole di CR. Controesempio: . . . P. Di Gianantonio (Udine) Rewriting Systems 5 / 111 P. Di Gianantonio (Udine) Confluenza: esempi Rewriting Systems 6 / 111 Varie nozioni di confluenza Esiste una pletora di altre nozioni di confluenza, stessa definizione con la stessa struttura, cambio le relazioni coinvolte Risoluzione espressioni aritmetiche. Linguaggi funzionali puri. • Diamond property: ∀b , c. b ← a → c implica ∃d. b → d ← c, Controesempi, la confluenza non e` garantita nei: Definizioni per pattern matching. Linguaggi logici. Linguaggi per la concorrenza (CCS). • →α weakly commutes with →β : ∀b , c. b ←α a →β c implica ∃d. b →∗β d ←∗α c, • ... Le piu` significative restano CR e WCR. P. Di Gianantonio (Udine) Rewriting Systems 7 / 111 P. Di Gianantonio (Udine) Rewriting Systems 8 / 111 Proprieta` degli ARS: terminazione Proprieta` degli ARS: confluenza su forme normali Caratterizzo le proprieta` di terminazione del mio sistema di riscrittura. Definizione Definizione • a e` in forma normale (normal form) se b .a → b. • a e` in debolmente normalizzante (weakly normalizing) (WN) se ∃b in forma normale . a →∗ b. • un ARS ha la “normal form property” (NF) se ∀a , b . b normal form ∧ a = b ⇒ a →∗ b • a e` in fortemente normalizzante (strong normalizing) (SN) se, a partire da a, ogni riduzioni termina. • un ARS ha la “unique normal form property” (UN) se ∀a , b . a , b, forme normali ∧ a = b ⇒ a ≡ b • un ARS e WN (SN) se lo e` ogni suo termine. P. Di Gianantonio (Udine) Rewriting Systems 9 / 111 P. Di Gianantonio (Udine) Relazioni logiche tra le varie proprieta` 10 / 111 Term rewriting system (TRS) ARS nozione astratta. TRS particolari sistemi di riduzione (riscrittura) dove Theorem • gli oggetti sono termini del primo ordine (di un algebra) • regole di riduzione: • definite in forma parametrica, mediante variabili e pattern matching; • applicabili ovunque (in ogni contesto). • SN ∧ WCR ⇒ CR • WN ∧ UN ⇒ CR • CR ⇒ NF • NF ⇒ UN → viene chiamata riscrittura. Esercizi. P. Di Gianantonio (Udine) Rewriting Systems Riduzioni su strutture algebriche. Esempio: la semplificazione di espressioni algebriche. Rewriting Systems 11 / 111 P. Di Gianantonio (Udine) Rewriting Systems 12 / 111 Termini definiti mediante una sintassi Definizione alternativa Signature Σ: elenco delle costanti, e delle funzioni con relativa arita` (arity). Costanti viste come funzioni con zero argomenti. A questa sintassi si aggiunge spesso un insieme di variabili V . L’insieme dei termini e` generato dalla grammatica Definizione L’insieme termini su Σ, V ( T (Σ, V ) ) e` generato dalle seguenti regole • ∀x ∈ V T := x1 | x2 | . . . c1 () | c2 () | . . . u1 (T ) | u2 (T ) | . . . f1 (T , T ) | f2 (T , T ) | . . . g1 (T , T , T ) | g2 (T , T , T ) | . . . x ∈ T (Σ, V ) • ∀f ∈ Σ, arity (f ) = n, f (t1 , . . . tn ) ∈ T (Σ, V ) t1 , . . . tn ∈ T (Σ, V ) Secondo questa definizione una costante c va scritta come c (), cosa da evitare. Non si prevede la notazione infissa. Esercizio: definire la sintassi delle espressioni dell’algebra booleana, delle espressioni analitiche. P. Di Gianantonio (Udine) Rewriting Systems 13 / 111 P. Di Gianantonio (Udine) Rewriting Systems Conteggi Contesti Regole di riscritture applicate anche a sottotermini di un termine, ossia a termini inseriti in contesto (context). ` Il contesto cio` che resta di un termine dopo aver eliminato un suo (o piu) sottotermini. Formalmente: Definizione • Termini ground: senza variabili, appartenenti a T (Σ, ∅) • Termini lineari: ogni variabile occorre (e` presente) al piu` una volta. • Var (t ) denota l’insieme delle variabili che occorrono in t. t ground ⇔ Var (t ) = ∅. • Lunghezza di un termine t (numero di simboli che vi appaiono) |t | • |x | = 1 • |f (t1 , . . . , tn )| = 1 + |t1 | + . . . + |tn | Profondita` di un termine t (massimo numero di applicazioni consecutive) • depth (x ) = 1 • depth (f (t1 , . . . , tn )) = 1 + max(depth (t1 ), . . . , depth (tn )) P. Di Gianantonio (Udine) Rewriting Systems 14 / 111 Definizione Un contesto su Σ e` un termine generato dalla grammatica Σ ∪ {[ ]}. Il simbolo [ ], detto buco (hole), rappresenta un sottotermine mancante. Siamo interessati ai “one hole context”. Notazione C [ ], esempi: f (c0 , [ ], g (c1 , c2 )), (3 + 8) × ([ ] + 5) Operazione base: sostituire il buco di un contesto C [ ] con un termine t; C [t ]. 15 / 111 P. Di Gianantonio (Udine) Rewriting Systems 16 / 111 Term tree Posizioni I termini sono alberi ordinati scritti in forma lineare. Per analizzare i termini o per ragionare sui termini e` conveniente pensarli come alberi ordinati. In un term tree ogni sottotermine e` individuato dal percorso “radice sottotermine”. Percorso (posizione) descritto da un sequenza di numeri, che indicano di volta in volta in quale sottoalbero spostarsi. Notazione • n1 , . . . , ni sequenze; • variabili e costanti sono foglie. • ogni simbolo di funzione rappresenta un nodo e i sottotermini sono i sottoalberi. • n1 , . . . , ni · m1 , . . . , mj concatenazione di sequenze; • t | n0 ,...,ni sottotermine t individuato dalla posizione; • t [ ] n0 ,...,ni contesto individuato dalla posizione t meno il sottotermine t | n0 ,...,ni Esempi: P. Di Gianantonio (Udine) Rewriting Systems 17 / 111 P. Di Gianantonio (Udine) Rewriting Systems 18 / 111 Sostituzioni Domini L’operazione di sostituire, in un termine con variabili, alcune variabili con dei termini. Definizione Dominio di σ e` l’insieme delle variabili modificate da σ Dom(σ) = {x ∈ V | σ(x ) Definizione • Una sostituzione e` una funzione σ : V → T (Σ, V ). x} Codominio, le variabili nell’immagine del dominio • Estesa ai termini per induzione sulla sintassi: σ(f (t1 , . . . , tn )) = f (σ(t1 ), . . . , σ(tn )). Var (σ(x )) Cod (σ) = x ∈Dom(σ) σ(t ) viene scritto come t σ o come t σ . Definizione diversa da quella standard di dominio di una funzione. P. Di Gianantonio (Udine) Rewriting Systems 19 / 111 P. Di Gianantonio (Udine) Rewriting Systems 20 / 111 Sostituzioni a dominio finito Composizione di sostituzioni Tratteremo sostituzioni con domini finito, rappresentazione finita: {x1 /s1 , . . . , xn /sn } Viste come funzioni su termini, le sostituzioni possono essere composte: (σ ◦ τ)(t ) = σ(τ(t )) Definiamo la sostituzione solo dove fa qualcosa di interessante, sulle altre ` variabili si comporta come l’identita. Nella nostra notazione Notazioni alternative {x1 → s1 , . . . , xn → sn } oppure {s1 /x1 , . . . , sn /xn } Restrizione di un sostituzione σ|v = Sulle variabili: σ(x ) x se x ∈ V altrimenti t τσ = (t τ )σ τσ(x ) = (τ(x ))σ Composizione associativa (quasi per definizione). Commutativa? Unioni di sostituzione con domini disgiunto: σ1 ∪ σ2 P. Di Gianantonio (Udine) Rewriting Systems 21 / 111 Composizione di sostituzioni P. Di Gianantonio (Udine) Rewriting Systems 22 / 111 Composizione di sostituzioni a domini finito Viste come funzioni su termini, le sostituzioni possono essere composte: Date due sostituzioni a domini finito: (σ ◦ τ)(t ) = σ(τ(t )) Nella nostra notazione Sulle variabili: σ = {x1 /s1 , . . . , xm /sm } τ = {y1 /t1 , . . . , yn /tn } t τσ = (t τ )σ dal calcolo di στ sulle variabili si ricava στ e` dato dall’insieme τσ(x ) = (τ(x ))σ τ {x1 /s1τ , . . . , xm /sm , y1 /t1 , . . . , yn /tn } Composizione associativa (quasi per definizione). Commutativa? Trovare controesempio. P. Di Gianantonio (Udine) Rewriting Systems a cui sono rimossi i binding yi /ti con yi ∈ {x1 , . . . , xm } = Dom(σ) e (per compattezza) i binding xi /xi , per cui quegli xi tali che xi = xiστ . 22 / 111 P. Di Gianantonio (Udine) Rewriting Systems 23 / 111 ` tra Ordine di sussunzione (generalita) termini Renaming (ridenominazione) Definizione Se s ≡ t σ : Sostituzioni che sostituiscono variabili con variabili, e variabili distinte con variabili distinte. • s e un istanza di t σ e` un renaming per t se σ|Var (t ) e` un renaming. • t e` istanziato (is matched) sull’istanza s dalla sostituzione σ. • t sussume s, t e` piu` generale di s. • s t La relazione e` un quasi ordine (relazione riflessiva e transitiva). Dim? Se s s, t e` una variante di s, s s t et t sse esiste un renaming σ tale che s ≡ t σ s ≺ t definito come s P. Di Gianantonio (Udine) Rewriting Systems 24 / 111 t P. Di Gianantonio (Udine) t ma s t, (s istanza propria di t). Rewriting Systems 25 / 111 Proprieta` del quasi-ordine di sussunzione Matching Risolve il problema: dati s e t costruire, se esiste, una sostituzione σ tale che s ≡ t σ . Conviene generalizzare il problema al matching di sequenze di termini con una singola sostituzione {t1 /s1 , . . . , tn /sn } • due termini s e t hanno sempre un sup r, s r, t r e ∀q.(s q) ∧ (t q) ⇒ r q, Definizione • due termini s e t non hanno necessariamente un’istanziazione comune, ma se questa esiste allora esiste anche la piu` generale delle istanze comuni (mgci – most general comon instance). [Algoritmo di Matching] {f (t1 , . . . , tn )/f (s1 , . . . , sn )} ∪ S {f (t1 , . . . , tn )/g (s1 , . . . , sm )} ∪ S {f (t1 , . . . , tn )/x } ∪ S {x /s1 } ∪ S P. Di Gianantonio (Udine) =⇒ {t1 /s1 , . . . , tn /sn } ∪ S =⇒ fail, if f g =⇒ fail =⇒ fail if x /s2 ∈ S ∧ s1 Rewriting Systems • ≺ non possiede catene strettamente crescenti (catene di termini sempre piu` generali) s2 26 / 111 P. Di Gianantonio (Udine) Rewriting Systems 27 / 111 Ordine di generalita` tra sostituzioni Unificazione Definizione Problema: dati due termini t e s esiste una loro istanza comune (con identica sostituzione). La sostituzione τ e` piu` generale di σ: σ Definizione τ [Unificatore, MGU] • Se s σ ≡ t σ allora σ e` detto un unificatore di s e t. se ∃ ρ. σ = τ ρ • Il piu` generale (il piu` grande rispetto all’ordine e t, e` detto Most general unifier MGU. ` Proprieta: σ τ ⇒ ∀t . t σ t τ. Theorem Vale la freccia inversa? Quasi sempre. Esercizio (molto difficile): costruire un controesempio. P. Di Gianantonio (Udine) Rewriting Systems Se s e t sono unificabile allora ammettono un MGU (unico a meno di renaming). 28 / 111 P. Di Gianantonio (Udine) Rewriting Systems Algoritmo di Unificazione (Martelli, Montanari) {f (t1 , . . . , tn ) = f (s1 , . . . , sn )} ∪ E {f (t1 , . . . , tn ) = g (s1 , . . . , sm )} ∪ E {x = x } ∪ E {f (t1 , . . . , tn ) = x } ∪ E {x = t } ∪ E {x = t } ∪ E P. Di Gianantonio (Udine) tra gli unificatori di s Considerazioni • Versione non deterministica dell’algoritmo di Robinson (1965), algoritmo unificazione WAM esempio di utilita` del non determinismo =⇒ {t1 = s1 , . . . , tn = sn } ∪ E =⇒ fail, se f g =⇒ E =⇒ {x = f (t1 , . . . , tn )} ∪ E =⇒ fail se x ∈ Var (t ) e x t =⇒ {x = t } ∪ E {x /t } se x Var (t ), x ∈ Var (E ) Rewriting Systems 29 / 111 • Correttezza: correttezza delle singole regole: nessuna altera l’insieme degli unificatori • Terminazione: non completamente ovvia. • Se nessuna regola e` applicabile allora le equazioni ammettono un ovvio MGU. • Posso utilizzare l’algoritmo per una dimostrazione costruttiva dell’esistenza del MGU 30 / 111 P. Di Gianantonio (Udine) Rewriting Systems 31 / 111 Regole di riduzione su Σ-termini Term Rewriting Systems Un insieme di regole di riduzione su Σ. Definizione Definizione [Regola di riduzione] Una regola di riduzione (su Σ) e data da un coppia di termini l → r in T (Σ, V ) tali che: [Term rewriting system] 1) l non e` una variabile; 2) Var (r ) ⊆ Var (l ) • Un TRS induce una relazione di riduzione →R su T (Σ, V ), l’unione delle riduzioni definite dalle singole regole. l → r rappresenta uno schema di regole: tutte le regole ottenibili per istanziazione delle variabili, e inserimento in contesti. • Se non c’e` ambiguita` si rimuove il pendice →. • Un TRS e` un istanza di Abstract Reduction System. • Tutte le definizioni, proposizione per i ARS si applicano ai TRS. Ossia: sequenza di riduzione, →∗ , =, WCR, CR, normal form, WN, SN, NF, UN. • Se le regole hanno nome ρ : l → r, con t →ρ s specificare che t riduce a s mediante un’applicazione delle regola ρ. {C [l σ ] → C [r σ ] | σ sostituzione, C [ ] contesto} • l σ redex • r σ contractum P. Di Gianantonio (Udine) Rewriting Systems • Un TRS e` una coppia R := Σ, R formato da una signature Σ ed un insieme di regole su Σ. 32 / 111 Esempi — Aritmetica P. Di Gianantonio (Udine) Rewriting Systems 33 / 111 Esempi – Logica Combinatoria (Moses ¨ Schonfinkel, Haskell Curry) Logica Combinatoria S , K : 0, app : 2 Scriviamo app con la notazione infissa: app (x , y ) diventa x · y Aritmetica: 0 : 0, S : 1, add , mult : 2 • add (x , 0) → x • (K · x ) · y → x • add (x , S (y )) → S (add (x , y )) • ((S · x ) · y ) · z → (x · z ) · (y · z ). • mult (x , 0) → 0 Ridurre ((S · K ) · K ) · x. • mult (x , S (y )) → add (mult (x , y ), x ) Mostrare che mult (S (S (0)), S (S (0))) e` CR. Come per la moltiplicazione il simbolo · puo` essere omesso, l’applicazione e` associativa a sinistra. Si eseguono prima le operazioni a sinistra. Es. SKK = ((SK )K ). Problema definire un operazione di sottrazione con le opportune regole. Posto SKK = I ridurre SII(SII). Ridurre mult (S (S (0)), S (S (0))). Posto S (KS )K = B ridurre Bxyz. Nella logica combinatoria posso codificare ogni funzione calcolabile. P. Di Gianantonio (Udine) Rewriting Systems 34 / 111 P. Di Gianantonio (Udine) Rewriting Systems 35 / 111 Condizioni sulle regole Condizioni sulle regole Da proprieta` delle regole derivano proprieta` del TRS. Da proprieta` delle regole derivano proprieta` del TRS. ` La regola ρ : l → r e: ` La regola ρ : l → r e: • lineare a sinistra se l e` lineare. • lineare a sinistra se l e` lineare. La verifica di l’applicabilita` della regola, in un punto, ha costo costante. L’applicabilita` non dipende troppo strettamente da come il termine e` scritto. • non duplicante se non ha variabili con piu` occorrenze in r che in l. Duplicante altrimenti. Duplica (o triplica . . . ) una parte del redex. • non eliminante se Var (l ) ⊆ Var (r ). Eliminante altrimenti. Dal redex vengono eliminate tutte le istanze che fanno matching con una variabile di l. • non collassante se r non e` una variabile. Collassante altrimenti. Un TRS si dice lineare a sinistra (non duplicante, non eliminante, non collassante) se lo sono tutte le sue regole. P. Di Gianantonio (Udine) Rewriting Systems 36 / 111 P. Di Gianantonio (Udine) Condizioni sulle regole per assicurare la confluenza, (CR) Rewriting Systems 36 / 111 Sovrapposizione tra regole Definizione Definire delle proprieta` sulle regole per assicurare la confluenza del TRS. Due regole, ρ0 : l0 → r0 e ρ1 : l1 → r1 si sovrappongono se l0 e un sottotermine non variabile di l1 hanno un istanza in comune, o viceversa. Osservazioni: le sovrapposizione possono coinvolgere completamente l0 , l1 ρ1 : f (g (x ), y ) → x ρ2 : f (x , b ) → b Esempio di TRS non confluente ρ1 : f (g (x ), y ) → x ρ2 : g ( a ) → b Il termine f (g (a ), b ) non e` confluente. Considerare il termine f (g (a ), b ). Le regole ρ1 e ρ2 sono entrambe applicabili ma l’applicazione di una distrugge l’applicabilita` dell’altra (e la confluenza del termine). Una regole puo` sovrapporsi a se stessa non banalmente: ρ : f (f (x )) → a Un’analisi di quando questo puo` avvenire porta alla prossima definizione. Considerare il termine f (f (f (b ))). P. Di Gianantonio (Udine) Rewriting Systems 37 / 111 P. Di Gianantonio (Udine) Rewriting Systems 38 / 111 Condizione equivalente Esempio di non sovrapposizione Regole che non si sovrappongono possono avere redex innestati, ma in questo caso uno non distrugge l’altro. Confrontare: Due regole, ρ0 : l0 → r0 e ρ1 : l1 → r1 si sovrappongono se, dopo un renaming delle variabili t.c. Var (l0 ) ∪ Var (l1 ) = ∅, l0 unifica con un sottotermine non variabile di l1 , o viceversa. ρ1 : f ( x , y ) → x ρ2 : g (a ) → b con ρ1 : f (g (x ), y ) → x ρ2 : g ( a ) → b Sul termine f (g (a ), b ). P. Di Gianantonio (Udine) Rewriting Systems 39 / 111 P. Di Gianantonio (Udine) Rewriting Systems Risultati 40 / 111 Controesempio Considerare il TRS formato dalle regole: ρ1 : f (x , x ) → b ρ2 : g (x ) → f (x , g (x )) ρ3 : a → g (a ) Theorem Un TRS privo di sovrapposizioni tra regole e` debolmente confluente, WCR (weak Church-Rosser). Questo teorema e` spesso presentato in una forma rafforzata in cui si ammettono buone sovrapposizione tra regole (convergent critical pairs). Questo non assicura la confluenza (CR), a meno che il sistema non sia fortemente normalizzante (WCR ∧ SN ⇒ CR). Osservare che: • le regole non si sovrappongono • il TRS e` WCR • g (a ) →∗ b e g (a ) →∗ g (b ), • b e g (b ) non hanno nessun ridotto in comune. P. Di Gianantonio (Udine) Rewriting Systems 41 / 111 P. Di Gianantonio (Udine) Rewriting Systems 42 / 111 Ortogonalita` Constructor Based TRS Quasi sempre nel definire una signature Σ, partizione i simboli in • C, costruttori, i generatori degli elementi di un tipo Definizione Un TRS R e` ortogonale se e` lineare a sinistra e non contiene regole che si • D, definiti, l’insieme di funzioni che voglio definire su di un certo tipo. Esempi: • per la signature dei naturali, costruttori sono 0, S, i definiti add , mul sovrappongono. • per le liste i costruttori sono nil , cons, la concatenazione e` definita. Theorem Ogni TRS ortogonale e` confluente (CR). Definizione Un Constructor Based TRS contiene solo regole nella forma: f (t1 , . . . , tn ) → s con f ∈ D ∧ ∀i . ti ∈ T (C, V ) P. Di Gianantonio (Udine) Rewriting Systems 43 / 111 P. Di Gianantonio (Udine) Haskell Rewriting Systems Strategie di riduzione Dato un TRS R ed un termine t, i passi che portano a definire una riduzione t → t sono: Haskell e` un Constructor Based TRS, anche se possiede in piu` il meccanismo delle guardie. • si selezione una posizione p di t, Lemma In CBTRS, due regole, ρ0 : l0 → r0 e ρ1 : l1 → r1 si sovrappongono sse l0 ed l1 hanno un istanza in comune. Il teorema dell’ortogonalita` si applica, con gli opportuni aggiustamenti, ad Haskell • una regola ρ : l → r in R, • tali che esiste σ = match{l /t |p } (l σ = t |p ), • in questo caso t = t [r σ ]p e il sottotermine t |p costituisce il redex della riduzione. • le regole devono essere lineari a sinistra, Data t, possono esistere piu` coppie p, ρ tali che ρ e` applicabile in t |p . • le regole che possono sovrapporsi appartengono ad una stessa definizione di funzione, l’ordine di applicazione su queste regole, forza la confluenza. Possono esistere piu` riduzioni t → t . P. Di Gianantonio (Udine) 44 / 111 Rewriting Systems Una strategia di riduzione seleziona, per ogni termine t una tra le tante riduzioni su t. 45 / 111 P. Di Gianantonio (Udine) Rewriting Systems 46 / 111 Strategie di riduzione Strategie di riduzione classiche Definizione estensionale Definizione Una strategia di riduzione ad un passo F per TRS Σ, R e` una funzione F : T (Σ, V ) → T (Σ, V ) ∪ {∗} tale che • F(t ) ≡ ∗ se t → parallel-innermost (a molti passi) riduco tutti i redex piu` interni (con posizioni massimali in lunghezza). I redex sono disgiunti. • t → F(t ) altrimenti. Una strategia di riduzione a molti passi garantisce t →+ F(t ). leftmost-outtermost (a un passo) scelgo il redex piu` a sinistra tra quelli piu` esterni. In una definizione piu` operazionale posso indicare per ogni termine t quale regola ρ, e quale posizione p vada considerate per la riscrittura. parallel-outtermost (a molti passi) riduco tutti i redex piu` esterni (con posizioni minimali in lunghezza). I redex sono disgiunti. In un TRS ortogonale, in ogni posizione esiste al piu` una regola applicabile. Posso specificare una strategia dando per ogni termine la posizione del redex. P. Di Gianantonio (Udine) leftmost-innermost (a un passo) scelgo il redex piu` a sinistra tra quelli piu` interni. In termini di posizioni: scelgo il redex con posizione p minima nell’ordine lessicografico tra i redex aventi una posizione p massimale in lunghezza. Rewriting Systems full-substitution (a molti passi) riduco tutti i redex piu` ovunque. I redex non sono disgiunti ma in un TRS ortogonali una riduzione non disturba l’applicabilita` di un altra. 47 / 111 P. Di Gianantonio (Udine) Normalizzazione Rewriting Systems 48 / 111 Outtermost, innermost Una strategia di riduzione F e` normalizzante se porta ad una forma normale ogni qualvolta questa esista: per ogni t che ha forma normale allora esiste n tale che Fn (t ) = ∗. • Innermost: strategia di riduzione eager, si valutano gli argomenti prima di passarli alla funzione, ML. Con opportune condizione, left-normal orthogonal system la leftmost-outtermost e` normalizzante. • Outtermost: strategie di riduzione lazy, valuto un argomento solo se espressamente richiesto, Haskell . Controesempio al teorema piu` generale, il termine f (c , a ) Strategie eager non sono normalizzanti: valuto un argomento che diverge anche se questo non viene usato nella funzione. • f (x , b ) → d Strategie lazy, con regole di riduzioni duplicanti, portano a valutare un argomento piu` volte, a meno che non rappresenti i termini con DAG (Direct Acyclic Graph), come in Haskell. • a→b • c→c La parallel-outtermost e` normalizzante. P. Di Gianantonio (Udine) Rewriting Systems 49 / 111 P. Di Gianantonio (Udine) Rewriting Systems 50 / 111 Haskell and TRS Lambda astrazione Posso costruire le nameless functions \x -> x + 2 \f -> \x -> f (f x) In Haskell si possono definire constructor based TRS. Nelle definizioni di tipo, si definiscono per ogni tipo i costruttori. Definizioni di funzioni date attraverso il matching danno le regole di riduzione. Questo non definisce completamente la computazione in Haskell Nei TRS espressioni sono di un tipo base, non possono mai essere funzioni Haskell possono definire e manipolare funzioni. In altri formalismi si scrive come: λx .x + 2 Funzioni oggetti manipolabili come gli altri. Una regola per l’applicazione. La β-regola. (\x -> x + x ) n → n + n In generale (\x -> f ) m P. Di Gianantonio (Udine) Rewriting Systems 51 / 111 P. Di Gianantonio (Udine) Operatore di legame → f {x/m} Rewriting Systems 52 / 111 Rinomina delle variabili Necessaria nel corso di una riduzione. Con la lambda astrazione introduco un operatore di legame - chiusura. Senza rinomina delle variabili \x -> Fa diventare la x un variabile chiusa, non accessibile al resto termine. (\f -> \x -> f x) (\y -> x + y) I termini fanno considerati a meno di α-equivalenza. Introduco un α-regola. \x -> (\y -> x + y) x \x -> x + x Riduce a Scorretta, la variabile libera x viene catturata. \x -> x + 2 La riduzione corretta perfettamente equivalente a (\f -> \x (\f -> \z \z -> (\y \z -> x + \y -> y + 2 P. Di Gianantonio (Udine) Rewriting Systems 53 / 111 -> f x) (\y -> x + y) -> f z) (\y -> x + y) -> x + y) z z P. Di Gianantonio (Udine) Rewriting Systems 54 / 111 Variabili Indici di de Bruijn Pensare alle variabili chiuse come puntatori (a λ-astrazioni) e non come identificatori. In questo modo α-regola, necessita` di applicarla nel corso della riduzione, si complica: • implementazione dei linguaggi, \ y -> x + y • studio formale del linguaggio e del sistema di riscrittura. viene rappresentata come Possibile soluzione del problema: \-> x + p dove p e` un puntatore a \->. P. Di Gianantonio (Udine) Rewriting Systems 55 / 111 P. Di Gianantonio (Udine) Lambda calcolo, puro non tipato Posso codificare i numeri naturali 0 → (\f x -> x) 1 → (\f x -> f x) 2 → (\f x -> f (f x)) n → (\f x -> fn x) Successore: \m -> \f x -> f (m f x) Somma: \m n -> \f x -> m f ( n f x) Prodotto: \m n -> \f x -> m ( n f) x Esponente: \m n -> \f x -> n m f x Esercizio difficile: definire il predecessore. • variabili, • applicazione, • λ-astrazione come unica regola di riduzione la β regola. Sistema non tipato, ogni elemento puo` essere applicato a se stesso. ( x -> x x)( x -> x x) Rewriting Systems 56 / 111 Numerali di Church Posso costruire un sistema di calcolo interessante usando solo P. Di Gianantonio (Udine) Rewriting Systems 57 / 111 P. Di Gianantonio (Udine) Rewriting Systems 58 / 111 Untyped λ-calculus in Haskell λ-calcolo con costanti Posso definire il tipo di data dei λ-termini non tipati. data Untyped = Abst [Untyped -> Untyped] Codificare tutto tramite λ-termini puri non pratico. L’applicazione non e` immediata, va espressa esplicitamente t s Si introducono delle costanti, rappresentati elementi, funzioni base. diventa Possibili molte scelte diverse. app t s Un λ-calcolo tipato con costanti definisce Core Language di Haskell. dove app = \ t -> case t of Abst f | f P. Di Gianantonio (Udine) Rewriting Systems 59 / 111 P. Di Gianantonio (Udine) Core Language Rewriting Systems 60 / 111 Tipi di dato ricorsivi, Costruttori e distruttori Nel definire la semantica di un linguaggio, o la sua implementazione e utile considerare i core Language: • linguaggio semplice, insieme ridotto di costruttori primitive, sottoinsieme ridotto del linguaggio principale, In Haskell le constanti vengono definite mediante le dichiarazione di tipo. Ogni dichiarazione di tipo introduce un certo numero di costruttori e una costante distruttore data PNat = Z | S PNat • linguaggio principale puo` essere (facilmente) tradotto nel linguaggio core, • approccio modulare all’implementazione, alla semantica La definizione genera due funzioni costruttori di tipo: Z :: PNat S :: PNat -> PNat Dal punto di vista teorico i linguaggi core risaltano: • i meccanismi fondamentali della computazione, e una funzione distruttore: • similitudini: differenze tra linguaggi. case_PNat :: P. Di Gianantonio (Udine) Rewriting Systems 61 / 111 a -> ( PNat -> a) -> PNat -> a P. Di Gianantonio (Udine) Rewriting Systems 62 / 111 Distruttori Esempio Con regole di riduzione La funzione somma viene tradotta nel core language in case PNat a f Z → a case PNat a f (S n) → f n add = \ x y -> case x of O -> y | S x1 -> S (add x1 y) case PNat a f m viene scritto come: o nel linguaggio puro case m of Z -> a | S n -> f n P. Di Gianantonio (Udine) add = Y (\ f x y -> case_PNat y (\ x1 -> f x1 y) x) Rewriting Systems 63 / 111 P. Di Gianantonio (Udine) Rewriting Systems Core teorico Sistemi di tipo • Si riduce tutto ad applicazione di funzioni. • Definizioni per pattern matching ridotte a uso di funzioni case (su un singolo argomento e completi) P. Di Gianantonio (Udine) Rewriting Systems 64 / 111 65 / 111 I TRS e λ-calcolo, considerati sino ad ora, non tipati. Linguaggi non tipati portano sono flessibili ma spingono ad errori. Tipi pongono dei vincoli portano a programmi piu` strutturati ma portano a delle rigidita` nella definizione di programmi. Tipi polimorfi di Haskell permetto un controllo sintattico senza porre troppi vincoli inutile e con un type-checking semplice. Esistono altri sistemi di tipi polimorfi. P. Di Gianantonio (Udine) Rewriting Systems 66 / 111 Convergenza Strategie di riduzione. λ-calcolo sistema di regole non deterministico, in un termine ci sono piu` redex e piu` possibili riduzioni (\f -> f ( f a ) ) ((\x -> g x x )b ) Teorema (Church-Rosser) La riscritture nel λ-calcolo e` confluente (e` Church-Rosser). P. Di Gianantonio (Udine) Rewriting Systems 67 / 111 Narrowing P. Di Gianantonio (Udine) Rewriting Systems 68 / 111 Da linguaggi funzionali a linguaggi logici Meccanismo di riscrittura in Curry. Riscrittura su termini con variabili t ed un insieme di regole {li = ri |i ∈ I} Data un termine t, con variabili: Posso codificare Prolog in Haskell? • seleziono una posizione p rappresentante un sottotermine t |p , non variabile di t, Prima differenza tipato – non tipato, superabile: • seleziono una variante di una regola l = r tale che t |p e l, siano unificabili, • posso trasformare Prolog in un linguaggio tipato, perdendo in ` flessibilita. • sia σ l’mgu di t |p e l. • posso far diventare Haskell quasi non tipato definendo un tipo “calderone” a cui assegnare ogni espressione che non sia una funzione. • t viene riscritta in (t [r ]p )σ . Notazione: t Definisco ∗ come la chiusura transitiva di t ∗ σ tn se esiste t σ1 t1 σ (t [r ]p )σ , formalmente: σ2 ... σn tn con σ = σ1 σ2 . . . σn (= σn ◦ . . . ◦ σ1 ) P. Di Gianantonio (Udine) Rewriting Systems 69 / 111 P. Di Gianantonio (Udine) Rewriting Systems 70 / 111 Codifica (naif) di programmi logici Esempio Un programma Prolog P, viene codificato in un programma Haskell P . Uso due tipi: • un tipo Term (Termini) con tanti costruttori quanti i costruttori usati in P. • un tipo Prop con un unico elemento (costruttore unario) Success. likes(mary,food). likes(mary,wine). likes(john,wine). likes(john,mary). likes(john, x) :- likes(mary, x), likes(x, food) E le funzioni: • & (and) : Prop → Prop → Prop Success & Success = Success • tante funzioni predi : Term → . . . → Term → Prop, quante sono le relazioni definite in P. Ogni regola clausola Prolog, viene trasformata in una regola di riscrittura (matching rule). P. Di Gianantonio (Udine) Rewriting Systems 71 / 111 viene tradotto con likes Mary Food = Success likes Mary Wine = Success likes John Wine = Success likes John Mary = Success likes John x = (likes Mary x) & (likes x Food) P. Di Gianantonio (Udine) Codifica di programmi logici Rewriting Systems 72 / 111 Codifica di linguaggi logici Cosa manca in questa codifica: Cosa posso fare con P ? • clausole con variabili extra a destra non hanno una traduzione lecita in Haskell. Dato un goal ground verificare se e` dimostrabile. Problema: il programma P tenta solo una strada. Con il meccanismo delle eccezioni, posso indurlo a provare piu` strade. La possibilita` di fallimento diventa una caratteristica indispensabile per la ricerca. • la possibilita` di verificare la soddisfacibilita` di asserzioni non ground, con variabili libere. Riscrittura su termini non-ground. La sostituzione restituita come risultato. • la ricerca di piu` soluzioni, non-determinismo. Curry e` l’estensione di Haskell che rende questa codifica completa. P. Di Gianantonio (Udine) Rewriting Systems 73 / 111 P. Di Gianantonio (Udine) Rewriting Systems 74 / 111 E-unificazione E-unificazione mediante narrowing Estensione di Prolog a linguaggi funzionali. • In Prolog posso simulare funzioni con relazioni. Theorem (Completezza del narrowing) • Non posso costruire termini con simboli di funzione. Dato un insieme di regole di riscrittura R confluenti e terminanti. se s σ =R t σ allora esistono: • Altrimenti devo considerare il problema dell’E-unificazione, l’unificazione su termini contenenti simboli di funzione: • s1 , t1 tali che (s = t ) • un mgu τ per s e t , E-unificazione Dato un insieme di regole di riscritture R, e due termini s , t, definire le sostituzioni σ tali che σ(s ) =R σ(t ) tali che τ ◦ τ e` piu` generale di σ (σ Rewriting Systems τ ◦ τ) Mediante narrowing posso rendere uguale tutto cio` che e` eguagliabile. Puo` essere indecidibile. Anche restringendo la classe di regole di riscrittura, l’E-unificazione resta complessa (mancano algoritmi efficienti). P. Di Gianantonio (Udine) ∗ (s = t ), 1 1 τ τ τ (s1 ≡ t1 ) 75 / 111 IL narrowing e` anche corretto: tutto cio` che riesco ad uguagliare mediante narrowing e` anche E-unificabile. P. Di Gianantonio (Udine) Rewriting Systems Restrizione del full-narrowing 76 / 111 Basic narrowing Il principale problema del narrowing e` l’esplosione di possibili riscritture alternative per uno stesso termini (la presenza di variabili aumenta di molto le possibilita` di riscrittura). Necessario definire strategie di riduzione, che • siano efficienti, Problema: ho la regola rev (rev L ) = L e cerco le sostituzioni σ che rendono vera rev x = x, Posso costruire la seguente catena rev x = x x /rev x1 rev x1 = x1 x1 /rev x2 x2 = rev x2 Questo tipo di derivazioni sono eliminate se non applico il narrowing ai termini introdotti da unificazioni. Implementazione: in serie di narrowing t σ1 t1 σ2 . . . σn tn marco i simboli di funzione che appartenevano a t o alla parte destra di una regola applicata. • preservino la completezza. Nel caso di regole confluenti e terminanti, il basic narrowing e` terminante e completo. P. Di Gianantonio (Udine) Rewriting Systems 77 / 111 P. Di Gianantonio (Udine) Rewriting Systems 78 / 111 Inner narrowing Inner narrowing Ci limitiamo a insiemi di regole di riduzione constructor-based. In ogni regola l = r, l e` un pattern, contiene un unico simbolo di funzione come radice (Haskell). • si cercano solo le sostituzioni ground (che portano a termini uguali). Strategia poco efficiente, porta ad istanziare variabile e ad applicare regole piu` dello stretto necessario. Non si batte la riduzione Prolog. Una motivazione per i linguaggi funzionali logici e` che questi posso indurre strategie di riduzione piu` efficienti dei linguaggi logici. • fx=a • ga=a ∗ {} a Non completa con funzioni parziali (come per i TRS). P. Di Gianantonio (Udine) Rewriting Systems • regole confluenti e complete • solo funzioni totali Innermost seleziona il redex piu` interno: Non completa La riduzione f (g a ) Completa se 79 / 111 P. Di Gianantonio (Udine) Rewriting Systems Outtermost Narrowing - Lazy narrowing Core Language Outtermost non completa, esclude alcune riduzioni. Con Nel definire la semantica di un linguaggio, o la sua implementazione e utile considerare i core Language: • fOO=O • linguaggio semplice, insieme ridotto di costruttori primitive, sottoinsieme ridotto del linguaggio principale, • f (S O) O = S O • f x (S y) = S S O nell’espressione f (fxy )z, la strategia outtermost non cerca di valutare l’f , interna. Lazy: valuta redex interni se utili per ridurre quelli esterni, difficile caratterizzare i narrowing veramente necessari. Rewriting Systems • linguaggio principale puo` essere (facilmente) tradotto nel linguaggio core, • approccio modulare all’implementazione, alla semantica Dal punto di vista teorico i linguaggi core risaltano: Soluzione: needed narrowing, per regole constructor based porta ad una applicazione minima dei passi di narrowing. P. Di Gianantonio (Udine) 80 / 111 81 / 111 • i meccanismi fondamentali della computazione, • similitudini: differenze tra linguaggi. P. Di Gianantonio (Udine) Rewriting Systems 82 / 111 Core Language (teorico) per Haskell Tipi di dato ricorsivi, Costruttori e distruttori data Nat = O | S Nat La definizione genera due funzioni costruttori di tipo: Lambda calcolo tipato. O :: Nat S :: Nat -> Nat • un insieme di funzioni basi • applicazione e λ-astrazione. e una funzione distruttore di tipo case, la funzione somma viene tradotta nel core language in add = \ x y -> case x of O -> y | S x1 -> S (add x1 y) o per evitare definizioni ricorsive add = Y (\ f x y -> case x of O -> y | S x1 -> S (f x1 y) ) Al case per i naturali possiamo assegnare tipo: P. Di Gianantonio (Udine) Rewriting Systems 83 / 111 P. Di Gianantonio (Udine) case Rewriting Systems :: a -> (Nat -> a) -> Nat -> a Core teorico 84 / 111 Pattern matching - case statement La definizione and True True and x False and False x • Si riduce tutto ad applicazione di funzioni. = True = False = False • Definizioni per pattern matching ridotte a uso di funzioni case (su un singolo argomento e completi) diventa • Analisi della complessita` dei costrutti. and = \x y -> case x of True -> case y of True -> True False -> False False -> False Una dichiarazione per pattern matching si trasforma in un albero di scelte con un foglie le parti destre delle equazioni. Pattern matching porta a definizione piu` compatte leggibili eleganti. P. Di Gianantonio (Udine) Rewriting Systems 85 / 111 P. Di Gianantonio (Udine) Rewriting Systems 86 / 111 Strategie di riduzione Rewriting e Narrowing Nel core language, il case statement rende evidente l’ordine di valutazione degli argomenti, L’ordine di applicazione delle regole di riscrittura dipende dalla strategia di riduzione del linguaggio Il passaggio da regole di riscrittura a narrowing porta alla perdita di buone ` proprieta: • confluenza, • lazy – outtermost, • terminazione, • eager – innermost. • l’applicazione del narrowing ci allontana dal soluzione desiderata, istanziazione non desiderata. Pattern matching descrizione piu` dichiarativa, tuttavia: • esplosione dello spazio di ricerca • regole ortogonali, garantisco la confluenza, • e` semplice descrivere la strategia di riduzione in termini di regole di riscrittura outtermost – innermost. P. Di Gianantonio (Udine) Rewriting Systems 87 / 111 Necessita` di usare strategie di riduzione, ma anche qui le cose si complicano: molte proposte, quasi tutte le strategie di riduzione hanno dei difetti. P. Di Gianantonio (Udine) Da funzionale a logico funzionale Rewriting Systems 88 / 111 Needed narrowing Il passaggio da funzionale - logico funzionale e` piu` semplice a livello di core language. Si aggiunge: • un costrutto di scelta non deterministica (or), • variabili libere, • un versione flexible del costrutto case fcase Descrizione sintetica: L’espressione • per ogni funzione f , definita mediante regole, viene data una traduzione ottimale nel core language. (Definitional tree) fcase y of True -> exp1 False -> exp2 • le regole vengono applicate valutando le traduzioni ottimali, nel core language, con strategia lazy. Con y variabile logica, riduce a: exp1 {y/True} ma anche a exp2 {y/False} P. Di Gianantonio (Udine) Rewriting Systems 89 / 111 P. Di Gianantonio (Udine) Rewriting Systems 90 / 111 Esempi di traduzione Traduzione ottimale Le regole: O <= x -> True S x <= O -> False S x <= S y -> x <= y Nella traduzione non ottimale si istanzia y anche quando il primo argomento e` zero. Traduzione ottimale: x <= y = fcase x of O -> True S x1 -> fcase y of O -> False S y1 -> x1 <= y1 Traduzione non ottimale: x <= y = fcase y of O -> fcase x of O -> S x1 S y1 -> fcase x of O S P. Di Gianantonio (Udine) True -> False -> True x1 -> x1 <= y1 Rewriting Systems 91 / 111 La terza foglia del case tree corrisponde al caso in cui y = S y1 e x = O, ossia descrive una regola 0 <= S y1 -> True, non contenuta nell’insieme di regole originario. La regola e` comunque corretta in quanto istanza di una regola (0 <= y -> True) dell’insieme originario. Definizione: Traduzione e` ottimale se ogni sottocaso finale dell’albero dei fcase corrisponde ad una regola. P. Di Gianantonio (Udine) Rewriting Systems Esempi di riduzione: 92 / 111 Costrutto or x <= x + y • Il narrowing ricondotto a istanziazione variabili, sostituzione variabili con termini. • Ogni istanziazione di una variabile, indotta dal flexible case, (es. { x/ S x1 } ) la variabile creata (x1) deve essere nuova ossia non utilizzata altrove nel termine. P. Di Gianantonio (Udine) Rewriting Systems 93 / 111 choice = 0 choice = 1 choice = 0 ’or’ 1 Si forniscono piu` alternative. Tutte devono essere considerate. P. Di Gianantonio (Udine) Rewriting Systems 94 / 111 Costrutto Fail Scrittura sintetica Indica l’impossibilita` di fornire un risultato. Per ottenere una scrittura piu` sintetica, e` conveniente omettere in casi che conducono a Fail. minux x O = x minus (S x) (S y) = minus x y Per esempio al posto di scrivere minus x y = fcase y of O -> x S y1 -> fcase x of O -> Fail S x1 -> minus x y viene tradotta in minus x y = fcase y of O -> x S y1 -> fcase x of O -> Fail S x1 -> minus x y Si scrive: minus x y = fcase y of O -> x S y1 -> fcase x of S x1 -> minus x y Tra le varie computazioni alternative, quelle che portano a fail devono essere annullate. P. Di Gianantonio (Udine) Rewriting Systems 95 / 111 P. Di Gianantonio (Udine) Come ottenere la traduzione ottimale Rewriting Systems Come ottenere la traduzione ottimale ` Una definizione mediante regole dell’and booleano e: ` Una definizione mediante regole dell’and booleano e: and True True = True and x False = False and False x = False and True True = True and x False = False and False x = False che puo` essere tradotta come: che puo` essere tradotta come: and x y = fcase x of True -> fcase y of True -> True False -> False False -> False and x y = fcase x of True -> fcase y of True -> True False -> False False -> False ottimale? ottimale? No. P. Di Gianantonio (Udine) Rewriting Systems 96 / 111 97 / 111 P. Di Gianantonio (Udine) Rewriting Systems 97 / 111 Traduzione ottimale Definitional tree Una traduzione ottimale puo` essere ottenuta attraverso la scelta non deterministica or L’insieme di equazioni che definiscono un termine, sono tradotte in • un termine (albero) x and y = case x of True -> case y of True -> True • con connettivi (nodi) i costrutti fcase e or, • e sottotermini finali (foglie) varianti delle parti destre delle regole. False -> False ’or’ case y of False -> False La traduzione e` ottimale, corretta e completa se tutte le destre parti devono essere inserite, nel punto corretto. Il costrutto or permette traduzioni ottimali, ma va usato con parsimonia, porta ad computazioni meno efficienti, Le sottoespressioni di or devono essere case su variabili differenti. P. Di Gianantonio (Udine) Rewriting Systems 98 / 111 Il definitional tree e` una rappresentazione sintetica della traduzione ottimale. P. Di Gianantonio (Udine) Da regole a definitional tree • se esiste, si considera il primo argomento (quello piu` a sinistra) tra quelli istanziati (demanded) in ogni regola, quindi: • si applica un costrutto fcase (branch tree) su esso, • si ripartiscono le regole in piu` sottoinsiemi, • si ripete la procedura sui sottoinsiemi, • altrimenti, si considera il primo argomento tra quelli istanziati in qualche regola, • si applica un costrutto or (or tree) con due sottotermini, ottenuti partizionando l’insieme di regole in due sottoinsiemi: • il primo contiene le regole che istanziano l’argomento • il secondo tutte le altre regole. Dato un insieme di regole, esistono, in generale, diversi possibili definitional tree associati. equ equ equ equ equ T x F T F F T x T F x F T T F = = = = = F F F T T L’algoritmo di Curry ne seleziona uno. Definitional tree diversi possono avere comportamenti differenti rispetto alla divergenza • applicando ricorsivamente la procedura sui due insiemi, • altrimenti, se non esiste nessun argomento da istanziare, le regole sono immediatamente applicabili. Rewriting Systems 99 / 111 Da regole a definitional tree Algoritmo usato da Curry (descrizione sintetica e informale): Dato un insieme di regole per una funzione f con n argomenti (posizioni): P. Di Gianantonio (Udine) Rewriting Systems 100 / 111 Le risposte calcolate, quando generate, coincidano. Differenze dovuta al comportamento del costrutto or P. Di Gianantonio (Udine) Rewriting Systems 101 / 111 Costrutto or Dalla traduzione ottimale alla strategia di narrowing Le implementazioni non rispettano il comportamento teorico. • comportamento teorico: in A or B genera sia le risposte calcolate da A che quelle calcolate da B. • implementazioni: in A or B genera le risposte calcolate da B solo se la valutazione di A non porta alla divergenza. Date le regole: f x f O bot = = = O S O bot nelle implementazioni di Curry, l’esecuzione di f bot diverge, anche se in teoria puo` terminare con O P. Di Gianantonio (Udine) Rewriting Systems 102 / 111 La traduzione ottimale, attraverso il core language, indica in che modo ridurre un termine con passi elementari. A piu` alto livello, con minor numero di passi, questa riduzione puo` essere vista come applicazioni di regole di narrowing. Con una diversa lettura, una traduzione ottimale (definitional tree) indica una strategia di riduzione (outtermost needed narrowing). Ricordiamo che, dato un insieme di regole R, ed un termine t, una strategia di narrowing definisce: • che regola Ri applicare, • in che posizione p del termine applicarla (a che sottotermine), • con quale unificazione σ, (il needed narrowing non necessariamente usa l’mgu) P. Di Gianantonio (Udine) t t p ,Ri ,σ Rewriting Systems Ottimalita` Da definitional tree a strategia di narrowing Per ridurre un termine t, non in head normal form, con simbolo principale una funzione f , considero • il definitional tree T di f , • genero tanti rami di narrowing quanti sono i nodi in T con un pattern p, di profondita` massimale, che unifichi con t, • nel caso di nodo terminale (regola), applico la regola mediante narrowing su tutto il termine, • nel caso di nodo branch, considero la variabile x selezionata nel pattern, e l’unificazione σ del pattern p con t, se σ(x ) e` • un sottotermine t con simbolo principale una funzione, allora applico la σ e passo a fare il narrowing su t , • un sottotermine t con simbolo principale un costruttore, alloro questo ramo di narrowing fallisce. P. Di Gianantonio (Udine) Rewriting Systems 103 / 111 104 / 111 Da un punto di vista intuitivo, il needed narrowing, mediante valutazione nel core language e` ottimale, ossia porta a ridurre un termine t in head normal form usando le istanziazioni piu` generali e un insieme minimo di riduzioni ´ perche: • la traduzione ottimale mi porta ad applicare le regole, valutando o istanziando al minimo gli argomenti, • la riduzione lazy nel core language, porta a valutare solo gli argomenti strettamente necessari. Inoltre il needed narrowing e` anche completo, se esiste una sequenza di passi di narrowing che portano un termine t in head normal form, allora applicato su t il needed narrowing porta ad una head normal form. P. Di Gianantonio (Udine) Rewriting Systems 105 / 111 Needed position Funzioni induttivamente sequenziali Presentazione teorica, si dimostra che la strategia needed porta solo a passi di riduzione strettamente necessari: La definizione strategia needed e` piuttosto forte. Definizione Per regole di riscrittura arbitrarie, strategie di neeed possono non esistere. Controesempio: [Neeed position] • in un termine t una posizione p e` needed se in ogni riduzione, con regole di riscrittura, normalizzante (in head normal form), un discendente del sottotermine t |p funge da redex. and (and True x) (and True y) Si consideri anche and (and True x) (and False y) Definizione • un passo di narrowing t ` needed se p ,R ,σ t e per ogni τ, p e` una posizione needed in t στ . [Regole induttivamente sequeziale] Un insieme di regole per una funzione f e` induttivamente sequenziale se possiede un definitional tree senza nodi or. • una strategia di narrowing e` needed se lo e` ogni suo passo. Insieme di regole induttivamente sequenziale e` anche ortogonale (le regole non si sovrappongono), ma non il viceversa. Esempi: x <= add y z add 1 x <= add y (add y z) add 1 x <= mult 2 (add y z) P. Di Gianantonio (Udine) Rewriting Systems 106 / 111 P. Di Gianantonio (Udine) Needed narrowing Rewriting Systems 107 / 111 Constrained equality =:= Il costrutto =:= non puo` essere ridotto al solo needed narrowing. La regola x =:= x = success Theorem • non e` lineare sinistra, La strategia di riduzione needed narrowing su funzioni induttivamente ` sequenziali e: • non ha un definitional tree associato. Il costrutto =:= non puo` essere ridotto ad un termine del core language. Es x =:= add y 3 deve restituire success con l’unificazione x / (add y 3) Nessuna traduzione, nel core language, di =:= puo` portare a questo risultato. Infatti le sostituzioni generate dal needed narrowing istanziano usando sempre nuove variabili. Ossia il needed narrowing su un termine t genera sostituzioni nella forma (x1 /t1 , . . . xn /tn ), dove le variabili in t1 , . . . tn sono diverse dalle variabili in t e diverse tra loro. • deterministica, • needed: vengono eseguiti solo passi needed, • completa: per ogni termine s se (s ∗σ t ) con una qualsiasi sequenza di passi di narrowing, e t e` in normal form, allora anche esiste t normal form t.c. s ∗σ t attraverso passi di needed narrowing e σ σ . P. Di Gianantonio (Udine) Rewriting Systems 108 / 111 P. Di Gianantonio (Udine) Rewriting Systems 109 / 111 Semantica di =:= Flexible and rigid Nel valutare in comportamento di un termine e` importante valutare se il comportamento delle funzioni e` rigido o flessibile. Il comportamento della constrained equality necessita di una descrizione ad hoc. Per valuare s =:= t • la si porta in normal form s’ =:= t’, emediante il needed narrowing • si applica l’algoritmo di unificazione sulle forme normali. • rigido: non si istanziano le variabili logiche, se un argomento needed e` una variabile logica, la computazione si sospende. Esempi: le operazioni su valori numerici, l’uguaglianza booleana ==, il costrutto case. • flessibile: se un argomento needed e` una variabile logica la istanzia, applica il narrowing. Esempi: funzioni definite per pattern matching. In una descrizione completa dell’algoritmo di narrowing, si aggiunge un’etichetta ai nodi branch nei definitional tree. • flessibile: applico il narrowing, • rigido: nel caso di variabile logica sospendo la computazione. Corrispondenti a due versioni del costrutto case. P. Di Gianantonio (Udine) Rewriting Systems 110 / 111 P. Di Gianantonio (Udine) Rewriting Systems 111 / 111
© Copyright 2025 ExpyDoc