Imported from fintech-research/ai-lab-investment (
paper/AGENTS.md). Install upstream withnpx skills add fintech-research/ai-lab-investment --skill paper. Copyright stays with the author.
AGENTS.md — paper/
Rules for working in the paper/ directory. Global rules are in @../AGENTS.md.
Writing Style
- No bold paragraph headings in the main body. In
_introduction.qmd,_calibration.qmd,_valuation.qmd,_discussion.qmd, and_conclusion.qmd,**Bold text.**as a pseudo-heading is forbidden — use###/####for subdivisions, or just start the paragraph. Run-in bold labels are the established convention in_model.qmd's preemption-equilibrium derivation and throughout_appendix.qmd(proof steps, verification blocks, robustness exercises); match the surrounding file there rather than converting them. - Concise, formal prose. Top finance/management journal style (current target ladder starts at Management Science; see
../submission/README.md). No filler. - Equations: use Quarto cross-references
@eq-name, figures@fig-name, tables@tbl-name.
Paper Structure
Main entry: index.qmd (includes all sections, then references, then _appendix-cover.qmd + _appendix.qmd). Sections: _introduction.qmd (which itself includes _literature.qmd), _model.qmd, _calibration.qmd, _valuation.qmd, _discussion.qmd, _conclusion.qmd, _appendix.qmd. Bibliography: references.bib; style files econometrica.bst, title.tex, keywords.tex; render config _quarto.yaml.
Blind submission build
index-blind.qmd is the double-anonymous copy used for Management Science (just render-blind; see ../submission/README.md). It includes the same section files as index.qmd — if you add or remove an include in one, do the same in the other — but drops authors/affiliations/thanks and sets linestretch: 1.5. Its title, abstract, and keywords are duplicated from index.qmd (Quarto has no per-document metadata include); tests/test_paper_metadata.py fails if the two drift apart, if the keyword count leaves 3–5, or if keywords.tex stops matching. Profile selection lives in _quarto.yaml (identified = default, blind); split_blind_pdf.py cuts the rendered PDF into the manuscript and the e-companion at the _appendix-cover.qmd page.
_appendix.qmd is the Internet Appendix — always refer to it that way in prose ("Internet Appendix A", not "Appendix A"). Its sections: A. Proofs (Propositions 1–3 plus Numerical Finding 1, Dario's dilemma) and the result-taxonomy table; B. Numerical Verification Methods; C. Calibration Details and Data Sources (incl. the archetype-by-archetype sourcing and the φ̂ evidence blocks); D. Parameter Sensitivity; E. Robustness (parameter sensitivity, Cournot discussion + quantified fixed-pie contest, dynamic φ reallocation, duopoly Dario's dilemma, alternative regime structure); F. Single-Firm Illustrations in Regime H (fig-option-value, fig-comparative-statics); G. A Normalized Scale-Gap Diagnostic (fig-growth-decomposition); H. Credit Spreads and Default Probabilities (fig-credit-risk); I. Supplementary Literature and Motivation. Sections F–I, the derivations block at the top of B, @tbl-firms-data in C, and the discussion block at the end of E were demoted from the main text to hold it near the Management Science revision cap (32 pages at 1.5 spacing); keep the main-text pointers in sync if you edit them. The main text carries one table, @tbl-domains in _model.qmd's conventions subsection, collecting the operating assumptions, result domains, and measured approximation sizes: add a row there rather than a new qualifying paragraph elsewhere.
Results are labeled by method: Propositions 1–3 for analytical results, Numerical Finding 1 for Dario's dilemma. Do not promote a numerical finding to a proposition; @tbl-result-taxonomy in Internet Appendix A records the analytical status of each result and must stay in sync.
Proof Verification
The closed-form algebra of Propositions 1–3 is machine-checked in Lean 4/Mathlib (../lean/), and Internet Appendix A opens with a paragraph describing exactly what is and is not formalized. If you change a closed form, a first-order condition, or a comparative static, check whether the corresponding Lean theorem and that scope paragraph need updating (lean/README.md maps theorems to paper results).
IMPORTANT: Figures
- All figures are PDFs in
paper/figures/(one PDF + one PNG per figure, 11 total; 8 are referenced in the paper —fig_sample_paths,fig_lambda_timeline, andfig_firm_comparisonare generated for the slides only, and the generators stay inpaper.pyandgenerate_figures.py). - Figure logic lives in
src/ai_lab_investment/figures/paper.py— never ingenerate_figures.py. - To update a figure: edit the
create_*function inpaper.py, then runuv run python paper/generate_figures.py. - Do not add model code to
generate_figures.py. It is a thin wrapper only.
Key Model Facts (for editing proofs/text)
- Baseline: r=0.12, μ_L=0.01, μ_H=0.06, σ=0.25, λ=0.10, α=0.40, γ=1.50, δ=0.03
- β_L⁺ ≈ 3.01, β_H ≈ 1.55 (positive characteristic roots)
- Assumption A3: (1−1/β_L⁺)/α ≈ 1.67 ≥ 1; the pure-power F_L ∝ X^{β_H} is a convention (A₁ = 0), not a consequence of A3. Internet Appendix B benchmarks it two ways (
piecewise_option.py): with the post-switch scale precommitted to K_H* (closed form; paper's policy loses 2.6% at baseline) and unrestricted (envelope over K, finite differences; at baseline the optimum never invests before the switch and the paper's policy loses 6.9%). Keep the two labels distinct in prose. - φ̲ ≈ 0.18 (faith-based survival threshold, A_eff-channel), Ω ≈ 0.22; exact net threshold φ̃ ≈ 0.32 (both channels, eq-phi-tilde, λ-dependent); φ*(λ) > φ̃(λ) iff λ ≳ 0.034 at baseline
- Baseline results: X* ≈ 0.0047, K* ≈ 0.0067, φ* ≈ 0.70 (single-firm); X_F ≈ 0.12, K_F ≈ 0.26, X_P ≈ 0.0027, X_L^mono = X* ≈ 0.0047, preemption discount X_P/X_L^mono ≈ 0.57 (duopoly, ℓ=0); φ is role-invariant (φ_L = φ_F = φ*)
- Credit risk: spreads ≈0/12/41/97 bps at ℓ=0.05/0.20/0.40/0.70 (benchmark = r; recovery = inference liquidation value capped at C_D/r); 5-yr default (first-passage, L-regime drift) 0.63%/1.80%/4.85%/12.98% (evaluated at fixed X=0.10, K=1, φ=0.5)
- Full-model option value in λ (fig-lambda-option-value,
lambda_option_value_curve): decreasing for λ ≲ 0.025 (where φ*(λ) < φ̲), then increasing, convex up to λ ≈ 0.085 and CONCAVE beyond; over the policy range [0.1, 0.5] it is increasing and concave — the news-asymmetry prediction is that bad timeline news moves valuations more than good news - All results verified numerically; see
notebooks/model_derivation.ipynbfor SymPy derivations