Yes, you are quite correct that your representation will not have the desired effect.
There are possibly 2 ways that I can think of that will achieve more-or-less what you want:
(1) Introduce a coTeachesWith role which is irreflexive and define teaches as
teaches \sqsubseteq coTeachesWith o teaches. In this way you can state that a lecturer co-teaches with another lecturer and from that you can infer that teach the same courses. The downside is that it will infer that all classes taught by this lecturer are also taught by the co-teaching lecturer - which is likely not what you want.
(2) Another way is to use SWRL rules. With that you can provide a rule as follows:
teaches(?x, ?c) ^ teaches(?y, ?c) ^ differentFrom(?x, ?y) ->
CoTeachingFaculty(?x) ^ CoTeachingFaculty(?y)
Below I provide the OWL Manchester syntax for the ontology applying these 2 options:
Prefix: : http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#
Prefix: owl: http://www.w3.org/2002/07/owl#
Prefix: rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
Prefix: rdfs: http://www.w3.org/2000/01/rdf-schema#
Prefix: xml: http://www.w3.org/XML/1998/namespace
Prefix: xsd: http://www.w3.org/2001/XMLSchema#
Ontology: <http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual>
<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual/0.0.1>
AnnotationProperty: <http://swrl.stanford.edu/ontologies/3.3/swrla.owl#isRuleEnabled>
AnnotationProperty: rdfs:comment
AnnotationProperty: rdfs:label
Datatype: xsd:boolean
Datatype: xsd:string
ObjectProperty: coTeachesWith
Characteristics: Irreflexive
Domain: CoTeachingFaculty
Range: CoTeachingFaculty
ObjectProperty: isTaughtBy
Domain: Course
Range: AcademicStaff
ObjectProperty: teaches
SubPropertyChain: coTeachesWith o teaches
Domain: AcademicStaff
Range: Course
Class: AcademicStaff
SubClassOf: Person,
teaches some Course
Class: CoTaughtCourse
EquivalentTo: isTaughtBy min 2 owl:Thing
SubClassOf: Course
Class: CoTeachingFaculty
SubClassOf: AcademicStaff
Class: Course
DisjointWith: Person
Class: Person
DisjointWith: Course
Class: owl:Thing
Individual: course1
Types: Course
Facts:
isTaughtBy lecturer1,
isTaughtBy lecturer2
DifferentFrom: course2
Individual: course2
Types: Course
DifferentFrom: course1
Individual: course3
Individual: lecturer1
Facts: coTeachesWith lecturer2
DifferentFrom: lecturer2
Individual: lecturer2
Facts:
teaches course1,
teaches course2
DifferentFrom: lecturer1
Individual: lecturer3
Facts: teaches course2
DifferentFrom: lecturer4
Individual: lecturer4
Facts: teaches course2
DifferentFrom: lecturer3
DifferentIndividuals:
course1,course2,course3
Rule:
teaches(?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#x>, ?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#c>), teaches(?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#y>, ?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#c>), DifferentFrom (?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#x>, ?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#y>) -> CoTeachingFaculty(?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#x>), CoTeachingFaculty(?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#y>)
PS. I did not set teaches to be the inverse of taughtBy because then teaches is no longer a simple role and then cannot be used in a role chain. For details see paper on SROIQ.