#Below, in RDFS+OWL/Turle, the part of the Sub Ontology that can be represented via RDFS+OWL/Turtle.
#Sub is fully represented in FL at http://www.webkb.org/kb/it/p_kEvaluation/ontology/sub/sub.fl.html

#This Turtle file tries to mirror the FL file as much as the Turtle syntax permits. Hence:
#1) this file has the same sections as the FL file, although using comments.
#2) seeing the FL representations in another window when reading the Turtle representations below
#   may help understanding these Turtle representations, or conversely.

#since this file uses some types that are further defined via sparql operations,
#  FOR MORE PRECISION, THE PARSING OF THIS FILE SHOULD RATHER BE FOLLOWED BY THE EXECUTION OF
#  (the SPARQL update operations in) THE SPARQL UPDATE FILE DISPLAYED BY
#  http://www.webkb.org/kb/it/o_KR/p_kEvaluation/ontology/sub/sub.rq.html


@prefix     : <http://www.webkb.org/kb/it/p_kEvaluation/ontology/sub/> .
@prefix  sub: <http://www.webkb.org/kb/it/p_kEvaluation/ontology/sub/> .
@prefix  rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix  owl: <http://www.w3.org/2006/12/owl2#> .
@prefix  xsd: <http://www.w3.org/2001/XMLSchema#> .


#Abbreviations used and defined below: 
# :sC relates a class to a strict subclass that is uncomparable but not disjoint to its siblings
#     except for those which are connected by subtype relations or by
#     exclusion relations (and hence already known to be non-equivalent.
#     However, if the above referred SPARQL update operations are not run,
#     :SC is just the inverse of a strict version of owl:subClassOf.
# :sP is the counterpart of SC for properties.
#     Without SPARQL, it is just the inverse of a strict version of owl:subPropertyOf.
# :eqP is equivalent to owl:equivalentProperty.
# :disjP is equivalent to owl:propertyDisjointWith, and :disjC to owl:disjointWith.
# :pC ("partition of class") is equivalent to owl:disjointUnionOf.
# :pP ("partition of properties") is the counterpart of owl:disjointUnionOf for properties.
#     Without SPARQL, it is just the inverse of a strict version of owl:subPropertyOf.
# :cC ("complete set of non-disjoint sub-classes"), a subtype of owl:unionOf.
#     Without SPARQL, it is just an abbreviation for owl:unionOf.
# :cP ("complete set of non-disjoint sub-properties") is the counterpart of :cC for properties.
#     Without SPARQL, it is just the inverse of a strict version of owl:subPropertyOf.
# :eC ("incomplete set of exclusive sub-class") combine :SC and owl:AllDisjointClasses.
#     Without SPARQL, it is just the inverse of a strict version of owl:subClassOf.
# :eP ("incomplete set of exclusive sub-properties") is the counterpart of :eC for properties.
#     Without SPARQL, it is just the inverse of a strict version of owl:subPropertyOf.




#@@@@@@@@@@@@@@@@@@@@@@@@ 1. Basic Types

owl:Thing owl:disjointUnionOf (:Type  :Non-type_thing).
   :Type  owl:disjointUnionOf (rdf:Property rdfs:Class).   rdfs:Class :sC owl:Class.
   :Non-type_thing owl:disjointUnionOf (:Statement  :Individual).

    :Statement  owl:disjointUnionOf (:Named_statement  :Anonymous_statement);
                :sC rdf:statement, :Statement_with_only_one_relation.
               #not with RDF+OWL:  :Statement_with_only_one_relation owl:equivalentProperty :relation.
       
       rdf:statement :sC owl:NegativePropertyAssertion.
       :Named_statement :sC :Statement_named_via_rdfs-label, :Statement_with_id.
         :Statement_named_via_rdfs-label rdf:type owl:Class;
                    owl:equivalentClass [rdf:type owl:Restriction;  owl:onProperty rdfs:label;
                                         owl:someValuesFrom owl:Thing ].

    :Contextualizationt :sC :Contextualizing_value.
            :False rdf:type :Contextualizing_value.
            :True  rdf:type :Contextualizing_value.


#*********************** 1.1. Some Top-Level Basic Relation Types

