Fuzzy reasoning is a very productive research field that during the last years has provided a number of theoretical approaches and practical implementation prototypes. Nevertheless, the classical implementations, like Fril, are not adapted to the latest formal approaches, like multi-adjoint logic semantics. Some promising implementations, like Fuzzy Prolog, are so general that the regular user/programmer does not feel comfortable because either representation of fuzzy concepts is complex or the results difficult to interpret. In this paper we present a modern framework, Rfuzzy, that is modelling multi-adjoint logic. It provides some extensions as default values (to represent missing information, even partial default values) and typed variables. Rfuzzy represents the truth value of predicates through facts, rules and functions. Rfuzzy answers queries with direct results (instead of constraints) and it is easy to use for any person that wants to represent a problem using fuzzy reasoning in a simple way (by using the classical representation with real numbers).
Deep Dive into Rfuzzy framework.
Fuzzy reasoning is a very productive research field that during the last years has provided a number of theoretical approaches and practical implementation prototypes. Nevertheless, the classical implementations, like Fril, are not adapted to the latest formal approaches, like multi-adjoint logic semantics. Some promising implementations, like Fuzzy Prolog, are so general that the regular user/programmer does not feel comfortable because either representation of fuzzy concepts is complex or the results difficult to interpret. In this paper we present a modern framework, Rfuzzy, that is modelling multi-adjoint logic. It provides some extensions as default values (to represent missing information, even partial default values) and typed variables. Rfuzzy represents the truth value of predicates through facts, rules and functions. Rfuzzy answers queries with direct results (instead of constraints) and it is easy to use for any person that wants to represent a problem using fuzzy reasoning
One of the reasoning models that is more useful to represent real situations is fuzzy reasoning. Indeed, world information is not represented in a crisp way. Its representation is imperfect, fuzzy, etc., so that the management of uncertainty is very important in knowledge representation. There are multiple frameworks for incorporating uncertainty in logic programming:
fuzzy set theory [5,38,32], -probability theory [8,16,20,25,26], -multi-valued logic [7,11,12,15,17,29], -possibilistic logic [6,36,37] Despite of the multitude of theoretical approaches to this issue, few of them resulted in actual practically usable tools. Since Logic Programming is traditionally used in Knowledge Representation and Reasoning, we argue it is perfectly well-suited to implement a fuzzy reasoning tool as ours.
The result of introducing Fuzzy Logic into Logic Programming has been the development of several fuzzy systems over Prolog. These systems replace the inference mechanism of Prolog, SLD-resolution, with a fuzzy variant that is able to handle partial truth. Most of these systems implement the fuzzy resolution introduced by Lee in [18], as the Prolog-Elf system [10], the FRIL Prolog system [2] and the F-Prolog language [19]. However, there is no common method for fuzzifying Prolog, as has been noted in [28].
Some of these Fuzzy Prolog systems only consider the predicates’ fuzziness whereas other systems consider fuzzy facts or fuzzy rules. There is no agreement about which fuzzy logic should be used. Most of them use min-max logic (for modelling the conjunction and disjunction operations) but other systems just use Lukasiewicz logic [13].
Furthermore, logic programming is considered a useful tool for implementing methods for reasoning with uncertainty in [38].
There is also an extension of constraint logic programming [3], which can model logics based on semiring structures. This framework can model min-max fuzzy logic, which is the only logic with semiring structure.
Another theoretical model for fuzzy logic programming without negation has been proposed by Vojtas in [35], which deals with many-valued implications.
One of the most promising fuzzy tools for Prolog was the “Fuzzy Prolog” system [33,9]. The most important advantages against the other approaches are:
- A truth value will be a finite union of sub-intervals on [0, 1]. An interval is a particular case of union of one element, and a unique truth value is a particular case of having an interval with only one element. 2. A truth value is propagated through the rules by means of an aggregation operator. The definition of this aggregation operator is general and it subsumes conjunctive operators (triangular norms [14] like min, prod, etc.), disjunctive operators [31] (triangular co-norms, like max, sum, etc.), average operators (averages as arithmetic average, quasi-linear average, etc) and hybrid operators (combinations of the above operators [27]). 3. Crisp and fuzzy reasoning are consistently combined [24]. Fuzzy Prolog adds fuzziness to a Prolog compiler using CLP(R) instead of implementing a new fuzzy resolution, as other former fuzzy Prologs do. It represents intervals as constraints over real numbers and aggregation operators as operations with these constraints, so it uses Prolog’s built-in inference mechanism to handle the concept of partial truth.
Over the last few years several papers have been published by Medina et al. ([22,23,21]) about multi-adjoint programming, which describe a theoretical model, but no means of serious implementations apart from promising prototypes [1].
Indeed, that was the reason for developing Fuzzy Prolog [9]. Fuzzy Prolog is a very expressive tool which allows the user1 to program almost everything, but we have to pay for this expressiveness. The cost is a complex syntax difficult to understand.
The motivation for developing Rfuzzy is mainly focused on reducing this complex syntax. This reduction is based on three ideas:
- Use real numbers instead of intervals between real numbers to represent truth values. Fuzzy Prolog answers to user queries are intervals like it will rain (tonight, [0,1]). This is a bit difficult to understand by normal users. Truth value of this example is between 0 and 1, and this means that program can not conclude anything about the predicate truth value. 2. Whenever it is possible, do not answer user queries using constraints. A Fuzzy Prolog answer to an user query can be a constraint, like it will rain (tomorrow, [X, Y]), X > 0, X < 1, Y > 0, Y < 1. The meaning of this example is exactly the same as the meaning of the previous one, but it is slightly more difficult to understand it. 3. Truth value variables do not need to be coded. Taking care of variables to manage the predicates truth value introduces errors and makes the code illegible, without giving us any advantage.
Rfuzzy uses real numbers to represent truth values and its replies are never constraints. Besides, it is able to disting
…(Full text truncated)…
This content is AI-processed based on ArXiv data.