Programao em Lgica Indutiva Jacques Robin CInUFPE O

  • Slides: 35
Download presentation
Programação em Lógica Indutiva Jacques Robin CIn-UFPE

Programação em Lógica Indutiva Jacques Robin CIn-UFPE

O que é ILP (Inductive Logic Programming)? Aprendizagem Indutivo * Programação em Lógica Indutiva

O que é ILP (Inductive Logic Programming)? Aprendizagem Indutivo * Programação em Lógica Indutiva (IPL) Programação em Lógica ILP x resto da aprendizagem • Descobre conhecimento novo expressado em lógica da 1 a ordem * ILP x resto da programação em lógica • Inverte mecanismos de dedução para implementar indução

Dimensões de aprendizagem * Metáfora cognitiva (ou paradigma): • Simbólica, Nebulosa, Estatística, Conexionista, Evolucionista,

Dimensões de aprendizagem * Metáfora cognitiva (ou paradigma): • Simbólica, Nebulosa, Estatística, Conexionista, Evolucionista, Híbrida * Propriedades matemáticas da função a aproximar: • domínio e contra-domínio {0, 1}, R • dependência: linear, linear por parte, não linear, etc. * Representação da função a aproximar: • lógica, probabilística, numérica * Propriedades matemáticas do espaço das representações: • dimensão • densidade

Dimensões de aprendizagem (cont. ) * Conhecimento: • a priori: aproveitável, necessário • aprendido:

Dimensões de aprendizagem (cont. ) * Conhecimento: • a priori: aproveitável, necessário • aprendido: novidade, interpretabilidade * Algoritmo de aprendizagem: • iterativo ou não • local ou global * Feedback disponível: • supervisionado, não supervisionado, por reforço • nível de ruído (grau de aproximação)

Aprendizagem: feedback disponível * Aprendizagem supervisionada: certo ou errado • Dado um conjunto de

Aprendizagem: feedback disponível * Aprendizagem supervisionada: certo ou errado • Dado um conjunto de exemplos pré-classificados, aprender uma descrição geral que encapsula a informação contida nesses exemplos e que pode ser usada para prever casos futuros • ex. concessão de crédito * Aprendizagem não supervisionada: se vira! • Dada uma coleção de dados não classificados, agrupá-los por regularidades • ex. caixa de supermercado empacotando * Aprendizagem por reforço: recompensa/punição • ex. jogo de xadrez, Robo. Cup: é por aí!

Dedução x Indução * Dedução: D(A, R) = T • a partir de t

Dedução x Indução * Dedução: D(A, R) = T • a partir de t t uma base de axiomas A conhecida a priori uma base de regras de inferência R conhecida a priori • deduzir: a base de teoremas T, tal que: A R |= T * Indução: I(A, T, R) = H • a partir de: t t t base de axiomas A conhecida a priori base de teoremas T+ e não teoremas T- observada empiricamente uma base de regras de inferência R conhecida a priori • induzir: t t * base de regras de inferência hipotéticas H, tal que: A R H |= T+ e A R H | T- ILP : indução com A, R, H e T representadas em Lógica de Horn da 1 a ordem.

ILP ao longo das dimensões de aprendizagem * * Metáfora cognitiva: simbólica Função a

ILP ao longo das dimensões de aprendizagem * * Metáfora cognitiva: simbólica Função a aproximar: booleana Representação da função a aproximar: fórmula da lógica de Horn da 1 a ordem Algoritmo de aprendizagem: • iterativo ou não • local ou global * Feedback: • supervisionado • ruído: com ou sem * Conhecimento a priori: • aproveitável • necessário quando poucos exemplos * Conhecimento aprendido: • altamente interpretável • alguns métodos de ILP criam novos predicados

