% Basic 5-period OLG Model 

%----------------------------------------------------------------
% 1. Defining variables
%----------------------------------------------------------------

var Y c1 c2 c3 c4 c5 k2 k3 k4 k5 n1 n2 n3 K N w r b C i;


parameters a e d T J tau tauk tauc g;  

%----------------------------------------------------------------
% 2. Calibration
%----------------------------------------------------------------

beta      = 1.011;                  % discount factor
a      = 0.36;                   % capital share
e      = 4;                      % risk aversion
d      = 0.054;                  % depreciation rate
J      = 3;                      % retirement age
T      = 5;                      % living period
tau     = 0.1;                    % income tax rate
tauk     = 0.1;                    % capital tax rate
tauc     = 0.1;                    % consumption tax rate
g      = 2;                      % utility weight


%----------------------------------------------------------------
% 3. Model
%----------------------------------------------------------------

model; 
r     = a*(K(-1)^(a-1))*N^(1-a)-d;                     % interest rate
w     = (1-a)*(K(-1)^a)*N^(-a);                          % wage
b     = 1/2 * w * N * 1/5;                                       % pension benefit

//constraint
k2 = (1-tau)*w*n1-c1-tauc*c1;
k3 = (1+r)*(1-tauk)*k2(-1) + (1-tau)*w*n2-c2-tauc*c2;
k4 = (1+r)*(1-tauk)*k3(-1) + (1-tau)*w*n3-c3-tauc*c3;
k5 = (1+r)*(1-tauk)*k4(-1) + b-c4-(tauc*c4);
c5+tauc*c5 = b + (1+r)*(1-tauk)*k5(-1);

N     = (n1+n2+n3)/T;                                    % aggregate labor
K     = (k2+k3+k4+k5)/T;                                 % aggregate capital
C     = (c1+c2+c3+c4+c5)/T;                              % aggregate consumption 
Y     = K(-1)^a*N^(1-a);                             % output



(1/(1 + r) * (1 - tauk)) * w * (1 - tau) * (1 - n1) = (1 / (1 + r) * (1 - tauc)) * c1 * (1 + tauc);
(1/(1 + r) * (1 - tauk)) * w * (1 - tau) * (1 - n2) = (1 / (1 + r) * (1 - tauc)) * c2 * (1 + tauc);
(1/(1 + r) * (1 - tauk)) * w * (1 - tau) * (1 - n3) = (1 / (1 + r) * (1 - tauc)) * c3 * (1 + tauc);
0 = (1 / (1 + r) * (1 - tauc)) * c4 * (1 + tauc);

 

g*c1  = (1-tau)*w*(1-n1);                                 % labor-consumption relation FOC age=1
g*c2  = (1-tau)*w*(1-n2);                                 % labor-consumption relation FOC age=2
g*c3  = (1-tau)*w*(1-n3);                                 % labor-consumption relation FOC age=3


i     = K-(1-d)*K(-1);                                                   % Investment

end;

%----------------------------------------------------------------
% 4. Computation
%----------------------------------------------------------------

initval;
Y  = 0.10537;               
c1 = 0.0952;
c2 = 0.1024;
c3 = 0.1102;
c4 = 0.0807;
c5 = 0.0968;
k2 = 0.0207;
k3 = 0.0416;
k4 = 0.0611;
k5 = 0.0481;
n1 = 0.3784;
n2 = 0.3313;
n3 = 0.2807;
K = 0.0343;
N = 0.1981;
w = 0.34043;
r = 1.1058;
b = 0.0034;
C = 0.097065;
i = 0.0019;
//z = 1; 
end;

resid;
steady;
//check;

//shocks;
//var z;
//periods 5;
//values 0.05;
//end;

simul(periods=100);