Ну, ваше правило ограничения неверно. Это говорит
«RedballContainer эквивалентен классу, который только содержит RedBallContainers»
Должно быть:
«RedballContainer эквивалентен классу, который только содержит RedBalls»
Редактировать Как вы узнали выше, исправление не удаляет странное предполагаемое отношение эквивалентности. Причина, по которой он там, несколько запутанная, но примерно такая:
- мы знаем, что домен
contains
равен Container
, поэтому все, что использует свойство contains
, по определению, Container
.
- мы знаем, что
RedBallContainer
эквивалентно всему, что содержит только RedBall
с, поэтому любой предмет, который содержит только красные шары, является контейнером из красных шаров.
- мы также знаем, что
RedBallContainer
является подклассом Container
.
А теперь представьте себе предмет, который не является Container
. Возможны два варианта: он либо содержит что-то, либо ничего. Если оно содержит что-то, то по определению 1 оно все равно равно Container
.
Однако, если он не содержит что-либо, это означает, что все содержащиеся в нем шары на самом деле являются красными шарами (поскольку ни один из содержащихся в нем нулевых шаров не является красными шарами)! По нашему второму определению, эта вещь, следовательно, является RedBallContainer
. По нашему третьему определению, это должно быть Container
в конце концов.
Короче говоря, в соответствии с этим набором правил что-то не может быть Container
. Все это Container
, поэтому Container
и Thing
эквивалентны.
Ах, логика.
Чтобы исправить, вы можете изменить ограничение, указав, что RedBallContainer
эквивалентен любому Container
, который содержит только красные шары:
EquivalentTo Container and contains only RedBall