In order to cooperate effectively with its peers, an agent must manipulate representations of the social structures in which it plays a part. The purpose of this paper is to investigate the mathematical and computational aspects of this social reasoning process. We begin by defining an abstract representation of cooperation structures, wherein agents cooperate to achieve goals on each other’s behalf. We then investigate the question of whether or not cooperation is feasible with respect to an agent’s goal, and we show that answering this question is an NP-complete problem. Finally, we investigate the conditions under which such structures can be composed to form larger structures.