200 likes | 295 Views
Esquemas e suas operações. Forma geral:. Ident. Declarações ou Ident. = [Declarações | Predicado] Predicado. ^.
E N D
Esquemas e suas operações • Forma geral: Ident. Declarações ou Ident. = [Declarações | Predicado] Predicado ^ • Esquemas são estruturas que agrupam variáveis e predicados que restringem seus valores. Seu nome possui escopo global, mas as declarações e predicados possuem escopo local
Exemplos de esquemas given sets [Pessoa, Fone] Agenda = [ag: Pessoa Fone; con: P Pessoa | con = dom ag] ou, alternativamente, Agenda ag: Pessoa Fone con: P Pessoa con = dom ag ^ I I
Renomeação em esquemas • Forma geral: • nomeEsquema [nomeNovo / nomeAtual] • Exemplo: Aniversarios = Agenda[aniv/ag] ^ Resulta em Aniversarios aniv: Pessoa Fone con: P Pessoa con = dom aniv I
Inclusão de Esquemas • Forma geral: Ident. nomeEsquema Declarações Predicado • Exemplo: ContaAg ag: Pessoa Fone con: P Pessoa qtd: N con = dom ag qtd = # con ContaAg Agenda qtd: N qtd = # con I I I
Decoração de esquemas • Forma geral: nomeEsquema’ • Exemplo: ContaAg’ ag’: Pessoa Fone con’: P Pessoa qtd’: N con’ = dom ag’ qtd’ = # con’ I I
Convenções sobre esquemas • Forma geral: nomeEsquema • Usado em operações para denotar mudança de estado • Exemplo: Agenda ag, ag’: Pessoa Fone con, con’: P Pessoa con = dom ag con’ = dom ag’ Agenda Agenda Agenda’ I
Convenções sobre esquemas • Forma geral: nomeEsquema • Usado em operações para denotar que não há mudança de estado • Exemplo: Agenda ag, ag’: Pessoa Fone con, con’: P Pessoa con = dom ag con’ = dom ag’ ag = ag’ con = con’ Agenda Agenda ag=ag’ con=con’ I
Usando e em operações Inclui0 Agenda p?: Pessoa f?: Fone ag’ = ag {p? f?} con’ = con {p?} Variáveis de entrada (?) Consulta0 Agenda p?: Pessoa f!: Fone p? con f! = ag(p?) Variável de saída (!)
Conjunção e disjunção de esquemas Seja Resultado ::= opOK | pessoaInexistente ERRO Agenda p?: Pessoa m!: Resultado p? con m! = pessoaInexistente Sucesso m!: Resultado m! = opOK ^ Consulta = (Consulta0 Sucesso) ERRO
Outras operações • nomeEsquema1 nomeEsquema2 • Junta declarações • Implicação dos predicados • nomeEsquema1 nomeEsquema2 • Junta declarações • Equivalência dos predicados
Operação ocultamento (“hiding”) • Corresponde a quantificar existencialmente variáveis em questão • Exemplo: QualquerFone = Consulta0\(p?) QualquerFone Agenda f!: Fone p?:Pessoa p? con f! = ag(p?)
Composição seqüencial • Sejam O1 e O2 dois esquemas como operações • O1;O2 representa a composição seqüencial entre O1 e O2 • Significando que o estado final de O1 irá coincidir com o estado inicial de O2 { S’ entrada(?) O2 S’ = S } O1 saída (!) S Estado intermediário
Composição seqüencial Sejam O1 e O2 os seguintes esquemas: O1 x, x’: T P(x, x’) O2 x, x’: T Q(x, x’) A composição seqüencial de O1 e O2, O1; O2, é definida por: O1; O2 = (O1[x0/x’] O2[x0/x]) \ (x0) ou O1; O2 x, x’: T x0:T P(x, x0) Q(x0, x’) ^ Exercício: se p? dom ag então Inclui0 ; Exclui0Agenda, onde Exclui0 = [ Agenda; p?:Pessoa | p? con ag’ = {p?} ag con’ = con\{p?}] ^
Operação piping • Semelhante à composição seqüencial, exceto por considerar as comunicações ao invés do estado • Portanto, P>>Q significa que as saídas de P corresponderão as entradas de Q • O predicado referente ao estado será simplesmente a conjunção dos predicados de P e de Q
Tipos em Z • Há quatro formas de introduzir tipos em Z: • Given sets: [ ... ] • Produto cartesiano: ... ... • Conjunto das partes: P ... • Esquemas: nomeTipo I ... ...
Tipos em Z • Os naturais ( N), inteiros (Z) e reais ( R) são usualmente assumidos como pré-definidos • Conjuntos arbitrários são permitidos em declarações, mas nem sempre são tipos • O tipo é derivado (inferência) das sub-expressões que compõem o conjunto arbitrário, através de um processo de normalização I I
Processo de normalização I Seja Pares == { n: N | 2 * n } y: N y Pares I y: Pares R: P(X Y) I R: X Y f: P(X Y) f X Y I f: X Y s: P(X Y) s seq X I s: seq X
Esquema como tipo • Semelhante aos registros de PASCAL • Componentes são acessados através da operação de projeção (.) Agenda ag: Pessoa Fone con: P Pessoa con = dom ag a, b: Agenda I a . ag = b . ag Projeção
Mapeamentos (“bindings”) • Um esquema como tipo pode ser visto como um binding de variável para valor • Por exemplo: seja a: Agenda, tal que ag {(josé,32213423)}, con {josé} • Então, aplicando o operador de projeção sobre a, referente a ag, nos dá • a . ag = {(josé, 32213423)}
O operador • Aplica-se a nomes de esquemas, retornando seu binding característico • Por exemplo: seja a: Agenda, tal como antes então • a = ag {(josé,32213423)}, con {josé} • Seu uso comum é Agenda’= Agenda, que implica ag’=ag con’=con • Um esquema é dito normalizado quando suas declarações estão normalizadas