I am new to owl. I read an Universal Quantification example in this page http://dior.ics.muni.cz/~makub/owl/ .
If I replace "Person SubClassOf hasParent max 2 thing" by "Person SubClassOf hasParent max 2 Person" and run the reasoner, I think individual Ivan would fall into the class Czech too. But actually it's not. I test it in Protege 4.3 and run the built-in reasoner FaCT++.
What details did I miss?
The problem here that your new restriction is too permissive. Your new axiom actually say that Person can have at most 2 (parents that are Person). It doesn't prevent Person from having other parents, that are non-Person.
The example will work again if you enforce all parents to be of a class Person, e.g by setting Range of hasParent to Person, or adding an axiom Person SubClassOf hasParent only Person