Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Law of Value (EBM)

Open In Colab

Law of Value (EBM)

This model is presented in chapter 9 of the book Classical Econophysics and also as the paper: The Emergence of the Law of Value in a Dynamic Simple Commodity Economy.

Summary generated by alphavix

The paper aims to verify Marx’s claim that prices gravitate towards labor values in a simple commodity economy, where capitalist investment and profit are absent. The mathematical modeling focuses on a system of ordinary differential equations to describe the dynamics of the simple commodity economy. This approach is intended to provide an intuitive explanation of the causal features observed in the computational model, rather than definitive proofs or a precise stochastic theory. Here’s a breakdown of the key mathematical components:

  • Labour Equation: This equation describes how the allocation of labor to different production sectors changes over time. It’s driven by a “sectoral income error” (Φj(t)\Phi_j(t)), which represents the difference between a sector’s actual income rate and its ideal expenditure rate needed to meet consumption demands. The rate of change of labor allocation (daj/dtd a_j / dt) is proportional to this income error. In vector notation, it’s expressed as: a˙=Ψ[γMbN(pc)a]\dot{\mathbf{a}} = \Psi[\gamma M\mathbf{b} - N(\mathbf{p} \cdot \mathbf{c})\mathbf{a}] where a\mathbf{a} is the labor allocation vector, Ψ\Psi is a reaction coefficient, γM\gamma M is the mean money velocity, b\mathbf{b} is the money allocation vector, NN is the number of actors, p\mathbf{p} is the average price vector, and c\mathbf{c} is the consumption vector.

  • Money Equation: This equation describes how the allocation of money to different sectors changes based on the over- or under-production of commodities. It’s based on the idea that commodities in oversupply will have lower average prices, leading to a decrease in that sector’s income, and vice-versa for under-supplied commodities. The rate of change of sector income (dbj/dtd b_j / dt) is negatively proportional to the “production error” (ϵj(t)\epsilon_j(t)), which is the difference between supply and demand for a commodity. In vector notation, it’s expressed as: b˙=ωN(Alc)\dot{\mathbf{b}} = -\omega N(\mathbf{A}\mathbf{l} - \mathbf{c}) where ω\omega is a reaction coefficient, A\mathbf{A} is a diagonal matrix of labor allocation proportions, l\mathbf{l} is the labor value vector, and c\mathbf{c} is the consumption vector.

  • Equilibrium Point and Stability: The paper shows that by setting the rates of change in both the labor and money equations to zero (a˙=0\dot{\mathbf{a}} = \mathbf{0} and b˙=0\dot{\mathbf{b}} = \mathbf{0}), a unique equilibrium point can be found. At this equilibrium, the proportion of actors in a sector equals the proportion of money received by that sector, and this proportion is equal to the ratio of labor value to consumption rate (lj/cjl_j/c_j). The paper further demonstrates the global asymptotic stability of this equilibrium point using Lyapunov’s direct method, implying that the system will always approach this equilibrium regardless of its initial conditions.

  • The Law of Value as an Attractor: A crucial result is Theorem 1, which states that labor values are global attractors for average market prices. This means that in equilibrium, the average price of a commodity (pj\langle p_j \rangle) is proportional to the labor-time required to make it (ljl_j), with a constant of proportionality (λ\lambda) known as the Monetary Expression of Labour-time (MELT). limtp(t)=λv\lim_{t \to \infty} \mathbf{p}(t) = \lambda \mathbf{v} where v\mathbf{v} is the labor values vector.

Labour Commanded: The concept of “labour commanded” (κj\kappa_j) is introduced as the money price of a commodity divided by the MELT. This measures how much social labor-time a commodity fetches in the market. Deviations between labor commanded and embodied labor (ljl_j) serve as “labour reallocation signals,” indicating over or under-valuation and guiding the adjustment of the division of labor.

In essence, the mathematical model formalizes how the dynamic interactions between labor allocation, money flows, and market prices lead to an equilibrium where prices reflect labor values and social labor is efficiently distributed, even in an economy with subjective pricing decisions.

Labor Equation

In a certain sense, this work continues the discussion started in the previous section, but now instead of an agent-based model, we have an equation-based model. We will therefore continue using the mathematical notations introduced earlier and define a few new ones.

  • The velocity of money is given by γM\gamma M, where γ\gamma is a constant between 0 and 1.

  • The vector b(t)=(b1,,bL)\boldsymbol{b}\left(t\right)=\left(b_{1},\dots,b_{L}\right) is such that each element bjb_j represents the instantaneous fraction (that is, at time tt) of the total money flow being received by sector jj.

  • Evidently, if we sum over all sectors we must have bj=1\sum b_{j}=1.

If the velocity of money γM\gamma M is the total amount of money in circulation at a given instant tt, and bjb_j is the fraction of that amount that sector jj is receiving, then clearly the total amount of money that sector jj is receiving is given by the product bjγMb_j \gamma M.

If the velocity of money γM\gamma M is the total amount of money in circulation at a given instant tt, and bjb_j is the fraction of that amount in sector jj, then clearly the total amount of money that sector jj is receiving is given by the product bjγMb_j \gamma M.

The vector a(t)=(a1,,aL)\boldsymbol{a}\left(t\right)=\left(a_{1},\dots,a_{L}\right) is defined such that each element aja_j represents the current fraction of workers allocated in sector jj.

