proj-branchDemocracy-derivationOfConstituencyLimitFormula

The formula for the member number limit is constituency_member_limit = 7^((1 + sqrt(1 + 8*(log(electorate_size/constituency_votes)/log(7))))/2), where electorate_size is the total number of voters in the organization, and constituency_votes is the total number of votes controlled by this constituency. Why?

First, why are there 7 people on the Board?

Now, we considering an imaginary 'ideal' organization (we are just calling it that, we're not going to give any justification for this form being 'ideal') in which constituencies are organized in the following way:

How many voters are there in total? It depends on how many levels down we go.

The general formula here is total_voters = 7^(x*(x-1)/2), where 'x' is the number of levels.

Now, what if we had 3 levels, but less than 7*(7*7) voters? We'd still have the CEO, then the Board, then a Constituency for each member. How many of those lowest-level Constituencies do we have? We have 7. So each of these 7 constituencies would have electorate_size/7 voters. And if we had 4 levels, we'd have 7*(7*7) lowest-level constituencies, so each one would have electorate_size/7^2 voters. The formula is electorate_size/7^(x*(x-1)/2). todo

Now, if we are given a number of voters in such a structure, compute the number of levels needed. That is, given a = electorate_size/7^(x*(x-1)/2), solve for x. The solution is: todo

let n = electorate_size a = n/7^(x*(x-1)/2) a/n = 1/7^(x*(x-1)/2) n/a = 7^(x*(x-1)/2) log7(n/a) = x*(x-1)/2 2*log7(n/a) = x*(x-1) apply quadratic formula with a= 1, b= -1, c = -2*log7(n/a): (-b +- sqrt(b^2 - 4*a*c))/2*a (1 +- sqrt(1 - 4*(-2*log7(n/a))))/2 (1 +- sqrt(1 + 8*(log7(n/a))))/2

the negative solution doesn't interest us, so change the +- to +:

x = (1 + sqrt(1 + 8*(log7(n/a))))/2

(todo explain why we set a = indirect_constituency_votes)

now member_limit = 7^x

(todo note that we've set our limit to the number of members in the 'ideal' structure)

so substituting in x, we get:

member_limit = 7((1. + sqrt(1. + 8.*(log(electorate_size/votes)/log(7.))))/2.)

To display the effect of this formula in Python:

electorate_size = 1000; largest_permitted = 7((-1. + sqrt(1. + 8.*log(float(electorate_size))/log(7.)))/2.); constituency_votes_array = arange(ceil(largest_permitted),electorate_size); figure(); plot(constituency_votes_array, 7((1. + sqrt(1. + 8.*(log(float(electorate_size)/constituency_votes_array)/log(7.))))/2.)); xlabel('constituency_votes'); ylabel('constituency_member_limit');

Note: largest_permitted there is the largest constituency you can have in which each member contributes at least 1 vote (with a voting strength of 1). This reaches 150, Dunbar's number, when electorate_size is about 8000. This is in between 7*7 and less than 7*7*7, so it would be supported by an organization with 4 levels: CEO, Board, <7*7, <150, with about 50k members. That is to say, if you demand an organization of this form in which no constituency is larger than Dunbar's number, you'll be able to support on the order of 50k, with in which there is about one to two Delegates in between each member and the Board, and each Board Member reports to less than 49 delegates.

(note with 5s instead of 7s it would be: Note: largest_permitted there is the largest constituency you can have in which each member contributes at least 1 vote (with a voting strength of 1). This reaches 150, Dunbar's number, when electorate_size is about 30000. This is close to the ideal with 4 levels, CEO, Board, 5*5, 5*5*5, with about 15k members. That is to say, if you demand an organization of this form in which no constituency is larger than Dunbar's number, you'll be able to support on the order of 15k, with in which there is about one to two Delegates in between each member and the Board, and each Board Member reports to about 25 delegates. )

---

idea for a more basic justification of this (todo not sure if this will work, probably not):

assume that there is a penalty of x^2 for each constituency that a message has to pass thru on average when travelling from a leaf node (a voter constituency) to the root (the Board), where x is the size of the constituency; and in addition, a penalty of 2^v where v is the total number of constituencies that must be passed thru. the 2^v cost could come if we assume that each message has a constant chance of being lost or corrupted for each hop it traverses (eg if the proportionality constant is 0.5, then a message that goes thru one hop might have a 50% chance of being lost, a message that goes thru two hops might have a 75% chance, etc)

in general, there are many situations where a system has to scale to many, many nodes via layering, yet things get really muddled if there are many layers. for example, consider a software architecture. today, an application on a GNU/Linux computer is probably built on hardware with a standardized ISA (probably 64-bit x86), and on top of that the GNU/Linux kernel, and on top of that the GNU/Linux userspace, and on top of that, an application framework like Qt, and on top of that, the application (or possibly another programming-language-specific adaptor framework in between Qt and the application). Now look at how many different software applications (or how many users) make use of each of these layers. x86 is very widespread; even Windows and Mac users use it. The GNU/Linux kernel is significantly less widespread. Qt is significantly less widespread. Etc. For a given number n of end applications, what formula predicts the number of layers? I hypothesize that log(n) grows too quickly. The procedure above yields a layer count that grows slightly slower with n.

---

todo: the formula is too complicated-looking; this might hinder adoption of the system. A simpler formula that empirically is close to the curve plotted above is:

7*electorate_size/votes

(note that this formula gives a large number for small 'votes', eg 7000 for 1 vote, but this doesn't matter because a limit of 7000 is irrelevant if available number is only 1; to see that constraint in Python you can use plot(x,fmin(7000./x,x)) )

eg:

electorate_size = 1000; largest_permitted = 7((-1. + sqrt(1. + 8.*log(float(electorate_size))/log(7.)))/2.); constituency_votes_array = arange(ceil(largest_permitted),electorate_size); figure(); plot(constituency_votes_array, 7((1. + sqrt(1. + 8.*(log(float(electorate_size)/constituency_votes_array)/log(7.))))/2.)); xlabel('constituency_votes'); ylabel('constituency_member_limit');

plot(constituency_votes_array, 7*electorate_size/constituency_votes_array)

todo: see what happens with the rule '7*electorate_size/votes' if everyone tries to vote; is there a way to accomodate them? Not sure that it matters tho; if 'almost everyone' can be accomodated and some are unrepresented, that just provides some dynamism, as the unrepresented folks will be trying to displace the others, and second that's unlikely in larger polities b/c not everyone cares to vote (unless everyone is required to, which may be a good idea).

---