ILP x outras abordagem de aprendizagem * Vantagens x outros métodos de aprendizagem (ID

ILP x outras abordagem de aprendizagem * Vantagens x outros métodos de aprendizagem (ID 3, version-space, redes neurais, redes bayesianas, etc. ): • • * indução de relações abstratas e definições recursivas na forma de um programa diretamente executável aproveitamento do conhecimento a priori do domínio poucos exemplos necessários (i. e. , A e T podem ser pequenas) Desvantagens x outros métodos de aprendizagem: • alto custo computacional do treinamento • dificuldade em formar hipóteses interessantes na ausência de conhecimento a priori

Aprender relação abstrata com ILP: daughter(D, P) = f(father, female, mother). Conhecimento a priori

Aprender relação abstrata com ILP: daughter(D, P) = f(father, female, mother). Conhecimento a priori * Intencional: * parent(F, C) : - father(F, C). * parent(M, C) : - mother(M, C). * Extensional: * father(pat, ann). * father(tom, sue). * female(ann). * female(eve). * female(sue). * male(pat). * male(tom). * mother(eve, sue). * mother(ann, tom). Exemplos * Positivos: * daughter(sue, eve). * daughter(ann, pat). * Negativos: * not daughter(tom, ann). * not daughter(eve, ann). Objetivo: * Induzir: * daughter(D, P) : female(D), parent(P, D).

Aprender definição recursiva com ILP: ancestor = f(parent, ancestor). Conhecimento a priori * Intencional:

Aprender definição recursiva com ILP: ancestor = f(parent, ancestor). Conhecimento a priori * Intencional: parent(F, C) : - father(F, C). parent(M, C) : - mother(P, C). * Extensional: father(pat, ann). father(tom, sue). female(ann). female(eve). female(sue). male(pat). male(tom). mother(eve, sue). mother(ann, tom). Exemplos * Positivos: ancestor(tom, sue). ancestor(eve, sue). . * Negativos: not ancestor(ann, eve). not ancestor(sue, eve). . * Definição induzida: ancestor(A, D) : - parent(A, D). ancestor(A, D) : parent(A, P), ancestor(P, D).

Dimensões de ILP * Tarefa: • • • * Grau de automação: interativo x

Dimensões de ILP * Tarefa: • • • * Grau de automação: interativo x autónomo Incremental (na apresentação dos dados): sim/não Semântica: monótona normal, monótona definita, não-monótona Descoberta de predicados: com/se Entrada: T+, T+ T-, T+ A R, T+ T- A R Saída: um x vários predicados, LP x CLP Abordagem: • Operadores: -subsumption, rlgg, resolução ou implicação inversa • Restrições da linguagem de hipótese L(H) (language bias): t sintáticas x semânticas t parametrizadas x declarativas • Estratégia de busca: t Global: especialização (top-down) x generalização (bottom-up) t Local (preference bias):

Algoritmo genérico de ILP * inicialize fila de hipótese Fh * repetir • •

Algoritmo genérico de ILP * inicialize fila de hipótese Fh * repetir • • • delete H de Fh escolha regras de inferências R 1, …, Rk em R induz H 1, …, Hn aplicando R 1, …, Rk a H coloca H 1, …, Hn em Fh pode Fh * até satisfazer critério. De. Parada para Fh * Qualquer algoritmo de ILP: • é uma instância desse algoritmo • com definições e implementações particulares para: t inicialize, delete, escolha, pode e critério. De. Parada

Generalizacão x Especialização Generalização (busca bottom-up) * parte da hipótese a mais específica: qualquer

Generalizacão x Especialização Generalização (busca bottom-up) * parte da hipótese a mais específica: qualquer exemplo positivo * iterativamente generaliza-lá * aplicando regras de indução * até a 1 a que cobre: • quase todos os exemplos positivos • quase nenhum exemplo negativo Especialização (busca top-down) * parte da hipótese a mais geral: c(…, X, …) : -. * iterativamente especializa-lá * aplicando regras de dedução * até a 1 a que cobre: • quase todos os exemplos positivos • quase nenhum exemplo negativo Para os 2: • “quase” definido quantitativamente via uma taxa de erro • necessária para: • evitar overfitting da amostra de treinamento • garantir o poder de generalização da hipótese

Semântica monótona * Propriedades: • • * Consistência a priori: A R T- |=

Semântica monótona * Propriedades: • • * Consistência a priori: A R T- |= {f} Necessidade a priori: A R | {f} Consistência a posteriori: A R T- H |= {f} Completude a posteriori: A R H |= T+ Casos particulares: • Monótona definida: t t Monótona normal com B e H limitado a cláusulas definidas, ie, c(X, Y) : - p(X), q(Y) mas não t : - p(X), q(Y). • Monótona baseada em exemplos: t t Monótona definida com todos T+ e T- fatos instanciados (unit ground clauses) ie, c(a, b) ou not c(a, b) mas nem c(X, b), nem c(a, b) : - p(a), q(b).

Modelos de Herbrand * M(L) modelo de Herbrand de um programa lógico L sse:

Modelos de Herbrand * M(L) modelo de Herbrand de um programa lógico L sse: • M(L) = {p(…, c, …) | p pred(L) c const(L) L |= p(…, c, …)} = todos os fatos instanciados formados a partir de predicados e constantes de L e deriváveis a partir de L * Exemplo: • L = {male(paulo). female(ana). male(joao). parent(paulo, joao). parent(ana, joao). father(F, C) : - parent(F, C), male(F). mother(M, C) : - parent(F, C), female(M). } • M(L) = {male(paulo). female(ana). male(joao). parent(paulo, joao). parent(ana, joao). father(paulo, joao). mother(ana, joao). } * Thm: L sem not M(L) mínimo

Semântica não-monótona * Pressupostos: • • * T+ A R T- = L(H) -

Semântica não-monótona * Pressupostos: • • * T+ A R T- = L(H) - A R via hipótese do mundo fechado A R limitado a cláusulas definidas M+(A R) = modelo de Herbrand mínimo de A R Propriedades: • Validade: H M+(A R ) • Completude: H |= M+(A R) • Minimal: G H G inválido ou incompleto * Mais conservadora do que semântica monótona: • • A R = {bird(tweety). bird(oliver). } T+ = {flies(tweety). } Com semântica monótona, flies(X) : - bird(X). H Com semântica não-monótona, flies(X) : - bird(X). H

Regras e operadores para ILP Especialização (refinamento) baseado em -Subsumption * Relative Least Generalization

Regras e operadores para ILP Especialização (refinamento) baseado em -Subsumption * Relative Least Generalization (RLGG) * Resolução inversa em V * Resolução inversa em W (invenção de predicados) * Implicação inversa * Derivação inversa (inverse entailment) *

 -Generalização ( -Subsumption) G -generaliza S sse substituição , (G) S * ie,

-Generalização ( -Subsumption) G -generaliza S sse substituição , (G) S * ie, G se unifica com uma parte de S * ex, com = {D/ann}, daughter(D, P) : - female(D). -generaliza daughter(ann, P) : - female(ann), parent(P, ann). * Sugere 2 operadores de especializações: * • aplicar substituição e acrescentar premissa (G -generaliza S) (G |= S) -- “G entails S” * mas ((G |= S) (G -generaliza S)) * contrex, * • G: humano(pai. De(H)) : - humano(H). • S: humano(paide(pai. De(H))) : - humano(H). • G |= S, porém G não -generaliza S

Generalização mínima relativa * Generalização mínima de 2 termos T e L (literais): •

Generalização mínima relativa * Generalização mínima de 2 termos T e L (literais): • substituição dos sub-termos que não se casam com variáveis • ex, lgg(daughter(mary, ann), daughter(eve, tom)) = daughther(D, P) • unificação inversa * Generalização mínima de 2 cláusulas: • lgg(C 1 : - P 1, …, Q 1. , C 2 : - P 2, …, Q 2) = lgg(C 1, C 2) : - lgg(P 1, P 2), …, lgg(Q 1, Q 2). • ex, lgg(daughter(mary, ann) : - female(mary), parent(ann, mary). , daughter(eve, tom) : - female(eve), parent(tom, eve). ) = = daughter(D, P) : - female(D), parent(P, D). * Generalização mínima de 2 termos C 1 e C 2 relativa a BDE = {D 1, …, Dn} a priori: • rlgg(C 1, C 2) = lgg(C 1 : - D 1, …, Dn. , C 2 : - D 1, …, Dn)

Generalização mínima relativa: exemplo Com BDE = {parent(ann, mary). parent(ann, tom). parent(tom, eve). parent(tom,

Generalização mínima relativa: exemplo Com BDE = {parent(ann, mary). parent(ann, tom). parent(tom, eve). parent(tom, ian). female(ann). female(mary). female(eve). } rlgg(daughter(mary, ann). , daughter(eve, tom). ) = lgg(daughter(mary, ann) : - BDE. , daughter(eve, tom) : - BDE. ). = daughter(D, P) : - BDE, parent(ann, D 0), parent(P, D), parent(P 1, D 1), parent(P 2, D 2), parent(P 3, D 3), parent(P 4, D 4), female(D 1), female(D 2), female(D). = daughther(D, P) : - parent(P, D), female(D). Em GOLEM: * premissas redundantes podadas usando bias semântico limitando busca a cláusulas determinadas.

Busca top-down em reticulado de refinamento Adaptação de ID 3 para representação da 1

Busca top-down em reticulado de refinamento Adaptação de ID 3 para representação da 1 a ordem * Espaço de hipótese: * • reticulado no qual cada no -generaliza seus filhos • em cima: conclusão a aprender sem premissa • em baixo: contradição ou hipótese mais específica Hms tal que: t Hms A R |= T+ (e Hms A R |T-) Percorre reticulado de cima para baixo em largura 1 a * Cada passo implementa uma abordagem gerar & testar * • gerar: todas as hipóteses Hn em L(H) refinando a hipótese atual • testar: função heurística de: t t t número de D+ tal que: Hn A R |= T+ número de D- tal que: Hn A R |= Ttamanho de Hn

Busca top-down em reticulado de refinamento: exemplo daughter(D, P). . daughter(D, D). . daughter(D,

Busca top-down em reticulado de refinamento: exemplo daughter(D, P). . daughter(D, D). . daughter(D, P) : - female(D). . daughter(D, P) : - parent(P, D). . daughter(D, P) : - female(D), female(D). daughter(D, P) : - female(D), parent(P, D). daughter(D, P) : - parent(D, X). . daughter(D, P) : - parent(P, D), female(D).

Derivação inversa * Como: • A R H |= T A R T |=

Derivação inversa * Como: • A R H |= T A R T |= H A R T |= M(A R T) |= H H |= M(A R T) • G -generaliza S G |= S * Então, H pode ser computado em 2 passos: • 1: Deduz M(A R T) a partir de A R e de T • 2: Calcula H = {h L(H) | h -generaliza M(A R T)}

Restrições de L(H): motivação * Se L(H) contem qualquer cláusula de Horn gerável: •

Restrições de L(H): motivação * Se L(H) contem qualquer cláusula de Horn gerável: • por refinamento da cláusula sem premissa • por resolução inversa de 2 elementos de A R T+ * Então: * • espaço de busca (seja bottom-up ou top-down) • grande demais para ser explorado eficientemente • as vezes até infinito Restrição de L(H): • meta-conhecimento heurístico a priori • permitindo limitar espaço de busca

Restrições sintáticas parametrizadas lista dos nomes de predicado permitidos em hipóteses * número máximo

Restrições sintáticas parametrizadas lista dos nomes de predicado permitidos em hipóteses * número máximo de premissas por cláusula * número máximo de variáveis por cláusula * profundidade máxima dos termos das cláusulas * nível máximo dos termos das cláusulas: * • variável V é ligada em cláusula C : - P 1, …, Pn sse: t t V C, ou i {1, …, n}, W V: V Pi W ligada em C : - P 1, …, Pn. • cláusula ligada sse todas suas variáveis são ligadas t ex, p(X) : - q(Z) não ligada, p(X) : - q(X, Y), r(Y, Z), u(Z, W) ligada. • nível n(t) de um termo t em cláusula ligada C : - P 1, …, Pn: t t 0 se t C, ou 1 + min(n(s)) se t Pi s Pi ex, n(C, grandfather(G) : - male(G), parent(G, F), parent(F, C)) = 2

Restrições semânticas de L(H): tipos e modos * Tipos: const(a). const(b). … clist([]). clist([H|T])

Restrições semânticas de L(H): tipos e modos * Tipos: const(a). const(b). … clist([]). clist([H|T]) : - const(H), clist(T). * Modos: restrições sobre predicados • • na conclusão (modeh) ou premissa (modeb) das regras número de vezes que um predicado pode ser satisfeito tipos dos seus argumentos instanciação dos seus argumentos (constante #, variável de entrada + ou variável de saída -) • ex: modos para append : : - modeh(1, append(+clist, -clist))? modeh(1, append([+const|+clist], +clist, [-const|-clist]))? modeh(1, append(#clist, +clist, -clist))? modeb(1, append(+clist, -clist))?

Restrições semânticas de L(H): determinação * h(…, X 0 i, . . . )

Restrições semânticas de L(H): determinação * h(…, X 0 i, . . . ) : - p 1(. . . , X 1 j, …), …, pn(…, Xnk, …). determinada dados um conhecimento a priori B e exemplos D sse: • as instanciações dos X 0 j, …, Xij restringem os X(i+1)j a um único valor, ie, • i {1, …, n}, Xij pi, Xkl, k < I, ! v tal que: t * Xij/v compatível com Xkl/vkl Exemplo: • D: parent(jef, paul). parent(jef, ann). male(paul). female(ann). • has. Father(C) : - parent(P, C). determinada: P/jef • is. Father(F) : - parent(F, C). não determinada: C/{paul; ann} * Torna aprendizagem eficiente (porém incompleto)

Preferências sintáticas e probabilísticas (H) = número de bits na codificação mínima de H

Preferências sintáticas e probabilísticas (H) = número de bits na codificação mínima de H * Thm: * • H que minimiza (H) em L(H) também maximiza P(H|B E) • ie, a hipótese mais concisa sempre corresponde a mais verossímil Prova: Thm de Bayes + Thm de Shannon * Justificação téorica do navalha de Occam *

PROGOL: nas dimensões de ILP * Tarefa: • • • * Grau de automação:

PROGOL: nas dimensões de ILP * Tarefa: • • • * Grau de automação: interativo ou autônomo Incremental (na apresentação dos dados): sim ou não Semântica: não-monótona Descoberta de predicados: ? Entrada: D+ ou D+^D- ou D+^B ou D+^D-^B Saída: um ou vários predicados, LP Abordagem: • Operadores: derivação inversa, -generalização • Restrições da linguagem de hipótese L(H) (language bias): t sintáticas e semânticas t parametrizadas e declarativas • Estratégia de busca: t Global: top-down, mais bottom-up bounded t Local: poda espaço usando função heurística f(H) estimando poder. De. Predição(H) x concisão(H)

PROGOL: algoritmo Instância do algoritmo genérico de ILP com: * inicialize: H = {obj(…,

PROGOL: algoritmo Instância do algoritmo genérico de ILP com: * inicialize: H = {obj(…, X, …) : - }. * delete: d E, B H |= E * escolha: H que maximiza f(H), função heurística de busca aproximando (poder. De. Predição(H), concisão(H)) * pode: * • hipóteses mais específicas que M(B D) • hipóteses que não pode mais melhorar f(H) * critério. De. Parada: • |falsos+| + |falsos-| < limiar de ruído, ou • E=

PROGOL: função heurística de busca * f(H) = (P(p-n-c-h+1))/p, com: • • • P

PROGOL: função heurística de busca * f(H) = (P(p-n-c-h+1))/p, com: • • • P p n c h = = = |E+| |E+ deduzidos de H| (verdadeiros +) |E- deduzidos de H| (falsos -) |H| (em número de literais) |variáveis de saída não restritas|

PROGOL: construir hipótese + específica % Restrições semânticas de L(H) : - set(r, 10000)

PROGOL: construir hipótese + específica % Restrições semânticas de L(H) : - set(r, 10000) % max Prolog unif : - set(h, 100) % max Prolog search depth : - modeh(1, implies 5(+bool 5, -bool 5). : - modeb(1, or 5(+bool 5, -bool 5). : - modeb(1, not 5(+bool 5, -bool 5). bool 5(X) : - integer(X), X => 0, X <= 4. % B: conhecimento a priori not 5(I, Out) : - Out is 4 - I. or 5(X, X, X). or 5(I, J, Out) : - I > J, Out is I. or 5(I, J, Out) : - I < J, Out is J. % E+: exemplos positivos implies 5(4, 4, 4). implies 5(4, 0, 0). implies 5(0, 4, 4). implies 5(1, 2, 3) % E-: exemplos negativos : - implies 5(2, 0, 0). : - implies 5(4, 2, 4). 1/ d= implies 5(4, 4, 4) mode declar or 5(4, 4, 4) M(B d) not 5(4, 0) M(B d) or 5(4, 0, 4) M(B d) or 5(0, 4, 4) M(B d) or 5(0, 0, 0) M(B d) not 5(4, 0) M(B d) = or 5(4, 4, 4) not 5(4, 0) or 5(4, 0, 4) or 5(0, 4, 4) or 5(0, 0, 0) not 5(4, 0) implies 5(4, 4, 4). maxspec{h | h H |= e} = or 5(A, A, A) not 5(A, B) or 5(A, B, A) or 5(B, A, A) or 5(B, B, B) not 5(B, A) implies 5(A, A, A). CProgol Version 4. 4 |- consult(implies 5 a)? [No contradictions found] yes |- generalise(implies 5/3)? [Generalising implies 5(4, 4, 4). ] [Most specific clause is] implies 5(A, A, A) : - or 5(A, A, A), not 5(A, B), or 5(A, B, A), or 5(B, A, A), or 5(B, B, B), not 5(B, A).

PROGOL: Generalizar hipótese + especifica 1 % Restrições semânticas de L(H) : - set(r,

PROGOL: Generalizar hipótese + especifica 1 % Restrições semânticas de L(H) : - set(r, 10000) % max Prolog unif : - set(h, 100) % max Prolog search depth : - modeh(1, implies 5(+bool 5, -bool 5). : - modeh(1, or 5(+bool 5, -bool 5). : - modeh(1, not 5(+bool 5, -bool 5). bool 5(X) : - integer(X), X => 0, X <= 4. % B: conhecimento a priori not 5(I, Out) : - Out is 4 - I. or 5(X, X, X). or 5(I, J, Out) : - I > J, Out is I. or 5(I, J, Out) : - I < J, Out is J. % E+: exemplos positivos implies 5(4, 4, 4). implies 5(4, 0, 0). implies 5(0, 4, 4). implies 5(1, 2, 3) % E-: exemplos negativos : - implies 5(2, 0, 0). : - implies 5(4, 2, 4). % Generalising implies 5(A, A, A). [C: 0, 1, 0, 0 implies 5(A, A, A). ] [C: -5, 1, 1, 0 implies 5(A, B, A). ] % pruned [C: 2, 3, 1, 0 implies 5(A, B, B). ] % 1 st tried [C: 0, 2, 0, 1 implies 5(A, A, B). ] % pruned [C: 1, 5, 2, 1 implies 5(A, B, C). ] % 2 nd % Specialising implies 5(A, B, B) [C: 0, 3, 1, 0 implies 5(A, B, B) : - or 5(B, B, B). ] [C: 0, 3, 1, 0 implies 5(A, B, B) : - or 5(B, B, C). ] [C: 0, 2, 0, 0 implies 5(A, B, B) : - or 5(A, B, B). ] [C: -2, 2, 1, 0 implies 5(A, B, B) : - or 5(A, B, A). ] [C: 0, 3, 1, 0 implies 5(A, B, B) : - or 5(A, B, C). ] [C: 0, 2, 0, 0 implies 5(A, B, B) : - or 5(B, A, B). ] [C: -2, 2, 1, 0 implies 5(A, B, B) : - or 5(B, A, A). ] [C: 0, 3, 1, 0 implies 5(A, B, B) : - or 5(B, A, C). ] [C: 0, 3, 1, 0 implies 5(A, B, B) : - or 5(A, A, A). ] [C: 0, 3, 1, 0 implies 5(A, B, B) : - or 5(A, A, C). ] [C: 0, 3, 1, 0 implies 5(A, B, B) : - not 5(B, C). ] [C: 0, 3, 1, 0 implies 5(A, B, B) : - not 5(A, C). ] [C: -2, 3, 1, 0 implies 5(A, B, B) : - not 5(B, C), or 5(B, C, D). ]. . . [C: -2, 3, 1, 0 implies 5(A, B, B) : - or 5(A, A, C), not 5(C, D). ]

PROGOL: Generalizar hipótese + especifica 2 % Restrições semânticas de L(H) : - set(r,

PROGOL: Generalizar hipótese + especifica 2 % Restrições semânticas de L(H) : - set(r, 10000) % max Prolog unif : - set(h, 100) % max Prolog search depth : - modeh(1, implies 5(+bool 5, -bool 5). : - modeh(1, or 5(+bool 5, -bool 5). : - modeh(1, not 5(+bool 5, -bool 5). bool 5(X) : - integer(X), X => 0, X <= 4. % B: conhecimento a priori not 5(I, Out) : - Out is 4 - I. or 5(X, X, X). or 5(I, J, Out) : - I > J, Out is I. or 5(I, J, Out) : - I < J, Out is J. % E+: exemplos positivos implies 5(4, 4, 4). implies 5(4, 0, 0). implies 5(0, 4, 4). implies 5(1, 2, 3) % E-: exemplos negativos : - implies 5(2, 0, 0). : - implies 5(4, 2, 4). % Specialising implies 5(A, B, C) [C: 0, 5, 2, 1 implies 5(A, B, C) : - or 5(A, A, A). ]. . . [C: 0, 5, 2, 1 implies 5(A, B, C) : - or 5(B, B, D). ] [C: -2, 3, 1, 0 implies 5(A, B, C) : - or 5(B, B, C), not 5(C, D). ]. . . [C: 0, 4, 0, 1 implies 5(A, B, C) : - or 5(A, B, B), not 5(B, D). ] [C: 0, 5, 2, 1 implies 5(A, B, C) : - not 5(A, D). ] [C: 0, 5, 2, 1 implies 5(A, B, C) : - not 5(B, D). ] [C: 0, 4, 0, 0 implies 5(A, B, C) : or 5(B, A, B), not 5(A, D), or 5(A, D, C). ]. . . [C: -1, 4, 0, 1 implies 5(A, B, C) : or 5(A, B, B), not 5(B, D), not 5(D, E). ] [C: 0, 4, 1, 0 implies 5(A, B, C) : - not 5(A, D), or 5(A, D, C). ] [C: -1, 5, 2, 1 implies 5(A, B, C) : - not 5(A, D), or 5(A, D, E). ] [C: 2, 5, 0, 0 implies 5(A, B, C) : not 5(A, D), or 5(B, D, C). ] % BINGO! [C: -3, 3, 1, 1 implies 5(A, B, C) : - not 5(A, D), or 5(B, D, B). ] [C: -1, 5, 2, 1 implies 5(A, B, C) : - not 5(A, D), or 5(B, D, E). ] [122 explored search nodes, f=2, p=5, n=0, h=0] [5 redundant clauses retracted]

PROGOL: exemplo com ruído

PROGOL: exemplo com ruído