owl:topObjectProperty  # :eqP :binary_relation;  #not with RDF+OWL
  :pP (owl:sameAs  owl:differentFrom);  :pP (:equivalent  :non-equivalent);
  :sP :definition_or_semantic_generalization_or_specialization_or_comparability,
      :extended_part_or_part-of,  :relation_equivalent_to_a_CN_query .
      #each of these subtypes is specialized in a next (sub-)section


   owl:differentFrom :pP (:different_but_equivalent :different_and_non-equivalent).


   :equivalent
     rdfs:label "<==>"^^xsd:string;  #just a name/label in RDFS/Turtle; in FL, also an identifier
     :pP (:equivalent_type  :equivalent_non-type_thing); 
     :pP (owl:sameAs  :different_but_equivalent).
                      :different_but_equivalent rdfs:label "!<==>"^^xsd:string.

      :equivalent_type
        :pP (:equivalent_property  :equivalent_class).
             :equivalent_property  owl:equivalentProperty  :eqP, owl:equivalentProperty.
             :equivalent_class     owl:equivalentProperty  :eqC, owl:equivalentClass.

      :equivalent_non-type_thing  :pP (:equivalent_statement  :equivalent_individual ).

         :equivalent_statement  rdfs:label "<=>"^^xsd:string;
            rdfs:domain :Statement;   rdfs:range :Statement.


   :non-equivalent  rdfs:label "!<==>"^^xsd:string;
     :sP :non-equivalent_nor_entailing.

      :non-equivalent_nor_entailing :disjP :extended-entailed_thing_or_equivalent;
        :pP (:non-equivalent_type :non-equivalent_non-type_thing);
        :sP :non-equivalent_nor_exclusive_things,
            :strict_semantic_generalization_or_specialization,
            :strict_extended_part_or_part-of,  :contextualizing-or-negating_relation.
            #each of these subtypes is specialized in a next (sub-)section

         :non-equivalent_type :pP (:non-equivalent_property  :non-equivalent_class).

            :non-equivalent_property
              :pP (owl:propertyDisjointWith  :non-equivalent_nor_exclusive_property).
                                  :non-equivalent_nor_exclusive_property 
                                    :eqP :neP, :not-disjoint_and_not-equivalent_class.

            :non-equivalent_class
              :pP (owl:disjointWith  :non-equivalent_nor_exclusive_class);
              :sP :non-equivalent_nor_subClassOf.

               :non-equivalent_nor_exclusive_class :eqC :neC.

               :non-equivalent_nor_subClassOf  rdfs:domain rdfs:Class; rdfs:range rdfs:Class;
                 :disjP rdfs:subClassOf.


         :non-equivalent_things
           :pP (:non-equivalent_exclusive_things  :non-equivalent_nor_exclusive_things).

            :non-equivalent_exclusive_things :sP sub:counted-contextualizing-relation-types.
              :counted-contextualizing-relation-types rdfs:domain rdf:Statement;  rdfs:range :List;
                                                      :sP :mandatory-contextualizing-relation-types.

            :non-equivalent_nor_exclusive_things :eqP :neTs;
              :pP (:non-equivalent_nor_exclusive_types  :non-equivalent_nor_exclusive_non-types).

               :non-equivalent_nor_exclusive_types  rdfs:domain :Type;  rdfs:range :List;
                :pP (:non-equivalent_nor_exclusive_classes  :non-equivalent_nor_exclusive_properties).

                 :non-equivalent_nor_exclusive_classes  rdfs:domain rdfs:Class;  rdfs:range :List;
                   :eqP :neCs.                                              #:neCs defined via SPARQL

                 :non-equivalent_nor_exclusive_properties rdfs:domain rdf:Property;  rdfs:range :List;
                   :eqP :nePs.                                              #:nePs defined via SPARQL



#************************ 1.2. Generalization, Specialization, Comparability And Definitions

