chrek marcos aurélio e-mail: [email protected] msn: [email protected]

31
CHREK Marcos Aurélio E-mail: [email protected] MSN: [email protected]

Upload: internet

Post on 22-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

CHREK

Marcos Aurélio

E-mail: [email protected]

MSN: [email protected]

Page 2: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Baixando o CHREK

• Abrir a pasta \\cin01\scratch_maas$\ na rede do CIN

• Copiar a pasta chrek para C:\temp\

• Executar o context

Page 3: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Configurando o Context

• Configurar atalhos em:

• Options > Environment Options > Execute Keys

• Atalhos configurados no editor

–F9 – GUI para acompanhamento passo da execução

–F10 – Explicação do raciocínio no Console do Context e no arquivo console.txt

Page 4: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Configurando o Context

Page 5: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Configurando o Context

Page 6: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Configurando o Context

Page 7: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

CHR no CHREK

Page 8: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Definindo um GOAL

• A execução de um programa CHR sempre inicia com a definição de um goal e de um conjunto de regras

• A execução de um programa CHR se dá através da aplicação iterativa das regras

Regras

Goal Estadoinicial

Regras

Estadofinal...

Page 9: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Definindo as Regras (1)

• Existem três tipos de regras:– Propagation

• Head ==> Guard | Body. “SE ‘Estado’ contém ‘Head’ e ‘Guard’ é verdadeiro

ENTÃO adicione ‘Body’ ao ‘Estado’”

– Simplification• Head <=> Guard | Body. “SE ‘Estado’ contém ‘Head’ e ‘Guard’ é verdadeiro

ENTÃO substitua ‘Head’ por ‘Body’ no ‘Estado’ atual”

– Simpagation• Head \ HeadRemove ==> Guard | Body. “SE ‘Estado’ contém ‘Head’ e ‘HeadRemove’ e ‘Guard’ é verdadeiro

ENTÃO adicione ‘Body’ e remova ‘HeadRemove’”

Page 10: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Definindo as Regras (2) - Constraints

• O Head, Guard e Body são conjuntos de constraints.

• Existem dois tipos de constraints:– Built-ins: implementadas através de classes Java e

reconhecidas automaticamente pelo compilador (basta estar no CLASSPATH) Ex: writeLn

– Definidas pelo usuário: qualquer constraint que apare;a no programa e não seja built-inEx: adjacent, connected…

Page 11: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Definindo as Regras (3) – Constraints Built-in

• A = B• true• false• ground(X)• unbound(X)• ne(X,Y) X != Y• le(X,Y) X>=Y• ge(X,Y) X<=Y• lt(X,Y) X<Y• gt(X,Y) X>Y

• writeLn(X)• write(X)• readInt(X)• instanceOf(X,Str)

Page 12: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Definindo as Regras (4)

• O Guard é sempre uma conjunção de constraints built-in (*)

• O Body é uma conjunção ou disjunção de constraints quaisquer

Head ==> Guard | Body.

Head <=> Guard | Body.

HeadAdd \ HeadRemove ==> Guard | Body.

• O Head é sempre uma conjunção de constraints definidas pelo usuário

Page 13: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Definindo as Regras (5)

• Exemplos de regras:

fib(N,M) ==> ge(N,2) | T1 = N~1, fib(T1,M1), T2 = N~2, fib(T2,M2), M=M1+M2.

max(X,Y,Z) <=> le(X,Y) | Z = Y.

prime(I) \ prime(J) ==> modEqual(J, I, 0) | true.

Page 14: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Definindo o GOAL

• O goal é definido através de uma regra especial:

main() <=> true | writeLn("hello world").parte fixa estado inicial

Page 15: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Exemplos - Max

max(X,Y,Z) <=> le(X,Y) | Z = Y.

max(X,Y,Z) <=> le(Y,X) | Z = X.

max(X,Y,Z) ==> true | le(X,Z), le(Y,Z).

main() <=> true | max(17,139,M).

