jacques robin ioram schechtman sette di-ufpe

30
Introdução a LIFE Introdução a LIFE (Logic Inheritance Functions (Logic Inheritance Functions Equations): Equations): uma linguagem multiparadigma uma linguagem multiparadigma a base lógica a base lógica Jacques Robin Ioram Schechtman Sette DI-UFPE

Upload: adara

Post on 20-Jan-2016

34 views

Category:

Documents


0 download

DESCRIPTION

Introdução a LIFE (Logic Inheritance Functions Equations): uma linguagem multiparadigma a base lógica. Jacques Robin Ioram Schechtman Sette DI-UFPE. Motivação: Limitações de Prolog como LP. Estrutura de conhecimento: de aridade fixa => difícil modificar, estender - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Introdução a LIFE Introdução a LIFE (Logic Inheritance Functions (Logic Inheritance Functions

Equations):Equations):uma linguagem multiparadigmauma linguagem multiparadigma

a base lógicaa base lógica

Jacques RobinIoram Schechtman Sette

DI-UFPE

Page 2: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Motivação: Motivação: Limitações de Prolog como LPLimitações de Prolog como LP

Estrutura de conhecimento:• de aridade fixa => difícil modificar, estender• com sub-estruturas indexadas por posição => difícil

de ler• não tipada => difícil verificar, manter consistência

ex, person(_,_,_,_,35,male,_,_,_...)

Aritmética mal integrada com computação simbólica• dificulta aplicações híbridas

ex, > ?- C is 1 + 2.

C = 3

• não tem mais bidirecionalidade, nem declaratividade no sentido de independente da ordemex, > ?- C is D, D = 1 + 2.

Error.

Page 3: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Limitações de Prolog como LP (cont.)Limitações de Prolog como LP (cont.)

Variáveis de ordem superior não disponíveis• dificulta meta-programação

ex, P(a,Y)

Interface com protocolos da Internet externa à linguagem• dificulta programação de agentes na Web

Bibliotecas gráficas externas à linguagem• dificulta programação de GUIs

Page 4: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Limitações de Prolog como Formalismo Limitações de Prolog como Formalismo de Representação de Conhecimento de Representação de Conhecimento

(FRC)(FRC)

Inadequação inferencial com conhecimento parcialex, pessoa(joao,35,consultor) não unifica com pessoa(joao, consultor,maria)

Respostas para consultas sempre extensionais• inadequação expressiva para resolução de restrições

ex, devolve como resultado: X = 2 mas não X >= 3, Y < 5 Hierarquias representadas por meio de regras

• inadequação aquisicional para conhecimento terminológico

• ineficiência inferencial para herança de propriedadesex, pessoa(X) :- criança(X). para criança isa pessoa

Procedimentos simulados por encadeamento de regras• inadequação aquisicional para conhecimento

procedimental

Page 5: Jacques Robin Ioram Schechtman Sette  DI-UFPE

LeFun Prolog Funcional

A Química de LIFE: A molécula

-cálculo Tipos, herança, FUF, Redes Semânticas

-cálculo Funções ProcedimentosDaemons,Métodos

LogIn Prolog OOLIFE

Frames+Regra

-cálculo Relações. Regras, Lógica.

FOOL Frames CLOS

Page 6: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Estrutura de dado de LIFE: termo Estrutura de dado de LIFE: termo

Sintaxe:• Alfabeta particionado em 5 espaços de símbolos:

sorts, predicados, funções, atributos (constantes) e variáveis termo --> sort | Var | Var:sort | Var:sort(atr1, ..., atrN) |

pred(atr1, ..., atrN) | func(atr1, ..., atrN) | Var(atr1, ..., atrN).

• atrI --> valorAtr | nomeAtr => valorAtr• nomeAtr --> inteiro | átomo • valorAtr --> termo • sort --> builtInSort | userDefinedSort

Page 7: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Versatilidade dos termos Versatilidade dos termos

Termo- como declaração de classe:• :: termo-• :: sort(atr1 => val1, ..., atrN => valN).

Termo- como cláusula lógica (definição de predicado):• termo-0 :- termo-1, ..., termo-M.• predA(argA1 => valA1, ..., argAn => valAn)

:- predB(argB1 => valB1, ..., argBn => valBn),

...

predK(argK1 => valK1, ..., argKn => valKn). Termo- como cláusula funcional (definição de função):

• termo-0 -> termo-1.• funcA(paramA1 => valA1, ..., paramAn => valAn)