We will use the average price pj\left\langle p_{j}\right\rangle of the commodity to approximate the price distribution. Approximating that at each step, each agent consumes 1/cj1/c_j of commodity jj, and that its price is pj\left\langle p_{j}\right\rangle, then the current price cost of consumption per step per agent is pj/cj\sum\left\langle p_{j}\right\rangle /c_{j}.

Let us consider that agents switch sectors based on a signal indicated by prices. Each sector has an ideal expenditure rate that represents the amount of money that needs to be spent for the agents employed in this sector to satisfy their needs. This is given by the product of the individual consumption calculated previously and the current number of agents working in the sector (ajNa_j N), that is, ajNpj/cja_j N \sum\left\langle p_{j}\right\rangle /c_{j}.

Thus, the flow, or the error in the sector’s yield rate, is given by the difference between the total money flowing into sector jj and the ideal consumption:

ϕj(t)=bjγMajNk=1Lpkck\phi_{j}\left(t\right)=b_{j}\gamma M-a_{j}N\sum_{k=1}^{L}\frac{\left\langle p_{k}\right\rangle} {c_{k}}

Evidently, ϕj>0\phi_{j}>0 implies that the sector has profit, that is, the sector receives more money than the agents working in it need to satisfy their consumption. On the other hand, ϕj<0\phi_{j} < 0 implies a deficit, and ϕj=0\phi_{j}=0 represents the ideal equilibrium. We approximate that the switching of agents between sectors (daj/dtda_j/dt) is proportional to ϕj\phi_{j}. For example, if there is a deficit, it means the sector does not have sufficient yield, so agents will leave the sector in search of another sector that is profitable and capable of absorbing them. In other words, daj/dt=ψϕj(t)da_j/dt=\psi \phi_j(t), where ψ\psi is a positive constant that regulates the intensity of sector switching.

This is the labor equation: it defines how the allocation of labor across different production sectors varies according to the yield received by the sector from the sale of commodities. We can write it in a more complete form:

dajdt=ψϕj(t)=ψ(bjγMajNk=1Lpkck)\frac{da_{j}}{dt}=\psi\phi_{j}\left(t\right)=\psi\left(b_{j}\gamma M-a_{j}N\sum_{k=1}^{L}\frac{\left\langle p_{k}\right\rangle}{c_{k}}\right)

Recalling that the consumption vector is given by c=(1/c1,,1/cL)\boldsymbol{c}=(1/c_{1},\ldots,1/c_{L}), and that we previously defined a price vector p=(p1,,pL)\boldsymbol{p}=(p_{1},\ldots,p_{L}), then cp=pkck\boldsymbol{c}\cdot\boldsymbol{p}=\sum\frac{\left\langle p_{k}\right\rangle }{c_{k}}.

Thus, the labor equation for the entire economy can be written in vector notation as:

dadt=ψ(γMbN(pc)a)\frac{d\boldsymbol{a}}{dt}=\psi\left(\gamma M\boldsymbol{b}-N\left(\boldsymbol{p}\cdot\boldsymbol{c}\right)\boldsymbol{a}\right)

Now, since an agent in sector jj produces 1/lj1/l_j units of the commodity at each step (it is produced after ljl_j steps), the total production in the sector is given by ajN/lja_j N/l_j.

If we define the average price of commodity jj as the result of dividing the sector’s income (as we saw earlier, given by bjγMb_j \gamma M) by the total quantity of commodities produced, that is, the money that entered the sector from the sale of commodities divided by the quantity of commodities produced, then the average price is:

pj=bjγMajNlj=bjγMljajN=γMNbjajlj\left\langle p_{j}\right\rangle =\frac{b_{j}\gamma M}{\frac{a_{j}N}{l_{j}}}=\frac{b_{j}\gamma Ml_{j}}{a_{j}N}=\frac{\gamma M}{N}\frac{b_{j}}{a_{j}}l_{j}

Money Equation

We now want to understand how the change in income depends on the distribution of labor. Certainly, a sector’s income depends on the quantity of commodities produced. Since no one consumes more than they need, the maximum consumption corresponds to the “social demand” for each commodity jj.

As each agent consumes 1/cj1/c_j per step (meaning they consume one unit of the commodity every cjc_j steps), the social demand is given by N/cjN/c_j. Similarly, each agent employed in sector jj produces 1/lj1/l_j, and since the number of agents in the sector is ajNa_j N, the total amount of commodity produced in the sector is ajN/lja_j N/l_j.

Thus, analogous to what we did previously, the flow, or the production error given by the difference between the quantity of commodity produced and consumed, is given by:

ξj(t)=ajNljNcj\xi_{j}\left(t\right)=\frac{a_{j}N}{l_{j}}-\frac{N}{c_{j}}

Evidently, ξj>0\xi_{j}>0 represents overproduction, and ξj<0\xi_{j}< 0 implies that not enough is being produced, while ξj=0\xi_{j}=0 denotes equilibrium. If we assume that when there is overproduction (underproduction) the price falls (rises), then the change in sector income is proportional, but inversely, to ξj\xi_{j}, that is, dbj/dt=ωξj(t)db_j/dt=-\omega \xi_j(t), where ω\omega is a positive constant that adjusts the intensity with which the income distribution reacts to the production error.

This equation is known as the money equation because it defines how the allocation of money across different sectors varies according to overproduction or underproduction of commodities. It can be written in a more complete form as:

dbjdt=ωξj(t)=ωN(ajlj1cj)\frac{db_{j}}{dt}=-\omega\xi_{j}\left(t\right)=-\omega N\left(\frac{a_{j}}{l_{j}}-\frac{1}{c_{j}}\right)

