anchor.diff:  %% preconditions
   %% =======================================================
   
  -precondition(S, {call, _, create_zone, _}) ->
  -	true;
  -precondition(S, {call, _, create_aura, _}) ->
  -	true;
  -precondition(S, {call, _, delete_zone, [_, #state{zones = Z}]}) when length(Z) >= 1 ->
  -	true;
  -precondition(S, {call, _, delete_aura, [_, _, #state{auras = A}]}) when length(A) >= 1 ->
  -	true;
  -precondition(S, {call, _, get_zones, _}) ->
  -	true;
  -precondition(_,_) ->
  -	false.
  +precondition(S, {call, _, Call, _}) ->
  +	Needs = [
  +		{zones, [delete_zone]},
  +		{auras, [delete_aura]}
  +	],
  +	IsNeeds = [N || {N, List} <- Needs, lists:member(Call, List)],
  +	case IsNeeds of
  +		[] -> true;
  +		[zones] ->
  +			length(S#state.zones) > 0;
  +		[auras] ->
  +			length(S#state.auras) > 0
  +	end.
   
   %% =======================================================
   %% next_state
  
positive.code: 	end || {Z, T} <- Pairs],
  	true;
  
  postcondition(State, {call, _, delete_zone, _}, {ok, "204", _, _}) ->
  	true;
  
  
negative.code: %		{call, ?MODULE, create_aura_bad_user, [g_aura(), g_name(), g_layer(), g_next(aura, S), S]},
  %
  		{call, ?MODULE, get_zones, [oneof(['owner', 'partier1', 'partier2'])]},
  		{call, ?MODULE, get_auras, [oneof(['owner', 'partier1', 'partier2'])]},
  %		{call, ?MODULE, get_a_zone, [g_zone(S), oneof(['owner', 'partier1', 'partier2']), S]},
  %		{call, ?MODULE, get_an_aura, [g_aura(S), oneof(['owner', 'partier1', 'partier2']), S]},
  %
  