Cache Arrangement.
After the memory allocation process, we store data in the cache memories of the users following a similar method as proposed in [1]}. In this regard, for every state \(s \in {\mathcal {S}}\) , we first split \(W(s)\)  into \(\binom{K}{t(s)}\)  sub-files denoted by \(W_{{\mathcal {V}}(s)}(s)\) , where \(t(s) = K m(s)\)  and \({\mathcal {V}}(s)\)  can be any subset of the user-set \({\mathcal {K}}\)  with \(|{\mathcal {V}}(s)| = t(s)\) . Then, at the cache memory of user \(k \in {\mathcal {K}}\) , we store \(W_{{\mathcal {V}}(s)}(s)\)  for every state \(s \in {\mathcal {S}}\)  and set \({\mathcal {V}}(s) \ni k\) . The cache arrangement process is outlined in Algorithm REF . We assume for every \(s\in {\mathcal {S}}\) , \(m(s)>0\)  and \(t(s)\)  is an integer. Analyzing the case these constraints are not met is left for the extended version of this paper. Finally, for notational simplicity, we ignore the brackets and separators while explicitly writing \({\mathcal {V}}(s)\) , e.g., \(W_{ij}(s) \equiv W_{\lbrace i,j\rbrace }(s)\) .
