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