Set ADT - algebraic specification This version uses axioms to prevent duplicate items. ADT Set uses Any, Boolean, Integer defines Set operations: new: ---> Set size: Set ---> Integer isEmpty: Set ---> Boolean add: Set x T ---> Set remove: Set x T ---> Set contains: Set x T ---> Boolean axioms: size(new()) = 0 isEmpty(b) = if size(b) = 0 then true else false remove(add(s,t), t) = s contains(add(s,t),v) = if t = v then true else contains(s,v) contains(remove(s,t),v) = if t = v then false else contains(s,v) if contains(s,t) then add(s,t) = s if !contains(s,t) then remove(s,t) = s if !contains(s,t) then size(add(s,t)) = size(s) + 1 if contains(s,t) then size(remove(s,t)) = size(s) - 1 This version uses pre-conditions to prevent duplicates. ADT Set uses Any, Boolean, Integer defines Set operations: new: ---> Set size: Set ---> Integer add: Set x T -/-> Set remove: Set x T -/-> Set contains: Set x T ---> Boolean preconditions: add(s,t): contains(s,t) = false remove(s,t): contains(s,t) = true axioms: size(new()) = 0 isEmpty(b) = if size(b) = 0 then true else false size(add(s,t)) = size(s) + 1 size(remove(s,t)) = size(s) - 1 contains(new(),t) = false contains(add(s,t),v) = if t = v then true else contains(s,v) contains(remove(s,t),v) = if t = v then false else contains(s,v)