Вам нужно будет найти функциональное описание для этих операций, как и для всех методов, которые не имеют прямого соответствия в теориях, поддерживаемых JML. Например, математическое определение объединения двух наборов - это «набор всех объектов, которые являются членами одного или другого набора». То есть метод union
может быть указан примерно как
/*@ public normal_behavior
@ ensures this.containsAll(\old(this)) &&
@ this.containsAll(\old(set)); */
и аналогично для других методов, при условии, что доступен чистый метод containsAll
. В противном случае вы можете использовать количественные выражения и чистый метод contains
. Если у вас нет таких чистых методов запросов, вам придется раскрывать детали реализации, например, базовое поле, что будет менее целесообразно для указания интерфейса.
Это прояснит проблему для вас?