Linguaggi e Modelli Computazionali LS - Prof E.Denti
FOLExpr Analyzer
Un riconoscitore di teorie della
logica del primo ordine per la loro
conversione in forma a clausole
Scopo del Lavoro


Ricevere in input teorie in logica del primo ordine
(First Order Logic)
Riconoscerne la correttezza sintattica
 Basandosi
sulle regole specificate nel corso di
Intelligenza Artificiale della Prof.Mello
 Progettando una grammatica che generi il linguaggio
che comprende le espressioni della logica del primo
ordine (organizzate in teorie)
 Implementando un riconoscitore per il linguaggio

Eseguire analisi e trasformazioni sintattiche
come la trasformazione in forma a clausole
 Secondo
l’algoritmo a 8 step studiato nel corso
Analisi del Problema

I lucidi del corso di Intelligenza Artificiale introducono la logica del
primo ordine, descrivendola come linguaggio

partendo infatti dalla sintassi, in particolare dal suo alfabeto.
Possibili categorie di token
Possibili keywords
Analisi del Problema

Dai lucidi del corso di Intelligenza Artificiale
Lexer
Lexer
Funzioni n-arie e
predicati sono
sintatticamente
identici, cambia solo la
loro semantica nel
senso di vero/falso
(fuori dallo scope del
progetto)
Analisi del Problema

Dai lucidi del corso di Intelligenza Artificiale
Parser:
simbolo
non
terminale
Termine
Parser:
simbolo
non
terminale
Atomo
Analisi del Problema

Dai lucidi del corso di Intelligenza Artificiale
NON TERMINALE FBF:
Potrebbe essere lo scopo
della grammatica, ma per
analizzare TEORIE, prima
avremo bisogno di:
•TEORIA :: LINEA {LINEA}
•LINEA ::= FBF ;
Analisi del Problema