:definition_or_semantic_generalization_or_specialization_or_comparability
  :sP :semantic_generalization_or_equivalent,
      :semantic_specialization_or_equivalent;
  :pP (:object_not_known_to_be_comparable_or_uncomparable_via_extended-entailment
       :object_known_to_be_comparable_or_uncomparable_via_extended-entailment);
  :pP (:object_not_known_to_be_SUP-comparable-or-uncomparable_via_extended-entailment
       :object_known_to_be_SUP-comparable-or-uncomparable_via_extended-entailment).
      

   :semantic_generalization_or_equivalent
     :pP (:equivalent  :strict_semantic_generalization);
     :cP (:type_or_equivalent  :semantic_core-generalization_or_equivalent).

      :strict_semantic_generalization   
        :eP (:type :strict_extended-entailed_thing). #specialized in the next subsection
             :type owl:inverseOf :instance.

      :type_or_equivalent  :eqP rdf:type;  #e.g.: owl:Class rdf:type owl:Class
        :pP (:equivalent_type :type).

      :semantic_core-generalization_or_equivalent :sP :extended-entailed_thing_or_equivalent.
        
         :extended-entailed_thing_or_equivalent  rdfs:label "==>"^^xsd:string;
           :pP (:equivalent  :strict_extended-entailed_thing);
           :eP (:supertype_or_equivalent  :entailed_statement_or_equivalent
                :superIndividual_or_equivalent).

            :supertype_or_equivalent :eqP :supertype;
              :pP (:equivalent_type  :strict_supertype);  
              :pP (:superProperty_or_equivalent  :superClass_or_equivalent).

               :superProperty_or_equivalent  :eqP owl:subPropertyOf;
                 :pP (:equivalent_property  :strict_superProperty).

               :superClass_or_equivalent 
                 :eqP rdfs:subClassOf; #e.g.: owl:Class rdfs:subClassOf owl:Class
                 :pP (:equivalent_class  :strict_superClass).
                           
            :entailed_statement_or_equivalent  rdfs:label "=>"^^xsd:string;
              :pP (:equivalent_statement  :strict_entailed_statement);
              :sP :owl2_implication.

            :superIndividual_or_equivalent
              :pP (:equivalent_individual  :strict_superIndividual).


  :semantic_specialization_or_equivalent
    owl:inverseOf  :semantic_generalization_or_equivalent;
    :pP (:equivalent  :strict_semantic_specialization);
    :sP :semantic_core-specialization_or_equivalent.

     :strict_semantic_specialization :eP (:instance  :strict_extended-entailed-by_thing).
                                          :instance owl:inverseOf :type.

     :semantic_core-specialization_or_equivalent 
       owl:inverseOf :semantic_core-generalization_or_equivalent;
       :sP :extended-entailed-by_thing_or_equivalent.

        :extended-entailed-by_thing_or_equivalent  rdfs:label ">="^^xsd:string;
          :pP (:equivalent  :strict_extended-entailed-by_thing);
          :eP (:entailed-by_statement_or_equivalent  :subIndividual_or_equivalent
               :subtype_or_equivalent  :subtypes_or_equivalent-types).

           :entailed-by_statement_or_equivalent
             :pP (:equivalent_statement  :strict_entailed-by_statement).

           :subIndividual_or_equivalent 
             :pP (:equivalent_individual  :strict_subIndividual).

           :subtype_or_equivalent :eqP :subtype;
             owl:inverseOf :supertype_or_equivalent;
             :pP (:equivalent_type  :strict_subtype);
             :pP (:subProperty_or_equivalent  :subClass_or_equivalent).

              :subProperty_or_equivalent :eqP :subProperty :superPropertyOf;
                owl:inverseOf :superProperty_or_equivalent;
                :pP (:equivalent_property  :strict_subProperty).

              :subClass_or_equivalent :eqP :subClass, :superClassOf;
                owl:inverseOf :superClass_or_equivalent;
                :pP (:equivalent_class  :strict_subClass).

           :subtypes_or_equivalent-types rdfs:domain :Type;  rdfs:range :List;
             :sP :complete_set_of_subtypes, :strict_subtypes. #details in next subsection

              :complete_set_of_subtypes
                :pP (:complete_set_of_subClasses  :complete_set_of_subProperties).

                 :complete_set_of_subClasses :eqP :uoC, owl:unionOf;
                   :sP :complete_set_of_strict_subClasses.

                 :complete_set_of_subProperties :eqP :uoP;      #uoP defined via SPARQL
                   :sP :complete_set_of_strict_subProperties.



   :object_known_to_be_comparable_or_uncomparable_via_extended-entailment
     :eqP :object_known_to_be_comparable_or_uncomparable;
     :pP (:comparable_via_extended-entailment
          :not_known_to_be_comparable_or_uncomparable_via_extended-entailment
          :uncomparable_via_extended-entailment);
     :pP (:type_known_to_be_comparable_or_uncomparable
          :non-type_known_to_be_comparable_or_uncomparable).

      :comparable_via_extended-entailment
        :pP (:equivalent :strict_generalization :strict_specialization);
        :sP :comparable_class.
            :comparable_class  rdfs:domain rdfs:Class;  rdfs:range rdfs:Class.
   
      :uncomparable_via_extended-entailment
        :pP (:extended-entailment_exclusion
             :known_to_be_uncomparable_but_not_exclusive_via_extended-entailment);
        :pP (:uncomparable_type  :uncomparable_non-type).
   
         :known_to_be_uncomparable_but_not_exclusive_via_extended-entailment
           :sP :uncomparable_but_not_disjoint.
   
            :uncomparable-but-not-disjoint_type  rdfs:domain :Type; rdfs:range :Type;
              :sP :uncomparable-but-not-disjoint_class.
   
               :uncomparable-but-not-disjoint_class  rdfs:domain rdfs:Class; rdfs:range rdfs:Class;
                 :disjP owl:disjointWith.
   
         :uncomparable_type  rdfs:domain :Type; rdfs:range :Type;
           :sP :uncomparable_class.
               :uncomparable_class  rdfs:domain rdfs:Class;  rdfs:range rdfs:Class;
                 :sP :uncomparable-but-not-disjoint_class.
   
      :type_known_to_be_comparable_or_uncomparable  rdfs:domain :Type; rdfs:range :Type;
        :pP (:class_known_to_be_comparable_or_uncomparable 
             :property_known_to_be_comparable_or_uncomparable).

         :class_known_to_be_comparable_or_uncomparable
           rdfs:domain rdfs:Class; rdfs:range rdfs:Class.


   :object_known_to_be_SUP-comparable-or-uncomparable_via_extended-entailment
     :eqP :object_known_to_be_SUP-comparable_or_SUP-uncomparable;
     :sP :object_known_to_be_comparable_or_uncomparable_via_extended-entailment;
     :pP (:SUP-comparable_via_extended-entailment
          :not_known_to_be_SUP-comparable-or-uncomparable_via_extended-entailment
          :SUP-uncomparable_via_extended-entailment);
     :pP (:type_known_to_be_SUP-comparable-or-uncomparable
          :non-type_known_to_be_SUP-comparable-or-uncomparable).

      :SUP-comparable_via_extended-entailment
        :pP (:equivalent :strict_generalization);
        :sP :SUP-comparable_class, :comparable_via_extended-entailment.
            :SUP-comparable_class  rdfs:domain rdfs:Class;  rdfs:range rdfs:Class.

      :SUP-uncomparable_via_extended-entailment
        :pP (:SUP-uncomparable_type  :SUP-uncomparable_non-type);
        :sP :uncomparable_via_extended-entailment .

         :SUP-uncomparable_type  rdfs:domain :Type; rdfs:range :Type;
           :sP :SUP-uncomparable_class.
               :SUP-uncomparable_class  rdfs:domain rdfs:Class;  rdfs:range rdfs:Class;
                 :eqP :non-equivalent_class_nor_subClassOf;
                 :sP  :SUP-uncomparable-but-not-disjoint_class.

      :type_known_to_be_SUP-comparable-or-uncomparable  rdfs:domain :Type; rdfs:range :Type;
        :pP (:class_known_to_be_SUP-comparable-or-uncomparable 
             :property_known_to_be_comparable_or_uncomparable).

         :class_known_to_be_SUP-comparable-or-uncomparable
           rdfs:domain rdfs:Class; rdfs:range rdfs:Class;
           :eqP :class_known_to_be_SUP-comparable_or_exclusive_or_SUP-uncomparable.


   :definition  :cP (:extended-entailed-by_thing_or_equivalent 
                     :extended-entailed_thing_or_equivalent).
    #a full definition of a statement is equivalent to this statement


