sig string {} sig User { login: string, auctions: set Auction, bids : set Bid } sig Auction { reserve : Int, startsOn : Int, endsOn : Int, item: one Item }{ one ~auctions // auction reserve cannot be negative reserve >= 0 // auction cannot end before it has begun startsOn < endsOn } sig Bid { amount : Int, madeOn : Int, on : one Auction }{ one ~bids // bid amount cannot be negative amount >= 0 // bid placed between auction start and end time madeOn >= on.startsOn madeOn <= on.endsOn // a User cannot bid on their own auction this.~@bids != on.~@auctions } sig Description {} sig Item { description : Description }{ all disj a1,a2 : this.~item | a1.endsOn < a2.startsOn or a2.endsOn < a1.endsOn } run {} for 3 but exactly 2 Auction, exactly 2 Bid, 2 User, 1 Item