If we define a matrix AA where the only nonzero elements are the diagonal elements aiia_{ii}, and using the production vector l=(1/l1,...,1/lL)\boldsymbol{l}=(1/l_1,...,1/l_L) as a column vector, we can write the money equation for the entire economy as:

dbdt=Nω(Alc)\frac{d\boldsymbol{b}}{dt}=-N\omega\left(\boldsymbol{A}\boldsymbol{l}-\boldsymbol{c}\right)

Since the consumption vector is c=(1/c1,...,1/cL)\boldsymbol{c}=(1/c_1,...,1/c_L), we will now investigate how the equilibrium of this system, formed by the labor and money equations, is achieved.

Equilibrium

Bringing together the previous results, we have that a simple commodity system is described by the following system of 2L2L coupled differential equations (the labor equation and the money equation for the entire economy):

a˙=ψ(γMbN(pc)a)b˙=ωN(Alc)\begin{align*} \dot{\boldsymbol{a}} & =\psi\left(\gamma M\boldsymbol{b}-N\left(\boldsymbol{p}\cdot\boldsymbol{c}\right)\boldsymbol{a}\right)\\ \dot{\boldsymbol{b}} & =-\omega N\left(\boldsymbol{A}\boldsymbol{l}-\boldsymbol{c}\right) \end{align*}

Where:

pj=γMNbjajlj\left\langle p_{j}\right\rangle =\frac{\gamma M}{N}\frac{b_{j}}{a_{j}}l_{j}

And with the following constraints:

j=1Laj=10aj1j=1Lbj=10bj1j=1Lljcj=1=ηlj,cj>0M,N>0ω,ψ>00γ1\begin{align*} \sum_{j=1}^{L}a_{j} & =1 & 0\leq a_{j}\leq1\\ \sum_{j=1}^{L}b_{j} & =1 & 0\leq b_{j}\leq1\\ \sum_{j=1}^{L}\frac{l_{j}}{c_{j}} & =1=\eta & l_{j},c_{j}>0\\ M,N & >0 & \omega,\psi>0\\ 0\leq\gamma & \leq1 \end{align*}

And:

  • MM (NN) is the total amount of money (population) in the system.

  • aja_{j} is the fraction of workers producing commodity jj at a given moment in time. ajNa_{j}N is then the number of workers in sector jj, and a\boldsymbol{a} is the vector formed by the elements aja_{j}. Meanwhile, A\boldsymbol{A} is a matrix where the only nonzero elements are the diagonal elements (i,i)(i,i), which are the elements aia_{i}.

  • γ\gamma is the fraction of money exchanged per unit of time, so γM\gamma M is the velocity of money.

  • bjb_{j} is the fraction of γ\gamma received by the sector producing commodity jj at a given time, and b\boldsymbol{b} is the vector formed by the elements bjb_{j}.

  • ljl_{j} (cjc_{j}) is the time required for a commodity jj to be produced (consumed). l\boldsymbol{l} (c\boldsymbol{c}) is the vector formed by the elements 1/lj1/l_{j} (1/cj1/c_{j}).

  • ω\omega (ψ\psi) is a constant that regulates the intensity with which workers (income) migrate between sectors.

  • pj\left\langle p_{j}\right\rangle is the average price of commodity jj, and p\boldsymbol{p} is the vector formed by the elements pj\left\langle p_{j}\right\rangle.

In summary, this system works according to the following scheme: a certain division of labor results in over or underproduction of commodities, which activates a price correction mechanism based on supply and demand. This causes a change in sector income, which consequently leads agents to switch sectors, resulting in a new division of labor.

This system has a single equilibrium point given by:

a=(l1c1,,lLcL)=b\boldsymbol{a}^{*}=\left(\frac{l_{1}}{c_{1}},\dots,\frac{l_{L}}{c_{L}}\right)=\boldsymbol{b}^{*}

To facilitate understanding, let us first revisit the equations for a single sector jj:

a˙j=ψ(bjγMajNk=1Lpkck)b˙j=ωN(ajlj1cj)\begin{align*} \dot{a}_{j} & =\psi\left(b_{j}\gamma M-a_{j}N\sum_{k=1}^{L}\frac{\left\langle p_{k}\right\rangle }{c_{k}}\right)\\ \dot{b}_{j} & =-\omega N\left(\frac{a_{j}}{l_{j}}-\frac{1}{c_{j}}\right) \end{align*}

Considering the equilibrium situation, that is, when there are no more variations (a˙j=b˙j=0\dot{a}_{j}=\dot{b}_{j}=0):

0=ψ(bjγMajNk=1Lpkck)0=ωN(ajlj1cj)\begin{align*} 0 & =\psi\left(b_{j}^{*}\gamma M-a_{j}^{*}N\sum_{k=1}^{L}\frac{\left\langle p_{k}^{*}\right\rangle }{c_{k}}\right)\\ 0 & =-\omega N\left(\frac{a_{j}^{*}}{l_{j}}-\frac{1}{c_{j}}\right) \end{align*}

Or simply:

0=bjγMajNk=1Lpkck0=ajlj1cj\begin{align*} 0 & =b_{j}^{*}\gamma M-a_{j}^{*}N\sum_{k=1}^{L}\frac{\left\langle p_{k}^{*}\right\rangle }{c_{k}}\\ 0 & =\frac{a_{j}^{*}}{l_{j}}-\frac{1}{c_{j}} \end{align*}

