Incomplete Information

[Adapted from: Sousa, P.; Ramos, C. and Neves, J. (1999), Manufacturing Entities with Incomplete Information. Proceedings of the 2nd International Workshop on Intelligent Manufacturing Systems (IMS-Europe'99), pp. 185-193. Leuven, Belgium, 22-24 September 1999]

Considering the Logic Programming framework, a question ?P to the database can be proved or not (thus being true or false). However, classic logic programming is based on some assumptions that impose limitations to the kind of information processing necessary in order to handle incomplete data. Some of these assumptions are:

Real systems, however, do not work on these assumptions, and can greatly benefice from approaches that turn around these limitations. By adding the ability to handle incomplete information, a system's database can better describe the real world.

Another point of action is the representation of explicit negative information. Instead of relying in the closed-world assumption (i.e., everything not known is false), the knowledge of something being false must explicitly be represented into the database. Thus, the database has two parts of knowledge: what is known to be true, and what is known to be false. Everything else is unknown.

In Logic Programming this can be seen as:

demo(P, true) ¬ P
demo(P, false) ¬ ØP
demo(P, unknown)

Where P is the goal to be proven and Ø stands for 'explicit negation'. However, there are cases where the closed-world assumption makes sense, e.g., a Order Management program can assume that if a order is not in the system, then it does not exist (i.e., is false and not unknown).

Incomplete Information in Manufacturing

In the manufacturing case, there are several situations where the whole information needed by the system is unavailable, e.g., a customer's order doesn't completely state the product's attributes (color, etc.). Instead of considering this as a malformed input and ignore it, the system can use it to guide its decision given the fact the information available is of confidence. I.e., in the previous example of an incomplete customer order, the customer really wants to place the order and will define the color and other missing attributes later on.

Although this information is not completely defined, and thus is impossible to really use it, its existence can be of more use than if it was not there. In a scenario of manufacturing scheduling, it is not possible to allocate the task and the complete list of materials for an incomplete order. However, it is possible to make a "low-commitment" reservation for that task and materials based on average duration and statistics data of which materials are used more often.

Represented cases

Explicit negative knowledge

% order(Id, Customer, Due_Date, Details)
 
negation(order(_, mrSmith, _, [detail(_, _, sweater_ref304)])

Closed World

negation(order(Id, Customer, Due_Date, Details)) :-
        \+ order(Id, Customer, Due_Date, Details)

Null values

% order(Id, Customer, Due_Date, Details)
 
order(202, someone, ‘22-05-1999’, [detail(20, unit, sweater_ref304)])
 
null(someone)
 
exception_null(order(N, _, D, Detail)) :-
        order(Number, C, D, Detail),
        null(C)

Null values of a possible set

% order(Id, Customer, Due_Date, Details)
 
exception_set(order(305, mrCarl, [detail(10, unit, shirt_ref10a)]))
 
exception_set(order(305, mrCarl, [detail(10, unit, shirt_ref10b)]))

Prohibited values

% customer(Id, Name, ABC_Ranking, Country_of_Origin)
 
null_n_allowed(customer(C, N, R, nerd_land))
 
null_n_allowed(on_top(Object, Package)) :- 
        length(Package, 7)

Reasoning Mechanism

demo(Q, true) :- 
        Q, 
        \+ exception_null(Q)
 
demo(Q, unknown) :- 
        exception_null(Q)
 
demo(Q, unknown) :-    
        exception_set(Q)
 
demo(Q, not_allowed) :- 
        null_n_allowed(Q)
 
demo(Q, false) :- 
        negation(Q), 
        \+ exception_set(Q)
 
demo(_, unknown)

Sample questions

Null value

?- demo(order(202, mrSmith, _, _), T)
T = unknown

Null value of possible set & closed world

?- demo(order(305, mrCarl, [detail(10, unit, shirt_ref10a)]), T)
T = unknown
 
?- demo(order(305, mrBill, [detail(10, unit, shirt_ref10a)]), T)
T = false

Prohibited values

?- demo(customer(202, mrBigNerd, 100, nerd_land), T)
T = not_allowed

(c) 1999, Paulo Sousa
comments
Created: December 13th, 1999
Last updated: December 13th 1999