Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMiguel Monterroso Alterado mais de 9 anos atrás
1
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Teoria da Computação TC
2
TC: Questões Centrais Quais as capacidades e limitações fundamentais dos computadores? O que pode e o que não pode (problema) ser resolvido por computadores? O que faz alguns problemas serem computacionalmente mais difíceis que outros?
3
TC: Áreas Centrais Teoria dos Autômatos Computabilidade
definição e propriedades de modelos matemáticos de computação. Computabilidade tese de Church-Turing (algoritmos), decidibilidade e indecidibilidade Complexidade Computacional classificação de problemas como fáceis ou difíceis (polinomiais x exponenciais).
4
Modelos Computacionais
Autômatos Finitos Bom modelo para computadores com capacidade de memória reduzida. Fazem parte de vários dispositivos eletro-mecânicos do dia-a-dia.
5
Controladores Ex: Controlador de uma porta automática
Visão aérea de uma porta automática
6
Estado O controlador pode estar em 2 estados:
aberto (significando porta aberta) fechado (significando porta fechada) O controlador passa de um estado para outro dependendo do estímulo (entrada) que recebe:
7
Entrada Existem 4 condições de entrada possíveis:
Frente : significando que uma pessoa está em pé sobre o tapete da frente; Retaguarda: significando que uma pessoa está em pé sobre o tapete de dentro; Ambos: significando que existem pessoas sobre os 2 tapetes; Nenhum: significando que ninguém está sobre os tapetes.
8
Diagrama de Estados Representação da situação: Diagrama de estados
9
Tabela de Transição Tabela de transição de estado
Obs: Quantos bits de memória são necessários?
10
Computação Exemplo: Controlador inicia no estado fechado e recebe seguinte série de sinais de entrada: frente, retaguarda, nenhum, frente, ambos Série de estados: fechado (inicio), aberto, aberto, fechado, aberto, aberto
11
Aplicações Controladores para:
Lavadoras de louça/roupa; Termômetros eletrônicos; Relógios digitais; Calculadoras; Máquinas de venda automática. São exemplos de controladores com memória limitada e que podem ser descritos por um Autômato Finito.
12
Autômato Finito Autômatos finitos são dispositivos formais úteis para:
Reconhecer padrões em dados; Projetar uma nova linguagem para uma aplicação especifica; Processamento de voz; Reconhecimento ótico de caracteres; Controle;
13
Autômato Finito Vamos olhar os Autômatos finitos a partir de uma perspectiva matemática: Definição precisa. Definição abstrata. Sem nenhuma referencia a qualquer aplicação em particular. Vamos descrever e manipular AF’s e apresentar resultados teóricos que descrevem seu poder e limitação.
14
Autômato Finito Um autômato finito M1: (diagrama de estados)
Observações: M1 tem 3 estados, q1, q2, q3 ; M1 inicia no estado q1 ; M1 tem um estado final, q2 ; Os arcos que vão de um estado p/ outro chamam-se transições.
15
Observações(continuação):
Autômato Finito Observações(continuação): O autômato finito M1 recebe os símbolos de entrada um por um; Depois de ler cada símbolo, M1 move-se de um estado para outro, de acordo com a transição que possui aquele símbolo como seu rótulo; Quando M1 lê o ultimo símbolo ele produz uma saída: aceita se M1 está no estado final e não-aceita se M1 não estiver.
16
Autômato Finito Ex: entrada 1101, M1 procede como segue:
Inicia no estado q1. Lê 1, segue transição de q1 p/ q2. Lê 1, segue transição de q2 p/ q2. Lê 0, segue transição de q2 p/ q3. 1 1 q1 q2 q3 Lê 1, segue transição de q3 p/ q2. 1 Pára c/ saída aceita.
17
Autômato Finito Experimente: 1, 01, 11, 0101 (em M1)
Podemos deduzir que : M1 aceita qualquer cadeia que termine com 1 (vai p/ o estado final q2 toda vez que lê 1); M1 aceita qualquer cadeia que termine c/ um número par de zeros que seguem o último 1; M1 não aceita cadeias como 0, 10,
18
Autômato Finito Definir um AF significa definir:
Um conjunto finito de estados; Um alfabeto de entrada que indica os símbolos de entrada permitidos; Um conjunto de regras de movimento que indicam como ir de um estado p/ outro, dependendo do símbolo de entrada; Um estado escolhido como estado inicial; Um conjunto de estados escolhidos como estados finais (de aceitação);
19
Autômato Finito Definição formal:
Um AF M é uma 5-tupla < Q, , , q0, F >, onde: Q é um conjunto finito e não-vazio chamado de conjunto de estados; é um conjunto finito e não-vazio chamado de alfabeto; : Q Q é a função de transição do autômato; q0 Q é o estado inicial; e F Q é o conjunto de estados finais.
20
Função de transição: representações
: Q Q
21
Autômato Finito Vamos estender para ´ : Q * Q : ´(q, ) = q
´(q, a) = (q, a) ´(q, wa) = (´(q, w), a) Exemplo: ´(q1, 011) = (´(q1, 01), 1) = ((´(q1, 0), 1), 1) = (((q1, 0),1 , 1) = ((q1, 1), 1) = (q2, 1) = q2
22
Computação de um AF Seja M um AF M = < Q, , , q0, F > e w *. Uma computação de M a partir de w é uma sequência: c0, c1, ..., cn , onde: co = <qo, w> cn = <qj, l>, qj Q cj+1= <d(cj, au), u> , a e u *.
23
Computação de um AF Seja w = 001: c0 = <q1, 001>
1 c3 = <q2, l> 1 q1 q2 q3 0,1
24
Palavra aceita por um AF
Seja M = <Q, , , q0, F> um AF e seja w = w1w2w3 ... wn * , wi S, 1 i n. Dizemos que M aceita w sse existe uma seqüência de estados r0, r1, ... , rn tal que: r0 = q0 ; (ri, wi+1) = ri+1 para i = 0, 1, ..., n-1; rn F. Ou seja, M aceita w sse a computação de M para a entrada w termina em um estado final, ou seja, ’(q0, w) F.
25
Linguagem reconhecida por um AF
Seja M um AF <Q, , , q0, F>. Então, a linguagem reconhecida por M, L(M), é definida como: L(M) = {w * : ’(q0, w ) F}. Ou seja, L(M) é o conjunto de todas as palavras aceitas por M. Uma linguagem reconhecida por um AF é dita ser uma linguagem regular.
26
Autômato Finito Exemplo:
M2 recebe strings no alfabeto {0,1} representando mensagens. Se o último símbolo recebido de uma mensagem é 1, significa que houve um erro na transmissão e deve ser sinalizado por M2. (L(M2) = ?)
27
Autômato Finito Troque os estados final e não final de M2
e veja o que resulta: (L(M3)=?)
28
Autômato Finito M4 : L(M4) = ?
29
Autômato Finito M5 : = { RESET, 0, 1, 2 } L(M5) = ?
Exemplo: w L(M5): w = 10<RESET>22<RESET>012 L(M5) = ?
30
Operações Regulares Teorema 1
A classe das linguagens regulares é fechada pela operação de união. Isto é, se A e B são linguagens regulares, então A B também é regular.
31
Teorema 1 Prova: Sejam A1 = L(M1), onde M1 = <Q1, , 1, q1, F1> e A2 = L(M2), onde M2 = <Q2, , 2, q2, F2> Construa M = <Q, , , q0, F>, tal que A1 A2 = L(M), da seguinte forma: Q = Q1 x Q2 = {(r1, r2) : r1 Q1 e r2 Q2}; é o mesmo; ((r1, r2), a) = (1(r1, a), 2(r2, a)); q0 = (q1, q2); F = {(r1, r2) : r1 F1 ou r2 F2}. Mostre que L(M) = L(M1) L(M2)
32
Operações regulares Teorema 2
A classe das linguagens regulares é fechada pela operação de concatenação. Isto é, se A1 e A2 são linguagem regulares, então A1 • A2 também é regular.
33
Idéia da prova Como no teorema anterior, começamos por 2 autômatos finitos M1 e M2 que reconhecem as linguagens A1 e A2, respectivamente. Construímos então um autômato finito M que deve aceitar uma entrada se ela pode ser “quebrada” em duas partes, onde M1 aceita a primeira parte e M2 a segunda. O problema é que M não sabe onde “quebrar” a entrada, isto é, onde a primeira parte termina e a segunda começa.
34
Não-determinismo Até agora, quando um AF está em um dado estado e lê o próximo símbolo da entrada, nós sabemos exatamente qual seu próximo estado (é bem determinado) : : Q Q é uma função cujo valor é um estado de Q. Máquinas que se comportam dessa forma são chamadas de determinísticas. Máquinas não-determinísticas são aquelas em que diversas escolhas podem existir para o próximo estado em qualquer ponto da execução.
35
Não-determinismo Exemplo: N1:
Um estado pode ter zero, um ou mais arcos “saindo” para o mesmo símbolo do alfabeto; zero, um ou mais arcos podem sair de cada estado rotulados com .
36
Computação de um AFND Vamos considerar N1 com a entrada 01011 N1:
A entrada é aceita porque um dos caminhos possíveis que o autômato segue termina em um estado que é um estado final. Então, a linguagem de um AFND é o conjunto das palavras que ele aceita.
37
Vantagens de usar um AFND
Vantagens de se usar AFND: Todo AFND pode ser convertido para um AFD; É mais fácil de criar; É geralmente menor; É mais fácil de se provar propriedades dos AF’s.
38
Exemplo de um AFND Exemplo: N2: Que linguagem esse autômato reconhece?
L(N2) = { w {0,1}* : w = u1v, u * , v 2}
39
AFND Definição formal:
Seja P(Q) o conjunto potência (power set) de Q e seja = {}. Um Autômato Finito Não-Determinístico (AFND) é uma 5-tupla <Q, , , q0, F>, onde: Q é um conjunto finito de estados; é um alfabeto finito; : Q x P(Q) é a função de transição; q0 Q é o estado inicial; e F Q é o conjunto de estados de aceitação.
40
Exemplo de AFND Exemplo:
A definição formal de N1 é <Q, , , q1, F>, onde: Q = {q1, q2, q3, q4}; = {0, 1}; é dada por: {q4} q4 {q3} q3 q2 {q1, q2} {q1} q1 1 q1 é o estado inicial; e F = {q4}.
41
Equivalência entre AFD e AFND
Teorema 3 Todo AFND tem um AFD equivalente.
42
Equivalência entre AFD e AFND
Prova: Seja N = <Q, , , q, F> um AFND que reconhece uma linguagem A. Vamos construir um AFD M da seguinte forma: M = <Q’, , ’, q’, F’> , onde: Q’ = P(Q) : Todo estado de M é um sub-conjunto de estados de N; Para R Q’ e a : ’(R, a) = {q Q | q (r, a), para algum r R}, ou seja, a união dos conjuntos (r, a) para cada possível r em R; q’ = {q 0}; F’ = {R Q’ | R contém um elemento de F}. Obs: Não leva em conta transições com .
43
Equivalência entre AFD e AFND
Introduzindo : Para qualquer estado R de M (ou seja, para qualquer sub-conjunto de Q) definimos: E(R) = Conjunto de todos os estados que posam ser atingidos de R através de arcos rotulados p/ , incluindo os membros de R. E(R) = { q : q pode ser alcançado de R se caminhando ao longo de 0 ou mais arcos rotulados por }. Assim: ’(R, a) = {q Q | q E((r, a)) para algum r R}. q 0 ’ = E( {q 0} ).
44
Equivalência entre AFD e AFND
Exemplo: Seja N o AFND abaixo: Construir um AFD M equivalente à N.
45
Equivalência entre AFD e AFND
M = <Q’, , ’, q’, F’>, tal que: Q’ = < , {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3} > q 0’ = E( {q 0} ) = E( {1} ) = {1, 3} F’ = { {1}, {1, 2}, {1, 3}, {1, 2, 3} } AFND N a {1, 3} {1, 2} {1,2,3} {2, 3} {3} {1} {2} a,b b AFD M
46
Minimizando o AFD Retirando os estados {1} e {1, 2} pois são inacessíveis b {1, 3} {1, 2} {1,2,3} {2, 3} {3} {1} {2} a,b a AFD M Obtemos a AFD M’ : {1, 3} {1,2,3} {2, 3} {3} {2} a,b a b AFD M’
47
Equivalência entre AFD e AFND
AFND N2 q000 q010 q001 q011 q110 q100 q101 q111 1 AFD correspondente
48
AFND’s e linguagens regulares
Corolário Uma linguagem é regular se e somente se existe algum AFND que a reconheça.
49
Operações regulares: União
Teorema 4 (versão 2 do teorema 1) Sejam A1 e A2 linguagens regulares. Então, A1 A2 é regular.
50
Prova (versão 2) Construir N = <Q, , , q0, F> tal que:
Sejam N1 e N2 AFND’s tais que A1 = L(N1) e A2 = L(N2) N1 = <Q1, , 1, q1, F1> e N2 = <Q2, , 2, q2, F2> Construir N = <Q, , , q0, F> tal que:
51
É fácil ver que L(N) = L(N1) L(N2)
Prova (versão 2) (q,a) = 1(q,a) q Q1 2(q,a) q Q2 {q1, q2} q = q0 e a = q = q0 e a Q = {q0} Q1 Q2 Q0 é o estado inicial de N. F = F1 F2 é da forma: É fácil ver que L(N) = L(N1) L(N2)
52
Concatenação Teorema 5 Sejam A1 e A2 linguagens regulares. Então A1 • A2 é regular.
53
Prova Prova: Sejam N1 e N2 AFND’s tais que A1 = L(N1) e A2 = L(N2)
N1 = <Q1, , 1, q1, F1> e N2 = <Q2, , 2, q2, F2> Construir N = <Q, , , q0, F> tal que:
54
Prova Q = Q1 Q2 q1 Q1 é o estado inicial de N: q1 Q1 Q2
O conjunto de estados de reconhecimento de N é F2 é da forma: (q,a) = 1(q,a) q Q1 e q F1 1(q,a) q F1 e a 1(q,a) {q2} q = q0 e a = 2(q,a) q Q1 É fácil ver que L(N) = L(N1) • L(N2)
55
Expressão Regular Assim como uma expressão aritmética representa um número natural: (5 + 3) x 4 uma expressão regular representa uma linguagem: (0 + 1) 0*
56
Expressão Regular Na expressão (0 + 1) 0* :
0 representa o conjunto {0} 1 representa o conjunto {1} (0 + 1) representa o conjunto {0} {1} = {0, 1} 0* representa {0}* Então (0 + 1) 0* representa a linguagem: {uv: u {0, 1} e v = 0n, n0}
57
Expressão Regular Definição formal: Seja um alfabeto
Se a , então a é uma expressão regular. Se é a palavra nula, então é uma expressão regular. Se é o conjunto vazio, então é uma expressão regular. Se R1 e R2 são expressões regulares, então (R1 + R2) e (R1 R2) são expressões regulares. Se R1 é uma expressão regular, então (R1*) é uma expressão regular.
58
Expressão Regular Definição: Definição:
Se R é uma expressão regular, então L(R) é a linguagem que R representa/descreve. Ex.: L((a + b)) = {a, b} Definição: R1 R2 (equivalente) sse L(R1) = L(R2)
59
Expressão Regular Mas geralmente,
Se = {0, 1} , podemos usar como abreviação para e expressão regular (0 + 1). Mas geralmente, Se é um alfabeto, a expressão regular descreve a linguagem consistindo de todas as palavras de comprimento 1 sobre esse alfabeto e a expressão regular * descreve a linguagem consistindo de todas as palavras sobre aquele alfabeto. Ex: (0 *) + ( 1)
60
Expressões x Linguagens
(0 + l) (1 + l) {l, 0, 1, 01} 1* * {l}
61
Propriedades R1 (R2 R3) (R1 R2) R3 (associativa)
R1 (R2 + R3) (R1 R2) + (R1 R3) (distributiva) (R1 + R2) (R2 + R1) (comutativa) (R + ) R (R l) R
62
Expressão Regular Prova da 2: w L(R1 (R2 R3)) sse
existem x L(R1) e y L(R2 R3) tais que w = x.y existem x L(R1) e (y L(R2) ou y L(R3)) tais que w = x.y existem x L(R1) e y L(R2) ou existem x L(R1) e y L(R3) tais que w = x.y existem x L(R1) e y L(R2) tais que w = x.y ou existem x L(R1) e y L(R3) tais que w = x.y sse w L(R1 R2) ou w L(R1 R3) sse w L(R1 R2) L(R1 R3)
63
Expressão Regular x Autômatos Finitos
Se uma linguagem é descrita por uma expressão regular então ela é regular. Prova: Seja R uma expressão regular que descreve uma linguagem A. Vamos mostrar que todos os seis casos da definição indutiva de expressão regular levam a linguagens regulares. Teorema 6
64
Expressão Regular x Autômatos Finitos
R = a , para algum a em S. Então, L(R) = {a} e o seguinte AFND reconhece L(R): a
65
Expressão Regular x Autômatos Finitos
R = l Então, L(R) = {l} e o seguinte AFND reconhece L(R):
66
Expressão Regular x Autômatos Finitos
Então, L(R) = e o seguinte AFND reconhece L(R):
67
Expressão Regular x Autômatos Finitos
R = R1+ R2 R = R1 R2 R = R1* Da definição indutiva de expressão regular e do fato que a classe é fechada por união, concatenação e estrela, podemos confirmar 4, 5 e 6 e concluir a prova do teorema.
68
Expressão Regular x Autômatos Finitos
Exemplo: Converter (ab + a)* em um AFND. a 1. a b 2. b a l b 3. ab
69
Expressão Regular x Autômatos Finitos
b 4. ab + a
70
Expressão Regular x Autômatos Finitos
b (ab + a)* 5.
71
Expressão Regular x Autômatos Finitos
Teorema 7 Se uma linguagem é regular então ela pode ser descrita por uma expressão regular. Prova: Procedimento para converter AF’s em expressões regulares. Vamos fazer uso do conceito de Autômato Finito Não-Determinístico Generalizado(AFNDG): AFNDG’s são AFND’s cujos arcos podem ser rotulados por expressões regulares além dos símbolos do alfabeto e .
72
AFNDG Por conveniência – Forma especial:
O estado inicial tem setas levando a todos os outros estados, mas nenhuma seta de entrada; Há apenas um estado final, e este tem setas vindo de todos os outros estados, mas nenhuma partindo de si. Dessa forma, o estado inicial não pode ser o estado final; Com exceção dos estados final e inicial, todos os outros tem setas ligando a qualquer outro estado, e a si próprios.
73
AFNDG Como converter um AFNDG para a forma especial
adicionar um novo estado inicial com arco para o antigo estado inicial e um novo estado final com arcos vindo dos antigos estados finais; se qualquer arco tem vários rótulos, substitua-os pelo rótulo igual à adição deles; adicione arcos rotulados por entre estados que não tem arcos.
74
AFNDG Definição formal: Um AFNDG é uma 5 tupla <Q, , , qinicial, Ffinal> onde: Q é o conjunto de estados; é o alfabeto de entrada; : (Q - {qfinal}) x (Q - {qinicial}) R; qinicial é o estado inicial; qfinal é o estado final.
75
AFNDG Definição: Um AFNDG aceita uma palavra w * se w = w1w2w3...wk, onde cada wi é pertence a *, e existe uma seqüência de estados q0q1q2...qk tal que: q0 = qinicial é o estado inicial; qk = qfinal é o estado final; e Para cada i, wi L(Ri), onde Ri = (qi-1, qi).
76
AFNDG Como converter um AFNDG na forma especial em uma expressão regular: Supondo o AFNDG com k estados. Se k = 2, o AFNDG tem apenas 1 arco que vai do estado inicial para o estado final. Esse arco é rotulado pela expressão regular que descreve a linguagem. Se k > 2, construir um AFNDG equivalente com k-1 estados. Esse passo pode ser repetido até que o AFNDG tenha 2 estados. Como ele tem um estado inicial e um estado final necessariamente distintos, então, k ≥ 2.
77
AFNDG Procedimento CONVERT(G): 1. Seja k o número de estados de G;
2. Se k =2, G deve consistir apenas de qinicio e qfinal.
78
AFNDG 3. Se k > 2, selecionamos o estado qelim Q diferente de qinicial e qfinal, e temos G’ como o AFNDG < Q’, , ’, qinicial, qfinal >, onde Q’= Q - {qelim}, e para qualquer q Q’-{qinicial}, tem-se ’ (qi, qj) = (R1) (R2)* (R3) + (R4), para R1 = ’(qi, qelim), R2 = (qelim, qelim), R3=(qelim, qj), e R4 = (qi, qj). 4. Compute CONVERTE(G’) e retorne este valor.
79
AFNDG com novo estado inicial s e final a.
Exemplo: AFD inicial AFNDG com novo estado inicial s e final a.
80
AFNDG Cont. do exemplo: Remoção do estado 2 e atualização dos rótulos. Resultado obtido seguindo o passo 3 do procedimento CONVERT: qi = 1, qj = a e qelim = 2; R1 = b; R2 = a b; R3 = ; R4 = . Então, o novo rótulo para a seta indo de 1 até a é a expressão regular b(a b)*. Remoção do estado 1 e atualização do rótulo. O rótulo é a expressão regular que representa o AFD.
81
Expressão Regular x Autômatos Finitos
Teorema 8 Uma linguagem é regular se e somente se ela pode ser descrita por uma expressão regular. Prova: Teoremas 6 e 7.
82
Lema do Bombeamento Toda linguagem regular tem uma propriedade especial: Toda palavra na linguagem contém uma seção (pedaço) que pode ser repetida qualquer número de vezes com a palavra resultante também pertencendo à linguagem. Se podemos mostrar que uma linguagem não tem esse propriedade então a linguagem garantidamente não é regular.
83
Lema do Bombeamento Se A é uma linguagem regular, então existe um número p (o comprimento do bombeamento) tal que. Se w A e |w| ≥ p, então w = xyz satisfazendo as seguintes condições: Para cada i ≥ 0, xyiz A |y| > 0 |xy| ≤ p
84
Lema do Bombeamento Prova (idéia):
Seja M = <Q, , , q, F> um AFD que reconheça A. Seja p o número de estados de M. Se s A tem comprimento no mínimo igual a p, |s| p, considere a seqüência de estados que M assume quando computando s: q1, q3, q20, q9, q17, q9, q6, ..., q35, q13 Se |s| = n, a seqüência de estados acima tem comprimento n + 1.
85
Lema do Bombeamento Prova (idéia):
Como n ≥ p, então n+1 > p. (lembrar que p é o número de estados de M), então, a seqüência de estados acima deve necessariamente conter um estado repetido (princípio da casa de pombos). s = s1 s2 s3 s4 s5 s sn q1 q3 q20 q9 q6 q17 q35 q13
86
Lema do Bombeamento Vamos dividir s em três pedaços: x, y e z:
O pedaço x é a parte de s que vai do estado inicial q1 até o estado q9 (x ocupa M do estado q1 até q9). O pedaço y é a parte de s contida entre as duas ocorrências de q9 (y ocupa M de q9 até de volta a q9). O pedaço z é a parte remanescente de s ( z ocupa M de q9 até o estado de reconhecimento q13).
87
Lema do Bombeamento Condição 1: Condição 2: Condição 3:
M aceita a entrada xz (xy0z) M aceita a entrada xyiz (i ≥ 1) Condição 2: y é a parte de s construída entre as duas ocorrências de q9: |y| > 0. Condição 3: Os primeiros p+1 estados na seqüência devem conter uma repetição. Então, |xy| ≤ p.
88
Tradutor de Estado Finito
89
Tradutor de Estado Finito (TEF)
Definição: Um Tradutor de Estado Finito (TEF) é uma 6-tupla <, G, Q, q0, , >, onde: é alfabeto de entrada; G é o alfabeto de saída; Q é o conjunto de estados; q0 Q é o estado inicial; : Q Q; e : Q G
90
Tradutor de Estado Finito (TEF)
Exemplo: B = <{a, b}, {0, 1}, {q0, q1}, q0, , >, onde:
91
Tradutor de Estado Finito (TEF)
Da mesma forma como para ’ : ’(q, ) = ’(q, aw) = (q, a). ’((q, a), w) Definição: Dado um TEF M = <, , Q, q0, , >, a função de transição para M, fM, é a função fM : * * definida por fM(w) = ’(q0, w). Obs.: Note que fM preserva o comprimento, isto é, |fM(w)| = |w|.
92
Tradutor de Estado Finito (TEF)
Exemplo:
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.