This collection of files contains the codes to replicate the results in the "The Politics of Flat Taxes" by Daniel R. Carroll, Jim Dolmas, and Eric R. Young. In the paper, an equilbrium is solved for each of thousands of tax vectors. We did this by running each case separately on a cluster. Because of storage concerns we have included a limited number of results to be used as an example. Other researchers are free to use the codes to run their own large scale experiments. Extensions in the paper can be replicated by editting these codes appropriately. We have compiled this using Intel Fortran compilers and used a cluster housed at the Federal Reserve Bank of Kansas City to compute various cases. Smaller instances have been run on personal computers using Windows-based operating systems and Microsoft Visual Studio editting software. A description of the contents is now listed: xkpts50.in: wealth grid points used to solve household problem calibrated_values.out: values of the discount factor, TFP, weight on leisure in the utility function, and initial steady state transfer dist_0.064_0.234_0.273.f1: initial steady state distribution of wealth over evenly-spaced wealth grid saving.out: initial guess at value function and policy rules for the household problem UNCOVEREDSETS_RED.F90: This computes the steady and transition from a once-and-for all tax reform. Accepts a command line entry of the three tax rates in the order consumption tax, labor income tax, capital income tax (below the values of these tax rates are referred to 0.X1, 0.X2, and 0.X3, respectively). For cluster computing it is likely more efficient to write a job which reads these tax rates from a long list, assigning to each node one instance or line from the list. Note that screen print commands have been suppressed for efficiency on a cluster. Inputs: calibrated_value.out,xkpts50.in,saving.out,dist_0.064_0.234_0.273.f1 Outputs: saving_0.X1_0.X2_0.X3.out, saving_0.X1_0.X2_0.X3.f1, saving_0.X1_0.X2_0.X3.trans, exper_0.X1_0.X2_0.X3.out, agg_0.X1_0.X2_0.X3.out, status_0.X1_0.X2_0.X3.out saving_0.X1_0.X2_0.X3.out: final steady state value function and policy rules saving_0.X1_0.X2_0.X3.f1 : final steady state wealth distribution saving_0.X1_0.X2_0.X3.trans: transition path exper_0.X1_0.X2_0.X3.out: indirect value function from tax reform agg_0.X1_0.X2_0.X3.out : important final steady state aggregates status_0.X1_0.X2_0.X3.out: integer indicating success or type of error Requires files ffsqp.f,qld.f (proprietary solvers). Users may substitue another solver. This should result in very similar output, however we cannot guarantee identical output. DOLMAS1.f90: This calculates the Pareto set, Uncovered set, and Essential set from a collection of indirect value functions associated with feasible (non-negative transfer inducing) tax reforms. Calls VOTE_TEST.f90 and SIMPLX Inputs: dist_0.064_0.234_0.273.f1 Outputs: dolmas1.adj,dolmas1.adj2,dolmas1.ess,dolmas1.po,dolmas1.tmax,dolmas1.uc Most important outputs are dolmas1.ess which is the essential set (note if this is singleton then the element is a Condorcet winner), dolmas1.po (the Pareto set), dolmas1.uc (the Uncovered set), and dolmas1.tmax (the most preferred tax rate by household initial state). VOTE_TEST.f90: Loops over possible tax rate combinations and searches through subfolder 'value_functions' for cases of 0.X1, 0.X2, 0.X3. If the case exists, it then checks that the steady state transfer is non-negative (or very close to it) and then if there are any negative transfers later in the transition. If not then the policy is feasible, and the program assigns the indirect value function from exper_0.X1_0.X2_0.X3.out to the array v made allocatable in DOLMAS1.f90. DOLMAS1_WW.F90 (wealth-weighted voting): same as DOLMAS1.F90 but assigns voting weight according to an increasing function of wealth. DOLMAS1_PROB.F90 (probabilistic voting): similar to DOLMAS1.F90 but computes the result under probabilistic voting. User may choose an additive or multiplicative structure for the non-economic shocks. The winning policy is written to either dolmas_add.prob or dolmas_mult.prob based on this choice. ORDER OF EVENTS FOR USING THESE CODES -------------------------------------- To run a policy case, execute UNCOVEREDSETS_RED.F90 as described above. Repeat this step for every tax vector that the user wishes to include as a candidate reform. Save all results to a subfolder entitled 'value_functions'. Each run takes about 2-8 hours depending upon how far the solution to the reform is from the initial solution guess. To run a vote over different cases, run the desired version of DOLMAS1, depending on the type of voting concept desired. Note that this will almost certainly require running DOLMAS twice. The first instance will determine the number of feasible policies. VOTE_TEST will pause with a screen message informing the user of the number, N, of policies in the 'value_functions' subfolder which meet the feasibility condition. With this number in hand, terminate the job. Replace the value of ntpts in DOLMAS1 with N (line 6), and assign N to the dimensionality of tc,tk,tl,tr1, and tr2 in VOTE_TEST (line 13). Re-run, this time continuing passed the pause in VOTE_TEST. The run time on this is considerably shorter (anywhere from a few seconds to several minutes depending upon the number policies considered). For illustration, we have included in this collection of codes a 'value_functions' subfolder containing 6 policies (including the unique voting solution from the baseline in the paper (0.160_0.000_0.190)) which may be used to test these codes and understand their functions more deeply.