<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>D. López-Rodríguez);</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Algorithms for Fuzzy Concept Lattices</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Domingo López-Rodríguez</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ángel Mora</string-name>
          <email>amora@uma.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Manuel Ojeda-Hernández</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Departamento de Matemática Aplicada, Universidad de Málaga</institution>
          ,
          <addr-line>29071 Málaga</addr-line>
          ,
          <country country="ES">Spain</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2022</year>
      </pub-date>
      <volume>000</volume>
      <fpage>0</fpage>
      <lpage>0003</lpage>
      <abstract>
        <p>A central notion in Formal Concept Analysis is the concept lattice. This lattice allows describing a hierarchical biclustering between objects and attributes of a formal context, whose hierarchy is defined by an order that expresses the specialisation-generalisation relationship between concepts. It is a fundamental way of representing the knowledge implicit in the context. Therefore, in practice, due to its theoretical complexity, it is necessary to define computationally eficient algorithms for its calculation. In the literature, several algorithms, using diferent approaches, have been proposed for the computation of the lattice in the classical framework, where the presence of an attribute in an object is modelled as a binary value, indicating that the attribute is either present or absent. However, it is possible to extend this framework to take into account the diferent degrees to which an attribute could be present in an object. Through this extension, it is possible to model fuzzy situations where the attribute is not 100% present in an object, giving flexibility to the model. In this paper, we review the best known algorithms for the calculation of the concept lattice in the binary version, and we extend them for the calculation of the fuzzy concept lattice, presenting the most significant diferences with respect to the original binary versions. In addition, we will present examples of the execution of these new versions of the algorithms.</p>
      </abstract>
      <kwd-group>
        <kwd>Formal concept analysis</kwd>
        <kwd>Concept Lattice</kwd>
        <kwd>Graded attributes</kwd>
        <kwd>Algorithms</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        In recent years, Formal Concept Analysis (FCA) is reaching a high degree of maturity. Only a
few decades have passed since the first works of the pioneers, R. Wille and B. Ganter [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ]. The
number of publications in the area is increasing, as well as the direct applications of FCA in
emergent and hot topics as Social Network Analysis [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], Recommender Systems [
        <xref ref-type="bibr" rid="ref4 ref5">4, 5</xref>
        ], Medical
Diagnosis [
        <xref ref-type="bibr" rid="ref6 ref7">6, 7</xref>
        ], E-learning Systems [
        <xref ref-type="bibr" rid="ref8 ref9">8, 9</xref>
        ] and others. For a reader not used to FCA, there are
many possible references but we highlight [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] because of the pedagogical vision of the authors.
      </p>
      <p>Within the classical FCA framework, the knowledge extracted from a binary table of data
(formal context) is essentially represented as two complementary entities: the concept lattice
and a basis of context-valid implications. An interesting research line is the one that studies
algorithms to compute both knowledge entities. The intrinsic exponential nature of the process
(M. Ojeda-Hernández)
(M. Ojeda-Hernández)
of building the lattice and the basis of the implications encourages this line to be very active
from the very beginning. This paper focuses on this line.</p>
      <p>In this work, we emphasise the importance of the concept lattice: it represents an exhaustive
analysis of the closed sets according to the well-known derivation operators forming a Galois
connection. That allows us to establish a hierarchical biclustering of the relationships between
objects and attributes.</p>
      <p>
        Let us recall that the number of concepts can be exponential in the size of the input context
and the problem of determining this number is #P-complete [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. It is therefore necessary to
develop algorithms that intelligently exploit the structure of the lattice itself and the properties
of the closure system for the eficient computation of the concept set. To solve this problem, a
wide variety of proposals have been made. The most naive one consists of exhaustively
enumerating all possible subsets and then checking which ones are closed. More advanced methods
use pruning strategies to avoid such complete enumeration. For example, the NextClosure
algorithm [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] uses the lectic order of intents. Others are based on determining the set of all
extents by performing a recursive search accompanied by canonicity tests that allow a more
eficient exploration. Those based on the CbO strategy [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], such as FastCbO (FCbO) [
        <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
        ],
or InClose [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] stand out.
      </p>
      <p>
        The classical FCA framework is extended by considering non-binary relationships between
