A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Restrições Booleanas O domínio dos Booleanos (ou variáveis 0/1) tem especial aplicação em aplicações –Envolvendo circuitos digitais Exemplo: Circuito.

Apresentações semelhantes


Apresentação em tema: "1 Restrições Booleanas O domínio dos Booleanos (ou variáveis 0/1) tem especial aplicação em aplicações –Envolvendo circuitos digitais Exemplo: Circuito."— Transcrição da apresentação:

1 1 Restrições Booleanas O domínio dos Booleanos (ou variáveis 0/1) tem especial aplicação em aplicações –Envolvendo circuitos digitais Exemplo: Circuito semi-somador –Em problemas envolvendo escolhas binárias Exemplo: Rainhas –Em problemas que envolvam conjuntos B G1 G2G2 A C S

2 2 Restrições Booleanas Nas restrições booleanas (de igualdade) podem ser utilizadas os habituais operadores (not, and, or, nand, nor, xor,...). Modelo do semi-somador C = or(A,B) S = xor(A,B) B G1 G2G2 A C S

3 3 Restrições Booleanas As restrições (correspondentes às variáveis Booleanas) podem ser igualmente expressas com esses operadores Modelo das 4-rainhas or(Q1, Q2, Q3, Q4)Linha 1 and(Q1,Q2) = 0Linha and(Q1, Q6) = 0Diagonal

4 4 Restrições Booleanas A satisfação de restrições booleanas pode ser abordada de várias formas diferentes –Simbolicamente Unificação booleana –SAT Colocação de todas as restrições na forma clausal Resolução construtiva (retrocesso) ou reparativa (pesquisa local) –Domínios finitos O domínio 0/1 é um domínio finito com 2 valores Resolução comum aos domínios finitos

5 5 Restrições Booleanas Para verificar a satisfação de restrições booleanas de uma forma simbólica é conveniente converter todas as restrições de forma a usar apenas, –os operadores + (ou-exclusivo) e · (conjunção), –constantes booleanas 0 e 1 ( eoutras constantes, dependentes do domínio) – variáveis denotadas por letras maiúsculas Isto é sempre possível, já que o conjunto {0, 1, +, ·} é completo.

6 6 Restrições Booleanas Com efeito, dados os termos arbitrários a e b, todos os operadores e constantes podem ser expressos através destes operadores a b= a · b a b= a + b + a · b a= 1 + a a b= 1 + a + a · b a b= 1 + a + b termos arbitrários serão denotados por minúsculas

7 7 Restrições Booleanas Mais formalmente, o tuplo, em que A é um qualquer domínio (contendo os elementos 0 e 1), constitui um anel booleano se se verificarem as seguintes propriedades Associatividade a+(b+c) = (a+b)+ca · (b · c) = (a · b) · c Comutatividade a + b = b + aa · b = b · a Distribuição a+(b · c) = a · b+a · ca · (b+c) = (a+b) · (a+c) Elemento Neutro a+0 = aa · 1 =a Exclusividade e Idempotência a+a=0 0 · a =0 Elemento Absorvente a · a =a

8 8 Restrições Booleanas As restrições booleanas que consideraremos resumem- se à igualdade, já que todas as outras se podem exprimir em função da igualdade. Por exemplo, dada a equivalência a b a b = a a b = b a restrição de inclusão de conjuntos acima pode ser reescrita em termos de igualdade como a+b+a · b = b a+b+b+a · b = b+b a+ a · b = 0 a · b = a

9 9 Restrições Booleanas Conjuntos –A constante 1 corresponde ao conjunto U (Universal) –A constante 0 corresponde ao conjunto Ø (Vazio) –O operador + corresponde à União Exclusiva –O operador · corresponde à Intersecção De notar que no caso de conjuntos, uma vez definido os elementos que contém o conjunto universal, para além das constantes 0 e 1, o domínio A contém todos os subconjuntos de U.

10 10 Restrições Booleanas Circuitos digitais –A constante 1 corresponde ao H –A constante 0 corresponde ao L –O operador + corresponde ao XOR –O operador · corresponde ao AND A C D B E F G H I G1 G2 G3 G4 G5 E = A+B+A·B F = 1+B·C G = C·D H = 1+E·F I = 1+F·G