-> funcB(paramB1 => funcC(paramC1 => ... => val1) ...), ...

paramBK => funcI(paramI1 => valAn, ...)).

Page 8: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplos de termos Exemplos de termos

42, -5.66, “exemplo” : sorts built-in p/ inteiros, reais e strings

específicos int, real, string : sorts built-in que denotam todos os

inteiros,reais e strings.

exemplo_abc, ‘%exemplo^&’ : sorts date(friday, “XIII”) : sorts c/ atributos e rótulos

numéricos implicitos date(1=>friday, 2=>”XIII”): sorts c/ atributos e rótulos

numéricos explícitos freddy(nails=>long, face=>ugly): sorts c/ atributos e

rótulos não numéricos

Page 9: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplos de termos Exemplos de termos (cont.) (cont.)

@, jogador, jogadorDeFutebol, romário, time romário(time => flamengo, posição => atacante). X:jogador X:atacante(time => T:time, posição => atacante). X:@(time => T:brasil(atacante =>

[romário,ronaldo])).

Variáveis nunca em posição de atributo:• S(A1 => V1, A2 => atacante(A3 => V3)) gera erro de

sintaxe

Page 10: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Hierarquia de TiposHierarquia de Tipos

Sorts:• Conjunto Parcialmente

Ordenado de Tipos• Hierarquia definida pelo

operador: <| (é um subsort de)

• { } <| sort <| @

Exemplos:• truck <| vehicle.(truck é um subsort de

vehicle)• mobile(vehicle).• useful(truck).• mobile(X), useful(X)?• X = truck

Page 11: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Built-In SortsBuilt-In Sorts

Além de {} (bottom) e @ (top):• todos os inteiros e reais

1 <| int. 1.2 <| real. • list, [ ] ou nil, cons

[a,b,c] = [a,b|[c]] = [a,b,c|[]] = [a|[b|[c|[]]]]

• strings“exemplo” <| string.

• bool, true, false• built_in (supersort de list,

string, real e bool)

Resumindo:• built_in <| @

• list <| built_in• string <| built_in• real <| built_in• bool <| built_in

• cons <| list• [] <| list

• int <| real

• true <| bool• false <| bool

Page 12: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Built-In Sorts (hierarquia)Built-In Sorts (hierarquia)

@

list boolrealstring

cons int true[ ] false

built_in

{ }

Page 13: Jacques Robin Ioram Schechtman Sette  DI-UFPE

glb (Greatest Lower Bound)glb (Greatest Lower Bound)

O glb de dois sorts r e s é o maior subsort comum entre

r e s. Semântica dos sorts

baseada na teoria dos conjuntos, glb corresponde a interseção entre eles.

Se glb é {}, os sorts são ditos incompatíveis.

O glb pode ser dado pela forma disjuntiva {s1;s2;s3} caso seja composto por mais de um sort.

estudante <| pessoa. empregado <| pessoa. staff <| empregado. est_trab <| estudante. est_trab <| staff. s1 <| estudante. s2 <| estudante. w1 <| est_trab. w2 <| est_trab. e1 <| staff. e2 <| staff. glb(estudante,empregados) =

{est_trab}

Page 14: Jacques Robin Ioram Schechtman Sette  DI-UFPE

glb (hierarquia de sorts)glb (hierarquia de sorts)

pessoapessoa

empregadoempregado estudanteestudante

staffstaff professor professor

est_trabest_trab

s1 sn w1 w2 e1 e2 f1 f2 f3s1 sn w1 w2 e1 e2 f1 f2 f3

Page 15: Jacques Robin Ioram Schechtman Sette  DI-UFPE

AtributosAtributos

Par consistindo em um rótulo e um termo associado.

Exemplos:• show( titulo => “bewitched”,

genero => sitcom,onde => televisao,sogra => “Agnes Moorehead”).

• thing(a,b,c) é equivalente a thing(1 => a, 2 => b, 3=>c).

Page 16: Jacques Robin Ioram Schechtman Sette  DI-UFPE

VariáveisVariáveis

Começam por _ ou letra maiúscula

Variável Anônima: _ (equivalente a @)

Pode ser associada a um termo Ex: X:t

Referência cíclica: X:[42|X]

Associação implícita: X:@

Exemplos:• father(name => N:string,

son => boy(name => N))representa um pai que tem um filho com o mesmo nome.

