The inferences related to owl:equivalentClass are incomplete.
Using the following example:
foaf:Person a owl:Class.
:Person a owl:Class.
person:Person a owl:Class.
:P1 a :Person .
:P2 a foaf:Person .
:P3 a person:Person .
:Person owl:equivalentClass person:Person , foaf:Person .
The reasoner does not infer that each instances P1,P2 and P2 are of types :Person, foaf:Person and person:Person.
Digging in the source code, I found out that only one rule is related to equivalentClass (RuleOwlEquivalentClass) stating:
(a owl:equivalentClass b) -> (b owl:equivalentClass a)
The following rules needs to be added in the system to get the proper inference:
( ?c1 owl:equivalentClass ?c2 )(?x a ?c1) => ( ?x a ?c2 )
If you have more questions, please contact me