Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
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