From the second equation, we directly obtain:

aj=ljcja_{j}^{*}=\frac{l_{j}}{c_{j}}

Substituting into the first equation, and also replacing the definition of the average price, we have:

0=bjγM(aj)Nk=1L1ck(pk)bjγM=(ljcj)Nk=1L1ck(γMNbkaklk)bj=ljcjk=1Llkckbkak\begin{align*} 0 & =b_{j}^{*}\gamma M-\left(a_{j}^{*}\right)N\sum_{k=1}^{L}\frac{1}{c_{k}}\left(\left\langle p_{k}^{*}\right\rangle \right)\\ -b_{j}^{*}\gamma M & =-\left(\frac{l_{j}}{c_{j}}\right)N\sum_{k=1}^{L}\frac{1}{c_{k}}\left(\frac{\gamma M}{N}\frac{b_{k}^{*}}{a_{k}^{*}}l_{k}\right)\\ -b_{j}^{*} & =-\frac{l_{j}}{c_{j}}\sum_{k=1}^{L}\frac{l_{k}}{c_{k}}\frac{b_{k}^{*}}{a_{k}^{*}} \end{align*}

Substituting again aj=ljcja_{j}^{*}=\frac{l_{j}}{c_{j}} (a term that reappeared because of pk\left\langle p_{k}\right\rangle):

bj=ljcjk=1Llkck1akbkbj=ljcjk=1Llkckcklkbkbj=ljcjk=1Lbk\begin{align*} -b_{j}^{*} & =-\frac{l_{j}}{c_{j}}\sum_{k=1}^{L}\frac{l_{k}}{c_{k}}\frac{1}{a_{k}^{*}}b_{k}^{*}\\ -b_{j}^{*} & =-\frac{l_{j}}{c_{j}}\sum_{k=1}^{L}\frac{l_{k}}{c_{k}}\frac{c_{k}}{l_{k}}b_{k}^{*}\\ -b_{j}^{*} & =-\frac{l_{j}}{c_{j}}\sum_{k=1}^{L}b_{k}^{*} \end{align*}

And since k=1Lbk=1\sum_{k=1}^{L}b_{k}^{*}=1, then:

bj=ljcj=ajb_{j}^{*}=\frac{l_{j}}{c_{j}}=a_{j}^{*}

That is, when the system is in equilibrium, the proportion of agents employed in each sector is equal to the proportion of money each sector receives, which is proportional to lj/cjl_{j}/c_{j}. This makes sense because all agents in this model require the same income to satisfy their needs. We had already shown that the efficient division of labor occurs when aj=lj/cja_{j}=l_{j}/c_{j}, so a result we obtain without much effort is that, at equilibrium, the division of labor tends to maximum efficiency.

Furthermore, this equilibrium point is asymptotically stable, that is, regardless of the initial conditions, the system always evolves toward the equilibrium point. To prove this, we first need to a) linearize the system and b) shift the equilibrium point to the origin, then we can apply Lyapunov’s direct method.

The equations are:

a˙j=ψγMbjψk=1LlkγMckajbkakb˙j=ωNcjωNljaj\begin{align*} \dot{a}_{j} & =\psi\gamma Mb_{j}-\psi\sum_{k=1}^{L}\frac{l_{k}\gamma M}{c_{k}}\frac{a_{j}b_{k}}{a_{k}}\\ \dot{b}_{j} & =\frac{\omega N}{c_{j}}-\frac{\omega N}{l_{j}}a_{j} \end{align*}

We need to linearize the first term. First, since j=1Laj=1\sum_{j=1}^{L}a_{j}=1, it follows that j=1La˙j=0\sum_{j=1}^{L}\dot{a}_{j}=0, because the variation in each element must be ‘cancelled’ by an equivalent variation of opposite sign in another (or other) elements so that the sum remains constant. Thus:

a˙j=ψγMbjψk=1LlkγMckajbkakj=1La˙j=j=1L[ψγMbjψk=1LlkγMckajbkak]0=j=1Lbjj,k=1Llkckajbkakj=1Lbj=j,k=1Lljckajbkak(j=1Lbj)=(j=1Laj)(k=1Llkckbkak)1=k=1Llkckbkak\begin{align*} \dot{a}_{j} & =\psi\gamma Mb_{j}-\psi\sum_{k=1}^{L}\frac{l_{k}\gamma M}{c_{k}}\frac{a_{j}b_{k}}{a_{k}}\\ \sum_{j=1}^{L}\dot{a}_{j} & =\sum_{j=1}^{L}\left[\psi\gamma Mb_{j}-\psi\sum_{k=1}^{L}\frac{l_{k}\gamma M}{c_{k}}\frac{a_{j}b_{k}}{a_{k}}\right]\\ 0 & =\sum_{j=1}^{L} b_{j}-\sum_{j,k=1}^{L}\frac{l_{k}}{c_{k}}\frac{a_{j}b_{k}}{a_{k}}\\ \sum_{j=1}^{L}b_{j} & =\sum_{j,k=1}^{L}\frac{l_{j}}{c_{k}}\frac{a_{j}b_{k}}{a_{k}}\\ \left(\sum_{j=1}^{L}b_{j}\right) & =\left(\sum_{j=1}^{L}a_{j}\right)\left(\sum_{k=1}^{L}\frac{l_{k}}{c_{k}}\frac{b_{k}}{a_{k}}\right)\\ 1 & =\sum_{k=1}^{L}\frac{l_{k}}{c_{k}}\frac{b_{k}}{a_{k}} \end{align*}