#======================== 1.2.1. Strict Generalization And Specialization

:strict_generalization_or_specialization
  :pP (:strict_semantic_generalization  :strict_semantic_specialization).


   :strict_semantic_generalization
     :sP :strict_extended-entailed_thing.

      :strict_extended-entailed_thing
        :eP (:strict_entailed_statement  :strict_superIndividual  :strict_supertype).

         :strict_entailed_statement  rdfs:domain :Statement;  rdfs:range :Statement.

         :strict_superIndividual  rdfs:domain :Individual;  rdfs:range :Individual.

         :strict_supertype  rdfs:domain :Type;  rdfs:range :Type;
           :pP (:strict_superProperty  :strict_superClass).

            :strict_superProperty  rdfs:domain rdf:Property;  rdfs:range rdf:Property;
              :eqP :proper-subPropertyOf.

            :strict_superClass :eqP :proper-subClassOf.


   :strict_semantic_specialization  owl:inverseOf :strict_generalization;
     :sP :strict_extended-entailed-by_thing.

      :strict_extended-entailed-by_thing  owl:inverseOf  :strict_extended-entailed_thing;
        :eP (:strict_entailed-by_statement  :strict_subIndividual  :strict_subtype
             :strict_subtypes).

         :strict_entailed-by_statement  rdfs:domain :Statement;  rdfs:range :Statement;
           owl:inverseOf :strict_entailed_statement.

         :strict_subIndividual  owl:inverseOf :strict_superIndividual.

         :strict_subtype  rdfs:domain :Type;  rdfs:range :Type;
           owl:inverseOf :strict_supertype;
           :pP (:strict_subProperty :strict_subClass);  :sP :s, :s_.

            :strict_subProperty  rdfs:domain rdf:Property;  rdfs:range rdf:Property;
              :sP :sP, :sP_.                                           #sP defined via SPARQL

            :strict_subClass  :eqP :proper-subClass;
              :sP :sC, :sC_.                                    #sC et sC_ defined via SPARQL

            :s  rdfs:domain :Type;  rdfs:range :Type;  :pP (:sP  :sC).

            :s_ :eqP :strict_subtype_uncomparable_but_not_disjoint_to_its_siblings;
              rdfs:domain :Type;  rdfs:range :Type;    :pP (:sP_  :sC_).

              :sP_  rdfs:domain rdf:Property;  rdfs:range rdf:Property.

              :sC_ :eqP   
                    :proper-superClassOf_a-subclass-uncomparable-but-not-disjoint-with-its-siblings.

         :strict_subtypes  rdfs:domain :Type;  rdfs:range rdf:List;
           :pP (:strict_subProperties  :strict_subClasses);
           :sP :exclusive_strict_subtypes, :complete_set_of_strict_subtypes.

            :strict_subProperties  rdfs:domain rdf:Property;  rdfs:range rdf:List;
               :sP :exclusive_strict_subProperties, :complete_set_of_strict_subProperties.

                :exclusive_strict_subProperties :eqP :eP;              
                  :pP (:property_partition  :incomplete_set_of_exclusive_subProperties).

                   :property_partition :eqP :pP.                        #pP defined via SPARQL
                   :incomplete_set_of_exclusive_subProperties :eqP :eP. #eP defined via SPARQL

                :complete_set_of_strict_subProperties
                  :pP (:property_partition
                       :complete_set_of_non-exclusive_strict_subProperties).

                   :complete_set_of_non-exclusive_strict_subProperties
                     :eqP :cP.                                          #cP defined via SPARQL


            :strict_subClasses  rdfs:domain rdfs:Class;  rdfs:range rdf:List;
               :sP :exclusive_strict_subClasses, :complete_set_of_strict_subClasses.

                :exclusive_strict_subClasses
                  :pP (:class_partition  :incomplete_set_of_exclusive_subClasses).

                   :class_partition :eqP owl:disjointUnionOf, :pC.     #pC
                   :incomplete_set_of_exclusive_subClasses
                     :eqP :eC;                                         #eC defined via SPARQL

                :complete_set_of_strict_subClasses
                  :pP (:class_partition  :complete_set_of_non-exclusive_strict_subClasses).

                   :complete_set_of_non-exclusive_strict_subClasses
                     :eqP :cC.                                         #cC (:sP of owl:unionOf)

            :exclusive_strict_subtypes
              :pP (:exclusive_strict_subProperties :exclusive_strict_subclasses).

            :complete_set_of_strict_subtypes
              :pP (:complete_set_of_strict_subProperties  :complete_set_of_strict_subClasses).







