@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix mon: <http://www.semwebtech.org/mondial/10/meta#>.
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#>.
@prefix swrl: <http://www.w3.org/2003/11/swrl#>.
@prefix : <foo://bla/>.

mon:population  rdfs:range xsd:int; a owl:FunctionalProperty. ## all cities are different.
_:Million a rdfs:Datatype; owl:onDatatype xsd:int; owl:withRestrictions (_:m1).
_:m1 xsd:minInclusive 1000000 .

:ProvinceWithBigCity a owl:Class.   # otherwise sparql answer empty.
:ProvinceWithTwoBigCities a owl:Class.   # otherwise sparql answer empty.
:CountryWithTwoBigCities a owl:Class.   # otherwise sparql answer empty.

:HasBigPopulation owl:equivalentClass [a owl:Restriction;
  owl:onProperty mon:population; owl:someValuesFrom _:Million].
:BigCity owl:intersectionOf (mon:City :HasBigPopulation).

:x a swrl:Variable.   :y a swrl:Variable.     :z a swrl:Variable.
:PWBigCityRule a swrl:Imp;
   swrl:head ([ a swrl:ClassAtom; swrl:classPredicate :ProvinceWithBigCity;
                swrl:argument1 :x]);
   swrl:body ([ a swrl:ClassAtom; swrl:classPredicate mon:Province;
                swrl:argument1 :x ]
              [ a swrl:ClassAtom; swrl:classPredicate :BigCity;
                swrl:argument1 :y ]
              [ a swrl:IndividualPropertyAtom; swrl:propertyPredicate mon:hasCity;
                swrl:argument1 :x ; swrl:argument2 :y ]).

#:PW2BigCitiesRule a swrl:Imp;
#   swrl:head ([ a swrl:ClassAtom; swrl:classPredicate :ProvinceWithTwoBigCities;
#                swrl:argument1 :x]);
#   swrl:body ([ a swrl:ClassAtom; swrl:classPredicate mon:Province;
#                swrl:argument1 :x ]
#              [ a swrl:ClassAtom; swrl:classPredicate :BigCity;
#                swrl:argument1 :y ]
#              [ a swrl:ClassAtom; swrl:classPredicate :BigCity;
#                swrl:argument1 :z ]
#              [ a swrl:IndividualPropertyAtom; swrl:propertyPredicate mon:hasCity;
#                swrl:argument1 :x ; swrl:argument2 :y ]
#              [ a swrl:IndividualPropertyAtom; swrl:propertyPredicate mon:hasCity;
#                swrl:argument1 :x ; swrl:argument2 :z ]
#              [ a swrl:DifferentIndividualsAtom;
#                swrl:argument1 :y ; swrl:argument2 :z ]).

#:r3 a swrl:Imp;
#   swrl:head ([ a swrl:ClassAtom; swrl:classPredicate :CountryWithTwoBigCities;
#                swrl:argument1 :x]);
#   swrl:body ([ a swrl:ClassAtom; swrl:classPredicate mon:Country;
#                swrl:argument1 :x ]
#              [ a swrl:ClassAtom; swrl:classPredicate :BigCity;
#                swrl:argument1 :y ]
#              [ a swrl:ClassAtom; swrl:classPredicate :BigCity;
#                swrl:argument1 :z ]
#              [ a swrl:IndividualPropertyAtom; swrl:propertyPredicate mon:hasCity;
#                swrl:argument1 :x ; swrl:argument2 :y ]
#              [ a swrl:IndividualPropertyAtom; swrl:propertyPredicate mon:hasCity;
#                swrl:argument1 :x ; swrl:argument2 :z ]
#              [ a swrl:DifferentIndividualsAtom;
#                swrl:argument1 :y ; swrl:argument2 :z ]).

:r4 a swrl:Imp;
   swrl:head ([ a swrl:ClassAtom; swrl:classPredicate :CountryWithTwoBigCities;
                swrl:argument1 :x]);
   swrl:body ([ a swrl:ClassAtom; swrl:classPredicate mon:Country;
                swrl:argument1 :x ]
              [ a swrl:ClassAtom; swrl:classPredicate :ProvinceWithBigCity;
                swrl:argument1 :y ]
              [ a swrl:ClassAtom; swrl:classPredicate :ProvinceWithBigCity;
                swrl:argument1 :z ]
              [ a swrl:IndividualPropertyAtom; swrl:propertyPredicate mon:hasProvince;
                swrl:argument1 :x ; swrl:argument2 :y ]
              [ a swrl:IndividualPropertyAtom; swrl:propertyPredicate mon:hasProvince;
                swrl:argument1 :x ; swrl:argument2 :z ]
              [ a swrl:DifferentIndividualsAtom;
                swrl:argument1 :y ; swrl:argument2 :z ]).

#:r5 a swrl:Imp;
#   swrl:head ([ a swrl:ClassAtom; swrl:classPredicate :CountryWithTwoBigCities;
#                swrl:argument1 :x]);
#   swrl:body ([ a swrl:ClassAtom; swrl:classPredicate mon:Country;
#                swrl:argument1 :x ]
#              [ a swrl:ClassAtom; swrl:classPredicate :ProvinceWithTwoBigCities;
#                swrl:argument1 :y ]
#              [ a swrl:IndividualPropertyAtom; swrl:propertyPredicate mon:hasProvince;
#                swrl:argument1 :x ; swrl:argument2 :y ]).