Where we use the fact that j=1Lbj=j=1Laj=1\sum_{j=1}^{L}b_{j}=\sum_{j=1}^{L}a_{j}=1.
Revisiting our equation then:

a˙j=ψγMbjψk=1LlkγMckajbkak=ψγMbjψγMajk=1Llkckbkak=ψγMbjψγMajψ\begin{align*} \dot{a}_{j} & =\psi\gamma Mb_{j}-\psi\sum_{k=1}^{L}\frac{l_{k}\gamma M}{c_{k}}\frac{a_{j}b_{k}}{a_{k}}\\ & =\psi\gamma Mb_{j}-\psi\gamma Ma_{j}\sum_{k=1}^{L}\frac{l_{k}}{c_{k}}\frac{b_{k}}{a_{k}}\\ & =\psi\gamma Mb_{j}-\psi\gamma Ma_{j}\psi \end{align*}

That is:

a˙j=ψγM(bjaj)\dot{a}_{j}=\psi\gamma M\left(b_{j}-a_{j}\right)

Now, with a simple change of variables xj=ajljcjx_{j}=a_{j}-\frac{l_{j}}{c_{j}} and yj=bjljcjy_{j}=b_{j}-\frac{l_{j}}{c_{j}}, we shift the equilibrium point to the origin. With this change, for the labor equation, we have:

a˙j=ψγM(bjaj)ddt(xj+ljcj)=ψγM([yj+ljcj][xj+ljcj])x˙j=ψγM(yjxj)\begin{align*} \dot{a}_{j} & =\psi\gamma M\left(b_{j}-a_{j}\right)\\ \frac{d}{dt}\left(x_{j}+\frac{l_{j}}{c_{j}}\right) & =\psi\gamma M\left(\left[y_{j}+\frac{l_{j}}{c_{j}}\right]-\left[x_{j}+\frac{l_{j}}{c_{j}}\right]\right)\\ \dot{x}_{j} & =\psi\gamma M\left(y_{j}-x_{j}\right) \end{align*}

Ou em notação vetorial:

x˙=ψγM(yx)\dot{\boldsymbol{x}}=\psi\gamma M\left(\boldsymbol{y}-\boldsymbol{x}\right)

And for the money equation:

b˙j=ωN(ajlj1cj)ddt(yj+ljcj)=ωN(1lj(xj+ljcj)1cj)y˙j=ωN(xjlj)\begin{align*} \dot{b}_{j} & =-\omega N\left(\frac{a_{j}}{l_{j}}-\frac{1}{c_{j}}\right)\\ \frac{d}{dt}\left(y_{j}+\frac{l_{j}}{c_{j}}\right) & =-\omega N\left(\frac{1}{l_{j}}\left(x_{j}+\frac{l_{j}}{c_{j}}\right)-\frac{1}{c_{j}}\right)\\ \dot{y}_{j} & =-\omega N\left(\frac{x_{j}}{l_{j}}\right) \end{align*}

Or in vector notation:

y=ωnXl\boldsymbol{y}=-\omega n\boldsymbol{X}\boldsymbol{l}

We then have:

x˙j=ψγM(yjxj)y˙j=ωN(xjlj)\begin{align*} \dot{x}_{j} & =\psi\gamma M\left(y_{j}-x_{j}\right)\\ \dot{y}_{j} & =-\omega N\left(\frac{x_{j}}{l_{j}}\right) \end{align*}

Or:

x˙=ψγM(yx)y=ωnXl\begin{align*} \dot{\boldsymbol{x}} & =\psi\gamma M\left(\boldsymbol{y}-\boldsymbol{x}\right)\\ \boldsymbol{y} & =-\omega n\boldsymbol{X}\boldsymbol{l} \end{align*}

Analogously to A\boldsymbol{A}, X\boldsymbol{X} is the matrix where only the diagonal elements xiix_{ii} are nonzero. Since the equilibrium is now at the origin, the terms xjx_{j} and yjy_{j} represent an error in production and income in sector jj.

To formalize this, we define a function V:R2LRV:\mathbb{R}^{2L}\rightarrow\mathbb{R}, meaning that VV assigns a real number to each vector of variables (x1,,xL,y1,,yL)\left(x_{1},\dots,x_{L},y_{1},\dots,y_{L}\right). This function allows us to assign a scalar value to each configuration of the system. More explicitly:

V(x1,,xL,y1,,yL)=12ψγMxj2+12ωNljyj2V\left(x_{1},\dots,x_{L},y_{1},\dots,y_{L}\right)=\frac{1}{2\psi\gamma M}\sum x_{j}^{2}+\frac{1}{2\omega N}\sum l_{j}y_{j}^{2}

We thus have a scalar measure of the error for each possible state of our system. Obviously, if we are at the origin xj=yj=0x_{j}=y_{j}=0, then V=0V=0, and if we are away from the origin, then V>0V>0, since xjx_{j} and yjy_{j} are real numbers greater than or equal to zero. All terms are necessarily non-negative, and the choice of this specific form for VV is to simplify later calculations.

What we want is for VV to be a Lyapunov function. For this to be possible, VV must first satisfy V=0V=0 at the origin and V>0V>0 in the neighborhood of the origin. As discussed, both cases are satisfied with this definition of VV. The last requirement is that V˙0\dot{V}\leq0. Taking the derivative:

ddtV=ddt(12ψγMxj2+12ωNljyj2)=12ψγMddt(xj2)+12ωNljddt(yj2)=12ψγM2xjx˙j+12ωNlj2yjy˙jV˙=1ψγMxjx˙j+1ωNljyjy˙j\begin{align*} \frac{d}{dt}V= & \frac{d}{dt}\left(\frac{1}{2\psi\gamma M}\sum x_{j}^{2}+\frac{1}{2\omega N}\sum l_{j}y_{j}^{2}\right)\\ = & \frac{1}{2\psi\gamma M}\sum\frac{d}{dt}\left(x_{j}^{2}\right)+\frac{1}{2\omega N}\sum l_{j}\frac{d}{dt}\left(y_{j}^{2}\right)\\ = & \frac{1}{2\psi\gamma M}\sum2x_{j}\dot{x}_{j}+\frac{1}{2\omega N}\sum l_{j}2y_{j}\dot{y}_{j}\\ \dot{V}= & \frac{1}{\psi\gamma M}\sum x_{j}\dot{x}_{j}+\frac{1}{\omega N}\sum l_{j}y_{j}\dot{y}_{j} \end{align*}

Since the derivative of a sum is the sum of the derivatives, substituting x˙j\dot{x}_{j} and y˙j\dot{y}_{j}:

V˙=1ψγMxjx˙j+1ωNljyjy˙j=1ψγMxj[ψγM(yjxj)]+1ωNljyj[ωN(xjlj)]=xj(yjxj)yjxj=xjyjxj2yjxj\begin{align*} \dot{V}= & \frac{1}{\psi\gamma M}\sum x_{j}\dot{x}_{j}+\frac{1}{\omega N}\sum l_{j}y_{j}\dot{y}_{j}\\ = & \frac{1}{\psi\gamma M}\sum x_{j}\left[\psi\gamma M\left(y_{j}-x_{j}\right)\right]+\frac{1}{\omega N}\sum l_{j}y_{j}\left[-\omega N\left(\frac{x_{j}}{l_{j}}\right)\right]\\ = & \sum x_{j}\left(y_{j}-x_{j}\right)-\sum y_{j}x_{j}\\ = & \sum x_{j}y_{j}-\sum x_{j}^{2}-\sum y_{j}x_{j} \end{align*}

Or simply:

V˙=xj2\dot{V}=-\sum x_{j}^{2}

Evidently, V˙0\dot{V}\leq0, as we wanted. Moreover, V˙=0\dot{V}=0 occurs only for x=0\boldsymbol{x}^{*}=0; in all other cases, we have V˙<0\dot{V}< 0. That is, the scalar error given by VV always decreases over time until equilibrium is reached, where the error is zero and then stabilizes. V˙<0\dot{V}< 0 in the neighborhood of the equilibrium point is what defines a point as asymptotically stable. In this case, since the Lyapunov function is valid for all of R2L\mathbb{R}^{2L} and not just near the equilibrium point, we can say that the point is globally asymptotically stable.

Finally, we can reach the result that interests us most: the law of value. Labor values are attractors for the average prices. That is:

limtp(t)=λv\lim_{t\rightarrow\infty}\boldsymbol{p}\left(t\right)=\lambda\boldsymbol{v}

Where v=(l1,,lL)\boldsymbol{v}=\left(l_{1},\dots,l_{L}\right). Since 1/lj1/l_{j} denotes how many units of commodity jj are produced per unit of time, ljl_{j} denotes how many units of time are required to produce commodity jj. Returning to the definition of the average price and using the equilibrium point (aj=bja_{j}=b_{j}), we have:

pj=γMNbjajlj=(γMN)lj\left\langle p_{j}\right\rangle =\frac{\gamma M}{N}\frac{b_{j}}{a_{j}}l_{j}=\left(\frac{\gamma M}{N}\right)l_{j}

Where evidently we then have λ=γM/N\lambda=\gamma M/N, representing the monetary value of one unit of labor-time. As the system tends toward equilibrium, the prices p\boldsymbol{p} tend toward λv\lambda\boldsymbol{v}.

It is interesting to note that the numerator of λ\lambda is the same as that calculated for the simulation: the velocity of money. But the denominator is different. We must remember that the denominator is the labor expended and exchanged in the market over a given time interval. If our time interval is one unit, and we have NN agents in a system where all agents are always necessarily producing, then in one unit of time, NN units of labor-time are incorporated into the commodities.

Since we are analyzing only the goods being exchanged in the market, we can see on average, NN units of labor-time are exchanged per unit of time. We can also note that, in a way, when agents switch sectors seeking to maximize their income, they always try to work in a sector where the commodity they produce will be better sold.

Conclusion

The quantitative part of Marxist value theory tells us that prices are related to the socially necessary labor time required to produce a commodity, and deviations of prices from values are signals of social errors that serve to redistribute labor. To analyze this more closely, let us define the concept of labour commanded: ϵj=pjλ\left\langle \epsilon_{j}\right\rangle=\frac{\left\langle p_{j}\right\rangle }{\lambda}.

This quantity represents how much socially necessary labor time, on average, a commodity “contains” when it is exchanged in the market. Recall that the MELT, or “Monetary Expression of Labor Time,” has units of money per unit of labor-time. Since the price is in money, ϵ\epsilon has units of labor-time. If ϵj<lj\left\langle \epsilon_{j}\right\rangle < l_j, this means the commodity has been traded at a depreciated price; obviously, if ϵj>lj\left\langle \epsilon_{j}\right\rangle > l_j, then the commodity is overvalued. Evidently, all these quantities are objective and independent of any individual subjectivity about the utility of the commodity, and at equilibrium ϵj=lj\left\langle \epsilon_{j}\right\rangle = l_j.

