1.1k likes | 1.3k Views
Introdução a Programação em Lógica e Prolog. Jacques Robin CIn-UFPE. Lógica da Programação em Lógica. L 1 ch :Lógica Clássica de Horn da 1 a ordem. L 1 nh :Lógica não-monótona de Horn da 1 a ordem. L 1 c :Lógica Clássica dos Predicados. O que é a Programação em Lógica?.
E N D
Introdução a Programação em Lógica e Prolog Jacques Robin CIn-UFPE
Lógica da Programação em Lógica L1ch:Lógica Clássica de Horn da 1a ordem L1nh:Lógica não-monótona de Horn da 1a ordem L1c:Lógica Clássica dos Predicados O que é a Programação em Lógica? • Para a IA: um paradigma de representação do conhecimento e raciocínio automático • Para a engenharia de software: um paradigma de especificação de software e de programação • Para os bancos de dados: um modelo conceitual de dados • Para a teoria da computação: um conjunto de lógicas • Visão unificadora trans-disciplinar de várias área da computação
Metáfora da programação em lógica • Teoria lógica = Base de Conhecimento (BC) • Axiomas e regras da teoria lógica = BC estática • Teoremas da teoria lógica = BC dinâmica • deduzidos a partir dos axiomas e das regras • Máquina de inferência = provador de teorema • Teoria lógica = modelo de software = implementação de software • Programar =apenas declararaxiomas e regras • Execução do programa = construção de prova de teorema • Compilador/interpretador = provador de teorema • Estrutura de controle (única) = mecanismo de dedução automática • Disparar execução do programa = perguntar verdade de um teorema • Teoria lógica = Banco de Dados (BD) • Definir dados = declarar axiomas e regras • Consultar BD = perguntar verdade de um teorema
Inteligência Artificial Representação do conhecimento Sistemas especialistas Planejamento Aprendizagem de máquina Processamento de linguagem natural Sistemas multi-agentes Robótica Matemática computacional simbólica Sistemas Distribuídos e Internet Comércio eletrónico Recuperação, filtragem e extração de informação Engenharia de Software Prototipagem rápida de software complexos Especificações formais executáveis Programação por resolução de restrições Programação multi-paradigma de alto-nível Banco de Dados BD dedutivos e DOO Mineração de Dados e Descoberta de Conhecimento Integração de Dados e Interoperabilidade Aplicações da programação em lógica
O que é Prolog? • Primeira e mais divulgada linguagem do paradigma da Programação em Lógica (PL) • Operacionalização simples, prática e eficiente da metáfora da PL, embora teoricamente impura • Padrão ISO • Maioria das outras linguagens de PL são extensões de Prolog • Surgiu na década de 70 • Na moda na década de 80 (o Java da época ) • Hoje permanece pouco divulgado e usado na indústria
Representação do conhecimento Procedimentos Programação Imperativa Lógica Provadores de Teoremas Regras Shells de Sistemas Especialistas Classes/Objetos Redes Semânticas Programação OO Frames Classes/Objetos + Procedimentos Classes/Objetos + Lógica Lógicas descritivas Regras + Procedimentos Sistemas de Produção Regras + Classes/Objetos + Procedimentos Sistemas de Produção OO Regras + Lógica Programação em lógica Regras + Classes/Objetos + Lógica Programação em lógica OO
Lógica dos predicados como formalismo de representação do conhecimento • Vantagens: • Muito versátil e expressivo • Com semântica declarativa bem definida • Com grande número de mecanismos de inferência dedutivos com propriedades formais e custos computacionais muito bem conhecidos • Porque então L1C não vingou como FRC padrão? • De fato vingou a nível teórico, já que cada novo FRC proposto acaba ser re-estudado em termos lógicos • Desvantagens práticos: • Não é intuitiva para especialistas do domínio de aplicação do sistema inteligente (médico, advogado, lingüista, engenheiro, etc.) • Oferece variedade de modelagens excessiva (muita fórmulas sintaticamente diferentes porém semanticamente equivalentes) • Prova de teoremas em L1C é computacionalmente inviável para grandes bases de conhecimento
( P,W,N american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(P)) ( W owns(nono,W) missile(W)) ( W owns(nono,W) missile(W) sells(west,nono,W)) american(west) nation(nono) enemy(nono,america) ( W missile(W) weapon(W)) ( N enemy(N,america) hostile(N)) nation(america) ( ( P,W,N criminal(P) american(P) weapon(W) nation(N) hostile(N)) ( W owns(nono,W) missile(W1)) ( W sells(west,nono,W) owns(nono,W) missile(W)) ( P american(P) P = west) ( N nation(N) N = nono) ( W weapon(W)) missile(W)) ( N1,N2 N1=nono N2=america emeny(N1,N2)) ( N hostile(N) enemy(N,america)) ( N nation(N) N = america)) West é criminoso? em lógica dos predicados: variantes sintáticas
Regras de shell de sistemas especialistas • IF premissa THEN conclusão • Premissas e conclusão em linguagem pseudo-natural com conectivas genécias IF_THEN, AND, OR, ISA, HAS e outras dependente do domínio ligando nomes de entidades (classes) e propriedades (atributos) do domínio • Vantagens: • Intuitivas para especialista do domínio de aplicação • Variedade mais restrita de modelagens • Desvantagens: • Atalha nível da formalização no processo de engenharia de conhecimento • Semântica declarativa ambígua • Mecanismo de dedução ad-hoc com propriedades e formais e custos computacionais mal conhecidos
Em lógica dos predicados: ( P,W,N american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(P)) ( W owns(nono,W) missile(W)) ( W owns(nono,W) missile(W) sells(west,nono,W)) american(west) nation(nono)enemy(nono,america) ( X missile(W) weapon(W)) ( X enemy(N,america) hostile(N)) nation(america) Com shell de sistema especialista: Base deregras: IF P ISA american AND W ISA weapon AND N ISA nation AND N IS hostile AND P sells W TO N THEN P IS criminal IF W ISA missile AND nono HAS W THEN west sells W TO nono IF W ISA missile THEN W ISA weapon IF america HAS enemy N THEN N IS hostile Base defatos iniciais: west ISA american nono ISA nation america ISA nation america HAS enemy nono nono HAS m1 m1 ISA missile West é criminoso? Lógica x Regras “intuitivas” de shell
Elicitação do conhecimento • Nível do conhecimento: • Nos termos do especialista do domínio de aplicação • Linguagem natural, Notações gráficas ad-hoc Formalização do conhecimento • Nível formal: • Notação sem ambigüidade com semântica definida matematicamente (ex, lógica, probabilidades) • Verificação de consistência • Nível semi-formal: • Notação textual estruturada padrão (ex, XML) • Notação gráfica padrão (ex, UML) • Validação com especialista Implementação do conhecimento • Nível da implementação: • Codificação em uma linguagem de programação • Teste de protótipo Engenharia de uma base de conhecimento • Entrevistas estruturadas com especialista • Preparação de dados • Linguagens formaisde representação do conhecimento • Aprendizagemde Máquina • Ontologias • Linguagenssemi-formaisde representaçãodo conhecimento • Compiladores • Máquinas de inferências • Aprendizagemde Máquina
Problema com regras não baseadas na lógica segue-se ?? fatosfatos sentençassentenças Mundo semântica ?? semântica ?? Representação deriva
Formas normais da lógica dos predicados • Forma normal conjuntiva: • Conjunção de cláusulas disjuntiva, i.e., de disjunção de formulas atômicas positivas ou negadas • (P11 ... Pi1 C11 ... Ci1) ... (Pn1 ... Pk1 Cn1 ... Ck1) • Dispensa conectivas , e , torna implícito • Formal norma implicativa: • conjunção de cláusulas implicativas, i.e., de implicações de conjunção de formulas atômicas positivas para disjunção de formulas atômicas positivas • (P11 ... Pi1 C11 ... Ci1) ... (Pn1 ... Pk1 Cn1 ... Ck1) • Dispensa conectivas , e , torna implícito • São equivalentes pela definição da implicação: (P C) (P C) (P11 ... Pi1 C11 ... Ci1) ... (Pn1 ... Pk1 Cn1 ... Ck1) • ((P11 ... Pi1) (C11 ... Ci1)) ... ((Pn1 ... Pk1) (Cn1 ... Ck1)) • (P11 ... Pi1 C11 ... Ci1) ... (Pn1 ... Pk1 Cn1 ... Ck1)
Prolog puro: Lógica de Horn L1ch • Programa Prolog = formula da Lógica de Horn L1ch sem predicado de igualdade • Formula de L1ch: • Formula da lógica dos predicados em forma normal implicativa com clausulas de conclusão única • (P11 ... Pi1 C1) ... (Pn1 ... Pk1 Cn) • L1ch L1h: • Algumas formulas da lógica dos predicados não tem formula de Horn equivalente • ex, animalLover(X) animal(Y) kills(X,Y).
Programação em lógica como formalismo de representação do conhecimento • Meio termo entre lógica dos predicados e regras “intuitivas” de shell • Vantagens para aquisição de conhecimento: • Formula da lógica de Horn tem mapeamento direto com de bases fatos e de regras intuitivas de shell de sistemas especialistas • Representação mais simples e intuitiva do que lógica sem atalhar nível da formalização • Reduz consideravelmente número de paráfrases sintáticas • Vantagens para máquina de inferência: • Raciocínio dedutivo correto e semi-completo: a refutação por resolução • Espaço de busca da refutação por resolução muito menor em lógica de Horn do que é lógica dos predicados (eficiência) • Perda de expressividade em comparação da lógica dos predicados: • Facilmente contornável para maioria das aplicações de IA • Uso prático principal dos provadores de teoremas da lógica dos predicados: engenharia de software formal e matemática computacional, não IA
Unificação • Exemplos: • unif(conhece(joao,X),conhece(Y,leandro)) = {X/Leandro,Y/joao} • unif(conhece(joao,X),conhece(X,leandro) = fail • unif(conhece(joao,X),conhece(Y,mae(Y)) = {Y/joao, X/mae(joao)} • unif(conhece(joão,X),conhece(Y,Z)) = {Y/João, X/Z}, ou {Y/joão, X/Z, W/zelda} ou {Y/joão, X/joão, Z/joão} ... • Unificador mais geral: com menor número de variáveis instanciadas • Substituição mínima: com menor número de pares Var/const
Cláusulas Prolog x Cláusulas de Horn • Fatos Prolog: • Cláusulas de Horn com premissa única T implícita • Escritos C. Com semântica: T C • Regras Prolog: • Outras cláusulas de Horn • Escrita C :- P1, ... ,Pn. Com semântica: P1 ... Pn C • Escopo das variáveis = uma cláusula • Premissas de várias cláusulas com a mesma conclusão são implicitamente disjuntivas • Semântica de: C :- P1, ... ,Pn. C :- Q1, ... ,Qm, é:(P1 ... Pn C) (Q1 ... Qm C) • ((P1 ... Pn ) C) ((Q1 ... Qm )) C) (p+c).(q+c) • ((P1 ... Pn ) (Q1 ... Qm )) C pq + c • ((P1 ... Pn ) (Q1 ... Qm )) C • ((P1 ... Pn ) (Q1 ... Qm )) C
Requisitos em inglês 1. It is crimimal for an American to sell weapons to an hostile country 2. Nono owns missiles 3. Nono acquires all its missiles from West 4. West is American 5. Nono is a nation 6. Nono is an enemy of the USA 0. Is West a crimimal? Em lógica da 1a ordem 1. P,W,N american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(P) 2. W owns(nono,W) missile(W) 3. W owns(nono,W) missile(W) sells(west,nono,W) 7. X missile(W) weapon(W) 8. X enemy(N,america) hostile(N) 4. american(west) 5. nation(nono) 6. enemy(nono,america) 9. nation(america) West é criminoso? em lógica dos predicados
Em lógica da 1a ordem 1. P,W,N american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(P) 2. W owns(nono,W) missile(W) 3. W owns(nono,W) missile(W) sells(west,nono,W) 7. X missile(W) weapon(W) 8. X enemy(N,america) hostile(N) 4. american(west) 5. nation(nono) 6. enemy(nono,america) 9. nation(america) Em formal normal american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(P) owns(nono,m1) missile(m1) owns(nono,W) missile(W) sells(west,nono,W) missile(W) weapon(W) enemy(N,america) hostile(N) american(west) nation(nono) enemy(nono,america) nation(america) West é criminoso?em formal normal implicativa
Em Lógica de Horn: american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) => criminal(P) owns(nono,m1) missile(m1) owns(nono,W) missile(W) sells(west,nono,W) missile(W) weapon(W) enemy(N,america) hostile(N) american(west) nation(nono) enemy(nono,america) nation(america) Em Prolog: criminal(P) :- american(P), weapon(W), nation(N), hostile(N), sells(P,N,W). owns(nono,m1). missile(m1). sells(west,nono,W) :- owns(nono,W), missile(W). weapon(W) :- missile(W). hostile(N) :- enemy(N,america). american(west). nation(nono). enemy(nono,america). nation(america). West é criminoso? em Prolog
criminal(P) :- american(P), weapon(W), nation(N), hostile(N), sells(P,N,W). owns(nono,m1). missile(m1). sells(west,nono,W) :- owns(nono,W), missile(W). weapon(W) :- missile(W). hostile(N) :- enemy(N,america). american(west). nation(nono). enemy(nono,america). nation(america). criminal(west)? <- yes. american(west)? -> yes. weapon(W)? <- W = m1. missile(W)? -> W = m1. nation(N)? -> N = nono. hostile(nono)? <- yes. enemy(nono,america)? -> yes. sells(west,nono,m1)? <- yes. owns(nono,m1)? ->yes. missile(m1)? -> yes. West é criminoso? busca
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(P) american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) sells(west,nono,W) missile(W) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) sells(west,nono,W) missile(W) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) sells(west,nono,W) missile(W) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) sells(west,nono,W) missile(W) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) sells(west,nono,W) missile(W) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) sells(west,nono,W) missile(W) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) sells(west,nono,W) missile(W) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) sells(west,nono,W) missile(m1) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,W) sells(west,nono,W) missile(m1) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) sells(west,nono,W) missile(m1) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) sells(west,nono,W) missile(m1) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) sells(west,nono,W) missile(m1) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(N) sells(west,N,m1) sells(west,nono,W) missile(m1) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,W) missile(m1) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,W) missile(m1) enemy(N,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,W) missile(m1) enemy(nono,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,W) missile(m1) enemy(nono,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,W) missile(m1) enemy(nono,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,W) missile(m1) enemy(nono,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,m1) missile(m1) enemy(nono,america) owns(nono,W) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,m1) missile(m1) enemy(nono,america) owns(nono,m1) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,m1) missile(m1) enemy(nono,america) owns(nono,m1) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,m1) missile(m1) enemy(nono,america) owns(nono,m1) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,m1) missile(m1) enemy(nono,america) owns(nono,m1) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,m1) missile(m1) enemy(nono,america) owns(nono,m1) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,m1) missile(m1) enemy(nono,america) owns(nono,m1) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,m1) missile(m1) enemy(nono,america) owns(nono,m1) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
West é criminoso?Encadeamento de regras para trás criminal(west)? yes criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) sells(west,nono,m1) missile(m1) enemy(nono,america) owns(nono,m1) american(west) missile(m1) nation(nono) enermy(nono,america) owns(nono,m1) nation(america)
criminal(P) :- american(P), weapon(W), nation(N), hostile(N), sells(P,N,W). owns(nono,m1). missile(m1). sells(west,nono,W) :- owns(nono,W), missile(W). weapon(W) :- missile(W). hostile(N) :- enemy(N,america). american(west). nation(america). enemy(nono,america). nation(nono). criminal(west)? <- yes. american(west)? -> yes. weapon(W)? <- W = m1. missile(W)? -> W = m1. nation(N)? -> N = america. hostile(america)? <- no. enemy(america,america)? -> no. backtrack: nation(N), N \ {america}? -> N = nono. hostile(nono)? <- yes. enemy(nono,america)? -> yes. sells(west,nono,m1)? <- yes. owns(nono,m1)? -> yes. missile(nono,m1)? -> yes. West é criminoso ? backtracking