• [A,A]é a lista onde o primeiro e segundo elemento são identicos.

• L:[int,int,int|L]lista cíclica de tamanho 3, onde os 3 elementos são inteiros.

Page 17: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplo de termo Exemplo de termo pessoa pessoa

X:pessoa(nome=>id(primeiro=>string,X:pessoa(nome=>id(primeiro=>string, último=>S:string),último=>S:string),

conjuge=>pessoa(nome=>id(último=>S),conjuge=>pessoa(nome=>id(último=>S), conjuge=>X)).conjuge=>X)).

nomenomepessoapessoa idid

primeiroprimeiro ultimoultimoconjugeconjuge string string string string

nomenome ultimo ultimopessoapessoa id id

Page 18: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Caracteristicas de termos Caracteristicas de termos

Recursivo,expressivo,simples e eficiente. Co-referência x Caminhos. Mais semântica : Propriedades por rótulo, não por posição,

como Prolog. Pode ter disjunções :

P:{charlataoP:{charlatao ;pessoa(id=>nome(primeiro=>X:’john’’,;pessoa(id=>nome(primeiro=>X:’john’’,

ultimo=>Y:{‘doe’;X}),ultimo=>Y:{‘doe’;X}), amigo=>{P;pessoa(id=>nome(primeiro=>Y,amigo=>{P;pessoa(id=>nome(primeiro=>Y,

último=>X))})}último=>X))})}

Page 19: Jacques Robin Ioram Schechtman Sette  DI-UFPE

UnificaçãoUnificação

Unificar 2 termos consiste em:• computar o glb de seus sort principais,• casar as variáveis principais,• ligá-las a todos os atributos dos 2 termos pais,• unificar recursivamente os termos relativos aos atributos.

Se durante a unificação o glb for { }, ela falha, caso contrário ela sucede.

Page 20: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplo de UnificaçãoExemplo de Unificação

pessoapessoa

empregadoempregado estudanteestudante

staffstaff professor professor

est_trabest_trab

s1 sn w1 w2 e1 e2 f1 f2 f3s1 sn w1 w2 e1 e2 f1 f2 f3

Page 21: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplo de Unificação (cont.)Exemplo de Unificação (cont.)

X:estudante(orientador => professor( secretária=>Y:staff,X:estudante(orientador => professor( secretária=>Y:staff, assistente=>X),assistente=>X), colega_de_quarto=>empregado(representante=>Y)).colega_de_quarto=>empregado(representante=>Y)).

empregado(orientador=>empregado(orientador=>f1f1(secretária=>empregado,(secretária=>empregado, assistente=>U:pessoa),assistente=>U:pessoa),

colega_de_quarto=>V:estudante(representante=>V),colega_de_quarto=>V:estudante(representante=>V), ajudante=>ajudante=>w1w1(esposa=>U))(esposa=>U))

UnificaçãoUnificação::W:est_trab(orientador=>W:est_trab(orientador=>f1f1(secretária=>Z:est_trab(representante(secretária=>Z:est_trab(representante=>Z),=>Z), assistente=>W), assistente=>W),

colega_de_quarto=>Z,colega_de_quarto=>Z, ajudante=>ajudante=>w1w1(esposa=>W))(esposa=>W))

Page 22: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplo de unificação (cont.)Exemplo de unificação (cont.)

YresentanteQuarto.repX.colegaDe

empregadoQuartoX.colegaDe

Xnteor.assisteX.orientad

staffY riaor.secretaX.orientad

professororX.orientad

estudanteX

U.esposaW.ajudante

w1W.ajudante

VresentanteQuarto.repW.colegaDe

estudanteVQuartoW.colegaDe

pessoaUnteor.assisteW.orientad

empregadoriaor.secretaW.orientad

f1orW.orientad

empregadoW

W.esposaW.ajudante

w1W.ajudante

ZQuartoW.colegaDe

Wnteor.assisteW.orientad

Zentanteria.represor.secretaW.orientad

est_trabZriaor.secretaW.orientad

f1orW.orientad

est_trabW

Page 23: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplo de Unificação (cont.)Exemplo de Unificação (cont.)

X:estudante(orientador => X:estudante(orientador => professor( secretária=>Y:staff,professor( secretária=>Y:staff,

assistente=>X),assistente=>X), colega_de_quarto=>empregado(representante=>Y)).colega_de_quarto=>empregado(representante=>Y)).

estudante professor

staff

colega_de_quarto secretária

assistente