Manipulating the necessary labor, it can be rewritten as:

ϵj=1λpj=NγMγMNbjajlj=bjajlj\left\langle \epsilon_{j}\right\rangle =\frac{1}{\lambda}\left\langle p_{j}\right\rangle =\frac{N}{\gamma M}\frac{\gamma M}{N}\frac{b_{j}}{a_{j}}l_{j}=\frac{b_{j}}{a_{j}}l_{j}

That is, bj=ϵjajljb_j=\left\langle \epsilon_{j}\right\rangle \frac{a_{j}}{l_{j}}. Substituting into the linearized version of the labor equation, we have:

a˙j=ψγM(bjaj)=ψγMaj(ϵjlj1)\dot{a}_{j}=\psi\gamma M\left(b_{j}-a_{j}\right)=\psi\gamma Ma_{j}\left(\frac{\left\langle \epsilon_{j}\right\rangle }{l_{j}}-1\right)

Or simply:

a˙=ψγMa(ϵjlj1)\dot{\boldsymbol{a}}=\psi\gamma M\boldsymbol{a}\left(\frac{\left\langle \epsilon_{j}\right\rangle }{l_{j}}-1\right)

Looking at the term in parentheses, if (ϵjlj>1)\left(\frac{\left\langle \epsilon_{j}\right\rangle }{l_{j}}>1\right), then the subtraction is positive and the commodity is overvalued, signaling the need to expand the sector and increase its production. Evidently, (ϵjlj<1)\left(\frac{\left\langle \epsilon_{j}\right\rangle }{l_{j}}< 1\right) signals the opposite. It is worth noting that the equilibrium we are working with is a statistical equilibrium, meaning we are discussing an ‘average’ relationship between value and price. Even at equilibrium, an individual transaction can occur at different prices. The law of value, as presented, states that at equilibrium, the average price of commodities is proportional to their labor values.

It is important to note that this model does not exhaust the possibilities for investigating the topic. There are models that explore, for example, complex production systems where one commodity is required to produce another (Krause), but I believe that for a first contact, the content presented here already fulfills its purpose.

If we define a coefficient αij\alpha_{ij}, which indicates that 1 hour of labor in the production of commodity ii is equivalent to αij\alpha_{ij} hours of labor in commodity jj, we can then write:

αij=pi/lipj/lj=γMNbiaili/liγMNbjajlj/lj=bi/aibj/aj\alpha_{ij}=\frac{\left\langle p_{i}\right\rangle /l_{i}}{\left\langle p_{j}\right\rangle /l_{j}}=\frac{\frac{\gamma M}{N}\frac{b_{i}}{a_{i}}l_{i}/l_{i}}{\frac{\gamma M}{N}\frac{b_{j}}{a_{j}}l_{j}/l_{j}}=\frac{b_{i}/a_{i}}{b_{j}/a_{j}}

First of all, we can note that pili\frac{\left\langle p_{i}\right\rangle }{l_{i}} gives us the amount of money that one unit of labor-time in the production of commodity ii is measured in money. So, when we divide this amount for commodity ii by the corresponding amount for commodity jj, we obtain the “price” of one unit of labor-time in the production of commodity ii expressed in units of labor-time for the production of commodity jj.

In other words, this ratio “indicates that 1 hour of labor in the production of commodity ii is equivalent to αij\alpha_{ij} hours of labor in commodity jj.” For example, if commodity ii has 2 units of money per unit of labor-time and commodity jj has 4, then αij=1/2\alpha_{ij}=1/2, meaning that for each time interval in which commodity jj is equivalent to 1 unit of money, this time corresponds to 0.5 units of money for commodity ii.

We have already obtained the result that at equilibrium aj=bja_j=b_j, so evidently at equilibrium bj/aj=1b_j/a_j=1, and consequently αij=1\alpha_{ij}=1. In other words, the statement that values are attractors for prices at equilibrium is equivalent to the statement that homogeneous coefficients are attractors for heterogeneous coefficients at equilibrium.

The law of value is a dynamic theory of labor allocation based on the tendency of heterogeneous labor to be homogenized through commodity exchange. Evidently, this is an idealized scenario that allows us to understand some fundamental concepts for analyzing capitalism and is far from exhausting the subject.

In conclusion, the law of value is a phenomenon that emerges from the dynamic interaction of private commodity producers. In the model presented: values are global attractors for prices, prices in turn act as signals of errors that work to allocate the social division of available labor more efficiently across sectors, and the tendency of prices to approach value is the monetary expression of the tendency to allocate social labor efficiently. The MELT is an interesting constant because it summarizes a non-obvious relationship between a production phenomenon (production time) and a market phenomenon (prices). With the definition of labour commanded, we can have an indirect signal of whether the labor in the production of that commodity is socially necessary or not.

Perhaps most interestingly, the law of value operates “behind the scenes”; it emerges naturally from the system dynamics and does not need to be imposed directly at any point. It is also worth noting that the system’s equilibrium is statistical, meaning we look at the average price of a commodity, which can individually be exchanged at different prices even when the system reaches equilibrium. Moreover, the law of value can only emerge in an economic system that contains a feedback cycle between production, consumption, exchange, and the reallocation of labor resources.

