CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com.
Post on 22-Apr-2015
106 Views
Preview:
Transcript
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
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
Configurando o Context
Configurando o Context
Configurando o Context
CHR no CHREK
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...
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’”
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…
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)
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
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.
Definindo o GOAL
• O goal é definido através de uma regra especial:
main() <=> true | writeLn("hello world").parte fixa estado inicial
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).
FerramentasAuxiliares
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
Tracer (F9)
RestriçõesDefinidas pelo usuário
RestriçõesBuilt-in
Regras doprograma
Explicação
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
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)
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
Exemplo: Triangram
Triangram
• Usa apenas triângulos como tipos básicos
Triangram
• Os tipos de polígonos que podem ser formados também limitado.
Triangram – UML/OCL
Triangram – UML/OCL
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.
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
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
Triangram – Implementação
Métodos de Query
...
isa(Pol1, rectangle),isa(Pol2, isoscelesTriangle),... ==> ne(P1, Pol2), ne(P2, Pol2) |
isCompatible(Pol1,Pol2, SidePol1, SidePol2).
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).
top related