'EDUFU - Editora da Universidade Federal de Uberlandia'
Abstract
A Domain Specific Language is a specification language dedicated to a particular
domain, representation technique, or solution searching method. On
the other hand, a general-purpose programming language is a language designed
with the goal of emulating Lambda Calculus or Turing Machine. Since
general-purpose languages must accept any algorithm that can be executed
by a Turing Machine, they do not contain a knowledge base of a specific
domain, which makes them difficult to master by a professional who is not a
specialist in Computer Science.
Many fields of science and technology have well advanced domain specific
languages: LATEX and XML for text processing, SQL for data base management,
Matlab for engineering, etc. Designers of neural network applications
do not have good domain specific languages. The main reason for this situation
is that they are considered computer scientists, and supposed to know
general-purpose languages and even low level languages close to Turing machines
(languages for microprogramming). Since we know that this has no
base on reality, the goal of this work is to develop methods of creating domain
specific languages rooted on Lisp macros and on functional languages
(Clean and Haskell) for prototypes. We believe that Lisp is easy enough
to be mastered even by people who has difficulty with formal methods and
mathematics. Therefore, with well designed extensions, and a rapid training
in programming methods, an engineer can use Lisp as a powerful tool of
productivity.
Lisp is a traditional tool for creating both embedded languages and domain
specific languages. Therefore, Lisp offers all tools necessary to design,
test and deploy domain specific languages. Nevertheless, neural networks have features that require special care. For instance, they need to have biological
feasibility. In order to reach code quality close to human designed
nets, while preserving biological feasibility, this work will use advanced Artificial
Intelligence methods and guided automatic theorem provers similar
to the one used in HOL4 or Isabelle. Our system has a simpler goal than
general theorem provers, since it will focus in a few problems related to neural
networks. One of these problems is the designing of devices for data
acquisition.
This thesis differs from similar works in one point that may cause controversy:
Besides the contributions of the author to the state of the art, it
discusses elementary aspects of the technologies involved. We decided to
do this in order to bring the ideas that we are exposing to the reach of all
readers. What are these ideas?
The first contribution is to bring software engineering technology to biological
modeling. We are not aware of any researcher who attempted this
goal before. A second aspect of this work can be resumed as an effort to
create a language to describe combinations of neuron models into complex
networks.
All programs discussed here were designed to avoid obsolescence. The
author achieved this goal by writing prototypes in ¸-calculus, a formal system
that can be executed in modern computers.Doutor em CiênciasLinguagem de domínio específico é uma linguagem de especificação dedicada
a um domínio particular, ou a uma técnica de representação, ou mesmo a
um método de busca, no sentido dado a este termo pelos pesquisadores de
inteligência artificial. Por outro lado, uma linguagem de propósito geral é
projetada com a meta de emular o cálculo lambda ou a máquina de Turing.
Considerando que as linguagens de propósito geral devem aceitar qualquer
algoritmo que possa ser executado por uma máquina de Turing, elas rara-
mente usam métodos específicos a um domínio restrito. Isso as torna difíceis
de aprender por profissionais que não sejam especialistas em ciência de computação. Para dizer toda a verdade, o aumento da popularidade de linguagens específicas entre cientistas de computação faz nos crer que linguagens de propósito geral são difíceis até para esses profissionais.
Muitos campos da ciência e da tecnologia possuem avançadas linguagens
de domínio específico: LATEX e XML são utilizadas por pessoas que trabalham com processamento de texto, SQL é popular em áreas que dependem
de gerenciamento de bases de dados, Matlab é amplamente utilizada entre
engenheiros, etc. Já projetistas de aplicações baseadas em redes neurais
não possuem boas linguagens de domínio específico. A principal razão para
isso é que eles são considerados cientistas de computação e, por isso, deveriam | na opinião geral | conhecer bem linguagens de propósito geral
e até mesmo linguagens de microprogramação. A realidade, contudo, não
é essa; por isso, a meta deste trabalho é desenvolver uma metodologia de
criação de linguagens de domínio específico, metodologia essa que é baseada
no sistema de macros da Lisp e em protótipos escritos em linguagens funcionais baseadas no ¸-calculus (Clean e Haskell). Lisp é a ferramenta clássica
para criar tanto sistemas embarcados quanto linguagens específicas. Por isso,
Lisp oferece todas as ferramentas necessárias para projetar, testar e aplicar
linguagens de domínio específico. Mesmo assim, redes neurais têm características que exigem cuidado especial. Por exemplo, elas devem exibir exequibilidade
biológica. Para atingir qualidade próxima de código gerado por
programadores profissionais, mantendo a exequibilidade biológica, o presente
trabalho utiliza avançadas técnicas de inteligência artificial e provadores de
teorema baseados em táticas fornecidas pelo usuário, similares às do HOL4,
ou do Isabelle. O sistema descrito nesta tese tem metas mais simples do
que um provador geral, já que focaliza alguns poucos problemas relacionados
com redes neurais. Um desses problemas é a coleta de dados de temperatura
para construir a verdade terrestre (verdade terrestre refere-se à informação
que é recolhida no local ) de sistemas utilizados no estudo do aquecimento
global.
Um aspecto em que esta tese difere de trabalhos similares e que pode
gerar controvérsia está no fato do autor ter procurado escrever um texto autocontido.
Tentou-se, ao mesmo tempo em que se discutiam as contribuições
do autor, expor de maneira didática e completa todos os recursos tecnológicos
utilizados. No caso de linguagens de domínio específico, várias foram apresentadas
de forma mais ou menos completa, em uma tentativa de convencer
o leitor da difusão e da importância dessa tecnologia.
No que se refere `as contribuições do autor, elas são três. Em primeiro
lugar, o autor tentou repassar ao leitor sua longa experiência no projeto e
construção de dispositivos eletrônicos de alta tecnologia, como sistemas de
aquisição de dados, GPS, interfaces e monitores miniaturizados. Em segundo
lugar, procurou-se trazer as modernas técnicas de engenharia de software para
a geração de redes neurais.
Finalmente, propôs-se nesta tese uma arquitetura virtual, que procura
unificar os diversos algoritmos de redes neurais e programação genética,
além de criar uma tecnologia resistente `a obsolescência. Essa última meta é
atingida através de protótipos escritos em ¸-calculus, um sistema formal que
serve de base aos computadores modernos.
Linguagem de domínio específico é uma linguagem de especificação dedicada
a um domínio particular, ou a uma técnica de representação, ou mesmo a
um método de busca, no sentido dado a este termo pelos pesquisadores de
inteligência artificial. Por outro lado, uma linguagem de propósito geral é
projetada com a meta de emular o cálculo lambda ou a máquina de Turing.
Considerando que as linguagens de propósito geral devem aceitar qualquer
algoritmo que possa ser executado por uma máquina de Turing, elas rara-
mente usam métodos específicos a um domínio restrito. Isso as torna difíceis
de aprender por profissionais que não sejam especialistas em ciência de computação. Para dizer toda a verdade, o aumento da popularidade de linguagens específicas entre cientistas de computação faz nos crer que linguagens de propósito geral são difíceis até para esses profissionais.
Muitos campos da ciência e da tecnologia possuem avançadas linguagens
de domínio específico: LATEX e XML são utilizadas por pessoas que trabalham com processamento de texto, SQL é popular em áreas que dependem
de gerenciamento de bases de dados, Matlab é amplamente utilizada entre
engenheiros, etc. Já projetistas de aplicações baseadas em redes neurais
não possuem boas linguagens de domínio específico. A principal razão para
isso é que eles são considerados cientistas de computação e, por isso, deveriam | na opinião geral | conhecer bem linguagens de propósito geral
e até mesmo linguagens de microprogramação. A realidade, contudo, não
é essa; por isso, a meta deste trabalho é desenvolver uma metodologia de
criação de linguagens de domínio específico, metodologia essa que é baseada
no sistema de macros da Lisp e em protótipos escritos em linguagens funcionais baseadas no ¸-calculus (Clean e Haskell). Lisp é a ferramenta clássica para criar tanto sistemas embarcados quanto linguagens específicas. Por isso,
Lisp oferece todas as ferramentas necessárias para projetar, testar e aplicar
linguagens de domínio específico. Mesmo assim, redes neurais têm características que exigem cuidado especial. Por exemplo, elas devem exibir exequibilidade
biológica. Para atingir qualidade próxima de código gerado por
programadores profissionais, mantendo a exequibilidade biológica, o presente
trabalho utiliza avançadas técnicas de inteligência artificial e provadores de
teorema baseados em táticas fornecidas pelo usuário, similares às do HOL4,
ou do Isabelle. O sistema descrito nesta tese tem metas mais simples do
que um provador geral, já que focaliza alguns poucos problemas relacionados
com redes neurais. Um desses problemas é a coleta de dados de temperatura
para construir a verdade terrestre (verdade terrestre refere-se à informação
que é recolhida no local ) de sistemas utilizados no estudo do aquecimento
global.
Um aspecto em que esta tese difere de trabalhos similares e que pode
gerar controvérsia está no fato do autor ter procurado escrever um texto autocontido.
Tentou-se, ao mesmo tempo em que se discutiam as contribuições
do autor, expor de maneira didática e completa todos os recursos tecnológicos
utilizados. No caso de linguagens de domínio específico, várias foram apresentadas
de forma mais ou menos completa, em uma tentativa de convencer
o leitor da difusão e da importância dessa tecnologia.
No que se refere `as contribuições do autor, elas são três. Em primeiro
lugar, o autor tentou repassar ao leitor sua longa experiência no projeto e
construção de dispositivos eletrônicos de alta tecnologia, como sistemas de
aquisição de dados, GPS, interfaces e monitores miniaturizados. Em segundo
lugar, procurou-se trazer as modernas técnicas de engenharia de software para
a geração de redes neurais.
Finalmente, propôs-se nesta tese uma arquitetura virtual, que procura
unificar os diversos algoritmos de redes neurais e programação genética,
além de criar uma tecnologia resistente `a obsolescência. Essa última meta é
atingida através de protótipos escritos em ¸-calculus, um sistema formal que
serve de base aos computadores modernos