#************************ 1.3. Parts, Members and Their Inverses

:extended_part_or_part-of   :type owl:TransitiveProperty;
  :pP (:equivalent  :strict_extended_part_or_part-of);
  :pP (:extended_part_or_part-of_directly_between_individuals 
       :extended_part_or_part-of_between_types_but_for_their_instances);
  :sP :extended_part, :extended_part-of;
  :pP (:object_not_known_to_be_comparable-or-uncomparable_via_part
       :object_known_to_be_comparable-or-uncomparable_via_part);
  :pP (:object_not_known_to_be_c_comparable-or-uncomparable_via_part
       :object_known_to_be_c_comparable-or-uncomparable_via_part).

   :extended_part_or_part-of_between_types_but_for_their_instances
     rdfs:domain :Type;  rdfs:range :Type;
     :sP :part_or_part-of_between_types_but_for_their_instances.

      :part_or_part-of_between_types_but_for_their_instances
        :cP (:part_between_types_but_for_their_instances
             :part-of_between_types_but_for_their_instances).

   :extended_part :pP (:equivalent  :strict_extended_part-of); 
                  :eP (:member_or_equivalent :part_or_equivalent :c_part_or_equivalent).
                       :member_or_equivalent :pP (:equivalent  :member).
                       :part_or_equivalent   :eqP :part;  :pP (:equivalent  :strict_part).
                       :c_part_or_equivalent :pP (:eqP  :c_part).

   :extended_part-of  owl:inverseOf  :part-of_or_equivalent;
     :pP (:equivalent  :strict_extended_part-of).

   :object_known_to_be_comparable-or-uncomparable_via_part
     :eqP :object_known_to_be_part-comparable-or-uncomparable;
     :pP (:comparable_via_part  :uncomparable_via_part).

      :comparable_via_part :pP (owl:sameAs  :part  :part_of).

      :uncomparable_via_part 
        :pP (:part_exclusion  :part-uncomparable_but_not_part-exclusive).

   :object_known_to_be_c_comparable-or-uncomparable_via_part
     :eqP :object_known_to_be_c_part-comparable-or-uncomparable;
     :pP (:comparable_via_c_part  :uncomparable_via_c_part).

      :comparable_via_c_part :pP (:eqC  :c_part  :c_part_of).

      :uncomparable_via_c_part 
        :pP (:c_part_exclusion  :c_part-uncomparable_but_not_part-exclusive).



#======================== 1.3.1. Strict Parts/Members and Their Inverses

