Original text:
epoch's ratchet tree.  Each leaf in the AS Tree is associated with the same group member as the corresponding leaf in the ratchet tree. Nodes are also assigned an index according to their position in the <del> array representation of the tree (described in tree-math).  If V is a node in the AS Tree then IndexOf(V) denotes it's index while V.leftChild and V.rightChild denote the children of V (if they exist). </del>  Each node in the tree is assigned a secret.  The root's secret is simply the application_secret of that epoch.  (See key-schedule for the definition of application_secret.) The secret of any other node in the tree is derived from its parent's <del> secret using a call to Derive-Secret.  The context for the call is the (hash of the) Group state of the epoch and the index of the node whose secret is being derived. </del>  <del> If V is a node in the ASTree then ASTreeContext[V] denotes an ASTreeContext variable with: gshash = Hash(GroupState_[n]) node_index = IndexOf(V) Moreover, the secrets of the children of V are defined to be: </del>  Note that fixing concrete values for GroupState_[n] and application_secret completely defines all secrets in the AS Tree. used to encrypt more than one message. More precisely, the initial secret of the ratchet for the group <del> member assigned to the leaf with index i is simply the secret of that leaf. Keys, nonces and secrets of ratchets are derived using HKDF-Expand- Label.  The context in a given call consists of (a hash of) the current Group state, the index of the sender's leaf in the ratchet tree and the position in the ratchet.  In particular, the index of the sender's leaf in the ratchet tree is the same as the index of the leaf in the AS Tree used to initialize the sender's ratchet. Ratchet_position is initialized to 1 for the first HKDF-Expand-Label call of a new ratchet and incremented for each subsequent call in that ratchet. HashRatCont[i, j] denotes a RatchetContext variable where: gshash = Hash(GropuState_[n]) leaf_index = i ratchet_position = j </del>  <del> Using this notation the ratchet for the group member at leaf i is defined to be: </del>  <del> Here, AEAD.nonceLen and AEAD.keyLength denote the lengths in bytes of the nonce and key for the AEAD scheme defined by the ciphersuite. </del>  11.3. application_[i]_[j]_key and application_[i]_[j]_nonce. <del> Concretely, suppose we have the following AS Tree. </del>  Then if a client uses key KD1 and nonce ND1 during epoch n then it must consume (at least) values G, F, D0, D1, KD1, ND1 as well as the update_secret and init_secret used to derive G (i.e. the <del> application_secret). </del>  11.4.

Reviewer comments:
This PR implements a collection of comments on . It aims to achieve the goal stated by NAME of having every derivation have a different relationship, but with a simpler construction.
Ok, I think this is good enough : )

Revised text:
epoch's ratchet tree.  Each leaf in the AS Tree is associated with the same group member as the corresponding leaf in the ratchet tree. Nodes are also assigned an index according to their position in the  <ins> array representation of the tree (described in tree-math).  If N is a node index in the AS Tree then left(N) and right(N) denote the children of N (if they exist). </ins> Each node in the tree is assigned a secret.  The root's secret is simply the application_secret of that epoch.  (See key-schedule for the definition of application_secret.) The secret of any other node in the tree is derived from its parent's  <ins> secret using a call to Derive-App-Secret. </ins>  <ins> If N is a node index in the ASTree then the secrets of the children of N are defined to be: </ins> Note that fixing concrete values for GroupState_[n] and application_secret completely defines all secrets in the AS Tree. used to encrypt more than one message. More precisely, the initial secret of the ratchet for the group  <ins> member assigned to the leaf with node index N is simply the secret of that leaf. </ins>  <ins> Keys, nonces and secrets of ratchets are derived using Derive-App- Secret.  The context in a given call consists of the index of the sender's leaf in the ratchet tree and the current position in the ratchet.  In particular, the index of the sender's leaf in the ratchet tree is the same as the index of the leaf in the AS Tree used to initialize the sender's ratchet. </ins>  <ins> Here, AEAD.nonce_length and AEAD.key_length denote the lengths in bytes of the nonce and key for the AEAD scheme defined by the ciphersuite. </ins> 11.3. application_[i]_[j]_key and application_[i]_[j]_nonce.  <ins> Concretely, suppose we have the following AS Tree and ratchet for participant D: </ins> Then if a client uses key KD1 and nonce ND1 during epoch n then it must consume (at least) values G, F, D0, D1, KD1, ND1 as well as the update_secret and init_secret used to derive G (i.e. the  <ins> application_secret).  The client MAY retain (i.e., not consume) the values KD0 and ND0 to allow for out-of-order delivery, and SHOULD retain D2 to allow for processing future messages. </ins> 11.4.