text: 1. Primitive classes. These are classes that are defined by conditions that are*necessary*(but not 
  sufficient) to hold for any individuals that are instances of that class or its subclasses. The 
  condition may be as simple as:*Class A is a subclass of class B*. To start with we will define 
  primitive classes first and then defined classes. When the reasoner encounters an individual that is 
  an instance of a primitive class it infers that all the conditions defined for that class must hold for 
  that individual. 
  
  2. Defined classes. These are classes that are defined by both*necessary*and*sufficient*conditions. 
  When the reasoner encounters an individual that satisfies all the conditions for a defined class it 
  will make the inference that the individual is an instance of that class. The reasoner can also use 
  the conditions defined on classes to change the class hierarchy, e.g., to infer that*Class A is a*
  *subclass of Class B*. We will see examples of this later in the tutorial. 
  
  3. Anonymous classes. These are classes that you won’t encounter much and that won’t be 
  
  discussed much in this tutorial, but it is good to know about them. They are created by the 
  reasoner when you use class expressions. For example, if you define the range of a property to be 
  PizzaTopping or PizzaBase then the reasoner will create an anonymous class representing 
  the intersection of those two classes. 