:strict_extended_part_or_part-of
  :sP :strict_extended_part, :strict_extended_part-of.


   :strict_extended_part
     :sP :strict_part, :part_between_types_but_for_their_instances,
         :member, :extended-entailment_element, :extended-reverse-entailment_element,
         :definition-element,  :part-exclusive_parts,  :c_part-exclusive_parts,
         :complete_set_of_parts, :c_complete_set_of_parts.

      :strict_part :eqP :part;  :sP :sPart.                            #sPart defined via SPARQL 

      :part_between_types_but_for_their_instances     :eqP :c_part;    #c_part defined via SPARQL 
        :sP :c_sPart.                                                  #c_sPart defined via SPARQL 

      :member  
        :sP :statement_member.

         :statement_member  rdfs:domain :Statement;
           :sP :definition_member, :relation_member.

            :definition_member :sP :definition_member_via_OWL. #see Section 3

            :relation_member rdfs:domain :Statement;   #just another example
              :sP :relation_type.
                  :relation_type :sP :relation_type_of_an_RDF_reified_statement.
                                     :relation_type_of_an_RDF_reified_statement :eqP rdf:predicate.

      :extended-entailment_element  rdfs:label "==>-element"^^xsd:string;
        :pP (:entailment_element  :NC-definition_element).

         :entailment_element  rdfs:label "=>-element"^^xsd:string;
           rdfs:domain :Statement;  rdfs:range :Statement;
           :sP :equivalent_statement_element.
               :equivalent_statement_element rdfs:label "<=>-element"^^xsd:string.

         :NC-definition_element :sP :NSC-definition_element.

      :extended-reverse-entailment_element  rdfs:label "<==-element";
        :pP (:reverse-entailment_element  :SC-definition_element).

         :reverse-entailment_element  rdfs:label "<=-element"^^xsd:string;
           rdfs:domain :Statement;  rdfs:range :Statement;
           :sP :equivalence_element.

         :SC-definition_element :sP :NSC-definition_element.

      :definition-element  :type owl:TransitiveProperty;
        :cP (:NC-definition_element  :SC-definition_element);
        :pP (:def_necessary-element  :def_non-necessary_element);
        :sP :definition-element_via_OWL. #defined in Section 2

      :part-exclusive_parts  rdfs:domain :Individual; rdfs:range rdf:List;
        :eqP :non-overlapping_parts;
        :pP (:part_partition  :incomplete_set_of_part-exclusive_parts). 
             :part_partition :eqP :partPartition, :pParts.             #:pParts defined via SPARQL
             :incomplete_set_of_part-exclusive_parts :eqP :eParts.     #:eParts defined via SPARQL

      :c_part-exclusive_parts rdfs:domain :Type; rdfs:range rdf:List;   
        :pP (:c_part_partition :incomplete_set_of_part-exclusive_parts).
             :c_part_partition :eqP :c_pParts.                         #:c_pParts defined via SPARQL
             :incomplete_set_of_part-exclusive_parts :eqP :c_eParts.   #:c_eParts defined via SPARQL

      :complete_set_of_parts    rdfs:domain :Individual; rdfs:range rdf:List;
        :pP (:part_partition  :complete_set_of_non-part-exclusive_parts).
             :complete_set_of_non-part-exclusive_parts :eqP :cParts.   #:cParts defined via SPARQL

      :c_complete_set_of_parts  rdfs:domain :Type; rdfs:range rdf:List;
        :pP (:c_part_partition  :complete_set_of_c_non-part-exclusive_parts).
             :complete_set_of_c_non-part-exclusive_parts :eqP :c_cParts.#:c_cParts defined in SPARQL



   :strict_extended_part-of
     :sP :strict_part-of,  :part-of_between_types_but_for_their_instances,
         :elementOf-extended-entailment, :elementOf-extended-reverse-entailment.

      :strict_part-of  :eqP :part_of, :partOf, :superPart;   owl:inverseOf :strict_part.

      :part-of_between_types_but_for_their_instances
        :eqP :c_part_of, :c_partOf.                                        #defined via SPARQL 

      :elementOf-extended-entailment  rdfs:label "elementOf-==>"^^xsd:string;
        :pP (:elementOf-entailment  :elementOf_NC-definition).

         :elementOf-entailment  rdfs:label "elementOf-=>"^^xsd:string;
           rdfs:domain :Statement;  rdfs:range :Statement;
           :sP :elementOf-equivalent-statement.

         :elementOf-NC-definition  owl:inverseOf :NC-definition-element.

      :elementOf-extended-reverse-entailment  rdfs:label "elementOf-<=="^^xsd:string;
        :pP (:elementOf-reverse-entailment  :elementOf_SC-definition).

         :elementOf-reverse-entailment  rdfs:label "elementOf-<="^^xsd:string;
           rdfs:domain :Statement;  rdfs:range :Statement;
           :sP :elementOf-equivalent-statement.

         :elementOf-SC-definition  owl:inverseOf :SC-definition-element.




#************************ 1.4. Contextualizing Or Negating Relations

