anchor.diff:      {GroupId, CurrentPaxosVersion}.
   
   % @doc update state to reflect new proposal
  --spec made_proposal(group_state(), group_types:paxos_id(), group_types:proposal()) -> group_state().
  +-spec made_proposal(group_state(), group_types:paxos_id(),
  +                    group_types:proposal()) -> group_state().
   made_proposal(#group_state{group_id=GroupId,
                              current_paxos_version=CurrentPaxosVersion}
                 = GroupState,
  
positive.code:       gb_trees:insert(PaxosId, Proposal,
                        GroupState#group_state.proposals)}.
  
  -spec postpone_decision(group_state(), group_types:paxos_id(), group_types:proposal()) -> group_state().
  postpone_decision(#group_state{postponed_decisions = PostPonedDecisions} = GroupState, PaxosId, Proposal) ->
      GroupState#group_state{postponed_decisions = gb_sets:add({PaxosId, Proposal},
                                                               PostPonedDecisions)}.
  
negative.code:     %   proposals =
      %   gb_trees:delete_any(PaxosId, GroupState#group_state.proposals)}.
  
  -spec get_proposal(group_state(), group_types:paxos_id()) ->
      {value, group_types:proposal()} | none.
  get_proposal(GroupState, PaxosId) ->
      gb_trees:lookup(PaxosId, GroupState#group_state.proposals).
  
  