a linguagem de especificac¸ao alg˜ ebrica casl e o´ … · 2017. 11. 4. · a linguagem de...

138
A LINGUAGEM DE ESPECIFICAC ¸ ˜ AO ALG ´ EBRICA CASL E O TIPO DE DADOS INTERVALOS Katiane Ribeiro Lopes TRABALHO SUBMETIDO AO COLEGIADO DA P ´ OS-GRADUAC ¸ ˜ AO EM SISTEMAS E COMPUTAC ¸ ˜ AO COMO REQUISISTO PARCIAL PARA A OBTENC ¸ ˜ AO DO T ´ ITULO DE MESTRE EM SISTEMAS E COMPUTAC ¸ ˜ AO UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ORIENTADOR: PROF. DR. REGIVAN HUGO NUNES SANTIAGO NATAL, BRASIL ABRIL,2004 c Katiane Ribeiro Lopes, 2004

Upload: others

Post on 31-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

  • A LINGUAGEM DE ESPECIFICAÇÃO ALGÉBRICA CASL E O

    TIPO DE DADOS INTERVALOS

    Katiane Ribeiro Lopes

    TRABALHO SUBMETIDO AO COLEGIADO

    DA PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO

    COMO REQUISISTO PARCIAL PARA A OBTENÇÃO DO TÍTULO DE

    MESTRE EM SISTEMAS E COMPUTAÇÃO

    UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

    ORIENTADOR: PROF. DR. REGIVAN HUGO NUNES SANTIAGO

    NATAL, BRASIL

    ABRIL,2004

    c© Katiane Ribeiro Lopes, 2004

  • UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

    DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA

    A dissertação entitulada “A Linguagem de Especificação

    Algébrica CASL e o Tipo de Dados Intervalos” de autoria de

    Katiane Ribeiro Lopes foi submetida ao programa de Pós-Graduação

    em Sistemas e Computação como requisito parcial para a obtenção do grau de

    Mestre em Sistemas e Computação sendo avaliada e aprovada pela banca

    examinadora abaixo:

    Data: Abril,2004

    Orientador:Prof. Dr. Regivan Hugo Nunes Santiago

    Examinadores:Prof. Dr. Marćılia Andrade Campos

    Prof. Dr. Anamaria Martins Moreira

    ii

  • UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

    Data: Abril,2004

    Autor: Katiane Ribeiro Lopes

    Titulo: A Linguagem de Especificação Algébrica CASL e o Tipo

    de Dados Intervalos

    Depto: Departamento de Informática e Matemática Aplicada

    Grau: M.Sc. Convocação: Abril Ano: 2004

    Assinatura do Autor

    iii

  • Resumo

    Na computação científica é necessário que os dados sejam o mais precisos e exatos possível, porém a imprecisão dos dados de entrada desse tipo de computação pode estar associada às medidas obtidas por equipamentos que fornecem dados truncados ou arredondados, fazendo com que os cálculos com esses dados produzam resultados imprecisos. Os erros mais comuns durante a computação científica são: erros de truncamentos, que surgem em dados infinitos e que muitas vezes são “truncados", ou interrompidos; erros de arredondamento que são responsáveis pela imprecisão de cálculos em seqüências finitas de operações aritméticas. Diante desse tipo de problema Moore, na década de 60, introduziu a matemática intervalar, onde foi definido um tipo de dado que permitiu trabalhar dados contínuos, possibilitando, inclusive prever o tamanho máximo do erro.

    A matemática intervalar é uma saída para essa questão, já que permite um controle e análise de erros de maneira automática. Porém, as propriedades algébricas dos intervalos não são as mesmas dos números reais, apesar dos números reais serem vistos como intervalos degenerados, e as propriedades algébricas dos intervalos degenerados serem exatamente as dos números reais. Partindo disso, e pensando nas técnicas de especificação algébrica, precisa-se de uma linguagem capaz de implementar uma noção auxiliar de equivalência introduzida por Santiago [6] que ``simule" as propriedades algébricas dos números reais nos intervalos.

    A linguagem de especificação CASL, Common Algebraic Specification Language, [1] é uma linguagem de especificação algébrica para a descrição de requisitos funcionais e projetos modulares de software, que vem sendo desenvolvida pelo CoFI, The Common Framework Initiative [2] a partir do ano de 1996. O desenvolvimento de CASL se encontra em andamento e representa um esforço conjunto de grandes expoentes da área de especificações algébricas no sentido de criar um padrão para a área.

    A dissertação proposta apresenta uma especificação em CASL do tipo intervalo, munido da aritmética de Moore, afim de que ele venha a estender os sistemas que manipulem dados contínuos, sendo possível não só o controle e a análise dos erros de aproximação, como também a verificação algébrica de propriedades do tipo de sistema aqui mencionado. A especificação de intervalos apresentada aqui foi feita apartir das especificações dos números racionais proposta por Mossakowaski em 2001 [3] e introduz a noção de igualdade local proposta por Santiago [6, 5, 4].

    Palavra-chave: matemática intevalar, CASL, igualdade local

    Referências: [1] CASL, Common Algebraic Specification Language, www.brics.dk/Projects/CoFI, 2001. [2] CoFI, The Common Framework Initiative, www.brics.dk/Project/CoFI. [3] Especificações do Números Racionais, www.brics.dk/Projects/CoFI,2001.

  • [4] Santiago, Regivan H.N., Interval Local Equality, IV WMF, 2001. [5] Santiago, Regivan H.N. and Acióly, B. M., Interval Local Equality, Abstracts of 9th GAMM-IMACS International Symposium on Scientific Comouting, Computer Arithmetic and Validated Numerics – SCAN 2000, International Conference on Interval Methods in Science and Engeneering, Karlsruhe – Germany, 2000. [6] Santiago, Regivan H.N., The Theory Interval Local Equations, Universidade Federal de Pernambuco, Recife, Pernambuco, Brazil, 1999.

  • Sumário

    Sumário iv

    Lista de Tabelas vi

    Lista de Figuras vii

    Agradecimentos viii

    1 Introdução 1

    2 Matemática Intervalar 4

    2.1 Definições Básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2.2 Matrizes e vetores Intervalares . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    2.3 Relações de Ordem sobre Intervalos . . . . . . . . . . . . . . . . . . . . . . . 26

    2.4 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    3 CASL 29

    3.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    3.2 CASL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.3 Especificações Básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    3.3.1 Aspectos Pragmáticos . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    3.3.2 Conceitos Semânticos . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    3.3.3 Constructos da Linguagem . . . . . . . . . . . . . . . . . . . . . . . . 42

    3.3.4 Exemplo de uma Especificação Básica . . . . . . . . . . . . . . . . . . 49

    3.4 Especificações Estruturadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    3.4.1 Aspectos Pragmáticos . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    3.4.2 Conceitos Semânticos . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    3.4.3 Constructos da Linguagem . . . . . . . . . . . . . . . . . . . . . . . . 56

    3.4.4 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

    iv

  • 3.5 Especificações Arquiteturais . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    3.5.1 Aspectos Pragmáticos . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    3.5.2 Conceitos Semânticos . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    3.5.3 Constructo da Linguagem . . . . . . . . . . . . . . . . . . . . . . . . 67

    3.5.4 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    3.6 Especificações de Bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    3.6.1 Aspectos Pragmáticos . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    3.6.2 Conceitos Semânticos . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    3.6.3 Constructos da Linguagem . . . . . . . . . . . . . . . . . . . . . . . . 72

    3.7 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    4 Igualdade Local Intervalar e CASL 75

    4.1 Igualdade e Existência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

    4.2 Uma Lógica para Elementos Parciais . . . . . . . . . . . . . . . . . . . . . . 77

    4.2.1 Identidade e Existência . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    4.2.2 Reflexividade e Existência . . . . . . . . . . . . . . . . . . . . . . . . 83

    4.3 Ω-conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

    4.4 CASL e a Igualdade de Scott . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    4.4.1 Igualdade Local e Intervalos . . . . . . . . . . . . . . . . . . . . . . . 91

    4.5 Aplicando a noção de Igualdade Local em Intervalos . . . . . . . . . . . . . . 99

    4.6 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

    5 Congruência e Indicernibilidade 102

    5.1 Congruências e Prinćıpios da Substituição de Iguais por Iguais para a Igual-

    dade Local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    5.2 Considerações finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

    6 Conclusões e trabalhos futuros 117

    6.1 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

    6.2 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

    A Especificação CASL dos Intervalos de Moore 120

    Bibliografia 126

    v

  • Lista de Tabelas

    2.1 Operação de multiplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    2.2 Operação de Divisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    vi

  • Lista de Figuras

    3.1 Diagrama da Sobrecarga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    3.2 Diagrama da Sobrecarga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    3.3 Assinatura Sentenças e Classe de Modelos . . . . . . . . . . . . . . . . . . . 39

    3.4 Assinatura e Conjunto de Sentenças . . . . . . . . . . . . . . . . . . . . . . . 39

    3.5 Diagrama de Instituição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    3.6 Diagrama do Morfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    3.7 Diagrama Comutativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    vii

  • Agradecimentos

    • A Deus por toda a capacidade para realizar esse trabalho.

    • A meus pais e irmãos que mesmo de tão longe me deram o apoio necessário paracumprir essa etapa tão importante e d́ıficil.

    • Ao meu orientador Prof. Regivan pela confiança, aprendizado e paciência.

    • A minha colega de mestrado Samara pela amizade e força nas horas que precisei.

    • Ao Prof. Benjamı́n pela colaboração e contribuição.

    • A D. Wilma e famı́lia pelo acolhimento em sua casa.

    • E à todos que conheci no DIMAp que contribuiram para que esse tempo longe de casafosse uma época de conquista e de amizades que serão para sempre carregadas.

    Katiane Ribeiro Lopes

    viii

  • Caṕıtulo 1

    Introdução

    Na computação cient́ıfica é necessário que os dados sejam o mais precisos e exatos posśıvel,

    porém a imprecisão dos dados de entrada desse tipo de computação pode estar associada às

    medidas obtidas por equipamentos que fornecem dados truncados ou arredondados, fazendo

    com que os cálculos com esses dados produzam resultados imprecisos. Os erros mais comuns

    durante a computação cient́ıfica são: erros de truncamentos, que surgem em dados infinitos

    e que muitas vezes são “truncados”, ou interrompidos; erros de arredondamento que são

    responsáveis pela imprecisão de cálculos em seqüências finitas de operações aritméticas.

    O controle desses erros pode ser monitorado por um meta-algoritmo, que geralmente é

    dispendioso. Com o objetivo de eliminar os meta-algoritmos, no final dos anos 50, Moore e

    Sunaga propuseram a Matemática Intervalar. Com isso, o intervalo [a,b], contém o número a

    ser computado bem como o erro cometido por essa representação que será no máximo b− a2 .

    Como os resultados dos cálculos serão sempre um intervalo [a,b], contendo a resposta ideal,

    então se terá o controle dos erros durante o processo computacional.

    A computação cient́ıfica, do ponto de vista de implementação já está bastante avançada.

    Entretanto, quando se leva em consideração o processo de desenvolvimento de software para

    1

  • 2

    esse tipo de sistemas em algum ponto do processo de especificação 1, tem-se que pensar na

    questão dos erros de aproximação e como controlá-los durante as operações do sistema. A

    matemática intervalar é uma sáıda para essa questão, já que permite um controle e análise

    de erros de maneira automática. Porém, as propriedades algébricas dos intervalos não são

    as mesmas dos números reais, apesar dos números reais serem vistos como intervalos de-

    generados, e as propriedades algébricas dos intervalos degenerados serem exatamente as dos

    números reais. Partindo disso, e pensando nas técnicas de especificação algébrica, precisa-se

    de uma linguagem capaz de implementar uma noção auxiliar de equivalência introduzida por

    Santiago [12] que “simule”as propriedades algébricas dos números reais nos intervalos.

    A linguagem de especificação CASL, Common Algebraic Specification Language, [9] é

    uma linguagem de especificação algébrica para a descrição de requisitos funcionais e projetos

    modulares de software, que vem sendo desenvolvida pelo CoFI, The Common Framework

    Initiative [3] a partir do ano de 1996. O desenvolvimento de CASL se encontra em andamento

    e representa um esforço conjunto de grandes expoentes da área de especificações algébricas

    no sentido de criar um padrão para a área.

    Essa dissertação introduz prinćıpios da congruência e da indicernibilidade para a igual-

    dade local [12] de maneira que a mesma possa ser descrita numa biblioteca CASL e assim

    possa-se escrever especificações CASL utilizando intervalos de extremos racionais. Com isso

    pretende-se fornecer um ambiente munido da aritmética de Moore, para que se possa de-

    screver algebricamente sistemas que manipulem dados cont́ınuos, sendo posśıvel não só o

    controle e a análise dos erros de aproximação, através da utilização de intervalos, como

    também a verificação de propriedades do tipo de sistema aqui mencionado. A especificação

    de intervalos apresentada no apêndice A foi feita a partir das especificações dos números

    1Por exemplo, durante o refinamento de dados [10, 18]

  • 3

    racionais proposta por Mossakowski em 2001 [4] e introduz a noção de igualdade local de-

    senvolvida no caṕıtulo 4 e proposta por Santiago em [12, 14, 13] além dos prinćıpios de

    congruência e substituição de iguais por iguais desenvolvidos no Caṕıtulo 5.

    Para ser auto-contido, esse documento introduz nos primeiros dois caṕıtulos a matemática

    intervalar e a linguagem CASL. As contribuições dessa dissertação encontram-se a partir do

    Caṕıtulo 4.

    O caṕıtulo 2 é portanto uma breve introdução a aritmética de Moore e sua extensão

    para a versão matricial. O caṕıtulo 3 é uma tentativa de reescrita de ”Uma Introdução a

    linguagem CASL”escrita por Mosses em [9], e visa introduzir o leitor na linguagem CASL,

    bem como tornar o texto auto-contido.

    No caṕıtulo 4, é introduzida a versão booleana da igualdade local para intervalos para

    que a mesma possa servir de semântica para a relação criada na biblioteca. No caṕıtulo 5

    são introduzidas noções de congruência e de indicernibilidade para essa igualdade local, para

    que se possa efetuar verificações algébricas. Por fim o caṕıtulo 6 apresenta as conclusões e

    os trabalhos futuros desta dissertação.

  • Caṕıtulo 2

    Matemática Intervalar

    Esse caṕıtulo introduz a matemática intervalar, que é utilizada na computação cient́ıfica

    como uma ferramenta para o tratamento de erros existentes em algumas computações. Esta

    surgiu nos anos 60, como alternativa para os meta-algoritmos que eram usados para controle

    e análise de erros. Moore e Sunaga [7, 17] desenvolveram paralelamente uma aritmética para

    intervalos utilizando a estrutura dos números reais. Porém, existem leis que são satisfeitas

    pelos números reais, que não são válidas para todos os intervalos. Esse caṕıtulo foi baseado

    em [15, 5, 16].

    2.1 Definições Básicas

    Definição 2.1.1 (Intervalo de reais e I ).

    Seja o conjunto dos números reais e x1 , x2 ∈ , tal que x1 ≤ x2. Então, o conjunto

    {x ∈ : x1 ≤ x ≤ x2} é um intervalo de extremos reais ou simplesmente um intervalo, e

    será denotado por X = [x1, x2]. Os elementos do conjunto dos intervalos serão denotados por

    letras latinas maiúsculas, e denota-se por I o conjunto de todos os intervalos de reais, i.e., I

    = {[x1, x2]/x1, x2 ∈ , x1 ≤ x2} .Os intervalos da forma [x, x] são chamados degenerados,

    onde [x, x] é a representação intervalar do número real x ∈ I . .

    4

  • 5

    Exemplos 2.1.1.

    [1, 3], [2, 2], [−5,−2], e [−2, 2] são alguns exemplos de intervalos. Sendo que [2, 2] corre-sponde ao próprio número real 2.

    Considerando cada intervalo da reta como um conjunto, a noção de igualdade entre

    dois intervalos é dada pela noção de igualdade entre conjuntos; ou seja:

    A = B ⇔ ∀x ∈ A,∀x ∈ B, x ∈ A ⇔ x ∈ B1. Assim:

    Definição 2.1.2 (Igualdade entre Intervalos).

    Sejam A = [a1, a2] e B = [b1, b2] dois intervalos em I . Diz-se que A = B se, e somente

    se a1 = b1 e a2 = b2.

    Logo, dois intervalos são considerados iguais se eles forem iguais enquanto conjuntos.

    Definição 2.1.3 (Operações aritméticas em I ).

    Sejam A, B ∈ I , dois intervalos reais. As operações de soma, subtração, multiplicação

    e divisão em I são definidas por A ∗ B = {a ∗ b : a ∈ A ∧ b ∈ B} onde ∗ ∈ {+,−,×, /}

    é uma das quatro operações aritméticas. Para a operação de divisão, 0 /∈ B. Se α é

    uma operação unária e X ∈ I , então αX é definida por αX = α(X) = {α(x)/x ∈ X} ⊆

    [min {α(x)/x ∈ X} , max {α(x)/x ∈ X}].

    Definição 2.1.4 (Soma Intervalar).

    Sejam então A, B ∈ I dois intervalos reais, com A = [a1, a2] e B = [b1, b2]. Então A +

    B = [(a1 + b1), (a2 + b2)].

    1Axioma da Extensão do Sistema ZF.

  • 6

    Exemplos 2.1.2.

    Sejam A = [5, 10] e B = [3, 6]. Tem-se:

    A + B = [5, 10] + [3, 6] = [(5 + 3), (10 + 6)] = [8,16]

    Teorema 2.1.1. (Propriedades da Soma) Santos [15]

    Sejam A, B, C ∈ I intervalos de extremos racionais. Então, valem as seguintes pro-

    priedades:

    1. Fechamento: Se A, B ∈ I então A + B ∈ I ;

    2. Associatividade: A + (B + C) = (A + B) + C;

    3. Comutatividade: A + B = B + A;

    4. Elemento Neutro: ∃ ! 0 = [0;0] ∈ I tal que A + 0 = 0 + A = A.

    Definição 2.1.5 (Pseudo Inverso Aditivo). Santos [15]

    Seja A ∈ I um intervalo de reais, com A =[a1, a2]. Então -A = [−a2,−a1].

    Exemplos 2.1.3.

    Seja A = [5, 6]. Então -A = −[5, 6] = [−6,−5].

    Pode-se observar que o conjunto I não possui inverso aditivo, i.e., nem sempre é posśıvel

    achar um intervalo “-A”tal que A + (-A) = 0. Por exemplo, tomando A = [5,10], tem-se:

    A + (- A) = [5,10] + (-[5,10]) = [5,10] + [-10,-5] = [-5,5] �= [0,0], mas 0 ∈ [-5,5], como mostra

    o teorema abaixo.

    Teorema 2.1.2. (0 ∈ A -A)

  • 7

    Seja A um intervalo de extremos reais. Então, 0 ∈ (A -A).

    Demonstração: Dado A = [a1, a2], como A ∈ I , segue que a1 ≤ a2. Mas A - A = [a1, a2]

    - [a1, a2] = [a1, a2] + [−a2,−a1] = [a1 − a2, a2 − a1]. Como a1 ≤ a2, segue que a1 − a2 ≤ 0 e

    a2 − a1 ≥ 0, ou seja 0 ∈ A - A.

    Definição 2.1.6 (Subtração Intervalar).

    Sejam A, B ∈ I dois intervalos reais, com A = [a1, a2] e B = [b1, b2]. Então A - B = A

    + (-B) = [a1, a2] + [−b2,−b1] = [(a1 − b2) , (a2 − b1)].

    Exemplos 2.1.4.

    Sejam A = [4, 5] e B = [6, 7]. Então,

    A - B = [4, 5]− [6, 7] = [4, 5] + (−[6, 7]) = [4, 5] + [−7,−6] = [4− 7, 5− 6] = [−3,−1]

    Definição 2.1.7 (Multiplicação Intervalar).

    Sejam A, B ∈ I dois intervalos reais, com A = [a1, a2] e B = [b1, b2]. Então, A · B =

    [min {a1.b1, a1.b2, a2.b1, a2.b2} , max {a1.b1, a1.b2, a2.b1, a2.b2}].

    Exemplos 2.1.5.

    Sejam A = [−4, 6] e B = [−5, 7]. Então,

    A · B = [−4, 6] · [−5, 7] = [min{(−4).(−5), (−4).7, 6.(−5), 6.7},

    max{(−4).(−5), (−4).7, 6.(−5), 6.7}] = [min{20,−28,−30, 42},

    max{20,−28,−30, 42}] = [−30,42].

    Teorema 2.1.3. (Propriedades do Produto) Santos [15]

  • 8

    Sejam A, B, C ∈ I intervalos de reais. Então, valem as seguintes propriedades:

    1. Fechamento: Se A, B ∈ I , então A . B ∈ I ;

    2. Associatividade: A . (B . C) = (A . B) . C;

    3. Comutatividade: A . B = B . A;

    4. Elemento Neutro: ∃! 1 = [1;1] ∈ I tal que A.1 = 1.A =A

    5. Sub-distributividade: A.(B + C) ⊆ (A . B) + (A .C).

    Definição 2.1.8 (Pseudo Inverso Multiplicativo). Santos [15]

    Seja A ∈ I um intervalo real, com A = [a1, a2] e 0 /∈ A.

    Então A−1 = 1A =[

    1a2 ,

    1a1

    ].

    Exemplos 2.1.6.

    a) Seja A =[4, 5]. Então A−1 = 1A =1

    [4, 5]=[15 ,

    14

    ]b) Seja A = [−5,−4]. Então A−1 = 1A =

    1[−5,−4] =

    [−14 ,−

    15

    ]Observa-se mais uma vez que o conjunto I não possui inverso multiplicativo, i.e., nem

    sempre é posśıvel achar A × (A−1) = 1 . Por exemplo, se A = [5,6], então o inverso

    multiplicativo é:

    A . (A−1) = [5,6] .([5, 6]−1) = [5,6] / [5,6] =[56 ,

    65

    ]�= [1,1] = 1.

    Mas 1 ∈[56 ,

    65

    ], como mostra o teorema abaixo.

    Teorema 2.1.4.

  • 9

    Seja A um intervalo, tal que 0 /∈ A. Então, 1 ∈ A/A.

    Demonstração: Dado A = [a1, a2], como A ∈ I segue que a1 ≤ a2. Mas A/A = [a1, a2]

    / [a1, a2] = [a1, a2] . [1/a2, 1/a1] = [a1/a2, a2/a1]. Como a1 ≤ a2 segue que a1/a2 ≤ 1 e a2/a1≥ 1, logo, 1 ∈ A/A.

    Definição 2.1.9 (Divisão Intervalar).

    Sejam A, B ∈ I dois intervalos reais, com A = [a1, a2] e B = [b1, b2] e 0 /∈ B. Então, AB

    = A . B−1 =[min

    {a1b2

    , a1b1

    , a2b2

    , a2b1

    }, max

    {a1b2

    , a1b1

    , a2b2

    , a2b1

    }]com 0 /∈ [b1, b2].

    Exemplos 2.1.7.

    Sejam A = [6, 7] e B =[8, 9]. Então,

    A / B = [6, 7]/[8, 9] = [min{6/9, 6/8, 7/9, 7/8}, max{6/9, 6/8, 7/9, 7/8}] =[69 ,

    78

    ].

    Teorema 2.1.5.

    Se A, B ∈ I e A · B = 0, então A = 0 ou B = 0.

    Demonstração: Sejam A = [a1, a2] e B = [b1, b2]. Como, por hipótese, A .B = 0, segue que

    A . B = [min{a1.b1,a1.b2, a2.b1,a2.b2}, max{a1.b1,a1.b2, a2.b1,a2.b2}] = [0,0]⇔min{a1.b1,a1.b2,

    a2.b1,a2.b2} = 0 e max{a1.b1,a1.b2, a2.b1,a2.b2} = 0. Logo, pode-se concluir que A = [0,0] ou

    b = [0,0].

    Analisando os sinais dos extremos dos intervalos, pode-se implementar de maneira mais

    otimizada, as operações de multiplicação e divisão sobre os intervalos, veja as tabelas 2.1 e

    2.2 respectivamente.

    No que segue tem-se um importante resultado sobre a aritmética de Moore, que permite

    com que os intervalos sejam vistos como um espaço de informação no sentido de Scott.

  • 10

    Dados os intervalos A = [a1, a2] e B = [b1, b2], tem-se:

    Ordem Intervalos Multiplicação1 a1 ≥ 0 e b1 ≥ 0 ⇒ A.B=[a1.b1, a2.b2]2 a1 ≥ 0 e b1 < 0 ≤ b2 ⇒ A.B=[a2.b1, a2.b2]3 a1 ≥ 0 e b1 < 0 ⇒ A.B=[a2.b1, a1.b2]4 a1 < 0 ≤ a2 e b1 ≥ 0 ⇒ A.B=[a1.b2, a2.b2]5 a1 < 0 ≤ a2 e b1 ≤ 0 ≤ b2 ⇒ A.B=[min{a1.b2, a2.b2},max{a1.b2, a2.b2} ]6 a1 < 0 ≤ a2 e b2 < 0 ⇒ A.B=[a2.b2, a1.b2]7 a2 < 0 e b1 ≥ 0 ⇒ A.B=[a1.b2, a2.b2]8 a2 < 0 e b1 < 0 ≤ b2 ⇒ A.B=[a1.b2, a1.b1]9 a2 < 0 e b2 < 0 ⇒ A.B=[a2.b2, a1.b1]

    Tabela 2.1: Operação de multiplicação

    Dados os intervalos A = [a1, a2] e B = [b1, b2], tem-se:

    Ordem Intervalos Divisão1 a1 > 0 e b1 > 0 ⇒ A/B=[a1/b2, a2/b1]2 a1 > 0 e 0 ∈ [b1, b2] ⇒ A/B= Não definida3 a1 > 0 e b2 < 0 ⇒ A/B=[a2/b2, a1/b1]4 a1 < 0 < a2 e b1 > 0 ⇒ A/B=[a1/b1, a2/b1]5 a1 < 0 < a2 e 0 ∈ [b1, b2] ⇒ A/B=Não definida6 a1 < 0 < a2 e b2 < 0 ⇒ A/B=[a2/b2, a1/b2]7 a2 < 0 e b1 > 0 ⇒ A/B=[a1/b1, a2/b2]8 a2 < 0 e 0 ∈ [b1, b2] ⇒ A/B=[a1/b2, a1/b1]9 a2 < 0 e b2 < 0 ⇒ A/B=[a2/b1, a1/b2]

    Tabela 2.2: Operação de Divisão

  • 11

    Teorema 2.1.6. (Inclusão monotônica) Santos [8]

    Sejam A, B, C, D ∈ I intervalos de extremos reais, tais que A ⊆ C e B ⊆ D. Então,

    valem as seguintes propriedades:

    1. A + B ⊆ C + D;

    2. -A ⊆ -C;

    3. A - B ⊆ C - D;

    4. A . B ⊆ C . D;

    5. 1/A ⊆ 1/C, sempre que 0 /∈ A e 0 /∈ C;

    6. A/B ⊆ C/D, sempre que 0 /∈ B e 0 /∈ D.

    Teorema 2.1.7. (Propriedades da inclusão) Santos [15]

    Sejam A, B, C ∈ I intervalos reais. Então, valem as seguintes propriedades:

    1. A + B = A + C ⇒ B = C;

    2. B - A = C - A ⇒ B = C;

    3. A + B ⊆ A + C ⇒ B ⊆ C

    4. A . [0,0] = [0,0] . A = [0,0];

    5. ∀α, β ∈ vale que (α.β) . A = α . (β .A);

    6. ∀α, β ∈ vale que (α + β) . A ⊆ (α . A) + (β .A);

    7. ∀α ∈ vale que α . (B + C) = (α . B) + (α . C);

  • 12

    Definição 2.1.10 (Intervalo Simétrico).

    Um intervalo A ∈ I é um intervalo simétrico se - A = A. Isto ocorre quando os

    extremos são equidistantes em relação a zero.

    Exemplos 2.1.8.

    [−5, 5], [0, 0], [−π, π] são exemplos de intervalos simétricos.

    Teorema 2.1.8. Santos [15]

    Todo intervalo simétrico é da forma [-a,a], com a ≥ 0.

    Corolário 2.1.1. Santos [15]

    Se A ∈ I é um intervalo simétrico, então A = |A| . [-1,1].

    Teorema 2.1.9. (Propriedades dos Intervalos Simétricos) Santos [15]

    Sejam A, X, Y ∈ I intervalos de reais, com X e Y simétricos. Então, valem as seguintes

    propriedades:

    1. A + X = A - X;

    2. A . X = |A| . X;

    3. A . X = |A| . X . [-1,1];

    4. A . (X ± Y) = (A . X) ± (A . Y).

    A seguir, serão definidas as operações de intersecção, união e união convexa de intervalos.

    Definição 2.1.11 (Intersecção de dois Intervalos).

  • 13

    Sejam A = [a1,a2] e B = [b1,b2] dois intervalos. A intersecção dos intervalos A e B

    é dada pelo intervalo A ∩ B = [max{a1,b1},min{a2,b2}]. Caso max {a1,b1} > min {a2,b2}

    então A ∩ B = ∅, que não é um intervalo.

    Exemplos 2.1.9.

    [3, 6] ∩ [4, 9] = [max{3, 4}, min{6, 9}] = [4,6];

    [4, 9] ∩ [−2, 12] = [max{4,−2}, min{9, 12}] = [4,9];

    [−2, 1] ∩ [1, 5] = [max{−2, 1}, min{1, 5}] = [1,1];

    [−3, 4] ∩ [3, 8] = [max{−3, 3}, min{4, 8}] = [3,4]

    [2, 3] ∩ [4, 5] = ∅

    Teorema 2.1.10. (Propriedades)

    Sejam A, B, C, D ∈ I . Se A⊆C e B⊆D, então A∩B ⊆ C∩D. Ou seja, a intersecção

    entre intervalos é uma operação monotônica.

    Exemplos 2.1.10.

    Sejam A = [4, 6], B = [−2, 5], C = [3, 9] e D = [−2, 7].

    Assim, se A ⊆ CeB ⊆ D, então, A ∩B = [4, 5], C ∩D = [3, 7] e [4, 5] ⊆ [3, 7].

    Definição 2.1.12 (União de dois Intervalos).

    Sejam A = [a1; a2] e B = [b1; b2] dois intervalos tais que A ∩ B �= ∅ . A união dos

    intervalos A e B é dada pelo intervalo A ∪ B = [min{a1, b1},max{a2; b2}].

  • 14

    Exemplos 2.1.11.

    [3, 6] ∪ [4, 9] = [min{3, 4}, max{6, 9}] = [3,9];

    [4, 9] ∪ [−2, 12] = [min{4,−2}, max{9, 12}] = [−2,12];

    [−2, 1] ∪ [1, 5] = [min{−2, 1}, max{1, 5}] = [−2,5];

    [−3, 2] ∪ [3, 8] = [min{−3, 3}, max{2, 8}] = [−3,8]

    Definição 2.1.13 (União convexa de dois Intervalos).

    Sejam A = [a1,a2] e B = [b1,b2] dois intervalos quaisquer. A união convexa dos intervalos

    A e B é dada pelo intervalo A � B = [min{a1, b1},max{a2, b2}].

    Obs: Note que nessa união, a intersecção entre os dois intervalos pode ser vazia, man-

    tendo o fato que a união de dois intervalos é o intervalo que possui o menor diâmetro e que

    contém os intervalos operados.

    Exemplos 2.1.12.

    [3, 6] � [4, 9] = [min{3, 4}, max{6, 9}] = [3,9];

    [4, 9] � [−2, 12] = [min{4,−2}, max{9, 12}] = [−2,12];

    [−2, 1] � [1, 5] = [min{−2, 1}, max{1, 5}] = [−2,5];

    [−3, 2] � [3, 8] = [min{−3, 3}, max{2, 8}] = [−3,8]

    Existem funções que mapeiam intervalos em números reais, i.e. são funções da forma f :

    I → . A seguir algumas dessas funções são introduzidas:

    Definição 2.1.14 (Amplitude).

  • 15

    A amplitude de um intervalo A = [a1,a2] é definida por:

    w(A) = a2 − a1.

    A amplitude serve como uma medida de qualidade do intervalo enquanto representação

    dos números reais que ele contém, i.e. quanto maior a amplitude, pior será a qualidade do

    intervalo.

    Definição 2.1.15 (Valor Absoluto).

    O valor absoluto de um intervalo A = [a1,a2] é definido por:

    |A| = max(|a1|, |a2|).

    Definição 2.1.16 (Ponto Médio).

    O ponto médio de um intervalo A = [a1,a2] é definido por:

    m(A) = (a1 + a2)/2,

    Definição 2.1.17 (Distância entre intervalos).

    A distância entre dois intervalo A = [a1,a2] e B = [b1,b2] é dado pela função d: I( ) ×

    I( ) → :

    d(A, B) = max(|a1 − b1|, |a2 − b2|).

    A seção que segue, apesar de não fazer parte da especificação aqui proposta, demonstra

    como as operações intervalares até aqui expostas poderão ser estendidas para o cálculo ma-

    tricial, indicando assim como a especificação do caṕıtulo 5 pode ser estendida para o caso

    matricial.

  • 16

    2.2 Matrizes e vetores Intervalares

    Definição 2.2.1 (Matriz Intervalar).

    Denota-se uma matriz intervalar por A = (Aij)m×n com ordem m (linhas) por n (colunas),

    onde cada elemento (Aij) é um intervalo.

    Assim, A =

    ([a, b] [c, d]

    [e, f ] [g.h]

    )é uma matriz intervalar com duas linhas e duas colunas.

    Definição 2.2.2 (Vetor Intervalar).

    Supondo A = (Aij) uma matriz intervalar de ordem m × n, se m =1, então a matriz A

    é chamada matriz linha ou vetor linha e, se n = 1, então A é chamada matriz coluna

    ou vetor coluna. Por exemplo:

    1. A = ([a,b] [c,d] [e,f]) é uma matriz ou vetor linha 1 × 3 .

    2. A =

    ⎛⎜⎜⎝[a, b]

    [c, d]

    [e, f ]

    ⎞⎟⎟⎠ é uma matriz ou vetor coluna 3 × 1 .Considera-se, por convenção, um vetor intervalar como uma matriz coluna.

    Definição 2.2.3 (Igualdade entre matrizes intervalares).

    Sejam as matrizes intervalares: A = (Aij)m×n e B = (Bij)r×s. Diz-se que A = B se, e

    somente se, m = r, n = s e Aij = Bij, para todos os ı́ndices 1 ≤ i ≤ n e 1 ≤ j ≤ m.

    Exemplos 2.2.1. As matrizes intervalares A =

    ([1, 3] [0, 1][1, e] [3, 3]

    )e B =

    ([√

    1,√

    9] [−1, 1]2exp[0, 1] [3, 3]

    )são iguais.

  • 17

    Definição 2.2.4 (Matriz intervalar nula).

    Uma matriz intervalar A = (Aij)m×n é considerada nula se todos os seus elementos são

    nulos, ou seja, se Aij = [0,0], ∀i,j. Representa-se a matriz nula por 0.

    Exemplos 2.2.2. A matriz intervalar A =

    ([0, 0] [0, 0][0, 0] [0, 0]

    )é nula de ordem 2 × 2.

    Definição 2.2.5 (Matriz Intervalar Identidade).

    Uma matriz intervalar I = (Iij)m×n é considerada identidade, se todos os elementos da

    diagonal principal são intervalos identidade e os demais elementos são intervalos nulos, ou

    seja, se Iij = [1,1] para i = j e Iij = [0,0] para i �= j.

    Exemplos 2.2.3. A matriz intervalar I =

    ([1, 1] [0, 0][0, 0] [1, 1]

    )é identidade de ordem 2 × 2.

    Apresenta-se a seguir, as principais operações com matrizes intervalares, como a soma, a

    diferença, o produto por um intervalo, a multiplicação entre matrizes intervalar, a intersecção

    e a união, além da relação de inclusão.

    Definição 2.2.6 (Soma de Matrizes Intervalares).

    Sejam A = (Aij) e B = (Bij) duas matrizes intervalares de mesma ordem. A matriz soma

    das matrizes A e B, é definida como sendo a matriz S = A + B, com os elementos Sij = Aij

    + Bij, ∀i,j.

    Exemplos 2.2.4. Dado as matrizes

    A =

    ([2, 3] [1, 3][2, 2] [3, 3]

    )e B =

    ([−3, 3] [−1, 3][−2, 1] [−2,−2]

    )tem-se: S = A + B =(

    [2, 3] + [−3, 3] [1, 3] + [−1, 3][2, 2] + [−2, 1] [3, 3] + [−2,−2]

    )=

    ([−1, 6] [0, 6][0, 3] [1, 1]

    ).

  • 18

    Definição 2.2.7 (Subtração de Matrizes Intervalares).

    Sejam A = (Aij) e B = (Bij) duas matrizes intervalares de mesma ordem. A diferença

    entre A e B, é definida por D = A - B, com os elementos Dij = Aij + (- Bij), ∀i,j.

    Exemplos 2.2.5. Dado as matrizes

    A =

    ([2, 3] [1, 3][2, 2] [3, 3]

    )e B =

    ([−3, 3] [−1, 3][−2, 1] [−2,−2]

    )tem-se: S = A - B =(

    [2, 3]− [−3, 3] [1, 3]− [−1, 3][2, 2]− [−2, 1] [3, 3]− [−2,−2]

    )=

    ([−1, 6] [−2, 4][1, 4] [5, 5]

    ).

    Definição 2.2.8 (Produto de um Intervalo por uma Matriz).

    Seja A = (Aij) uma matriz intervalar de ordem m × n e I um intervalo. O produto do

    intervalo I pela matriz A é a matriz intervalar P = (Pij), onde cada elemento é dado por Pij

    = I . Aij ,∀ij.

    Exemplos 2.2.6. Dado a matriz

    A =

    ([2, 3] [1, 3][2, 2] [3, 3]

    )e o intervalo I = [-1,2] tem-se:

    P = I.A = [−1, 2].(

    [2, 3] [1, 3][2, 2] [3, 3]

    )=

    ([−1, 2].[2, 3] [−1, 2].[1, 3][−1, 2].[2, 2] [−1, 2].[3, 3]

    )=

    ([−3, 6] [−3, 6][−2, 4] [−3, 6]

    ).

    Definição 2.2.9 (Multiplicação entre Matrizes Intervalares).

  • 19

    Sejam A = (Aij)m×p e B = (Bij)p×n. A multiplicação de A por B é uma matriz intervalar

    M = (Mij)m×n= A . B, cujos os elementos são dados por (Mij) = Σpk=1 Aik ×Bkj.

    Exemplos 2.2.7. Dado as matrizes

    A =

    ([2, 3] [1, 3][2, 2] [3, 3]

    )e B =

    ([−3, 3] [−1, 3][−2, 1] [−2,−2]

    )tem-se: M = A . B =(

    [2, 3].[−3, 3] + [1, 3].[−2, 1] [2, 3].[−1, 3] + [1, 3].[−2,−2][2, 2].[−3, 3] + [3, 3].[−2, 1] [2, 2].[−1, 3] + [3, 3].[−2,−2]

    )=

    ([−9, 9] + [−6, 3] [−3, 9] + [−6,−2][−6, 6] + [−6, 3] [−2, 6] + [−6,−6]

    )=

    ([−15, 12] [−9, 7][12, 9] [−8, 0]

    ).

    Definição 2.2.10 (Intersecção de Matrizes Intervalares).

    Sejam A = (Aij) e B = (Bij) duas matrizes intervalares de mesma ordem. A intersecção

    de A com B é a matriz intervalar Γ = A ∩ B, onde cada Γij = Aij ∩ Bij, ∀i,j. Caso não

    exista intersecção entre dois elementos intervalares correspondentes, ou seja Aij ∩ Bij = ∅

    para algum i,j, então não existirá a intersecção entre A e B. Dessa maneira, assim como a

    intersecção entre intervalos é parcial, então a intersecção entre matrizes intervalares também

    será parcial.

    Exemplos 2.2.8. Dado as matrizes

    A =

    ([1, 3] [0, 3][1, 2] [3, 3]

    )e B =

    ([−3, 2] [4, 6][−2, 0] [2, 2]

    )tem-se: Γ = A ∩ B =(

    [1, 3] ∩ [−3, 2] [0, 3] ∩ [4, 6][1, 2] ∩ [−2, 0] [3, 3] ∩ [2, 2]

    )=

    ([1, 2] ∅∅ ∅

    )= ∅,

    onde ∅ indica que a operação é indefinida para A e B.

  • 20

    Definição 2.2.11 (União de Matrizes Intervalares).

    Sejam A = (Aij) e B = (Bij) duas matrizes intervalares de mesma ordem. A união de

    A com B é a matriz intervalar U = A ∪ B, onde cada Uij = Aij ∪ Bij, ∀i,j. Caso não exista

    união entre dois elementos intervalares correspondentes, ou seja Aij ∪ Bij = ∅, então não

    existirá a união entre A e B. Assim, semelhante a intersecção intervalar, a união de matrizes

    é também uma operação parcial.

    Exemplos 2.2.9.

    1. Dado as matrizes

    A =

    ([1, 3] [0, 3]

    [−2, 2] [−1, 2]

    )e B =

    ([−3, 2] [2, 6][1, 2] [3, 3]

    )tem-se: U = A ∪B =(

    [1, 3] ∪ [−3, 2] [0, 3] ∪ [2, 6][−2, 2] ∪ [1, 2] [−1, 2] ∪ [3, 3]

    )=

    ([−3, 3] [0, 6][−2, 2] [−1, 3]

    ).

    2. Dado as matrizes

    A =

    ([1, 3] [0, 3]

    [−2, 0] [−1, 2]

    )e B =

    ([−1, 0] [4, 6][1, 2] [2, 3]

    )tem-se: U = A ∪B =(

    [1, 3] ∪ [−1, 0] [0, 3] ∪ [2, 6][−2, 0] ∪ [1, 2] [−1, 2] ∪ [2, 3]

    )=

    (∅ [0, 6]∅ [−1, 3]

    )= ∅,

    onde ∅, como no caso anterior, indica parcialidade.

    Definição 2.2.12 (Inclusão de Matrizes Intervalares).

    Sejam A = (Aij) e B = (Bij) duas matrizes intervalares de mesma ordem. A matriz

    B é uma inclusão para A, se todo elemento da matriz A está contido no seu correspondente

    elemento da matriz B, ou seja A ⊆ B ⇔ Aij ⊆ Bij, ∀i,j.

  • 21

    Exemplos 2.2.10. Dado as matrizes

    A =

    ([1, 3] [4, 6][1, 1] [−6, 0]

    )e B =

    ([1, 4] [2, 6]

    [−2, 2] [−6, 0]

    )tem-se que [1, 3] ⊆ [1, 4] , [4, 6] ⊆ [2, 6], [1, 1] ⊆ [−2, 2] e [−6, 0] ⊆ [−6, 0].

    Logo, B é uma inclusão para a matriz A , ou seja A ⊆ B.

    Teorema 2.2.1. (Propriedades das Matrizes Intervalares)

    Sejam A, B e C, matrizes intervalares de mesma ordem. Então, são válidas as seguintes

    propriedades:

    1. A + (B + C) = (A + B) + C → Associatividade

    2. A + 0 = 0 + A = A → Elemento neutro da adição: matriz nula

    3. A + B = B + A → Comutatividade

    4. A . I = I . A = A → Elemento neutro da multiplicação: matriz identidade

    5. (A + B) . C ⊆ A.C + B.C → Sub-distributividade.

    Demonstração: Considerando as matrizes A = (Aij) e B = (Bij) e C =(Cij) três matrizes

    intervalares da mesma ordem, tem-se:

    1) ⇒ A + (B + C) ⇒ Aij + (Bij + Cij) = Aij + Xij. Como

    Xij = Bij + Cij, então Aij + Xij = Aij + Bij + Cij. Logo, A +

    (B + C) = A + B + C.

    ⇐ (A + B) + C ⇒ (Aij + Bij) + Cij Yij + Cij. Como Yij = Aij + Bij, Então

    Yij + Cij = Aij + Bij + Cij.Logo, (A + B) + C = A + B + C.

  • 22

    Portanto, A + (B + C) = (A + B) + C, c.q.d.

    2) ⇒ A + 0 ⇒ Aij + 0 = Aij. Logo, A + 0 = A.

    ⇐ 0 + A ⇒ 0 + Aij = Aij. Logo, 0 + A = A.

    Portanto, A + 0 = 0 + A, c.q.d.

    3) ⇒ A + B ⇒ Aij + Bij = Bij + Aij. Logo, A + B = B + A

    ⇐ B + A ⇒ Bij + Aij = Aij + Bij. Logo, B + A = A + B.

    Portanto, A + B = B + A, c.q.d.

    4) ⇒ A.I ⇒∑pk=1 Aik × Ikj = Aij. Logo, A.I = A⇐ I.A ⇒∑pk=1 Iik × Akj = Aij. Logo, I.A = A.

    Portanto, A.I = I.A = A, c.q.d.

    5) ⇒ (A + B).C⇒(A + B).C = S . C, onde S = A+B e cada

    Sij=Aij + Bij. S.C =∑p

    k=1 Sik×

    Ckj=Pij e considerando que A,B,C e S sejam da mesma ordem e

    quadrada, ou seja, número de linhas igual ao número de colunas, então

    P terá a mesma ordem de S e C.

    ⇐ A.C + B.C⇒ ∑pk=1 Aik×Ckj + ∑pk=1 Bik×Ckj = Xij + Yij.Obs: Vale ressaltar que a propriedade associativa do produto não é válida para as matrizes

    intervalares, i.e. A.(B.C)�=(A.B).C.

  • 23

    Exemplos 2.2.11. Sejam as matrizes

    A

    ([1, 1] [0, 1][1, 1] [−1, 1]

    ),B

    ([−1, 2] [3, 4][2, 2] [−6,−4]

    )e C

    ([0, 3] [1, 4]

    [−1, 8] [3, 15]

    )Calcular:

    A.B ([−1, 2] + [0, 2] [3, 4] + [−6, 0]

    [−1, 2] + [−2, 2] [3, 4] + [−6, 6]

    )=

    ([−1, 4] [−3, 4][−3, 4] [−3, 10]

    )B.C (

    [−3, 6] + [−4, 32] [−4, 8] + [9, 60][0, 6] + [−48, 6] [2, 8] + [−90,−12]

    )=

    ([−7, 38] [5, 68][−48, 12] [−88,−4]

    )(A.B).C(

    [−3, 12] + [−24, 32] [−4, 16] + [−45, 60][9, 12] + [−24, 80] [−12, 16] + [−45, 150]

    )=

    ([−27, 44] [−49, 76][−33, 92] [−57, 166]

    )A.(B.C)(

    [−7, 38] + [−48, 12] [5, 68] + [−88,−4][−7, 38] + [−48, 48] [5, 68] + [−88, 88]

    )=

    ([−55, 50] [−83, 76][−55, 86] [−83, 156]

    )

    Logo, A.(B.C) �= (A.B).C.

    As próximas definições, referem-se a algumas transferências de dados entre matrizes reais

    e matrizes intervalares. As matrizes reais são transformadas naturalmente em matrizes

    intervalares pontuais, bastando para isto considerar cada elemento da matriz real como

    sendo um intervalo pontual (degenerado) da matriz intervalar correspondente. Por outro

    lado, a transferência de dados de matrizes intervalares para matrizes reais pode ser realizada

    de diferentes formas, como pode ser visto a seguir.

    Definição 2.2.13 (Matriz diâmetro).

    Seja A = (Aij) uma matriz intervalar. A matriz diâmetro de A, é a matriz onde

    cada elemento corresponde ao diâmetro do respectivo intervalo da matriz intervalar, ou seja

    diam(A) = (diam(Aij)).

  • 24

    Exemplos 2.2.12.

    diam

    ([1, 2] [0, 2]

    [−2, 3] [−2, 1]

    )=

    (1 25 3

    ).

    Definição 2.2.14 (Matriz ponto médio).

    Seja A = (Aij) uma matriz intervalar. A matriz ponto médio de A é a matriz onde

    cada elemento corresponde ao ponto médio do respectivo intervalo da matriz intervalar, ou

    seja med(A) = (med(Aij)).

    Exemplos 2.2.13.

    med

    ([1, 3] [0, 2]

    [−1, 3] [2, 4]

    )=

    (2 11 3

    ).

    Definição 2.2.15 (Matriz módulo).

    Seja A = (Aij) uma matriz intervalar. A matriz módulo de A é a matriz onde cada

    elemento corresponde ao módulo do respectivo intervalo da matriz intervalar, ou seja |A| =

    (|Aij|).

    Exemplos 2.2.14. ∣∣∣∣([1, 3] [0, 4][2, 6] [−1, 2])∣∣∣∣ = (3 46 2

    ).

    Definição 2.2.16 (́Infimo da matriz intervalar).

    Seja A = (Aij) uma matriz intervalar. O ı́nfimo de A é a matriz cujos elementos são os

    extremos inferiores dos intervalos correspondentes dessa matriz, ou seja inf(A) = (inf(Aij)).

    Exemplos 2.2.15.

    inf

    ([1, 3] [0, 5]

    [−2, 2] [−1, 1]

    )=

    (1 0−2 −1

    ).

  • 25

    Definição 2.2.17 (Supremo da matriz intervalar).

    Seja A = (Aij) uma matriz intervalar. O supremo de A, é a matriz cujos elementos

    são os extremos superiores dos intervalos correspondentes dessa matriz, ou seja sup(A) =

    (sup(Aij)).

    Exemplos 2.2.16.

    sup

    ([1, 3] [0, 5]

    [−2, 2] [−1, 1]

    )=

    (3 52 1

    ).

    Definição 2.2.18 (Matriz Distância).

    Sejam A e B duas matrizes intervalares de mesma ordem. A matriz distância D entre

    A e B é a matriz real cujos elementos correspondem a distância entre os respectivos intervalos

    das matrizes A e B, ou seja D(A,B) = (d(Aij, Bij)),∀i,j.

    Exemplos 2.2.17. Sejam

    A =

    ([2, 2] [0, 1][2, 2] [−1, 1]

    )e B =

    ([−2, 3] [2, 3][3, 3] [−5,−3]

    ),

    então D(A,B) (d([2, 2], [−2, 3]) d([0, 1], [2, 3])d([2, 2], [3, 3]) d([−1, 1], [−5,−3])

    )=

    (4 21 4

    ).

    A próxima seção apresenta algumas relações de ordem sobre os intervalos, dentre elas

    destacam-se a ordem informação e relação de aproximação [5], que foram utilizadas por San-

    tiago em [12, 13] para definir uma relação de equivalência, capaz de tornar equivalentes dois

    intervalos que informam/aproximam os mesmos números reais. Essa noção de equivalência

    chama-se igualdade local e será apresentada no caṕıtulo 4.

  • 26

    2.3 Relações de Ordem sobre Intervalos

    Além das operações intervalares mostradas, destacam-se, ainda, as seguintes relações de

    ordem sobre o conjunto dos intervalos:

    Definição 2.3.1 (Relação de pré-ordem).

    Sejam X = [a,b] e Y = [c,d] dois intervalos.

    X < Y se, e somente se b < c (2.1)

    Em outras palavras X < Y se todo o conteúdo de X estiver estritamente a esquerda de

    Y.

    Definição 2.3.2 (Relação de ordem de inclusão).

    Sejam X = [a,b] e Y = [c,d] dois intervalos de reais.

    X ⊆ Y se, e somente se, c ≤ a ≤ b ≤ d (2.2)

    Definição 2.3.3 (Ordem de Kulisch-Miranker).

    Sejam X = [a,b] e Y = [c,d] dois intervalos de reais.

    X ≤ Y se, e somente se, a ≤ c e b ≤ d (2.3)

    Definição 2.3.4 (Ordem de Informação).

    Sejam X = [a,b] e Y = [c,d] dois intervalos de reais.

    X � Y se, e somente se, a ≤ c ≤ d ≤ b (2.4)

    (lê-se [a,b] informa sobre [c,d]). Note que a ordem de informação é a ordem oposta da ordem

    de inclusão, ou seja � = ⊆Op[16, 5].

  • 27

    Definição 2.3.5 (Relação de Aproximação).

    Sejam X = [a,b] e Y = [c,d] dois intervalos de reais.

    X � Y se, e somente se, a < c ≤ d < b (2.5)

    (lê-se [a,b] aproxima [c,d]).

    2.4 Considerações Finais

    Essas duas últimas relações sobre os intervalos foram introduzidas por Scott e utilizadas

    por Acióly em [5]. Elas formalizam a noção de “um intervalo enquanto informação ou

    aproximação de um outro intervalo ou de um número real”. No caṕıtulo 4 será apresentada

    a proposta de Santiago [13] para uma relação de equivalência que se baseia nessa formalização.

    Ela é mais fraca que a noção usual de equivalência (i.e. uma relação que é reflexiva, simétrica

    e transitiva). Naquele caṕıtulo será proposta a versão booleana para a igualdade de Santiago,

    a qual[3] será constrúıda a partir da igualdade simples de Scott — uma das noções primitivas

    de identidade da linguagem CASL. Essa relação permitirá que as propriedades algébricas de

    corpo, tornem-se operacionais em intervalos, fazendo com que do ponto de vista algébrico se

    possa raciocinar com intervalos como se fossem números reais. Assim será posśıvel enxergar

    um intervalo como uma espécie de número real difuso que carrega uma estimativa de erro.

    Note que propriedades algébricas como a distributividade da multiplicação pela soma

    A.(B + C) = A.B + A.C,

    não são válidas para todo intervalo A, B e C. Entretanto para fazer com que um intervalo

    seja essa representação difusa será necessário que de alguma forma se tenham algum tipo de

    igualdade capaz de captar a propriedade acima para o caso intervalar. Com isso, pode-se

  • 28

    atingir o propósito deste trabalho, ou seja tornar posśıvel a definição equacional de sistemas

    cont́ınuos, através de intervalos e raciocinar equacionalmente2 sobre eles. O próximo caṕıtulo

    apresentará alguns detalhes da linguagem de especificação CASL, que será utilizada para

    descrever a biblioteca intervalar munida da igualdade local proposta por Santiago.

    2Segundo a relação de equivalência proposta.

  • Caṕıtulo 3

    CASL

    3.1 Introdução

    A abordagem algébrica para especificação de software originou-se em meados dos anos 1970.

    Desde então, dúzias de linguagens de especificação algébrica tem sido desenvolvidas - todas

    elas suportam a idéia básica do uso de axiomas para especificar álgebras1 mas diferem na

    escolha do projeto a respeito da sintaxe e semântica. A falta de uma estrutura comum para

    esse tipo especificações i.e., um padrão para essa abordagem tem desencorajado, de certa

    forma, a aceitação do método algébrico por parte da indústria, impedindo a sua difusão, e

    limitando a aplicabilidade das respectivas ferramentas.

    O grupo COFI: “Common Framework Initiative” para especificações e desenvolvimento

    algébrico, reúne grandes expoentes da área de especificações algébricas no sentido de criar

    esse padrão para a área. A visão do COFI, como o próprio nome diz, é fornecer essa estru-

    tura comum2 através de um esforço colaborativo para especificação algébrica e desenvolvi-

    mento, que seja atrativo tanto para pesquisadores quanto para uso industrial. Dessa forma,

    ele propõe uma linguagem de especificação uniforme, cuja sintaxe seja de uso amigável e

    1em outras palavras um software é visto como uma álgebra.2A Common Framework.

    29

  • 30

    semântica clara. Além disso, essa estrutura de especificação pretende resumir frameworks

    anteriores, agregando o que eles tenham de positivo. Por fim, propõe-se que o ambiente seja

    livre, mas protegido.

    O escopo do COFI abrange:

    • a especificação de requisitos funcionais;

    • o desenvolvimento formal e verificação de software;

    • a relação de especificações para requisitos informais e implementação de código;

    • prototipagem e provas automáticas de teorema;

    • bibliotecas, re-uso e evolução;

    • ferramentas de interoperabilidade.

    A linguagem de especificação desenvolvida pelo COFI é chamada CASL: Common Alge-

    braic Specification Language. As suas principais caracteŕısticas são:

    • uma seleção cŕıtica de construtores conhecidos;

    • expressividade, simplicidade e praticidade;

    • orientação para especificação de requisitos, e projeto, de pacotes de software conven-

    cional;

    • restrições para sub-linguagens;

    • extensões para alta-ordem, baseadas em estado, concorrência, etc.

  • 31

    O projeto CASL começou em setembro de 1995. Uma versão inicial foi proposta em maio

    1997 e experimentalmente aprovada por IFIP WG1.3. Com exceção de poucos detalhes, o

    projeto foi finalizado em abril de 1998, com um “draft” completo da linguagem incluindo a

    sintaxe concreta. Por fim a versão CASL 1.0 foi liberada em outubro de 1998.

    Esse caṕıtulo foi fortemente baseado no artigo [9] e seu principal objetivo é tornar a

    dissertação auto-contida e servir de referencia inicial para a linguagem CASL. A autora fez

    algumas alterações no texto original incluindo alguns diagramas e acrescentando algumas

    interpretações do texto original.

    3.2 CASL

    A linguagem CASL é dividida em 4 partes independentes (ortogonais) e que podem ser

    entendidas e usadas separadamente, cada parte contempla um aspecto do processo de es-

    pecificação como especificação em módulos básicos, reusabilidade, descrição das unidades

    que serão implementadas separadamente e as suas ligações, agrupamento de especificações

    em bibliotecas, etc.

    • Especificações Básicas: são as unidades básicas (o ponto partida) da especificação.

    Nelas estão contidas as declarações, definições e os axiomas.

    • Especificações Estruturadas: são o resultado (imagem) da aplicação dos operadores

    sobre as especificações CASL. São classificadas em: traduções, reduções, uniões, ex-

    tensões, “freeness”(inicialidade), especificações nomeadas, especificações gerenciais e

    visões.

  • 32

    • Especificações Arquiteturais: descrevem as unidades que serão implementadas sep-

    aradamente, indicando como elas podem ser ligadas para dar o resultado desejado. São

    compostas de: implementações inteiras e composições.

    • Especificações de Bibliotecas: são formadas pelo agrupamento de especificações es-

    truturadas, visões, especificações arquiteturais e especificações de unidades. Caracterizam-

    se por bibliotecas locais ou distribúıdas.

    Como as partes acima são ortogonais, i.e independentes, pode-se restringir qualquer uma

    das partes afim de se obter sub-linguagens. Um exemplo de definição dessas sub-linguagens

    é feito pelo grupo de sistemas reativos (veja [2]).

    Além disso, o projeto de CASL integra vários aspectos diferentes; a saber:

    • aspectos pragmáticos: metodologia, ferramentas e estética;

    • conceitos semânticos: formal (instituição e ambiente), informal (expansões e escopo);

    • constructos da linguagem: sintaxe abstrata (estrutura e anotações); sintaxe concreta

    (formato de entrada e formato display).

    No que segue será descrito cada componente ortogonal da linguagem com os respectivos

    aspectos

    3.3 Especificações Básicas

    As especificações básicas são o ponto de partida de especificações futuras, elas são formadas

    por declarações, definições e axiomas. Posteriormente essas especificações podem ser exten-

    didas, restritas, etc. para dar origem a novas especificações.

  • 33

    No que segue considera-se vários aspectos pragmáticos que afetam o projeto CASL, com

    relação as especificações básicas. Em seguida a seção 3.3.2 apresenta os conceitos principais

    em que se baseia a semântica dessas especificações básicas. Finalmente, a subseção 3.3.3

    fornece exemplos que ilustram os constructos da linguagem CASL para que o leitor tenha

    idéia de como usá-los nas especificações básicas.

    3.3.1 Aspectos Pragmáticos

    Funções Totais e Parciais: CASL suporta especificações parciais e totais. A parcialidade

    é uma particularidade, e uma maneira simples e natural para tratar erros (tais como divisões

    por zero, etc). A propagação desses erros torna-se impĺıcita, de maneira que sempre que

    o argumento de uma operação estiver indefinido então o resultado também será indefinido.

    CASL possui as noções de igualdade forte e existencial que relacionam a parcialidade com

    o conceito de identidade3 e que será útil para implementar a igualdade local de Santiago

    descrita nos caṕıtulos 4 e 5. CASL também inclui a noção de supersorts e subsorts, que

    permitem a especificação do tratamento de exceção quando for relevante. Totalidade é uma

    importante propriedade, e CASL permite que ela seja declarada juntamente com os tipos de

    funções, em vez de deixá-la para os axiomas. O domı́nio de uma função parcial f: A →? B,

    pode ser explicitado pela introdução do domı́nio de f como um subsort B de A, “B < A”, e

    declarando que f é total em B 4.

    Na presença da parcialidade, equações podem exigir ou não definibilidade, e.g. a equação

    3Isso será melhor descrito no caṕıtulo 4.4Por exemplo, considerando as operações sobre listas: o constructor de lista “cons” deve ser declarado

    como total, enquanto que os seletores “head” (cabeça da lista) e “tail” (cauda da lista) devem ser parciais,sendo indefinidos sobre a lista vazia. Dessa forma, o domı́nio desses seletores podem ser explicitados pelaintrodução do subsort de listas não vazias, e da declaração de que os seletores são funções totais sobre essesubsort.

  • 34

    x+(y+z) = (x+y)+z que exprime a associatividade da soma nos naturais exige que os termos

    x+(y+z) e (x+y)+z estejam definidos para todo x,y e z, enquanto que x◦(y◦z)≡(x◦y)◦z

    não exigem a definibilidade dos termos para todo x,y e z. Dessa forma, CASL assume

    dois sentidos para a igualdade e introduz dois tipos de relações de igualdade; a saber: as

    equações “existenciais” que exigem a definibilidade (vide. o primeiro exemplo), e as

    equações ditas “fortes” que não exigem a definibilidade (vide o segundo exemplo)5. Em

    geral, é apropriado utilizar equações existenciais em expressões que envolvam condição de

    existência dos termos, já que não se pode concluir propriedades a partir da indefinição; e.g.

    não tem sentido dizer que 1/0 tenha qualquer propriedade. Por outro lado equações fortes

    são adequadas em definições indutivas de funções. Dessa forma CASL permite ambos os

    tipos de equações.

    Na verdade, como será visto no caṕıtulo 4, existe uma relação impĺıcita entre as noções

    de identidade e definibilidade. Portanto asserções de definibilidade podem, também, ser

    expressas diretamente pois CASL permite a declaração expĺıcita da definibilidade de termos

    através da expressão “def T”, onde T é um termo. De fato a definibilidade de um termo

    pode ser reescrita em termos da igualdade existencial através da seguinte equivalência: x=x

    ↔ def x, demonstrando a relação impĺıcita descrita anteriormente. A igualdade existencial

    é equivalente à conjunção da igualdade forte com as declarações de definibilidade de seus

    termos; a saber: x = e =y⇔ x = y ∧ def x ∧ def y, já a igualdade forte é equivalente à

    conjunção de dois condicionais envolvendo somente a igualdade existencial: x = y ↔[def x

    → x = e = y] ∧ [def y → x = e= y], ou equivalentemente x = y ↔ [def x ∨ def y → x = e

    = y].

    5A lógica subjacente de CASL é descrita no caṕıtulo 4.

  • 35

    Lógica e Predicados: CASL é baseada na lógica de primeira ordem bi-valorada clássica6,

    com a interpretação usual dos conectivos. Ela suporta predicados declarados pelo usuário, o

    que produz algumas vantagens sobre as funções totais booleanas que eram usadas na maioria

    das linguagens anteriores. Quando um argumento de um predicado é indefinido, a aplicação

    do predicado não é válida. CASL fornece os quantificadores universal e existencial padrões,

    além dos conectivos lógicos. A motivação para isto é a expressividade: restrições à equações

    condicionais às vezes requerem que especificações completas sejam realizadas. Por exemplo:

    é um exerćıcio direto especificar quando uma string é uma permutação de outra usando quan-

    tificadores, a negação fornece a propriedade complementar, mas é completamente desajeitada

    para ser especificada utilizando equações condicionais (positivas).

    Classes de Modelos: Muitas das estruturas de especificação algébrica anteriores per-

    mitiam somente um tipo de classe de modelos associada às especificações. O “default”em

    CASL é tomar todos os modelos de uma especificação, o que também é chamado semântica

    livre (loose semantics); mas é também posśıvel especificar a restrição desses modelos para a

    classe dos modelos gerados, i.e. somente valores expresśıveis são inclúıdos, e as propriedade

    podem ser provadas por indução, ou ainda para a classe dos modelos iniciais (livremente

    gerados), certamente os modelos iniciais podem não existir quando a disjunção, a negação,

    etc. são usadas.

    Sobrecarga: Em uma especificação CASL o mesmo śımbolo pode ser declarado com

    vários perfis, i.e. com a lista de argumentos e sorts resultantes. Por exemplo, ‘+’ pode

    ser declarado como uma operação sobre inteiros, reais, e strings. Quando um śımbolo de

    sobrecarga é usado, o perfil desejado é determinado pelo contexto. A remoção de ambiguidade

    pode ser usada de maneira expĺıcita quando necessário, pela especificação do perfil, ou do

    6Isso justifica a adaptação da igualdade se Santiago [12, 13] para o caso booleano - veja caṕıtulo 4.

  • 36

    (2, 2) �−→ 4⏐⏐� ⏐⏐�× +−→

    inj⏐⏐� ⏐⏐�inj× +−→⏐⏐� ⏐⏐�

    (2, 2) �−→ 4

    Figura 3.1: Diagrama da Sobrecarga

    sort resultante em uma aplicação.

    Subsorts: É apropriado declarar um sort como um subsort de outro. Por exemplo,

    tanto os inteiros positivos quanto os inteiros ı́mpares positivos são melhores descritos como

    subsorts do sort dos números naturais, no qual é ele próprio um subsort dos inteiros. Em

    contraste com a maioria das abordagens anteriores, CASL interpreta subsorts como mergulho

    entre “carriers”− e não necessariamente como a inclusão. Isto permite, por exemplo, que

    valores de modelos do tipo inteiro sejam representados diferentemente dos valores do tipo

    real. CASL ainda permite modelos onde subsorts são subconjuntos.

    As imersões dos subsort comutam com as funções de sobrecarga (veja figura 3.1), por isso

    os valores são independentes de qualquer perfil usado, ou seja: “2+2=4”, indiferentemente

    se a operação ‘+’ é aquela declarada para os números naturais ou para os números inteiros.

    Ou seja o diagrama 3.1 comuta.

    CASL não impõe qualquer condição de ‘regularidade’, ‘coerência’, ou ‘sensibilidade’ sobre

    a relação entre sobrecarga e subsorts. Isto acontece, em parte, por causa da simplicidade, e

    em parte porque em várias dessas condições falta modularidade (o que é uma desvantagem na

    conexão com as especificações estruturadas). Note que constantes sobrecarregadas também

  • 37

    são permitidas em CASL.

    Construtores e Seletores de Tipos de Dados: Especificações de ‘tipos de da-

    dos’ com operações de construtores e (possivelmente também) seletores são frequentemente

    necessárias: elas correspondem à união disjunta de tipos registro e tipos enumerados nas

    linguagens de programação. CASL fornece constructos especiais para a declaração dos tipos

    de dados, afim de abreviar as declarações tediosas e axiomas de seletores e construtores.

    Tipo de dados podem ser “loose”, “generated”ou “free”.

    3.3.2 Conceitos Semânticos

    Como é de se esperar, CASL por ser uma linguagem que descreve teorias de 1a ordem possui

    uma semântica associada. Os conceitos semânticos essenciais para especificações básicas são

    bem conhecidos: assinaturas (declaração de śımbolos), modelos (interpretação dos śımbolos),

    e sentenças (declaração das propriedades do sistema), além de uma relação de satisfação

    entre modelos e conjuntos de sentenças. Definindo isto, juntamente com algumas estruturas

    categóricas, tal que a tradução dos śımbolos preservem a relação de satisfação, obtém-se o

    que se chama por instituição para especificações básicas. (c.f. figura 3.5).

    Uma especificação básica bem formada em CASL determina uma assinatura e um con-

    junto de sentenças, e além disso a classe de todos modelos sobre aquela assinatura que

    satisfazem todas as sentenças. Portanto, uma especificação básica SP em CASL pode ser

    definida como o par 〈∑, ψ〉; onde ∑ é uma assinatura e ψ o conjunto de sentenças, pos-sivelmente vazio, cujo significado é o par SP = 〈∑, Mod(∑)〉; onde Mod(∑) é classe dosmodelos que interpretam a especificação e tal que o diagrama da figura 3.3 comuta.

  • 38

    × +−−−→Inj

    ⏐⏐� Inj⏐⏐�× +−−−→

    Figura 3.2: Diagrama da Sobrecarga

    Assinaturas: Uma assinatura∑

    = (S,TF,PF,P,≤) para uma especificação CASL con-

    siste de um conjunto de sorts S; conjuntos disjuntos TF e PF de śımbolos de operações totais

    e parciais respectivamente (para cada perfil de argumento e sort resultante); um conjunto

    de śımbolos de predicados P (para cada perfil de argumento) e uma ordem parcial ≤ sobre

    S que expressará quando um sort será subsort de outro, indicando a existência das imersões

    entre os sorts da assinatura. O mesmo śımbolo pode ser sobrecarregado com mais de um

    perfil e não há condições na relação entre sobrecarga e subsorts. São permitidas sobrecarga

    “ad-hoc”e “sobrecarga de subsort”.

    Modelos: Um modelo M ∈Mod(∑) fornece um conjunto (carrier) não vazio para cadasort em S, uma função parcial para cada śımbolo de operação em PF ∪ TF (para cada um

    dos perfis), uma relação para cada śımbolo de predicado em P (para cada um dos perfis), e

    uma imersão para cada par de sort relacionados por “ ≤ ”. A interpretação de um śımbolo

    de operação em TF tem que ser uma função total. Além disso, as imersões e as sobrecargas

    têm que ser compat́ıveis: ou seja, as imersões devem comutar com as operações de sobrecarga

    (c.f. exemplo da figura 3.2). A classe de todos os modelos de uma assinatura é dada por

    Mod(∑

    ) — veja a figura 3.3.

    Sentenças : Uma sentença Φ ∈ Sen(∑) é geralmente uma fórmula de primeira ordemheterogênea fechada. As fórmulas atômicas nela podem ser equações (forte ou existenciais),

    asserções de definibilidade ou pertinência (subsort) e aplicações de predicados completamente

  • 39

    Sen(Σ) −−−→ Sen(Σ2)Sen

    �⏐⏐ Sen�⏐⏐Σ

    τ−−−→ Σ2Mod

    ⏐⏐� Mod⏐⏐�Mod(Σ) ←−−− Mod(Σ2)

    Figura 3.3: Assinatura Sentenças e Classe de Modelos

    Στ−−−→ Σ2⏐⏐� ⏐⏐�

    Sen(Σ) −−−→ Sen(Σ2)

    Figura 3.4: Assinatura e Conjunto de Sentenças

    qualificados7. Os termos nas fórmulas atômicas são formados pela aplicação de operações

    completamente qualificadas8, variáveis, termos explicitamente tipados (interpretados como

    imersões de subsorts) ou “casts”(interpretados como projeções sobre subsorts). O conjunto

    de todas as sentenças de uma especificação básica é denotado por Sen(∑

    ). Veja figura 3.4.

    Satisfação: Denotada por M |= Φ, a satisfação de uma sentença de primeira ordem Φ

    em um modelo M é como o usual; i.e considerando os quantificadores e conectivos lógicos,

    ela envolve a validade de fórmulas abertas, e os valores de termos, relativo às atribuições dos

    valores às variáveis. O valor do termo pode ser indefinido quando ele envolver a aplicação

    de um śımbolo de operação parcial (ou um cast). Quando o valor de qualquer termo de

    argumento é indefinido, a aplicação de um predicado sobre esse termo nunca é válido, e a

    aplicação de uma operação sobre esse termo é sempre indefinida (como usual em álgebra

    parcial). A definibilidade de termos também afeta a validade de fórmulas atômicas: uma

    7i.e. śımbolos de predicados da forma Pw onde w ∈ S∗.8i.e. śımbolos de função da forma fw,s onde w ∈ S∗ e s ∈ S.

  • 40

    ΣMod−→ Mod(Σ) |=Σ SenΣ⏐⏐�φ �⏐⏐Mod(φ) ⏐⏐�Sen(φ)

    Σ′ Mod−→ Mod(Σ′) |=Σ′ SenΣ′

    Figura 3.5: Diagrama de Instituição

    equação existencial é válida quando ambos termos são definidos e iguais, já no caso de

    uma equação forte, ela será válida quando ambos os termos forem definidas e iguais ou

    simplesmente estiverem indefinidos9.

    Restrição de Geração de Sort: (S’,F’)⊆(S,F), onde F = TF ∪ PF: Uma restrição

    de geração de sort é tratada como um tipo adicional de sentença. Ela é satisfeita em um

    modelo quando os conjuntos que interpretam os sorts em S’ são gerados por funções em F’

    (possivelmente a partir de sorts em S \ S’ ).

    Institução: A institução para especificações básicas em CASL é dada equipando-se a

    assinatura com morfismos, e os modelos com homomorfismos. Um morfismo de assinatura σ

    de∑

    em∑′ preserva a sobrecarga, os mergulhos e a totalidade dos śımbolos das operações.

    Um homomorfismo h : M1 → M2; onde M1, M2 ∈Mod(∑

    ) preserva os valores das operações

    (incluindo a definibilidade) e a validade dos predicados. Um morfismo de assinatura σ de∑em

    ∑′ determina uma tradução de sentenças de Sen(∑) para Sen(∑′), e um funtorredutor Mod(σ) : Mod(

    ∑′) →Mod(∑). As traduções preservam a satisfação:M ′ |= σ(Φ) sss Mod(σ)(M ′) |= Φ (3.1)

    como visto na figura 3.5.

    Funções Semânticas: Enquanto que as aplicações de predicados e operações nas fórmulas

    9Veja caṕıtulo 4 para maiores explicações.

  • 41

    atômicas e nos termos da instituição CASL são completamente qualificadas pelo seus perfis,

    as especificações básicas na linguagem CASL permitem que os perfis sejam omitidos desde

    que eles estejam evidentes no contexto. Em geral, pode-se ter muitos caminhos, e possivel-

    mente nenhum, para expandir uma fórmula atômica da linguagem CASL (pela inserção de

    perfis) para se obter uma fórmula atômica bem tipada e completamente qualificada para

    construção de uma sentença na instituição subjacente10. A fórmula atômica é considerada

    bem formada quando ela se expande para uma única fórmula na instituição (a menos da co-

    mutatividade das imersões com a sobrecarga das operações); os axiomas de uma especificação

    básica bem formada determinam um conjunto de sentenças da instituição CASL.

    De fato a instituição CASL com subsorts descrita acima pode ser reduzida para uma

    instituição CASL heterogênea ordinária, pela substituição da pré-ordem “ ≤ ” por um mer-

    gulho expĺıcito; i.e.∑

    = (S,TF,PF,P,≤) reduz-se para ∑′ = (S,TF ∪ Emb,PF ∪ Proj,P ∪Memb) onde Emb = {embs,s′|s ≤ s′} é um conjunto de śımbolos de operações totais que rep-

    resentarão megulhos de subsorts, e os conjuntos Proj (de projeções sobre subsorts) e Memb

    (predicados de pertinência para subsort) são definidos similarmente.

    Dessa forma, a semântica de uma especificação básica bem formada em CASL é dada

    por uma assinatura∑

    junto com a classe daqueles modelos M ∈ Mod(∑) que satisfazemtodas as sentenças determinadas pela especificação; ou seja o par 〈∑, Mod(∑)〉.

    10Ou seja, o que se quer e transportar sentenças ϕ da linguagem CASL para sentenças Φ ∈ Sen(∑) nainstituição.

  • 42

    3.3.3 Constructos da Linguagem

    Esta subseção fornece exemplos que ilustram os constructos da linguagem CASL para o

    uso em especificações básicas, são eles : declarações e definições (tipos, operações, pred-

    icados e tipo de dados), restrição de geração de sorts e axiomas (envolvendo declaração,

    quantificação, conectivos, fórmulas atômicas e termos).

    Note que CASL permite que declarações sejam disseminadas com definições e axiomas.

    A visibilidade é linear, i.e śımbolos tem que ser declarados antes que sejam usados (exceto

    dentro da declarações de tipo de dados, onde não há visibilidade linear para que sejam

    permitidos tipos de dados mutuamente recursivos).

    Tipos: Vários sorts podem ser declarados de uma vez, possivelmente como subsorts de

    algum outro sort:

    sort Elem

    sorts Zero,Pos < Nat

    Os valores de um subsort podem também ser definidos através de uma fórmula, por

    exemplo:

    sort Odd = {n : Nat • odd(n)}

    Isto corresponde a declarar Odd < Nat e declarar que o valor n em Nat é a imersão de

    alguns valores de Odd se e somente se a fórmula odd (n) for válida.

    Operações: As operações podem ser declaradas como totais (usando o śımbolo “→”) ou

    parciais (usando “→?”), e ainda pode-se declarar alguns atributos familiares para funções

    binárias sobre um determinado sort.

  • 43

    ops zero : Zero;

    suc : Nat → Pos ;

    pre : Nat →? Pos ;

    + : Nat × Nat → Nat ,assoc, comm,unit 0 ;

    onde assoc, comm e unit 0 são atributos indicando que a operação é associativa, comu-

    tativa e possui elemento neutro “0”. Note que isso é apenas uma abreviação dos axiomas:

    ∀ m,n,k : Nat

    • m + (n + k) = (m + n) + k

    • m + n = n + m

    • m + 0 = 0 + m

    • m + 0 = m

    A chamada notação mixfix é permitida. Essa notação é assim denominada pelo fato

    de generalizar as notações infixa, pós-fixa e prefixa, permitindo a mistura arbitrária das

    porções dos argumentos e identificadores. Os “place-holders”11 são escritos como pares de

    “underscores”12. Exemplos:

    • −−+−−

    • −−−−+

    O primeiro caso significa que um termo envolvendo a soma será da forma “a+b” e no

    segundo que os termos serão da forma ab+. Todos os śımbolos deverão ser inclúıdos no

    11Local para colocar um argumento da operação.12“Undercore” simples são tratados como letras nos identificadores - e.g. no identificador > : Nat *

    Nat.

  • 44

    formato ISOLATIN-1, mas as anotações13 podem causar um efeito de formatação diferente -

    e.g. como o aparecimento de śımbolos matemáticos “→” em vez do par de caracteres “->”.

    Em casos simples, as operações podem também ser definidas no mesmo instante em que

    elas são declaradas em vez de definidas através dos axiomas:

    ops 1 : Nat = suc (0 );

    dbl(n : Nat) : Nat = n + n

    Predicados: A declaração de predicados assemelha-se a declaração das operações, mas

    não há sort resultante, pois é pressuposto que o sort resultante será a álgebra booleana

    {V,F}14.

    preds odd : Nat ;

    ≤ : Nat × Nat

    As declarações de predicados também podem ser definidas no mesmo tempo que elas são

    declaradas, através do conectivo “ ⇔ ” :

    preds even(n : Nat) ⇔ ¬odd(n);

    ≤ (m, n : Nat) ⇔ m < n ∨ m = n

    No que segue dá-se exemplos de duas especificações básica em CASL contendo a sua

    definição e sua semântica:

    (1) Especificação com um único sort

    spec Elem

    13Informações que não afetam a semântica da especificação e são utilizadas como aux́ılio para as ferramentasque processarão a especificação (analisadores ou provadores automáticos de teoremas).

    14Isso implica na necessidade da redefinição da igualdade local para o caso booleano apresentado no caṕıtulo4.

  • 45

    sort Elem

    end

    Essa especificação bem simples é definida como sendo o par 〈∑, ψ〉, onde: ∑= (S,PF,TF,P),S = {Elem}, PF = TF = P = ψ = ∅, e cujo significado é: 〈∑, Mod(∑)〉, de maneira queMod(

    ∑) = Set (i.e os modelos da especificação é a categoria de todos os conjuntos).

    (2) Especificação com um sort mais um predicado binário homogêneo

    spec ORDER

    sort Elem

    pred ≤ : Elem × Elem

    end

    Essa especificação também declara apenas a assinatura∑

    = {S2, PF2, TF2, P2} onde S2= {Elem}, PF2 = TF2 = ∅, P2 = {≤} e Mod(

    ∑2) é a classe de todos os conjuntos munidos

    de uma relação binária.

    Tipo de Dados: Uma declaração de tipo de dados é vista como uma gramática livre

    de contexto, i.e. uma variante de BNF. Ela declara os śımbolos na esquerda de “::=”como

    os sorts, e para cada alternativa na direita declara um construtor possivelmente com alguns

    seletores. Quando os tipos de dados são declarados como “livres”, nos modelos associados

    os construtores de termos distintos, do mesmo sort, são interpretados como valores distintos,

    e cada sort declarado é livremente gerado por seus construtores. Assim os modelos de um

    tipo livre são os modelos iniciais da categoria Mod(∑

    ). Exemplo:

    type Set [Elem] ::= {} | { }(Elem) | ∪ (Set [Elem]; Set [Elem])

    free type Bit ::= 0 | 1

  • 46

    free type Pair ::= pair(left , right : Elem)

    Tomando Pair como exemplo, essa declaração estabelece que pair : Elem×Elem→ Pair

    é um construtor e left, right : Pair → Elem são destrutores. Assim para uma declaração

    da forma free type S:= ci(si:Si , . . ., sn:Sn) tem-se que S é um sort constrúıdo livremente,

    ci é um construtor e si, . . . , sn são seletores da forma: ci : Si × Sn → S; si : S → Si e

    sn : S → Sn.

    Quando há mais do que uma alternativa em uma declaração de tipo de dados, os seletores

    são geralmente parciais, e nesse caso tem que ser declarados como tais pela inserção de ’?’.

    Exemplo:

    free type List [Elem] ::= nil | cons(first :?Elem; rest :?List [Elem])

    significando que List[Elem] é um sort livremente gerado, nil ∈ List[Elem], cons :

    Elem × List[Elem] → List[Elem], first : List[Elem] →? Elem e rest : List[Elem] →?

    List[Elem].

    Os seletores parciais podem ser evitados pelo uso de imersão de subsorts como constru-

    tores:

    free types List [Elem] ::= nil | sort NelistNelist ::= cons(first : Elem; rest : List [Elem])

    Significando que List[Elem] = nil ∪Nelist, e Nelist é constrúıdo livremente.

    A última declaração acima ilustra a não viabilidade linear dentro de uma lista de declarações

    de tipo de dados: NeList é usado antes de ter sido declarado.

    Retrição de Geração dos Sorts: A sintaxe CASL permite que tipos de dados sejam

  • 47

    declarados como tipos “gerados”, i.e. os sorts são obrigados a serem gerados pelos seus

    construtores (e subsorts imersos):

    generated type Num ::= 0 | 1 | 0 (Num) | 1 (Num)

    generated types Nat ::= 0 | sort PosPos ::= suc(pre : Nat)

    Onde no segundo caso Nat é obrigado a ser gerado a partir de 0 e pelo mergulho do

    subsort Pos (que é gerado pelo construtor suc).

    Mais geralmente, qualquer grupo de declarações de assinaturas pode estar sujeito à uma

    obrigatoriedade de geração dos sorts, por exemplo:

    generated { sorts Pos < Natops 0 : Nat ; suc : Nat → Pos}

    Axiomas: As variáveis usadas nos axiomas podem de antemão ser declaradas global-

    mente:

    vars m, n : Nat ; p : Pos

    axioms n < m → ...; suc(n) = p → ...; ...

    Onde vars declara as variáveis m, n : Nat e p : Pos como globais para toda a especi-

    ficação, numa biblioteca.

    As variáveis podem também ser declaradas localmente numa lista “itemizada”de fórmulas:

    vars x , y , z : Elem

    • (x ∗ y) ∗ z = x ∗ (y ∗ z )

    • x ≤ x

  • 48

    ou dentro de uma fórmula usando quantificação expĺıcita:

    ∀ n : Nat . ∃ m : Nat • n < m

    ∀ p : Pos . ∃! n : Nat • suc(n) = p

    Significando que o escopo das variáveis atinge somente os axiomas.

    Os conectivos lógicos tem sua interpretação usual:

    even(n) ⇔ ¬odd(n)

    m ≤ n ⇔ m < n ∨ m = n

    m < n ⇒ ¬n = 0

    even(m + n) if odd(m) ∧ odd(n)

    Fórmulas Atômicas: As declarações de definibilidade podem ser expĺıcitas:

    def pre(suc(n)) ∧ ¬def pre(0)

    ou impĺıcita em equações existenciais, que são distingǘıveis das equações fortes15, escritas

    através de ‘e=’(digita-se ‘=e=’no editor de texto) em vez de ‘=’:

    def pre(n) ⇒ suc(pre(n)) e= pre(suc(n))

    ¬ok(x, e) ⇒ find(x, cons(e, l)) = find(x, l)

    Proposições com pertinência em subsorts são escritas sugestivamente usando ‘∈’ (digitando-

    se ‘in’):

    n ∈ Pos ⇔ def pre(n)

    Aplicações de predicados são escritas do mesmo modo como as operações, possivelmente

    15O leitor entenderá melhor a relação entre essas igualdades e o predicado de definibilidade no caṕıtulo 4.

  • 49

    usando notação mixfix.

    Termos: Constantes e variáveis podem ser escritas como sequências de palavras (op-

    cionalmente separados por “underscores”simples16 (e.g. elemento neutro, cabeça da lista) e

    decorados com apóstrofo ou sinais matemáticos: nil, empty set, n, n’, CURRENT STATE,

    etc.

    Aplicações podem ser escritas usando o padrão funcional ou a notação mixfix: (e.g.,

    cons(e,l),{|e|} ∪ s), elas podem também ser escritas com qualificação expĺıcita, por exemplo,

    pre(n) pode ser escrita como:

    (op pre Nat →? Nat) (n)

    Termos de um determinado “sort”(interpretados como aplicações da identidade ou imersões)

    são escritos diretamente, por exemplo: dbl(suc(n) : Nat). Casts (interpretados como aplicações

    de projeções sobre subsorts, cujo resultado pode ser indefinido) são escritos usando a palavra

    reservada ‘as’, por exemplo: pre(n as Pos), significa pre aplicado a n dentro do subsort Pos

    17.

    3.3.4 Exemplo de uma Especificação Básica

    O exemplo seguinte ilustra uma especificação básica completa:

    free types

    Nat ::= 0 | sort PosPos ::= suc(pre : Nat)

    op pre : Nat →? Nat16Pares de “underscores”são reservados para indicar “place-holders”em śımbolos mixfix.17Note que isso pressupõe uma projeção p : Nat → Pos, e a possibilidade da aplicação pre(p(n)).

  • 50

    axioms ¬def pre(0 );∀n : Nat • pre(suc(n)) = n

    pred even : Nat

    var n : Nat

    • even 0

    • even suc(n) ⇔ ¬even n

    Note que a segunda linha declara respectivamente o construtor suc e o seletor pre como:

    suc: Nat → Pos e pre : Pos → Nat. A declaração subsequente de pre : Nat →?Nat

    permite termos onde pre é aplicado para um argumento que é do tipo Nat mas não do tipo

    Pos - tais termos podem ser perfeitamente significativos; por exemplo, pre(pre(suc(suc(0))))

    é perfeitamente significativo em Nat. Note o “overloading”existente em pre, que vem da

    declaração expĺıcita pre : Nat →?Nat e na declaração impĺıcita de pre como seletor de Nat

    - ou seja pre : Pos → Nat.

    Matematicamente, uma especificação básica é um par 〈∑, Ψ〉, onde ∑ é uma assinaturae Ψ é um conjunto de sentenças. No caso acima, a especificação algébrica é o par 〈∑, Ψ〉onde Ψ {¬def pre(0) , ∀n : Nat • pre(suc(n)) = n , ∀n : Nat. even(0) , ∀n : Nat. even

    suc(n) ⇔ ¬even n} e ∑ = 〈S, PF, TF, P 〉 é dado por :S = {Nat , Pos}

    PF = {preNat,Nat}

    TF = {sucNat,Nat , prePos,Nat}

    P = {evenNat}

    No que segue dá-se uma especificação algébrica “menos numérica”, através da especi-

    ficação de um sistema que controla contas bancárias bem simples.

  • 51

    library Basic/Conta − Assinatura

    version 0 .7

    from Basic/Numbersversion0 .7

    get Int ,Nat

    sort Conta

    ops saldo : Conta → Int ;numero : Conta → Nat ;credito : Conta × Int → Conta;debito : Conta × Int → Conta;cria : Nat × Int → Conta

    then

    vars c : Conta, v : Int , n : Nat

    • numero(credito(c, v)) = numero(c)

    • saldo(credito(c, v)) = saldo(c) + v

    • numero(debito(c, v)) = numero(c)

    • saldo(debito(c, v)) = saldo(c)− v if saldo(c)− v ≥ 0

    • numero(cria(n, v)) = n

    • saldo(cria(n, v)) = v

    end

    3.4 Especificações Estruturadas

    Assim como na maioria das linguagens atuais de especificação as especificações estruturadas

    em CASL são aplicações do prinćıpio de re-usabilidade e são formadas de várias maneiras que

    são familiares: união, extensão, tradução, redução, etc. Elas também podem ser nomeadas,

    para facilitar o reuso. Na subseção 3.4.1 considera-se vários aspectos pragmáticos que afetam

  • 52

    Στ−−−→ Σ′⏐⏐� ⏐⏐�

    Mod(Σ)red←−−− Mod(Σ′)

    Figura 3.6: Diagrama do Morfismo

    o projeto CASL. A subseção 3.4.2 apresenta os principais conceitos que a semântica das

    especificações estruturadas são baseadas. Finalmente, a seção 3.4.3 fornece exemplos que

    ilustram a utilização dos constructos da linguagem CASL aqui mencionados. Observe que os

    constructos que o leitor encontrará nesta seção, tem a mesma finalidade das operações com

    esquemas em Z, que visam reaproveitar (re-usar) especificações existentes.

    3.4.1 Aspectos Pragmáticos

    Modelos : O ponto positivo da especificação estruturada em CASL é que os operadores

    de estrutura da linguagem não obrigam qualquer mudança na estrutura dos modelos das

    especificações básicas; na verdade os operadores de estrutura são vistos como morfismo

    de assinatura entre especificações básicas, de forma que a semântica de uma especificação

    estruturada é a semântica de uma especificação básica que é imagem de um morfismo de

    assinatura. Graficamente isso será como na figura 3.6, onde τ é um operador de estrutura

    (e.g. hidden ou then,) Mod(Σ) e Mod(Σ′) são as classes dos modelos das especificações

    básicas feitas usando os śımbolos, respectivamente, em Σ e Σ′.

    Em outras palavras, isso significa que qualquer especificação estruturada pode ser escrita

    diretamente como uma especificação básica. Assim, a classe dos modelos das especificações

    estruturadas são exatamente a mesma classe dos modelos de certas especificações básicas, i.e,

  • 53

    álgebras interpretando os śımbolos declarados e satisfazendo todas propriedades declaradas.

    Por exemplo, considere uma especificação de inteiros. Pode-se escolher a especificação

    estruturada como uma extensão de uma especificação dos números naturais, antes dada como

    uma especificação básica simples. Essa escolha não afeta a semântica da especificação: nem

    a assinatura nem os modelos refletem a estrutura da extensão, entretanto a extensão é vista

    como um morfismo de assinaturas que transforma a especificação dos naturais na dos inteiros

    que contém a dos naturais.

    Nomes dos śımbolos: Um prinćıpio geral por trás do projeto CASL é: ‘mesmo nome,

    mesma coisa’. Então quando se vê duas ocorrências do mesmo sort na mesma espe