:contextualizing-or-negating_relation
 :pP (:statement_contextualizing-or-negating_relation
      :non-statement_contextualizing-or-negating_relation);
 :pP (:pure_contextualizing_relation  :extended_negation).

  :statement_contextualizing-or-negating_relation :eqP :aboutness-relation;
    :sP sub#statement_contextualizing-or-negating_binary-relation.
        sub#statement_contextualizing-or-negating_binary-relation :eqP :contextualization.

  :pure_contextualizing_relation :sP :time.

  :extended_negation  rdfs:label "!"^^xsd:string;   :sP :exclusion;
    :pP (:statement_negation :non-statement_negation).
         :statement_negation :eqP :negation.

     :exclusion
       :sP :extended-entailment_exclusion,  :propertySymmetricNegationOrExclusion, 
           :extended-part_exclusion,  :extended-part-of_exclusion,  :type_exclusion.

        :extended-entailment_exclusion  rdfs:label "==>!"^^xsd:string;
          :propertySymmetricNegation :extended-entailed_thing_or_equivalent;
          :eP (:disjoint_type  :exclusive_non-type_thing).

           :disjoint_type  rdfs:domain :Type;  rdfs:range :Type;
             :pP (:disjoint_class :disjoint_property).

              :disjoint_class :eqP owl:disjointWith, :disjC.

              :disjoint_property  :eqP owl:propertyDisjointWith, :disjP;
                :sP :propertySymmetricNegation.
                    :propertySymmetricNegation :sP :propertyFullExclusion.      #defined via SPARQL

        :propertySymmetricNegationOrExclusion
          :sP :propertySymmetricNegation, :propertySymmetricExclusion.

           :propertySymmetricExclusion :sP :propertyFullExclusion.

        :extended-part_exclusion
          :sP :extended-entailment-element_exclusion,
              :extended-reverse-entailment-element_exclusion, :definition-element_exclusion, 
              :part_exclusion, :c_part_exclusion.

           :extended-entailment-element_exclusion rdfs:label "==>-element_exclusion"^^xsd:string;
             :propertyFullExclusion :extended-entailment_element;
             :sP :entailment-element_exclusion.

              :entailment-element_exclusion rdfs:label "=>-element_exclusion"^^xsd:string;
                :propertyFullExclusion :entailment_element;
                :sP :equivalent-statement-element_exclusion.

                 :equivalent-statement-element_exclusion
                   rdfs:label "<=>-element_exclusion"^^xsd:string;
                   :propertyFullExclusion :equivalent-statement_element.

           :extended-reverse-entailment-element_exclusion 
             rdfs:label "<==-element_exclusion"^^xsd:string;
             :propertyFullExclusion :extended-reverse-entailment_element;
             :sP :reverse-entailment-element_exclusion.

              :reverse-entailment-element_exclusion
                rdfs:label "<=-element_exclusion"^^xsd:string;
                :propertyFullExclusion :reverse-entailment_element;
                :sP :equivalent-statement-element_exclusion.

           :definition-element_exclusion
             :cP (:NC-definition-element_exclusion  :SC-definition-element_exclusion);
             :pP (:def_necessary-element_exclusion  :def_non-necessary_element_exclusion).

             :NC-definition-element_exclusion :propertyFullExclusion :NC-definition-element.
             :SC-definition-element_exclusion :propertyFullExclusion :SC-definition-element.
             :def_necessary-element_exclusion :propertyFullExclusion :def_necessary-element.
             :def_non-necessary_element_exclusion :propertyFullExclusion :def_non-necessary_element.

           :part_exclusion  rdfs:domain :Individual; rdfs:range :Individual;
             :eqP :part-disjointWith;   :propertySymmetricNegation :part.

           :c_part_exclusion  rdfs:domain :Type; rdfs:range :Type;             #defined via SPARQL
             :propertySymmetricNegation :c_part.


        :extended-part-of_exclusion
          :sP :elementOf-extended-reverse-entailment_exclusion,
              :elementOf-extended-entailment_exclusion.

           :elementOf-extended-reverse-entailment_exclusion
             rdfs:label "elementOf-<==_exclusion"^^xsd:string;
             :propertyFullExclusion :elementOf-extended-reverse-entailment_exclusion.

           :elementOf-extended-entailment_exclusion
             rdfs:label "elementOf-==>_exclusion"^^xsd:string;
             :propertyFullExclusion :elementOf-extended-entailment_exclusion.

        :type_exclusion :propertyFullExclusion :type_or_equivalent.