11 11 Unificação Booleana Uma restrição booleana t 1 = t 2 (em que os dois termos Booleanos, t 1 e t 2 são formados exclusivamente a partir dos operadores + e ·) pode ser satisfeita sse existir um unificador booleano para os dois termos. Um unificador booleano (designado através de uma letra grega) é uma substituição de variáveis por termos booleanos que garante que os dois termos tomam o mesmo valor booleano. Os unificadores booleanos serão designados através de letras gregas

12 12 Unificação Booleana Exemplo: Os termos t 1 =1+A e t 2 = A · B podem ser unificados com o unificador = {A/1, B/0} Com efeito, denotando por t (ou simplesmente t ) a aplicação da substituição ao termo t, temos t 1 = (1+A) {A/1, B/0}= 0 t 2 = (A · B) {A/1, B/0}= 0 o que garante a satisfação da restrição t 1 =t 2.

13 13 Unificação Booleana Em geral, dados dois termos Booleanos, t1 e t 2, pode existir mais do que um unificador mais geral como pode ser visto pelo seguinte exemplo. Exemplo: A unificação dos termos t 1 =1+A · B e t 2 =C+D pode ser obtida por qualquer um dos seguintes unificadores mais gerais 1 = { C/1+A · B+D} 2 = { D/1+A · B+C} 3 = { A/1+C+D, B/1} 4 = { A/1, B/1+C+D } Com efeito, t 1 1 = (1+A · B) {C/1+A · B+D} = 1+A · B t 2 1 = (C+D) {C/1+A · B+D}=(1+A · B+D)+D = 1+A · B

14 14 Unificação Booleana Existem outros unificadores (menos gerais) que podem ser obtidos através de instâncias dos anteriores, isto é, da composição delas com outras substituições. Por exemplo, a substituição λ obtida pela composição de 1 com a substituição {A/0} ainda é um unificador dos termos t 1 =1+A · B e t 2 =C+D λ= {C/1+A · B+D } o {A / 0} = {C/1+D, A/0} Com efeito, t 1 λ = (1+A · B) {C/1+D, A/0} = 1+0 · B = 1 t 2 λ = (C+D) {C/1+D, A/0} = (1+D+D) = 1

15 15 Algoritmo de Unificação Booleana Tendo em atenção que t 1 =t 2 é equivalente a t 1 +t 2 =0, a unificação de dois termos Booleanos t 1 e t 2 equivale a anular o termo t 1 +t 2. As condições em que um termo t se pode anular, podem ser analisadas através dos pontos seguintes. 1.O anulamento de um termo constante t é trivialmente verificável: se t=0 o termo já é nulo; se t=1 o termo não é anulável. 2.Dada a propriedade distributiva, um termo t, não constante, pode sempre ser reescrito na forma a · U+b (em que U é uma qualquer das variáveis que ocorrem em t ) pondo U em evidência.

16 16 Algoritmo de Unificação Booleana 3. Um termo t=a · U+b só se pode anular, se tivermos ou a=1 ou b=0 (na situação contrária, a=0 e b=1 teremos t=1 0, independentemente do valor de U). 4. Essa condição ( a=1 ou b=0 ) é garantida se se anular o termo (1+a) · b. 5. Uma vez garantida esta situação, constata-se que –se a=0 (e b=0 ), U pode tomar um valor arbitrário (pois 0 · U+0=0 ) –se a=1, então U tem de tomar o valor b (pois 1 · b+b=0 )

17 17 Algoritmo de Unificação Booleana 6.Esta condição pode ser implementada com o recurso a uma variável booleana nova, isto é que não ocorra em t. Chamando _U a essa variável a condição anterior é equivalente à substituição U = (1+a) · _U + b 7.Com efeito, se a=0 (e b=0 ) temos U=_U, ou seja U pode tomar um valor arbitrário, já que a variável _U é uma variável nova, que não está associada a quaisquer restrições; Se a=1 temos U=(1+1) · _U + b, ou seja U = b como pretendido.

18 18 Algoritmo de Unificação Booleana Estas considerações podem ser materializadas no seguinte predicado unif_bool, que recebe os termos t 1 e t 2 a unificar, e sucede se o predicado anular suceder, retornando a substituição retornada por este predicado. predicado unif_bool (in: t 1, t 2 ; out: ); t t 1 +t 2 ; unif_bool anula(t, ); fim predicado. O predicado anula é implementado a seguinte forma.

19 19 Algoritmo de Unificação Booleana predicado anula (in: t; out: ); caso t = 0: anula = Verdade, = {}; caso t = 1: anula = Falso; caso contrário: A · u + B t; s (1+A) · B; se anula(s,σ) então anula Verdade; {U/(1+A) · _U+B} o σ senão anula = Falso fim se fim caso fim predicado.