Dai lucidi del corso di Intelligenza Artificiale
Attenersi in modo troppo
stretto alle regole
specificate nel linguaggio
umano si potrebbe giungere a
una grammatica ambigua come
questa:
•TEORIA :: LINEA {LINEA}
•LINEA ::= FBF ;
•FBF ::= FBF (→|↔|Λ|V) FBF
•FBF ::= ~ FBF | ("|$) var FBF
•FBF ::= ATOMO
Parser: simbolo
non terminale
Letterale
Analisi del Problema

Dai lucidi del corso di Intelligenza Artificiale
La parte di grammatica derivata
direttamente dal testo non va
bene ma del resto siamo ancora
in fase di analisi...
Interprete: due
possibili
manipo1lazioni
Analisi del Problema

Dai lucidi del corso di Intelligenza Artificiale
Interprete:
Ci sarà un visitor
per questo
Interprete:
Oltre che
trasformazioni,
si potrebbero fare
anche analisi come
questa
Analisi del Problema

Altre analisi sintattiche da poter fare con l’interprete
Grammatica iniziale: Il Parser
THEORY ::= ONE_LINE | { ONE_LINE }
ONE_LINE ::= FBF semicolon
Associatività a sx: ok! date
le proprietà delle
operazioni logiche
Regole di precedenza
FBF ::= DISG | FBF (→|↔) DISG
descritte nei lucidi
DISG ::= CONG | DISG or CONG
rispettate!
CONG ::= UNARIO | CONG and UNARIO
UNARIO ::= QUANT | LETTERALE
Non è LL(k)!
Ricorsione SX in
QUANT ::= (forall | exists) var UNARIO
FBF, DISG e CONG
LETTERALE ::= ATOMO | not UNARIO
ATOMO ::= TERM | open FBF close
TIPO 2:
TERM ::= var |
Self embedding
in ATOMO e TERM
ident { open TERM { comma TERM } close }
funzione e costante:
inglobate in TERM
Se volessimo FBF vuote:
FBF → DISG | FBF(→|↔)DISG | ε
il linguaggio resterebbe di tipo2 perchè si potrebbe
eliminare del tutto l’ε-rule:
LINE → FBF ; | ;
FBF→ DISG | FBF(→|↔)DISG
Verso una grammatica LL(1)

Per poter applicare l’analisi ricorsiva discendente
si può eliminare la ricorsione sinistra da:
FBF ::= DISG | FBF (→|↔) DISG
DISG ::= CONG | DISG or CONG
CONG ::= UNARIO | CONG and UNARIO

Ad Esempio:
FBF ::= DISG | FBF (→|↔) DISG
FBF ::= DISG | DISG Z ::= DISG (ε|Z)
Z ::= (→|↔) DISG { (→|↔) DISG }
Sostituendo Z in FBF:
FBF ::= DISG (ε| (→|↔) DISG { (→|↔) DISG })
La notazione EBNF permette di esprimere ε-rules
FBF ::= DISG [ (→|↔) DISG { (→|↔) DISG }]
Ma [A{A}]={A} quindi se A=(→|↔) DISG
FBF ::= DISG { (→|↔) DISG }


Ora abbiamo un
riconoscitore
deterministico
Ora la complessità del
riconoscitore cresce
linearmente con la
lunghezza della teoria
in ingresso
Sintassi Concreta
THEORY ::= ONE_LINE | { ONE_LINE }
ONE_LINE ::= FBF semicolon
Ora associatività a
destra!
Va ancora bene per la
semantica delle
operazioni logiche
(anche se non serve
perchè non calcolo il
valore di verità)
FBF ::= DISG { (→|↔) DISG }
DISG ::= CONG { or CONG }
CONG ::= UNARIO { and UNARIO }
UNARIO ::= QUANT | LETTERALE
QUANT ::= (forall | exists) var UNARIO
LETTERALE ::= ATOMO | not UNARIO
ATOMO ::= TERM | open FBF close
TERM ::= var |
ident { open TERM { comma TERM } close }
Grammatica JavaCC
Introduzione dei non
terminali negazione e
var: utile nel visitor
VarRenamingVisitor
L’interprete
Analisi del problema

Dimostrazioni in logica dei predicati basate su procedure come

Principio di risoluzione
 Forward chaining e Backward Chaining (usato dal prolog)
 che operano (prop. di correttezza e completezza) su teorie in forma a clausole



Necessario uno step
preliminare di
trasformazione in
clausole
Algoritmo 8 passi
Ogni passo un
Visitor
ClosedFormVisitor
ImplicReductionVisitor
Analisi del problema
NegReductionVisitor
VarRenamingVisitor
Analisi del problema
QuantificationsAHeadVisitor
CongPrenexFormVisitor
SkolemVisitor
Analisi del problema
ForallRemoverVisitor
•Visitors in serie: assumono di essere
applicati solo ad espressioni con
determinate caratteristiche cioè già
visitate e trasformate da visitor
precedenti
• Visitor indipendenti: applicabili
sempre, non fanno assunzioni
Architettura

Catena di visitor (dall’analisi)


Compilatore di espressioni della logica del primo ordine in clausole
del primo ordine
Manca la costruzione dell’AST


Dump della stringa, modifiche dove servono
maggior sfruttamento possibile del tool javacc

syntax
tree
input
Maggiore rapidità di sviluppo - poca efficienza
visita A
String A
Input
String
syntax
treeA
visita B
String B
PARSER
syntax
treeB
....
visita n
String n
syntax
tree n
Oggetto VisitResult
contenente stringa e
syntaxtree
Architettura

CompilerVisitor, VisitRsult e Factory
Architettura

Schema globale
Un esempio di Visitor
Limiti – Caratteristiche non
supportate - Future Work

Concettualmente
Sintassi astratta
 Implementazione dell’unificazione e del principio di
risoluzione
 Piano collaudo


Implementazione
Visitor che genera l’AST e trasformazioni degli altri
visitor sull’AST, non sul output del parser
 Multithreading – soprattutto per GUI e pattern
Observer

Fine
Scarica

FOLExpr Analyzer