Page 16: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

FerramentasAuxiliares

Page 17: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Convenções Adotadas

• Variáveis– X [X Y Z W] (2)

• Regras– a() ==> true | (c() ; d() ) <<1>>

Nomeda

Variável

VariáveisRelacionadas(X=Y=Z=W)

Valor

Corpo da regraque será aplicado da próximavez que a regra for aplicada

Page 18: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Tracer (F9)

RestriçõesDefinidas pelo usuário

RestriçõesBuilt-in

Regras doprograma

Explicação

Page 19: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Explicação do raciocínio (F10)

• Apresenta de forma textual todos os passos e decisões tomados durante a execução do programa

• Incluir a diretiva de compilação “:- explain” no início do programa e pressionar F10

Page 20: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Explicação do raciocínio (F10)

Initializing handler max...

CHRv Program

R1:: max(X, Y, Z)<=>X <= Y|Z = Y

R2:: max(X, Y, Z)<=>Y <= X|Z = X

R3:: max(X, Y, Z)==>true|X <= Z, Y <= Z

Query:

max(17, 139, M), result(M)

Nome do programa sendo executado

Regras do programa(A regra que define o goal não aparece aqui!)

Estado inicial (GOAL)

Page 21: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Explicação do raciocínio (F10)

Explanation in detail:

(1) R1:: max(X, Y, Z)<=>X <= Y|Z = Y

reason: max(X_2[17], Y_3[139], M_1) matched

added: M_1 = Y_3[139], X_2[17] <= Y_3[139]

removed: max(X_2[17], Y_3[139], M_1)

(1st choice)

(2) [backtrack], reason: no more rules to apply.

{ result(M_1[139]) }

Regra que foi aplicadaConstraints que ativaram a regra

Efeito da aplicação da regra

Corpo da regra que foi aplicado

Motivo do backtrack

Estado no CS no momento do Backtrack

Page 22: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Exemplo: Triangram

Page 23: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Triangram

• Usa apenas triângulos como tipos básicos

Page 24: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Triangram

• Os tipos de polígonos que podem ser formados também limitado.

Page 25: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Triangram – UML/OCL

Page 26: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Triangram – UML/OCL

Page 27: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Triangram – Implementação

• Goal– Cenário– Hierarquia de classes

• Rules– Invariantes– Métodos

• Query regras de propagação com as pré-condições como head e uma constraint definida pelo usuário como body.

• Transacional regras de simpagation com pré-condições no head, remoções no HeadRemoval e pós-condições no body.

Page 28: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Triangram – Implementação

sub(scaleneTriangle,triangle), sub(isoscelesTriangle,triangle), sub(equilateralTriangle,isoscelesTriangle), ...

Goal

main() <=> true | ...

Hierarquia de classes

isa(tri1, equilateralTriangle),

sideOf(s11, tri1),

adjacent(s11,s22),

...

Cenário

Page 29: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Triangram – Implementação

...

adjacent(X,S) ==> true | adjacent(S,X).

isa(X,triangle), sideOf(S1,X), sideOf(S2,X), lengthOf(S1,L1), lengthOf(S2,L2) ==>

ne(S1,S2), L1=L2 |

isa(X, regularPolygon).

Invariantes

Page 30: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Triangram – Implementação

Métodos de Query

...

isa(Pol1, rectangle),isa(Pol2, isoscelesTriangle),... ==> ne(P1, Pol2), ne(P2, Pol2) |

isCompatible(Pol1,Pol2, SidePol1, SidePol2).

Page 31: CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com

Triangram – Implementação

Métodos Transacionais

...isa(Pol1, triangle), isCompatible(Pol1, Pol2, SidePol1, SidePol2),isa(Pol2, triangle) ... \ adjacent(A11,SidePol1), adjacent(A22, SidePol2) ... ==> ne(A11, A12), ne(A21, A22) |

adjacent(A11, A22), adjacent(A12, A21), ..., isa(Pol3, rectangle).