#@@@@@@@@@@@@@@@@@@@@@@@@ 2. Definition Members In OWL
:definition_element_via_OWL  :pP (:class-definition_element    :datatype-definition_element
                                  :property-definition_element :instance-definition_element).

   :class-definition_element
     :sP :proper-subClassOf,             owl:complementOf ,
         :class-def_union_part,          :class-def_intersection_part,
         :class-def_onProperty_part,     :class-def_onClass_part, 
         :class-def_someValuesFrom_part, :class-def_allValuesFrom_part, 
         :class-def_hasValue_part,       :class-def_hasSelf_part,  :class-def_oneOf_part,
         :class-def_cardinality_part,    :class-def_minCardinality_part,
                                         :class-def_maxCardinality_part, 
         :class-def_qCardinality_part,   :class-def_minqCard_part, :class-def_maxqCard_part.

      :class-def_union_part          owl:propertyChainAxiom (rdfs:subClassOf  owl:unionOf). 
      :class-def_intersection_part   owl:propertyChainAxiom (rdfs:subClassOf  owl:intersectionOf). 
      :class-def_onProperty_part     owl:propertyChainAxiom (rdfs:subClassOf  owl:onProperty    ). 
      :class-def_onClass_part        owl:propertyChainAxiom (rdfs:subClassOf  owl:onClass       ). 
      :class-def_someValuesFrom_part owl:propertyChainAxiom (rdfs:subClassOf  owl:someValuesFrom). 
      :class-def_allValuesFrom_part  owl:propertyChainAxiom (rdfs:subClassOf  owl:allValuesFrom ). 
      :class-def_hasValue_part       owl:propertyChainAxiom (rdfs:subClassOf  owl:hasValue      ). 
      :class-def_hasSelf_part        owl:propertyChainAxiom (rdfs:subClassOf  owl:hasSelf       ). 
      :class-def_oneOf_part          owl:propertyChainAxiom (rdfs:subClassOf  owl:oneOf         ). 
      :class-def_cardinality_part    owl:propertyChainAxiom ( rdfs:subClassOf  owl:cardinality   ). 
      :class-def_minCardinality_part owl:propertyChainAxiom (rdfs:subClassOf  owl:minCardinality). 
      :class-def_maxCardinality_part owl:propertyChainAxiom (rdfs:subClassOf  owl:maxCardinality). 
      :class-def_qCardinality_part owl:propertyChainAxiom (rdfs:subClassOf owl:qualifiedCardinality).
      :class-def_minqCard_part owl:propertyChainAxiom (rdfs:subClassOf owl:minQualifiedCardinality).
      :class-def_maxqCard_part owl:propertyChainAxiom (rdfs:subClassOf owl:maxQualifiedCardinality).


   :datatype-definition_element :sP :datatype-def_minRestr_part, :datatype-def_maxRestr_part.
      :datatype-def_minRestr_part owl:propertyChainAxiom ( owl:withRestrictions xsd:minInclusive ). 
      :datatype-def_maxRestr_part owl:propertyChainAxiom ( owl:withRestrictions xsd:maxInclusive ). 


   :property-definition_element
     :sP :proper-subPropertyOf, owl:inverseOf, rdfs:domain, rdfs:range,
         :chain_member1, :chain_member2, :chain_member3. #and so on, as many as needed

      :chain_member1 owl:propertyChainAxiom (owl:propertyChainAxiom rdf:first). 
      :chain_member2 owl:propertyChainAxiom (owl:propertyChainAxiom rdf:rest rdf:first). 
      :chain_member3 owl:propertyChainAxiom (owl:propertyChainAxiom rdf:rest rdf:rest rdf:first). 

   :instance-definition_element :sP :instance, owl:hasKey.
                                    :instance owl:inverseOf :type. 







#@@@@@@@@@@@@@@@@@@@@@@@@ 3. Some Relation Types Equivalent To Some CN Queries:

#Each of the following sub-sections has a title which mentions a specification via CN (with
#  the notation used in the article about "Ontology Intrinsic Completeness".
#For each of these specifications, there exists a relation type that generalizes
#  all the types of the checked relations. In each sub-section this type is given.


#************************ 3.1.  For "{==>, <==>}" As Second Parameter:

#With the notation used in the article:
# - CN({every owl:Thing}, {==>, <==>}) checks that every object in the evaluated KB
#   is sub:object_known_to_be_comparable_or_uncomparable to every object in this KB.
# - CN({every rdfs:Class}, {rdfs:subClassOf, owl:equivalentClass, owl:sameAs}) checks that 
#   every class in the KB is sub#class_known_to_be_comparable_or_uncomparable to 
#   every object in this KB.
# - CN({every owl:Thing}, {==>, <==>},{"every object to some other object"}) checks that
#   every object is sub:object_known_to_be_SUP-comparable-or-SUP-uncomparable toentpro
#   some other object in this KB.
# - CN({every rdfs:Class}, {rdfs:subClassOf, owl:equivalentClass, owl:sameAs},
#                         {"every object to some other object"}) checks that
#   every class is sub:class_known_to_be_SUP-comparable-or-SUP-uncomparable
#   some other object in this KB.