succ prec
indice
Generalizzazione Relativa Meno Generica
Operatore di Generalizzazione
Il procedimento descritto e' basato sulla ripetuta applicazione dell'operatore
di generalizzazione all'ipotesi corrente.
Data una clausola c, l'operatore di generalizzazione p(c)
ritorna l'insieme delle clausole c' (consentite dal linguaggio L)
che siano minori di c, rispetto all'ordinamento indotto da theta-subsumpion
p(c) = { c' | c' appartiene a L,
c' <theta-sub. c }
Il procedimento prevede due operazioni sintattiche sulla clausola c:
-
applicazione di una sostituzione inversa alla clausola c
-
rimozione di un letterale dal corpo della clausola
Generalizzazione Meno Generica
Introdotta da Plotkin (least general generalization "lgg") per consentire
solo generalizzazioni ragionevolmente "prudenti" durante la ricerca bottom-up
nello spazio delle ipotesi.
E' motivata dal fatto che se le clausole c' e c'' sono
vere, allora probabilmente e' vera anche lgg(c',c'').
Richiamando la struttura a reticolo dello spazio delle ipotesi,
lgg(c',c'') indica la minima generalizzazione comune delle due clausole
c' e c''.
Piu' precisamente, lgg(c',c'') puo' venire introdotto come segue:
-
lgg di termini: lgg(t',t'')
-
lgg(t,t) = t
-
lgg( f (s1, ... ,sm),f (t1, ... ,tm))
= lgg( s1, t1 ), ... , lgg( sm, tm
)
-
lgg( f (s1, ... ,sm),f (t1, ... ,tm))
= V, se f != g e dove V e' una nuova variabile
che rappresenta lgg( f (s1, ... ,sm),f (t1,
... ,tm))
-
lgg(s,t) = V, se s != t ed s oppure t e' una variabile; in questo
caso, V e' una variabile che rappresenta lgg(s,t)
Esempi:
-
lgg([a,b,c], [a,c,d]) = [a,X,Y]
-
lgg( f (a,a), f(b,b) ) = f( lgg( a,b ), lgg( a,b) ) = f( V,V ) , dove V
e' una variabile che rappresenta lgg( a,b ); l'univocita' di quasta rappresentazione
deve essere mantenuta per tutte le sostituzioni appropriate.
-
lgg di atomi: lgg(A',A'')
-
lgg( p( s1, ... sm ), p( t1, ... tm
) ) = p( lgg( s1, t1), ... ,lgg( sm,
tm) )
-
lgg( p( s1, ... sm ), q( t1, ... tm
) ) = non definito se p != q
-
lgg di letterali: lgg(L',L'')
-
se L' e L'' sono atomi, lgg(L',L'') e' definito come nel punto precedente
-
se sia L' che L'' sono letterali negati ( L' = not A', L'' = not
A''),
allora lgg(L',L'') = lgg( not A', not A'' ) = not lgg ( A', A'' )
-
se L' e' un letterale positivo mentre L'' e' negato, allora lgg(L',L'')
e' non definito
Esempi:
-
lgg( genitore(anna,maria), genitore( anna, tommaso )) = genitore( anna,
X )
-
lgg( genitore(anna,maria), not genitore( anna, tommaso )) = non definito
-
lgg( genitore(anna,X), figlia( maria, anna )) = non definito
-
lgg di clausole: lgg(c',c'')
-
usando la notazione
c = H :- B1,...,Bn, = (H v not B1v
... v not Bn ) = { H, not B1, ... ,not Bn}
= { c1,...,cn+1 },
date c',c'' c' = { L1,...,Ln }, c'
= { K1,...,Km },
lgg( c', c'' ) = { Mij = lgg( Li,Kj )
| Li e' in c' Kj e' in c'' ed lgg( Li,Kj
) e' definito }
Esempi:
-
se c' = figlia(maria,anna) :- femmina(maria), genitore( anna, maria )
e se c'' = figlia(eva,tommaso) :- femmina(eva), genitore( tommaso,
eva )
allora lgg( c', c'') = figlia(X,Y) :- femmina(X), genitore( Y, X ),
dove X rappresenta lgg( maria, eva ) e Y rappresenta lgg(anna,tommaso)
Generalizzazione Relativa Meno Generica
Metodo di induzione usato da GOLEM, applica
la ricerca di lgg(e',e'') a due esempi positivi, considerando le possibili
generalizzazioni relativamente alla conoscenza di base, per ottenere
la clausola di induzione rlgg( e',e'' ) come generalizzazione minima dei
due esempi.
succ prec
indice