abstract Person
ada : Person
cyd : Person
eve : Person
bob : Person
dan : Person
abstract Exam
date : string
[ this != "" ]
recorder -> Person
examiner -> Person
examinee -> Person
ada_bob_cyd : Exam
[ date = "20001023" ][ recorder = cyd ][ examiner = bob ][ examinee = ada ]
dan_bob_ada : Exam
[ date = "20040817" ][ recorder = ada ][ examiner = bob ][ examinee = dan ]
eve_ada_dan : Exam
[ date = "20080331" ][ recorder = dan ][ examiner = ada ][ examinee = eve ]
examineeAda -> Exam *
[ this.examinee = ada ]
[ all e : Exam | e.examinee = ada => e in examineeAda ]
recorderAda -> Exam *
[ this.recorder = ada ]
[ all e : Exam | e.recorder = ada => e in recorderAda ]
examinerAda -> Exam *
[ this.examiner = ada ]
[ all e : Exam | e.examiner = ada => e in examinerAda ]
examineeOfAdaAsExaminer -> Person *
[ one e : Exam | e.examiner = ada && e.examinee = this ]
[ all e : Exam | e.examiner = ada => e.examinee in examineeOfAdaAsExaminer ]
examineeOfAdaAsRecorder -> Person *
[ one e : Exam | e.recorder = ada && e.examinee = this ]
[ all e : Exam | e.recorder = ada => e.examinee in examineeOfAdaAsRecorder ]
examinerOfAdaAsExaminee -> Person *
[ one e : Exam | e.examinee = ada && e.examiner = this ]
[ all e : Exam | e.examinee = ada => e.examiner in examinerOfAdaAsExaminee ]
examinerOfAdaAsRecorder -> Person *
[ one e : Exam | e.recorder = ada && e.examiner = this ]
[ all e : Exam | e.recorder = ada => e.examiner in examinerOfAdaAsRecorder ]
recorderOfAdaAsExaminee -> Person *
[ one e : Exam | e.examinee = ada && e.recorder = this ]
[ all e : Exam | e.examinee = ada => e.recorder in recorderOfAdaAsExaminee ]
recorderOfAdaAsExaminer -> Person *
[ one e : Exam | e.examiner = ada && e.recorder = this ]
[ all e : Exam | e.examiner = ada => e.recorder in recorderOfAdaAsExaminer ]