In the spirit of Galileo’s empiricismβ€”which has been described as the last resortof the failed mathematicianβ€”we present Parabellum, a program for simulatingand quantifying the outcomes of military engagements. As mathematical fundamentalists scribble away, attempting to find increasingly refined analyticalsolutions to the sub-problems of strategy, this simulation program already nowaddresses two of reality’s most persistent and pernicious shortcomings: itsapparent single-threadedness and its ambiguity.Regarding ambiguity; it has been said that facts speak for themselves withoverwhelming precision [1]. This is only exactly two thirds true: 1) facts dospeak for themselves, 2) with precision, but 3) not overwhelmingly so. Takethe French military disaster (or perhaps rather the Viet Minh military success)that was the fifty-six day siege known as the battle of Điện BiΓͺn Phα»§. It waspreceded by a world soaked in facts, all speaking for themselves, but none withthe ferocity that posterity since brought them.The French had built their fortress on the red earth of a valley encircled by ajungle pregnant with subtle facts of the Viet Minh’s presence.The French named their outposts after women; Beatrice, Gabrielle, Dominiqueβ€”this one: CΓ©line. The Viet Minh came in the night and the rain, ghosts insandals, hauling artillery up slopes where no European gunner would think agun could go. In the night, the French watched the dark green hills eruptwith fire. As the days and weeks progressed, the French reinforcements wouldcontinue, their birds of steel containing reports and gliding above a terrainboth discretely emitting the same fact: landing here is death. The airstripwould became a graveyard for Dakota transports, the night sky made starlesswith shrapnel and tracer, parachutes blooming in the nightβ€”some men landedalive, some did not. The wounded call out in French, in Vietnamese, and in theguttural language of the dying. On May 7, 1954, the last French radio messagecrackled out: β€œThe enemy is everywhere. The situation is very grave” [2].Regarding the single threadedness: Whether one (conservatively) subscribesto the Copenhagen Interpretation of quantum mechanicsβ€”where observationcollapses countless possible threads into a single, actual oneβ€”or (more fashionably) the Many-Worlds Interpretation [3], with its endlessly bifurcatingthreads of reality, weβ€”whatever we might refer toβ€”inhabit just one suchthread. Be it the only one or one among uncountably many, our experienceremains irrevocably confined to a single, linear trajectory.How is one then to reason probabilistically about futureβ€”potential or eventualβ€”outcomes under such ambiguous circumstances? From an information theoretical point of view, where does one locate the French error at CΓ©line?Parabellum, viewed in a vacuum, is thus a potentially parallelizable worldawaiting that which acts. Appendix A shows an example of single and paraleltrajectories. Recalling that counting is the bedrock of probability [4], Parabellum proposes the following procedure:1.Create 𝑛 simplified facsimiles of the reality about which one wishes to reason2.Set these in concurrent motion, recording 𝑑𝑖={(𝑠0,π‘Ž0),…,(π‘ π‘š,π‘Žπ‘š)}3.Compute statistics over {𝑑1,…,𝑑𝑛} to divine the value of strategy πœ‹(𝑠)β†’π‘ŽEach process can be thought of as consisting of a world (yielding states 𝑠) andthat which operates within it (yielding actions π‘Ž).A | CODEfrom jax import random, vmap, laximport parabellum as pbrng, key = random.split(random.PRNG(0))env, scene = pb.env.init_fn({"place": "ĐiΓͺn BiΓͺn PhΓΉ"})Load in jax programs and parabellum, and declare global varaiblesdef action_fn(rng): coord = random.normal(rng, (env.num_units, 2)) shoot = random.bernoulli(rng, 0.5, shape=(env.num_units,)) return pb.types.Action(coord=coord, shoot=shoot)Function for taking random actiondef step_fn(state, rng): action = action_fn(rng) obs, state = env.step(rng, scene, state, action) return state, (state, action)Function for taking steps in a scan.rngs = random.split(rng, (n_steps, n_sims))Random numbers for simualtions, and parallel simulationsobs, state = env.reset(rngs[0][0], scene)state, seq = lax.scan(step, state, rngs[0])Running 𝑛 trajectories in parallel, we merely use vmap:obs, state = vmap(env.reset, in_axes=(0, None))(rngs[0], scene)state, seq = lax.scan(vmap(step), state, rngs)REFERENCES[1]J. Conrad, Typhoon. United Kingdom: Pall Mall Magazine, 1902.[2]P. W. Shull, β€œThe Battle of Dien Bien Phu: Strategic, Operational and Tactical Failure:,” Fort Belvoir, VA, Apr. 1999. doi: 10.21236/ADA363910.[3]J. L. Borges, β€œThe Garden of Forking Paths,” Ficciones. Grove Press, NewYork, 1962.[4]R. L. Schilling, Measures, Integrals and Martingales, 2nd ed. Cambridge:Cambridge university press, 2017.