Home

About

Me

Project List

Mail me

Last update: 2012-05-07

FCA Workbench - Formal Concept Analysis Workbench

Abstract

FCA Workbench is intended to be a (universal) tool for people engaged in the field of formal concept analysis (FCA). It allows to edit formal contexts and display the corresponding line diagram (concept lattice) in real-time as you go along. Furthermore the program comes with a programming language that combines logical and functional programming.

This is work in progress.

Status

(Almost) Done

The software is still in progress. The following features are implemented:

In Progress/To be Done

How the Programming Language Looks Like

Facts

This
    > ostrich, eagle, finch isA bird.
    > ostrich, eagle, finch can fly.
    > ostrich, eagle, finch has feather.
    > bat can fly.
defines three formal contexts isA, can and has that look like this:
    (isA)   bird    (can)   fly    (has)   feather
    ostrich X       ostrich X      ostrich X
    eagle   X       eagle   X      eagle   X
    finch   X       finch   X      finch   X
                    bat     X
They have only one attribute for ease of use. Of course the contexts could have as many attributes as required.

Queries

Data can now be queried from the contexts defines above:
    > <which animal> has feather && <which animal> can fly?
    <which animal>=eagle can fly.
    <which animal>=finch can fly.
    <which animal>=ostrich can fly.
    <which animal>=eagle has feather.
    <which animal>=finch has feather.
    <which animal>=ostrich has feather.

Rules

Rules are used to define (derived) contexts:
    > anton fatherOf peter, paul, mary.
    > jack fatherOf anton, joe.
    > <x> grandfatherOf <y> <- <x> fatherOf <z> && <z> fatherOf <y>.
    > <who> grandfatherOf <whom>?
    <who>=jack grandfatherOf <whom>=peter.
    <who>=jack grandfatherOf <whom>=paul.
    <who>=jack grandfatherOf <whom>=mary.

Functions

Define yourself a function:
    > fib: integer --> integer :=
      0       |-> 0;
      1       |-> 1;
      <x> > 1 |-> fib(<x> - 1) + fib(<x> - 2).
    > fib(10)?
    55
You can also define prefix, infix and postfix operators. Infix operators can have different rank and associativity. Additionally the language provides pattern matching. (Please note that boolean is a built-in type and that ∧ (&&), ∨ (||) and ¬ (!) operators are predefined. Actually there is no necessity to define that operators below.):
    > @infixl multiplicative
      /\ : boolean, boolean --> boolean :=
          true, true |-> true;
          <x>, <y>   |-> false.

    > @infixl additive
      \/ : boolean, boolean --> boolean :=
          true, <y> |-> true;
          <x>, true |-> true;
          <x>, <y>  |-> false.

    > @prefix
      ^ : boolean --> boolean :=
          true  |-> false;
          false |-> true.	

Rules with Functions

If a context is regular, then use functions to describe its content:
    > <o> GE_10 <a> <- {(<o>,<a>) (- [1...10]*[1...10] | <o> >= <a>}.
creates the context:
    (GE_10) 1 2 3 4 5 6 7 8 9 10
     1      X
     2      X X
     3      X X X
     4      X X X X
     5      X X X X X
     6      X X X X X X 
     7      X X X X X X X
     8      X X X X X X X X
     9      X X X X X X X X X
    10      X X X X X X X X X X
Try a more complex function:
    > <x> FIB <fx> <- {(<x>,<fx>) (- [0...10]*[0...55] | <fx> == fib(<x>)}.
This leads to creation of the context:
    (FIB)  0  1  2  3  5  8 13 21 34 55
    0      X
    1         X
    2         X
    3            X
    4               X
    5                  X
    6                     X
    7                        X
    8                           X
    9                              X
    10                                X

Screen Shots

The Line Diagram Viewer/Editor

The Context/Table Editor

The Interactive Command Line Console

Copyright Statement

FCA Workbench Copyright (C) 2013 Holger Zahnleiter


Disclaimer

The information on this web site and the documents downloadable from here have been carefully reviewed and is believed to be reliable, but I do not assume any liability arising out of the application or use of any documents, programs or circuit described herein.
Furthermore I want to declare that I'm not responsible in any way for the content of other web pages, books and other sources I'm refering to.