
Código: 

DIAB05111  Fecha Publicación: 

22112005  Título: 

Designing Declarative Languages with Laziness and Fuzziness  Detalle: 

In this draft paper we investigate a very simple, but powerful way, for introducing fuzzy logic into lazy declarative languages which combine the best properties of both (lazy) functional and (fuzzy) logic programming, in order to obtain a much more rich framework where applications dealing with uncertainty (fuzziness) and infinite data structures (laziness) can be easily coded.
Starting with two representative languages of lazyfunctionallogic and fuzzylogic programming, namely Curry
and Likelog, we propose an hybrid dialect where a set of rewrite rules (associated to the functional dimension of the language) are accompanied with a set of similarity equations between symbols of the same nature and arity (which represents the fuzzy counterpart of the new environment), thus providing an extremely flexible and
expressive paradigm where mathematical functions cohabit with fuzzy logic features. We show that, by manipulating at a very low cost the notion of ``strict equality'' typically used in lazy (both pure functional or integrated functionallogic) declarative languages, similarity relations can be successfully treated in a very natural way. Our approach can be implemented at a very high abstraction level in
two phases:
1) Firstly, by using the algorithm proposed by Garmendia [2005] we build (at compilation time) three similarity relations $\Re_c$, $\Re_o$ and $\Re_a$ which represent, respectively, the transitive closure, transitive opening and transitive approximation of the set of "similarity equations" collected in a given program}.
2) Secondly, we add to this program a set of ``similar equality rewriting rules" which, by making use of the previous similarity relations, are able to model the lazy behaviour of computations (at execution time).
A key point in the design of the associated operational method is that, apart from guaranteeing that it is conservative with respect to the crisp case (i.e., it computes at least the same outputs of the crisp case), any term produced after the evaluation of a given function, is furthermore compared with any other ``similar'' data as much as needed.
Keywords: Fuzzy Logic, Similarity, Declarative Programming,
Laziness
 