orientador

representante

X

Y

Page 24: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplo de Unificação (cont.)Exemplo de Unificação (cont.)

empregado f1

estudante

colega_de_quarto

secretária

assistente

orientador

representante

empregado(orientador=>empregado(orientador=>f1f1(secretária=>empregado,(secretária=>empregado, assistente=>U:pessoa),assistente=>U:pessoa),

colega_de_quarto=>V:estudante(representante=>V),colega_de_quarto=>V:estudante(representante=>V),ajudante=>ajudante=>w1w1(esposa=>U))(esposa=>U))

empregado

pessoa

w1

ajudante

esposa

U

V

Page 25: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplo de Unificação (cont.)Exemplo de Unificação (cont.)

est_trab f1

est_trab

colega_de_quarto secretária

assistente

orientador

representante

Unificação:Unificação:W:est_trab(orientador=>W:est_trab(orientador=>f1f1(secretária=>Z:est_trab(representante(secretária=>Z:est_trab(representante=>Z),=>Z), assistente=>W), assistente=>W),

colega_de_quarto=>Z,colega_de_quarto=>Z, ajudante=>ajudante=>w1w1(esposa=>W))(esposa=>W))

w1esposa

ajudante

Page 26: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Declaração de Atributos em Sorts Declaração de Atributos em Sorts (Classes)(Classes)

:: Headonde Head é um termo arbitrário.

:: person (age=> int).Assegura que todo termo com o sort person terá um campo age cujo valor é um inteiro.

man <| person. A = man?

*** YesA = man(age=>int).

:: vehicle(make => string, wheels => int).

:: car(wheels => 4). Se a relação car <| vehicle

existir, todas as propriedades de car devem ser compatíveis com as de vehicle.

Page 27: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Exemplo de Declaração de AtributosExemplo de Declaração de Atributos

:: rectangle(lenght=>L:real,

width=>W:real,area=>L*W).

:: square(lenght=>S, width=>S,

side =>S).

square <| rectangle.

R=rectangle(area=>16,width=>4)?*** YesR=rectangle(area=>16, lenght=>4, width=>4).

R=square? *** YesR = square(area=>16, lenght => _A: 4, side => _A, width => _A).

Page 28: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Declaração de Sorts com RestriçõesDeclaração de Sorts com Restrições ::Head | Goal. ex, ::X:person | X.age = int. herança de X.age=int em todas as instâncias de person

exatamente como :: person(age=>int). ::date(day_of_week => day_of_week,

day_of_month => D:int, month_name => Mname:month, month_num => Mnum:month_num, year => Y:int) | day_month_p(D,Mname,Y), month_p(Mname,Mnum).day_month_p(D,month31,_) :- D >= 1, D =< 31.day_month_p(D,month30,_) :- D >= 1, D =< 30.day_month_p(D,feb,Y) :- leaf_year(Y), D >= 1, D =< 29.day_month_p(D,feb,Y) :- \+(leaf_year(Y)), D >= 1, D =< 28.

month_p(jan,1).... month_p(dez,12) month := {month30;month31}.

Page 29: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Possíveis Declarações de SortsPossíveis Declarações de Sorts

:: t (atr). :: t (atr) | restrições.

t (atr) <| u. t (atr) <| u | restrições.

t := u (atr). t := u (atr) | restrições.

t (atr) <| {u;v;w}. t (atr) <| {u;v;w} | restrições.

t := {u (atr); v (atr); w(atr)}. t := {u (atr); v (atr); w(atr)} | rest.

::car(wheels=>4). ::car | car.wheels = 4.

car(wheels=>4) <| vehicle. car <| vehicle | car.wheels = 4.

car := vehicle(wheels => 4). car := vehicle(wheels => X:int) | X=4.

car <| {four_wheels;vehicle}. car <| {four_wheels;vehicle} |

vehicle.wheels = 4.

tree := {leaf;node} tree := {leaf;node} | node.left = tree,

node.right=tree.

Page 30: Jacques Robin Ioram Schechtman Sette  DI-UFPE

Notar a Assimetria de comportamento de Notar a Assimetria de comportamento de :=:=

t := {u;v;w}. abreviau <| t . v <| t . w <|t .

t := {u}. abreviau <| t .

mas t := u. abrevia

t <| u.

Exemplo: tree := {leaf;

node( left => tree,

right => tree)}

é igual a leaf <| tree. node <| tree. :: node (left => tree,

right => tree).