20 20 Algoritmo de Unificação Booleana Dada a sua natureza recursiva, a substituição retornada pelo predicado anula é obtida pela composição da substituição {U/(1+A) · U+B}, com a substituição σ obtida na chamada recursiva do predicado (se este suceder). Exemplo: Satisfazer a restrição X+X · Z=Y · Z+1, anulando o termo X+X · Z+Y · Z+1 Unifica X+X · Z e Y · Z+1 anulaX+X · Z+Y · Z+1 =(1+Z) · X+Y · Z+1% A x · X+B x anula(1+(1+Z)) · (Y · Z+1)% (1+A x ) · B x =Z · (Y · Z+1) =Z · Y+Z% A y · X+B y anula (1+Z) · Z%(1+A y ) · B y =0

21 21 Algoritmo de Unificação Booleana Unifica X+X · Z e Y · Z+1 anulaX+X · Z+Y · Z+1 = (1+Z) · X+Y · Z+1 anula(1+(1+Z)) · (Y · Z+1)=Z · Y+Z %(1+A x ) · B x anula (1+Z) · Z = 0 %(1+A y ) · B y σ = {} σ = {Y/(1+A y ) · _Y+B y } o {} = {Y/(1+Z) · _Y+Z} o {} = {Y/(1+Z) · _Y+Z} σ = {X/(1+A x ) · _Y+B x } o {Y/(1+Z) · _Y+Z} = {X/(1+1+Z) · _X + Y · Z+1} o {Y/(1+Z) · _Y+Z} = {X/ Z · _X +Y · Z+1} o {Y/(1+Z) · _Y+Z} = {X/ Z · _X +((1+Z) · _Y+Z) · Z+1, Y/(1+Z) · _Y+Z} = {X/ Z · _X +Z+1, Y/(1+Z) · _Y+Z}

22 22 Restrições Booleanas Desta forma a restrição X+X · Z = Y · Z+1 é satisfazível, já que a unificação dos termos X+X · Z e Y · Z+1 sucede retornando o unificador booleano mais geral = {X/Z · _X +Z+1, Y/(1+Z) · _Y+Z} Podemos confirmar este resultado, verificando que (X+X · Z) = (Z · _X+Z+1)+(Z · _X+Z+1) · Z = (Z · _X+Z+1)+Z · _X = Z+1 e que (Y · Z+1) = ((1+Z) · _Y+Z) · Z+1) = Z+1

23 23 Restrições Booleanas Interpretando, este resultado, podemos concluir que a restrição X+X · Z = Y · Z+1 pode ser satisfeita independentemente do valor da variável Z, dado o unificador mais geral = {X/Z · _X +Z+1, Y/(1+Z) · _Y+Z} Numa análise mais pormenorizada se Z=0 então X=1 e Y=_Y, ou seja, X deve tomar o valor 1, e Y pode tomar qualquer valor; se Z=1 então X=_X e Y=1, ou seja, X pode tomar qualquer valor, e Y=1;

24 24 Aplicações Um domínio de eleição para a utilização de restrições booleanas é o domínio dos circuitos digitais. Exemplo: 1. Modelar o circuito abaixo através de um conjunto de restrições booleanas 2. Verificar em que condições a saída toma o valor 1. C G1G1 F G4G4 D G2G2 E G3G3 B A R 1 : C = 1+ A · B R 2 : D = 1+ A · C R 3 : E = 1+ B · C R 4 : F = 1+ D · E

25 25 Aplicações 1. Restrições: R 1 : C = 1+ A · B R 2 : D = 1+ A · C R 3 : E = 1+ B · C R 4 : F = 1+ D · E Resolução das Restrições R 1 : Resolvendo R 1 obtemos a substituição 1 C = 1+A · B 1 ={C/1+A · B} R 2 : Aplicando 1 temos R 2 : R2 1 : D = (1+A · C) {C/1+A · B} : D = (1+A · (1+A · B)) : D = 1+A+A · B Resolvendo R 2 obtemos a substituição 2 = {D/1+A+A · B}