import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt


# System parameters
psi = 0.1
gamma = 0.01
M = 1.0
omega = 0.01
N = 1.0
l = np.array([1,2])  # l1, l2
c = np.array([3, 3])   # c1, c2

# Initial conditions
a0 = np.array([1/3, 2/3])  # a1(0), a2(0)
b0 = np.array([0.5, 0.5])  # b1(0), b2(0)
y0 = np.concatenate((a0, b0))  # Initial state vector

# Model
def model(t, y):
    a1, a2, b1, b2 = y
    S = (l[0]*b1)/(c[0]*a1) + (l[1]*b2)/(c[1]*a2)
    da1dt = psi*gamma*M*(b1 - a1*S)
    da2dt = psi*gamma*M*(b2 - a2*S)
    db1dt = -omega*N*(a1/l[0] - 1/c[0])
    db2dt = -omega*N*(a2/l[1] - 1/c[1])
    return [da1dt, da2dt, db1dt, db2dt]

#N(M) is just a quantity of workers (money). The total quantity of workers (money) at any given moment is not necessarily constant. In equilibrium, only Σaj=1 is guaranteed, since in equilibrium aj=lj/cj and we define the parameters cj and lk such that Σlj/cj=1. Outside of equilibrium, there is no guarantee that Σaj=bj=1.

#This is an additional and special constraint. All other constraints depend on the parameters, but this constraint is a set of additional equations beyond the system of differential equations.

#To ensure this constraint, we will apply normalization at each step.
#Note: It is possible to improve accuracy, but I believe the result is sufficient.

# Normalization
def normalize(y):
    y = y.copy()
    a_total = y[0] + y[1]
    b_total = y[2] + y[3]
    y[0] /= a_total
    y[1] /= a_total
    y[2] /= b_total
    y[3] /= b_total
    return y

#I think that another option is to use the restriction to reduce the dimensions of the system in two equations, writing the last one as the one minus the sum of the others. So, if we've got L commodity, we don't have 2L equations, but 2L-2. I guess this is the most elegant solution, and I thought of it late, so I'll just put this note here.

# Initial state
y = y0
t0, tf, dt = 0, 10000, 0.01
t_values = [t0]
y_values = [y]

t = t0
while t < tf:
    # Integrate a small step
    sol = solve_ivp(model, [t, t+dt], y, method='RK45')
    y_new = sol.y[:, -1]

    # Normalize before storing and using as initial condition
    y_new = normalize(y_new)

    # Store and update for the next step
    y_values.append(y_new)
    y = y_new
    t += dt
    t_values.append(t)

# Convert to array
y_values = np.array(y_values)
t_values = np.array(t_values)

# Plot
plt.figure(figsize=(10,6))
plt.plot(t_values, y_values[:,0], label='a1', color='blue')
plt.plot(t_values, y_values[:,1], label='a2', color='orange')
plt.plot(t_values, y_values[:,2], label='b1', color='green')
plt.plot(t_values, y_values[:,3], label='b2', color='red')
plt.xlabel('Time')
plt.ylabel('Normalized values')
plt.title('Evolution of a_j and b_j with step-by-step normalization')
plt.legend()
plt.grid(True)
plt.show()
<Figure size 1000x600 with 1 Axes>
#I'm kidding, I have trouble knowing when to stop, so here is the reduced system with 2L-2 equations for L=2. Did you know that I didn't sleep last night thinking about this? And it still bothers me that my result is not exact in the computational version of this model.

import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt


# System parameters
psi = 0.1
gamma = 0.01
M = 1.0
omega = 0.01
N = 1.0
l = np.array([1,2])  # l1, l2
c = np.array([3, 3])   # c1, c2

# Initial conditions
a0 = np.array([1/3])  # a1(0), a2(0)
b0 = np.array([0.5])  # b1(0), b2(0)
y0 = np.concatenate((a0, b0))  # Initial state vector


# Reduced model using normalization a2 = 1-a1, b2 = 1-b1
def model_reduced(t, y):
    a1, b1 = y
    a2 = 1 - a1
    b2 = 1 - b1

    # S term
    S = (l[0]*b1)/(c[0]*a1) + (l[1]*b2)/(c[1]*a2)

    # Derivatives for independent variables
    da1dt = psi*gamma*M*(b1 - a1*S)
    db1dt = -omega*N*(a1/l[0] - 1/c[0])

    return [da1dt, db1dt]

# Integration
t_eval = np.linspace(0, 10000, 1000)
sol = solve_ivp(model_reduced, [0, 10000], y0, t_eval=t_eval, method='RK45')

# Recover full variables
a1 = sol.y[0]
a2 = 1 - a1
b1 = sol.y[1]
b2 = 1 - b1

# Plot
plt.figure(figsize=(10,6))
plt.plot(sol.t, a1, label='a1', color='blue')
plt.plot(sol.t, a2, label='a2', color='orange')
plt.plot(sol.t, b1, label='b1', color='green')
plt.plot(sol.t, b2, label='b2', color='red')
plt.xlabel('Time')
plt.ylabel('Values')
plt.title('Evolution of a_j and b_j (reduced 2D system)')
plt.legend()
plt.grid(True)
plt.show()
<Figure size 1000x600 with 1 Axes>
References
  1. Wright, I. (2008). The Emergence of the Law of Value in a Dynamic Simple Commodity Economy. Review of Political Economy, 20(3), 367–391. 10.1080/09538250701661889