# Pack trill, problem with sub\_class and prob\_sub\_class

**URL:** <https://swi-prolog.discourse.group/t/pack-trill-problem-with-sub-class-and-prob-sub-class/5229>\
**Category:** Pack\
**Created:** [April 6, 2022, 3:45pm UTC](https://swi-prolog.discourse.group/t/pack-trill-problem-with-sub-class-and-prob-sub-class/5229 "2022-04-06T15:45:39Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Frank\_Schwidom](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/frank_schwidom/32/7662_2.png) [@Frank\_Schwidom](https://swi-prolog.discourse.group/u/Frank_Schwidom)\
**Post date:** [April 6, 2022, 3:45pm UTC](https://swi-prolog.discourse.group/t/pack-trill-problem-with-sub-class-and-prob-sub-class/5229/1 "2022-04-06T15:45:39Z")

</div>

swipl 8.4.2, trill 6.0.2

Hi, in the example donvito.pl is defined:

```prolog
:-use_module(library(trill)).

:- trill. % or :- trillp. or :- tornado.

/** <examples>

?- prob_instanceOf(goodPerson,donVito,Prob).

*/

classAssertion(cat, tom).
propertyAssertion(hasPet, donVito, tom).
subClassOf(cat, pet).
subClassOf(someValuesFrom(hasAnimal, pet), natureLover).
subClassOf(natureLover,goodPerson).
subPropertyOf(hasPet,hasAnimal).

annotationAssertion('disponte:probability',subClassOf(natureLover,goodPerson),literal('0.2')).

```

and I can ask:

```prolog

(ins)?- sub_class(cat, pet).
true.

(ins)?- sub_class(cat, pet, Explanation).
Explanation = [subClassOf(cat, pet)] ;
false.

(ins)?- prob_sub_class(cat, pet, Prob).
Prob = 1.0.

```

So far so good.

But in the example commander.pl :

```prolog
:-use_module(library(trill)).

:- trill. % or :- trillp. or :- tornado.

/** <examples>

?- instanceOf(commander,john,Expl).

*/
subClassOf(allValuesFrom(commands,soldier),commander).
classAssertion(guard,pete).
classAssertion(guard,al).
classAssertion(allValuesFrom(commands,guard),john).
equivalentClasses([guard,soldier]).
subPropertyOf(commands,commands1).

```

I can ask :

```prolog
(ins)?- sub_class(allValuesFrom(commands,soldier),commander).
true.

(cmd)?- sub_class(soldier,commander).
true.

(ins)?- sub_class(commands,commander).
true.

(ins)?- sub_class(allValuesFrom(commands,soldier),commander, Explanation).
Explanation = [subClassOf(allValuesFrom(commands, soldier), commander)] ;
false.

(cmd)?- sub_class(commands,commander, Explanation).
false. % wrong?

(ins)?- sub_class(soldier,commander, Explanation). 
false. % wrong?

(ins)?- prob_sub_class(allValuesFrom(commands,soldier),commander, Prob).
Prob = 1.0.

(cmd)?- prob_sub_class(commands,commander, Prob).
Prob = 0.0. % wrong?

(ins)?- prob_sub_class(soldier,commander, Prob).
Prob = 0.0. % wrong?

```

Tthe same in : review\_example.pl

```prolog

:- use_module(library(trill)).

:- trill.

subClassOf(a,f).
subClassOf(f,b).

subClassOf(a,unionOf([b,c,d])).
subClassOf(a,minCardinality(5,r)).
subClassOf(c,maxCardinality(4,r)).
subClassOf(d,maxCardinality(3,r)).

% query: sub_class(a,b).

```

I can ask:

```prolog

(cmd)?- sub_class(a, d).
true.

(ins)?- sub_class(a, unionOf([b,c,d])).
true.

(ins)?- sub_class(a, unionOf([b,c,d]), E).
E = [subClassOf(a, unionOf([b, c, d]))] ;
E = [subClassOf(a, f), subClassOf(f, b)] ; % 1 term missing
false.

(cmd)?- sub_class(a, d, E).
false. % wrong ?

(cmd)?- sub_class(a, b, E).
E = [subClassOf(a, f), subClassOf(f, b)] ;
false.

(ins)?- prob_sub_class(a, b, P).
P = 1.0.

(ins)?- prob_sub_class(a, unionOf([b,c,d]), P).
P = 1.0.

(cmd)?- prob_sub_class(a, d, P).
P = 0.0. % wrong?

```

And you can see some unexpected answers.  
Is that a bug?

Regards,  
Frank.

---

<div class="post-metadata">

**Author:** ![zsercr](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/zsercr/32/4329_2.png) [@zsercr](https://swi-prolog.discourse.group/u/zsercr)\
**Post date:** [April 7, 2022, 11:32am UTC](https://swi-prolog.discourse.group/t/pack-trill-problem-with-sub-class-and-prob-sub-class/5229/2 "2022-04-07T11:32:57Z")

</div>

Dear Frank,  
yes, there was a small bug. It should now work correctly.  
Note also that the query

```prolog
sub_class(commands,commander).

```

is wrong because commands is an object property, not a class. TRILL did not control these problems in detail. I should now have better implemented the method that checks the validity of the query, so TRILL should no longer allow queries containing such errors to be executed.

Please let me know if you find any other problems or if you experience anything strange. I will be very happy to fix it.

Kind regards  
Riccardo