26 26 Aplicações Combinando 2 com 1 obtemos 2 = 1 o 2 = {C/1+A · B} o {D/1+A+A · B} = {C/1+A · B, D/1+A+A · B} R 3 : Aplicando 2 temos R 3 : R 3 2 : E = (1+B · C) {D/1+A+A · B, C/1+A · B} : E = 1+B · (1+A · B) : E = 1+B+A · B Resolvendo R 3 obtemos a substituição 3 = {E/1+B+A · B} Combinando 3 com 2 obtemos 3 = 2 o 3 = {E/1+B+A · B} o {D/1+A+A · B} o {C/1+A · B} = {E/1+B+A · B, D/1+A+A · B, C/1+A · B}

27 27 Aplicações R 4 : Aplicando 3 temos R 4 : R 4 3 : F = (1+D · E) {E/1+B+A · B, D/1+A+A · B, C/1+A · B} : F = 1+(1+A+A · B) · (1+B+A · B) : F = 1+1+B+A · B+A+A · B+A · B+A · B+A · B+A · B : F = A+B Resolvendo R 4 obtemos a substituição 4 = {F/A+B} Combinando 4 com 3 obtemos 4 = 3 o 4 = {E/1+B+A · B, D/1+A+A · B, C/1+A · B}o{F/A+B} = {E/1+B+A · B, D/1+A+A · B, C/1+A · B, F/A+B} Interpretando 4 concluímos que o circuito com 4 portas nand implementa um ou-exclusivo, já que F/A+B

28 28 Aplicações 2. Saída igual a 1 Para representar esta situação acrescenta-se a restrição R 5 : F = 1. R 5 : Aplicando 4 temos R 5 :R 5 4 :(F = 1) {E/1+B+A · B, D/1+A+A · B, C/1+A · B, F/A+B} : A+B = 1 Resolvendo R 5 obtemos a substituição 5 = {A/1+B} Combinando 5 com 4 obtemos 5 = 4 o 5 = {E/1+B+A · B, D/1+A+A · B, C/1+A · B, F/A+B}o{A/1+B} = {E/1+B, D/B, C/1, F/1, A/1+B} Interpretando o resultado concluímos que para o circuito ter uma saída 1, as suas entradas devem ser complementares. Com efeito a substituição A/1+B permite concluir que se B=0 então A=1; e se B=1 então A=0 e

29 29 Restrições Booleanas no SICStus Prolog Uma vez carregado o SICStus Prolog o módulo de Restrições Booleanas, através da directiva use_module(library(clpb)) As restrições Booleanas podem ser verificadas através do predicado sat(E), em que a igualdade é representada por =:= e os operadores + e · através de # e *, respectivamente. Exemplos: 1. ?- sat(A#B=:=F). sat(A=:=B#F)? % A restrição A+B=F é satisfazível, com a substituição A/B+F

