1 module examples.testdisjointclasses;
2 
3 /*
4 import factpp
5 
6 reasoner = factpp.Reasoner()
7 
8 classes = [
9     reasoner.concept('A'),
10     reasoner.concept('B'),
11     reasoner.concept('C'),
12 ]
13 
14 reasoner.disjoint_concepts(classes)
15 
16 a = reasoner.individual('a')
17 b = reasoner.individual('b')
18 c = reasoner.individual('c')
19 reasoner.instance_of(a, classes[0])
20 
21 print('a is A, consistency:', reasoner.is_consistent())
22 
23 # inconsistent, b is both instance of class B and C, but B and C are
24 # disjoint
25 reasoner.instance_of(b, classes[1])
26 reasoner.instance_of(b, classes[2])
27 print('b is B and b is C, consistency:', reasoner.is_consistent())
28 
29 # vim: sw=4:et:ai
30 */
31 
32 unittest {
33   import std.stdio;
34   import fact;
35   
36   writeln("Test disjoint-classes");
37   auto reasoner = fact_reasoning_kernel_new();
38 
39   auto clsA = reasoner.fact_concept("A");
40   auto clsB = reasoner.fact_concept("B");
41   auto clsC = reasoner.fact_concept("C");
42   
43   //reasoner.fact_disjoint_concepts(classes);
44   reasoner.fact_new_arg_list;
45   reasoner.fact_add_arg(clsA);
46   reasoner.fact_add_arg(clsB);
47   reasoner.fact_add_arg(clsC);
48   reasoner.fact_disjoint_concepts;
49   
50   auto a = reasoner.fact_individual("a");
51   auto b = reasoner.fact_individual("b");
52   auto c = reasoner.fact_individual("c");
53   reasoner.fact_instance_of(a, clsA);
54   
55   assert(reasoner.fact_is_kb_consistent());
56   
57   reasoner.fact_instance_of(b, clsB);
58   reasoner.fact_instance_of(b, clsC);
59   //print('b is B and b is C, consistency:', reasoner.is_consistent())
60   assert(!reasoner.fact_is_kb_consistent());
61 }
62