the objects and attributes, i.e.  -fuzzy relations. The first approaches were due to Burusco
and Fuentes [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] and Bělohlávek [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. Fuzzy FCA (FFCA) considers  -contexts ⟨,  ,  ⟩ where
 is a set of objects,  is a set of attributes an  is a fuzzy relation between  and  . The
interpretation of  (,  ) is the truth degree to which object  has attribute  .
      </p>
      <p>
        For FFCA, few algorithms have been developed by adapting the classical ones to the
generalised framework. We highlight [
        <xref ref-type="bibr" rid="ref18 ref19">18, 19</xref>
        ] as the first approaches to the problem in this fuzzy
setting. In the same way that in the classical one, more eficient and faster approaches should
be developed. The purpose of this work is to generalise other known and eficient algorithms
to FFCA. We analyse their eficiency and see what the most relevant diferences with respect to
the binary versions are.
      </p>
      <p>The rest of the work is organised as follows. In Section 2, we present the background and
the most prominent algorithms in classical FCA and in Section 3, we show how to extend the
InClose family of algorithms to the fuzzy version. We provide an example of the execution of
these new versions in Section 4 and present our conclusions and the future lines of work in
Section 5.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Preliminaries and related works</title>
      <p>In this section we give a brief summary of fuzzy set theory. Throughout the paper, the reader is
expected to be familiar with Formal Concept Analysis notions.</p>
      <p>Let  = (, ∧, ∨, ⊗, →, 0, 1) be a complete residuated lattice, that is, (, ∧, ∨) is a complete
lattice with 0 and 1 being the least and the greatest elements of  , respectively, (, ⊗, 1) satisfies
⊗ is commutative, associative, and 1 is neutral with respect to ⊗, and ⊗ and → satisfy the
so-called adjointness property: for all , ,  ∈  , we have that  ⊗  ≤  if  ≤  →  .</p>
      <p>An  -set is a mapping  ∶  →  from the universe set  to the truth values set  , where
 () means the degree to which  belongs to  . The set of  -sets on the universe  is denoted
by   . If  is finite, it is common to denote fuzzy sets as  = {  1/ 1,  2/ 2, … ,   /  }, where each
element   belongs to  in degree   . If   = 0, the element   might be omitted and if   = 1 we
denote it by {  }. Operations with  -sets are defined element-wise. For instance,  ⊗  ∈   is
defined as ( ⊗ )() = () ⊗ () for all  ∈  .</p>
      <p>Now we turn our focus to the main features of the classical algorithms that are considered
the main background of this work. All of them start from a binary formal context. For the
pseudocode and more details, we refer the reader to the sources cited in the text.</p>
      <p>
        Although former attempts to compute the maximal rectangles of a binary relation exist [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ],
the first proper approach to compute all the formal concepts in the FCA framework was the
NextClosure algorithm [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. The goal is to compute all the intents of the formal concepts. Thus,
the search space is formed by all possible attributes subsets. The NextClosure approach difers
from that of the brute force since it introduces a pruning strategy when exploring the search
space, based on the introduction of an order (called lectic order) between the sets of attributes.
      </p>
      <p>NextClosure begins with the computation of the closure of the empty set. After this closure
computation, the algorithm recursively enumerates the next closed sets in the lectic order. It is
well-known that the complexity is exponential in the worst case, but it is interesting to know
that the algorithm has a polynomial delay,  (||| | 2) searching all the intents or  (|| 2| |)
searching all the extents. This fact establishes an upper bound to compute one concept.</p>
      <p>
        Krajča et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] presented a survey on algorithms for computing formal concepts. The
authors said “The major issue of widely-used algorithms for computing formal concepts is that
some concepts are computed multiple times which brings significant overhead”. Close-by-one
(CbO) [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] proposed an interesting line to reduce this overhead and, at present, the faster
algorithms follow the framework posed by CbO. Kuznetsov’s algorithm builds a tree where
nodes represent computed closures, and edges connecting two closures ,  (into two nodes)
are labelled by attributes { } connecting them when  is the closure of  ∪ { } .
      </p>
      <p>
        With respect to CbO, Fast Close-by-One (FCbO) [
        <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
        ] achieves a reduction of the number of
concepts which are computed multiple times, including an additional canonicity test. Currently,
FCbO is one of the main methods to compute formal concepts having parallelizable versions
and several new improvements.
      </p>
      <p>
        In this paper, due to its simplicity of implementation, we focus on another highly eficient
algorithm named InClose [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. It uses incremental closure and matrix searching as key features
to achieve a faster method. InClose avoids to repeat the computation of closures and only
computes a closure per concept in an incremental way. We propose fuzzy extensions for the
diferent versions of the In-Close algorithm in the literature. We implement and compare the
results of the algorithms in the following sections.
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. Extension of the algorithms to the fuzzy setting</title>
      <p>The topic of discussion in this section will be the extension of the classical FCA algorithms to
a fuzzy setting. Let  = (, 0, 1, ∧, ∨, ⊗, →) be a complete residuated lattice. Since all our sets
of objects and attributes are finite, without loss of generality we will consider  to be finite as
well. This is because the set { (,  )} ∈,∈ is finite and we can consider  ′ to be the smallest
complete residuated lattice such that { (,  )} ∈,∈ ⊆  ′ ⊆  . The complete residuated lattice
 ′ exists and is finite, the prove is not the goal of this paper so it is omitted.</p>
      <p>
        In classical algorithms such as InClose2, introduced by Andrews [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], the code runs for each
attribute  ∈  . The diference in the fuzzy case is that we have to consider the degrees of
each attribute, hence the run of the algorithm will take the first attribute  1 and run through
all the diferent truth values in  . This tour on the possible degrees could go either forward
or backwards through the elements of  . The choice taken so far is to run backwards on  in
order to avoid redundant cycles. For instance, there is no point in adding to the set  all the
degrees of an attribute one by one {0.1/ 1, 0.2/ 1, … , 1/ 1} since running backwards the code would
add {1/ 1} = { 1} directly, thus saving computation time.
      </p>
      <p>The FuzzyInClose2 algorithm is the fuzzy extension to Andrews’ InClose2. In Algorithm 1,
the procedure is initialised. For this, only the formal context is needed, then the auxiliary
function InClose2_ChildConcepts is called with the initial extent  , intent ∅, attribute index
0 and concept list ℂ = ∅.</p>
      <sec id="sec-3-1">
        <title>Algorithm 1: FuzzyInClose2( )</title>
        <p>Input:  = (,  ,  ) : A formal context with grades in  = {0 &lt;  1 &lt; … &lt;   = 1}
Output:  () : The concept lattice of  .
1 ℂ ∶= ∅
2 InClose2_ChildConcepts( , ∅, 0, ℂ)
3 return  () = ℂ</p>
        <p>The auxiliary function used above is the one represented in Algorithm 2 below. This is the
one that actually extends the InClose2 algorithm to the fuzzy framework and performs the
recursive search. Notice how in line 3 we make  range from  to 1, that is, we run through the
elements of  in a decreasing order.</p>
        <p>Remark 1. The notation of the pseudocode may look cumbersome. It is done set-theory style in
order to maximize the amount of information given to the reader. However, from the coding
point of view, the computation of the algorithms is much simpler due to the use of vector
notation. For instance, in Algorithm 4, in line 5, when it reads  ∩ {  } ⊊ { /  } in vector notation
this is just (  ) &lt; .</p>
        <p>Notice that prior to line 1 it is required that  is an extent. The algorithm starting with
 =  ensures this since  is always an extent and all ramifications of the algorithm are built
as intersections of  with attribute-extents, that always give other extents. It is also required
that  is the intent corresponding to  accumulated over the course of the execution branch
that has led to this node. Note that  will be completed in the current level of recursion. Hence,
 ⊆  ↑ is needed. This is ensured in the first iteration of the algorithm since  = ∅ but through
all the ramifications this holds as well, although it cannot be seen that trivially.</p>
        <p>Line 1: Initialize a list  as empty.</p>
        <p>Line 2: Iterate across the formal context, from a starting attribute  + 1 up to attribute  ,
where  is the number of attributes in the context.</p>
        <p>Line 3: Iterate across the truth values in  backwards and...</p>
        <p>Line 4: ... call the current truth value  .</p>
        <p>Algorithm 2: InClose2_ChildConcepts( ,  ,  , ℂ)</p>
        <p>Input:  : An extent;  : The intent corresponding to  , that will be completed in this
execution;  : index of the attribute where to start the exploration of this branch;
ℂ: the global variable where to accumulate the computed concepts.
7
8
9
10
11
12
1  ∶= ∅
2 for  ∈ { + 1, … , | |} do
3 for  ∈ {, … , 1} do
4  ∶=  
5 if  ∩ {  } ⊊ { /  } then
6  ∶=  ∩ {  /  }↓
if  ↑ ∩ {  } = { /  } then
if  =  then</p>
        <p>∶=  ∪ {  /  }
else
if  ∩   =  ↑ then</p>
        <p>∶=  ∪ {(, , )}
13 ℂ ∶= ℂ ∪ {(, )}
14 for (, , ) ∈  do
15  ∶=  ∪ {   /  }
16 InClose2_ChildConcepts( ,  ,  , ℂ)</p>
        <p>Line 5: Skip attributes already in  , since the truth values are gone through in decreasing
order,  ∩ {  } ≠ ∅ implies   belongs to  in a higher degree than  , so this can be skipped too.</p>
        <p>Line 6: Form an extent,  , by intersecting the current extent,  , with the next column of
objects in the context with degree  .</p>
        <p>Line 7: Skip all  such that  ↑ ∩ {  } ≠ { /  }. This is a partial canonicity test because in this
iteration we are focused only on  .</p>
        <p>Line 8: ... if  =  , then...</p>
        <p>Line 9: ...add { /  } to the set  ...</p>
        <p>Lines 10 and 11: ... else, for the canonicity test, if the partial intent of  up to  is exactly 
restricted to the first  − 1 attributes...</p>
        <p>Line 12:... store (, , ) ∈  ...</p>
        <p>Line 13: Store the concept (, ) in the list ℂ
Line 14: For each extent  , attribute   and truth value   stored in  ...</p>
        <p>Line 15: Create the intent  =  ∪ {   /  }.</p>
        <p>Line 16: Call InClose2_ChildConcepts to compute the child concepts of  starting from the
attribute   and complete the intent  .</p>
        <p>It is interesting to remark that in line 7 the calculation of  ↑ ∩ {  } does not require the
computation of the intent since it is simply
 ↑ ∩ {  } =  ↑(  ) = ⋀ (() →  (,</p>
        <p>)) .</p>
        <p>∈
Similarly, the computation of the intent  ↑ is not needed since it follows from the previous
formula: the implementation would only present a loop over the attributes  &lt;  , computing
 ↑ ∩ {  } using the formula above, and stopping early when  ↑
∩ {  } =  ↑(  ) ≠ (

) =  ∩ {
 }.</p>
        <p>
          InClose2 has been proved to be correct and fairly quick timewise, even though it does several
redundant computations. For instance, assume that  ∩ {   /  }↓ is empty. Then, for all child
concepts from this extent on, it follows trivially that  ∩ {   /  }
↓ = ∅, hence this iteration may be
skipped with no loss of information. This is taken into account in a series of algorithms called
InClose4, introduced by Andrews [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ] as well. Actually, there are two variations of InClose4
which are called InClose4a and InClose4b. In these algorithms a list  is added to the parameters
in order to track the empty intersections in all the child extent iterations. This way, several
calculations are skipped and thus, runtime is shortened.
        </p>
        <p>Next, we give some details of the diferences between FuzzyInClose2 and FuzzyInClose4a.
Due to space reasons, only the pseudocode of FuzzyInClose4b is displayed, since it is the
fastest and the less computation demanding.</p>
        <p>The main method FuzzyInClose4a only difers from the InClose2 version in that the auxiliary
function, now called InClose4a_ChildConcepts, requires an extra argument,  , that keeps
track of the empty intersections occurring in a branch of the execution, and that is initially
empty.
lower.
to InClose4a_ChildConcepts.</p>
        <p>There are subtle changes in lines 5, 11 and 12 of InClose2a_ChildConcepts that improve it
Line 5 Skip all attributes that are already in  in degree  or higher or in  in degree  or
Line 5 in InClose4a: we can omit all attributes that are already in  in degree  or higher or in 
in degree  or lower, by performing the check ∩{</p>
        <p>After line 10</p>
        <p>Before performing the canonicity test  ∩ 
 } ⊊ { /  } and ( ∩{  } = ∅ or { /  } ⊊  ∩{</p>
        <p>}).
 =  ↑ in line 11 (Algorithm 2), the
fuzzy version of InClose4a will check if the new extent is empty, thus updating  , the record
of empty intersections, accordingly: if  = ∅ then  ∶= {  /  } ∪ ( ∖ {  }). The update of 
is designed to keep track of the minimal degree  for which the computation of the extent 
provides the empty set. Thus, the condition in line 5 will be optimal and reject all the cases that
inherit the empty intersection.</p>
        <p>Notice that the execution of FuzzyInClose4a( ) computes all the extents of the given context
from  to ∅, in case ∅ is indeed an extent.</p>
        <p>Another algorithm that blends the spirit of FuzzyInClose2 and the avoiding empty
intersections of FuzzyInClose4a is the so-called FuzzyInClose4b algorithm.</p>
        <p>
          Introduced in the classical FCA by Andrews [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], InClose4b keeps the idea of skipping empty
intersections to speed up the code but checks this condition earlier in the process. As we can
see in Algorithm 4, lines 8 and 9, the filter of the extent  being empty is applied before than in
FuzzyInClose4a, where this is done in lines 11 and 12. This makes it faster to discard empty
intersections, but it comes with a price. Originally, there were extents not computed by this
Algorithm 3: FuzzyInClose4b( )
        </p>
        <p>Input:  = (,  ,  ) : A formal context with grades in  = {0 &lt;  1 &lt; … &lt;   = 1}
Output:  () : The concept lattice of  .
1 ℂ ∶= ∅
2 InClose4b_ChildConcepts( , ∅, 0, ∅, ℂ)
3 if  ↓ = ∅ then
4 ℂ ∶= ℂ ∪ {(∅,  )}
5 return  () = ℂ</p>
      </sec>
      <sec id="sec-3-2">
        <title>Algorithm 4: InClose4b_ChildConcepts( ,  ,  ,  , ℂ)</title>
        <p>Input:  : An extent;  : The intent corresponding to  , that will be completed in this
execution;  : index of the attribute where to start the exploration of this branch;
 : record for empty intersections; ℂ: the global variable where to accumulate the
computed concepts.
7
8
9
10
11
12
13
14
15
1  ∶= ∅
2 for  ∈ { + 1, … , | |} do
3 for  ∈ {, … , 1} do
4  ∶=  
5 if  ∩ {  } ⊊ { /  } and ( ∩ {  } = ∅ or { /  } ⊊  ∩ {  }) then
6  ∶=  ∩ {  /  }↓
if  ↑ ∩ {  } = { /  } then
if  = ∅ then</p>
        <p>∶= (∖{  }) ∪ { /  }
else
if  =  then</p>
        <p>∶=  ∪ {  /  }
else
if  ∩   =  ↑ then</p>
        <p>∶=  ∪ {(, , )}
16 ℂ ∶= ℂ ∪ {(, )}
17 for (, , ) ∈  do
18  ∶=  ∪ {   /  }
19 InClose4b_ChildConcepts( ,  ,  ,  , ℂ)
algorithm. Fortunately, this occurs only once and it is the extent ∅, in the case it is indeed an
extent. This is a small price to pay and it is solved in Algorithm 3, lines 3 and 4, where a direct
check on (∅,  ) being a formal concept is made and, if it is, it is stored in ℂ.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. An example</title>
      <p>
        In this section, we present an example of the implementation of the fuzzy versions
FuzzyInClose2, FuzzyInClose4a and FuzzyInClose4b. Due to space restrictions, we
cannot present the complete trace of the execution of these algorithms. However, we have chosen
to present this trace in graphical form, in order to be able to check the diferent steps followed
by each of these algorithms. For this work, we have implemented the algorithms using the
functionalities provided by the fcaR package [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] in the R programming language and used
those implementations for the example in this section.
      </p>
      <p>In this example, we consider the formal context of Table 1, where the set of grades for
the attributes  = {, , , , } is  = {0, 1/2, 1}. It is not a large context in order to make the
execution graphs legible.</p>
      <p>The first of the tested versions is FuzzyInClose2. In Figure 1, we can check the order in
which the extent intersections are computed in this algorithm. Starting with ∅, the first level
of recursion (intersection of  with all attribute extents) is carried out from left to right, in
the attribute order defined in the previous section. We have used a colour code to indicate the
possible situations that can occur when checking a given node: a red box indicates that the
canonicity test has failed at that point; a light orange box indicates that the partial canonicity
test is not passed; and a grey box appears when parent and child nodes have the same extent, so
the intent of the parent is updated. Once the whole level has been checked, we start to develop
the branches in the next phase of the recursion, going through the nodes from left to right. So,
under the node labelled {} , we start to develop its branch, following exactly the same procedure
as before: we have to go through all the attributes/degrees starting from the attribute {} , and
then develop the leftmost branch that is not developed at that moment. Repeating the process,
we arrive at 5 levels of recursion for the calculation of all concepts.</p>
      <p>The execution graphs for FuzzyInClose4a and FuzzyInClose4b, which take into account
the occurrence of empty intersections at each level of recursion of the algorithm, are presented
in Figure 2 below. These empty intersections are inherited downwards in the branches arising
from that level of recursion, and allow to reduce the number of operations to be performed, as
well as the depth of the recursion. The same colour code is used as in Figure 1, adding the blue
boxes to represent iterations where an empty extent was found.</p>
      <p>As can be seen, there is no great diference, at least in this example, between the two proposals,
although there is a clear reduction in the computational load with respect to our baseline of
comparison, the FuzzyInClose2 method. We can see that, instead of 5 levels of recursion, in
the FuzzyInClose4 family, only 4 appear. Due to the diferent characteristics of both methods,
it is to be expected that in larger contexts diferences will appear and that, probably, they will
be in favour of the FuzzyInClose4b variant, since it makes a greater pruning in the exploration
of the graph of intersections of extents.</p>
      <p>Finally, we present in Table 2 a quantitative comparison of the number of operations carried
out by each algorithm. We will only count computationally expensive operations: partial
canonicity tests, i.e., checks of  ↑ ∩ {  } = { /  }; complete canonicity tests, as in the binary case,
on the equality  ∩   =  ↑ ; and the number of attribute intents computed and the number of
intersections of extents. In this table we show the number of such operations for each algorithm.</p>
      <p>In the table, diferent facts can be observed. On the one hand, looking at the #Extents column,
we can see how versions 4a and 4b of the algorithm build smaller execution graphs, since the
number of intersections coincides with the number of nodes explored in the execution of the
graph. On the other hand, although the execution graph is the same for versions 4a and 4b, the
diferent strategy for exploiting empty intersections produces a clear reduction in the number
of operations to be carried out, since fewer tests, both partial and complete, are checked. Thus,
the exploration carried out by FuzzyInClose4b is more eficient and, for larger contexts, could
be the fastest of the 3 algorithms.</p>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusions and future work</title>
      <p>The concept lattice is a fundamental way of representing the knowledge implicit in the context.
In the literature, several algorithms, using diferent approaches, have been proposed for the
computation of the lattice in the classical framework. In this paper some of the extensions of
these algorithms to the fuzzy framework have been introduced. These algorithms are of the
family of InClose. After a brief explanation of the code, an example was shown to illustrate
the trace of the diferent approaches. Lastly, the algorithms are compared taking into account
runtime, number of test calculations and number of extents computed.</p>
      <p>As a future work, we devise to study several optimisations to the InClose4 family, taking
advantage of the structure of the degrees in  . The aim of the possible optimisations will
be to reduce the number of computations both of intents and extents, hence reducing the
computational cost of the algorithm.</p>
      <p>Furthermore, we aim to explore generalisations of other algorithms, such as the FastCbO
family or the NextNeighbour or NextPriorityConcept, for the fuzzy setting, along with diferent
optimisations that could alleviate the greater computational cost when compared to the binary
case. We want to perform a thorough comparison between the diferent versions of the
algorithms in terms of execution time and the number of computations required to compute the
fuzzy concept lattice. We expect to incorporate the implementation of all algorithms for lattice
computation in the fuzzy framework into the above-mentioned fcaR package.</p>
      <p>Other research line for future works will study the extension of the provided algorithms to
compute the canonical basis of implications in this fuzzy setting. It has already been proved
that, in the binary case, CbO-like algorithms can be modified to provide such a basis. We aim to
extend the fuzzy versions of the algorithms to compute the basis.</p>
    </sec>
    <sec id="sec-6">
      <title>Acknowledgments</title>
      <p>This work has been partially supported by the Ministerio de Ciencia, Innovación y
Universidades [FPU19/01467, TIN2017-89023-P, PGC2018-095869-B-I00] and the Junta de Andalucía
[UMA2018‐FEDERJA‐001].</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>R.</given-names>
            <surname>Wille</surname>
          </string-name>
          ,
          <article-title>Restructuring lattice theory: An approach based on hierarchies of concepts</article-title>
          ,
          <source>in: I. Rival (Ed.)</source>
          ,
          <source>Ordered Sets</source>
          , Springer Netherlands, Dordrecht,
          <year>1982</year>
          , pp.
          <fpage>445</fpage>
          -
          <lpage>470</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>B.</given-names>
            <surname>Ganter</surname>
          </string-name>
          ,
          <article-title>Two basic algorithms in concept analysis</article-title>
          ,
          <year>1984</year>
          .
          <fpage>FB4</fpage>
          -Preprint 831. Darmstadt, Germany: Technische Hochschule Darmstadt.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>H. E.</given-names>
            <surname>Salman</surname>
          </string-name>
          ,
          <article-title>Feature-based insight for forks in social coding platforms</article-title>
          ,
          <source>Information and Software Technology</source>
          <volume>140</volume>
          (
          <year>2021</year>
          )
          <fpage>106679</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>P.</given-names>
            <surname>Cordero</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Enciso</surname>
          </string-name>
          , Á. Mora,
          <string-name>
            <given-names>M.</given-names>
            <surname>Ojeda-Aciego</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Rossi</surname>
          </string-name>
          ,
          <article-title>A formal concept analysis approach to cooperative conversational recommendation</article-title>
          ,
          <source>Int.Journal of Computational Intelligence Systems</source>
          <volume>13</volume>
          (
          <year>2020</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>G.</given-names>
            <surname>Chemmalar Selvi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. G.</given-names>
            <surname>Lakshmi</surname>
          </string-name>
          <string-name>
            <surname>Priya</surname>
          </string-name>
          ,
          <article-title>Rating prediction method for item-based collaborative filtering recommender systems using formal concept analysis</article-title>
          ,
          <source>EAI Endorsed Transactions on Energy Web</source>
          <volume>8</volume>
          (
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>F.</given-names>
            <surname>Zheng</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Cui</surname>
          </string-name>
          ,
          <article-title>A lexical-based formal concept analysis method to identify missing concepts in the NCI thesaurus</article-title>
          , in: Proceedings - 2020
          <source>IEEE International Conference on Bioinformatics and Biomedicine</source>
          ,
          <string-name>
            <surname>BIBM</surname>
          </string-name>
          <year>2020</year>
          ,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>P.</given-names>
            <surname>Cordero</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Enciso</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>López</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mora</surname>
          </string-name>
          ,
          <article-title>A conversational recommender system for diagnosis using fuzzy rules</article-title>
          ,
          <source>Expert Systems with Applications</source>
          <volume>154</volume>
          (
          <year>2020</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>U.</given-names>
            <surname>Priss</surname>
          </string-name>
          ,
          <article-title>A preliminary semiotic-conceptual analysis of a learning management system</article-title>
          ,
          <source>in: Procedia Computer Science</source>
          , volume
          <volume>176</volume>
          ,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>M.</given-names>
            <surname>Ojeda-Hernández</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Pérez-Gámez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Á. Mora</given-names>
            <surname>Bonilla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>López-Rodríguez</surname>
          </string-name>
          ,
          <article-title>Using logic to determine key items in math education</article-title>
          , in: 15th International Conference e-Learning,
          <year>EL 2021</year>
          ,
          <year>2021</year>
          , pp.
          <fpage>62</fpage>
          -
          <lpage>69</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>B.</given-names>
            <surname>Ganter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Obiedkov</surname>
          </string-name>
          , Conceptual Exploration, Springer Berlin Heidelberg,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>S. O.</given-names>
            <surname>Kuznetsov</surname>
          </string-name>
          ,
          <article-title>Interpretation on graphs and complexity characteristics of a search for specific patterns</article-title>
          ,
          <source>Automatic Documentation and Mathematical Linguistics</source>
          <volume>24</volume>
          (
          <year>1989</year>
          )
          <fpage>37</fpage>
          -
          <lpage>45</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>S.</given-names>
            <surname>Kuznetsov</surname>
          </string-name>
          ,
          <article-title>A fast algorithm for computing all intersections of objects in a finite semilattice</article-title>
          ,
          <source>Automatic Documentation and Mathematical Linguistics</source>
          <volume>27</volume>
          (
          <year>1993</year>
          )
          <fpage>11</fpage>
          -
          <lpage>21</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>P.</given-names>
            <surname>Krajca</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Outrata</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Vychodil</surname>
          </string-name>
          ,
          <article-title>Advances in algorithms based on CbO</article-title>
          , in: CLA, volume
          <volume>672</volume>
          ,
          <string-name>
            <surname>Citeseer</surname>
          </string-name>
          ,
          <year>2010</year>
          , pp.
          <fpage>325</fpage>
          -
          <lpage>337</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>J.</given-names>
            <surname>Outrata</surname>
          </string-name>
          ,
          <article-title>A lattice-free concept lattice update algorithm based on* CbO.</article-title>
          , in: CLA, volume
          <year>2013</year>
          , Citeseer,
          <year>2013</year>
          , pp.
          <fpage>261</fpage>
          -
          <lpage>274</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>S.</given-names>
            <surname>Andrews</surname>
          </string-name>
          ,
          <article-title>Making use of empty intersections to improve the performance of CbO-type algorithms</article-title>
          ,
          <source>in: In.Conference on Formal Concept Analysis</source>
          , Springer,
          <year>2017</year>
          , pp.
          <fpage>56</fpage>
          -
          <lpage>71</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>A.</given-names>
            <surname>Burusco-Juandeaburre</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Fuentes-González</surname>
          </string-name>
          ,
          <article-title>The study of the L-fuzzy concept lattice</article-title>
          .,
          <source>Mathware and Soft Computing</source>
          <volume>1</volume>
          (
          <year>1994</year>
          )
          <fpage>209</fpage>
          -
          <lpage>218</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>R.</given-names>
            <surname>Belohlavek</surname>
          </string-name>
          ,
          <article-title>Fuzzy relational systems: foundations and principles</article-title>
          , volume
          <volume>20</volume>
          ,
          <string-name>
            <surname>Springer</surname>
            <given-names>Science</given-names>
          </string-name>
          &amp; Business
          <string-name>
            <surname>Media</surname>
          </string-name>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>R.</given-names>
            <surname>Belohlavek</surname>
          </string-name>
          ,
          <article-title>Algorithms for fuzzy concept lattices</article-title>
          ,
          <source>in: Int. Conf. on Recent Advances in Soft Computing</source>
          ,
          <year>2002</year>
          , pp.
          <fpage>200</fpage>
          -
          <lpage>205</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>R.</given-names>
            <surname>Belohlavek</surname>
          </string-name>
          , B. De Baets,
          <string-name>
            <given-names>J.</given-names>
            <surname>Outrata</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Vychodil</surname>
          </string-name>
          ,
          <article-title>Lindig's algorithm for concept lattices over graded attributes</article-title>
          ,
          <source>LNCS</source>
          <volume>4617</volume>
          (
          <year>2007</year>
          )
          <fpage>156</fpage>
          -
          <lpage>167</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>E. M.</given-names>
            <surname>Norris</surname>
          </string-name>
          ,
          <article-title>An algorithm for computing the maximal rectangles in a binary relation</article-title>
          ,
          <source>Revue Roumaine de Mathématiques Pures et Appliquées</source>
          <volume>23</volume>
          (
          <year>1978</year>
          )
          <fpage>243</fpage>
          -
          <lpage>250</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>D.</given-names>
            <surname>López-Rodríguez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mora</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Domínguez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Villalón</surname>
          </string-name>
          , I. Johnson, fcaR:
          <source>Formal Concept Analysis</source>
          ,
          <year>2020</year>
          . URL: https://cran.r-project.org/package=fcaR.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>