30 30 Restrições Booleanas no SICStus Prolog 2. ?- sat(A*B=:=1#C*D). sat(A=\=C*D#B)? % A restrição A · B=1+C · D é satisfazível, com substituição A/1+C·D+B 3. ?- sat(A#B=:=1#C*D), sat(C#D=:=B). sat(B=:=C#D), sat(A=\=C*D#C#D) ? % As restrições A+B=1+C · D e B=C+D são satisfeitas com a substituição {A/1+C·D+C+D, B/C+D} Nota: Atenção à notação das respostas. A=:= Exp corresponde a A/Exp A=\= Exp corresponde a A/1+Exp

31 31 Restrições Booleanas no SICStus Prolog Um exemplo mais completo, relativo ao circuito anterior :- use_module(library(clpb)). nand_gate(X,Y,Z):- sat(X*Y =:= 1#Z). circuit(A,B,[C,D,E],F):- nand_gate(A,B,C), nand_gate(A,C,D), nand_gate(B,C,E), nand_gate(D,E,F). C G1G1 F G4G4 D G2G2 E G3G3 B A

32 32 Restrições Booleanas no SICStus Prolog Alguma interacção com o sistema | ?- circuit(A,B,[C,D,E],1). C = 1, E = A, sat(B=\=A), sat(D=\=A) ? Esta resposta pode ser comparada com 5 anterior, constatando-se que são variantes do unificador mais geral {E/1+B, D/B, C/1, F/1, A/1+B} C G1G1 F G4G4 D G2G2 E G3G3 B A

33 33 Restrições Booleanas no SICStus Prolog Outra interacção | ?- circuit(A,B,[C,D,E],F). sat(C=:=_A*F#F#_A), sat(A=\=_A*F#_B*F#F#_A), sat(B=\=_A*F#_B*F#_A), sat(D=\=_B*F), sat(E=\=_B*F#F) ? ; A comparação com 4 anterior é um pouco menos óbvia... { E/1+B+A · B, D/1+A+A · B, C/1+A · B, F/A+B} 1+A·B= 1+ (1+_A·F+_B·F+F+_A)· (1+_A·F+_B·F+_A) = 1+((1+_A·F+_B·F+_A)+F)·(1+_A·F+_B·F+_A) = 1+(1+_A·F+_B·F+_A)+(1+_A·F+_B·F+_A)·F = 1+ 1+_A·F+_B·F+_A + F+_A·F+_B·F+_A·F = F+_A+_A·F = C C G1G1 F G4G4 D G2G2 E G3G3 B A

34 34 Restrições Booleanas no SICStus Prolog N Rainhas Para modelar o problemas das rainhas há que garantir –Em todas as linhas há exactamente uma rainha Em todas as linhas há uma ou mais rainhas Em todas as linhas há uma ou menos rainhas –Em todas as colunas há exactamente uma rainha Em todas as colunas há uma ou mais rainhas Em todas as colunas há uma ou menos rainhas –Em todas as diagonais há uma ou menos rainhas

35 35 Restrições Booleanas no SICStus Prolog rainhas_3([Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9]):- um_ou_mais( [Q1, Q2, Q3]), % linha 1 um_ou_menos([Q1, Q2, Q3]),... um_ou_mais( [Q1, Q4, Q7]), % coluna 1 um_ou_menos([Q1, Q4, Q7]),... um_ou_menos([Q2,Q6]), um_ou_menos([Q1, Q5, Q9]), % diagonais \ um_ou_menos([Q4,Q8]), um_ou_menos([Q2,Q4]), um_ou_menos([Q3, Q5, Q7]), % diagonais / um_ou_menos([Q6,Q8]).

36 36 Restrições Booleanas no SICStus Prolog % Uma ou mais rainhas um_ou_mais(L):-% L = [A,B,C,...,Z] or_exp(L, Exp),% Exp = A+B+C+...+Z sat(Exp =:= 1).% A+B+C+...+Z = 1 or_exp([H], H). or_exp([H|T], H + T_exp):- or_exp(T, T_exp). % Uma ou menos rainhas um_ou_menos([_]). um_ou_menos([H1,H2|T]):- sat(H1 * H2 =:= 0), % A1*A2 = 0 um_ou_menos([H1|T]), % idem para outros pares com A1 um_ou_menos([H2|T]). % idem para outros pares sem A1

37 37 Restrições Booleanas no SICStus Prolog Padrões de Teste de Avarias (Stuck-at-0/1) Há que garantir uma saída diferente entre –o circuito correcto e –o circuito com falhas tp(F, [I1, I2]):- semi_somador([],[I1, I2], [S1,C1]), semi_somador(F, [I1, I2], [S2,C2]), gate(xor, [S1, S2], S), gate(xor, [C1, C2], C), gate(or,[S,C],1). 1 I1 I2 C2 S2 C1 S1 C S

38 38 Restrições Booleanas no SICStus Prolog Há naturalmente que definir o que é um circuito em termos das suas componentes, que podem estar avariadas (Stuck-at-0/1) semi_somador(F, [I1,I2],[S,C]):- % F é o conjunto gate(1, F, and, [I1,I2], C),% de falhas gate(2, F, xor, [I1,I2], S). Na definição do comportamento de cada gate há que prever a possibilidade dessas falhas gate(N,F,_,_,0):- member(N/0, F), !. gate(N,F,_,_,1):- member(N/1, F), !. gate(_,_,T,I,O):- gate(T,I,O). member(H,[H|_]). member(H,[H|T]):- member(H,T).

39 39 Restrições Booleanas no SICStus Prolog Finalmente há que definir o comportamento de cada gate (sem falhas) por intermédio da correspondente restrição booleana gate(or, [I1,I2],O):-sat(I1+I2 =:= O). gate(nor, [I1,I2],O):-sat(I1+I2 =\= O). gate(xor, [I1,I2],O):-sat(I1#I2 =:= O). gate(and, [I1,I2],O):-sat(I1*I2 =:= O). gate(nand,[I1,I2],O):-sat(I1*I2 =\= O). gate(not,[I1],O):-sat(I1 =\= O).


Carregar ppt "1 Restrições Booleanas O domínio dos Booleanos (ou variáveis 0/1) tem especial aplicação em aplicações –Envolvendo circuitos digitais Exemplo: Circuito."

Apresentações semelhantes


Anúncios Google