code: func Diff(before, after IterableReader) (*Set, error) {
  	diff := NewSet()
  	err := after.IterateValidators(func(id crypto.Addressable, powerAfter *big.Int) error {
  		powerBefore, err := before.Power(id.GetAddress())
  		if err != nil {
  			return err
  		}
  		// Exclude any powers from before that much after
  		if powerBefore.Cmp(powerAfter) != 0 {
  			diff.ChangePower(id.GetPublicKey(), powerAfter)
  		}
  		return nil
  	})
  	if err != nil {
  		return nil, err
  	}
  	// Make sure to zero any validators in before but not in after
  	err = before.IterateValidators(func(id crypto.Addressable, powerBefore *big.Int) error {
  		powerAfter, err := after.Power(id.GetAddress())
  		if err != nil {
  			return err
  		}
  		// If there is a difference value then add to diff
  		if powerAfter.Cmp(powerBefore) != 0 {
  			diff.ChangePower(id.GetPublicKey(), powerAfter)
  		}
  		return nil
  	})
  	if err != nil {
  		return nil, err
  	}
  	return diff, nil
  }
docs: // Returns the asymmetric difference, diff, between two Sets such that applying diff to before results in after