wrice's picture
Publish validated 5308666a249a73d8a2dea5d06ac929cbba53c131
312fb3f verified
Raw
History Blame Contribute Delete
7.69 kB
from pathlib import Path
import pytest
import tempfile
from recurrent_sampler_repro.evidence import audit_theorem
def get_project_root() -> Path:
return Path(__file__).resolve().parent.parent
def test_theorem_audit_document_order():
project_root = get_project_root()
res = audit_theorem(project_root)
assert res["evidence_status"] == "unavailable"
assert res["proof_reproduced"] is False
assert res["challenge_citation"] == "Theorem 4.2"
thms = res["theorems"]
assert thms["definition_4_1"]["statement_found"] is True
assert thms["theorem_4_2"]["statement_found"] is True
assert thms["theorem_4_2"]["scope"] == "prefilling"
assert thms["remark_4_3"]["statement_found"] is True
assert thms["theorem_4_4"]["statement_found"] is True
assert thms["theorem_4_4"]["scope"] == "decoding"
assert "d_{\\text{DF}}(T) = d_{\\text{AR}}(T)" in thms["theorem_4_4"]["statement"]
assert any("r > 1" in a for a in thms["theorem_4_4"]["assumptions"])
assert any("W \\le L" in a or "W \\leq L" in a for a in thms["theorem_4_4"]["assumptions"])
assert thms["theorem_4_4"]["has_proof_environment"] is False
assert thms["remark_4_5"]["statement_found"] is True
audit = res["citation_audit"]
assert audit["citation_mismatch_detected"] is True
assert res["document_order"] == [
"Definition 4.1",
"Theorem 4.2",
"Remark 4.3",
"Theorem 4.4",
"Remark 4.5",
]
def test_theorem_audit_mutation_missing_decoding_theorem_fails():
project_root = get_project_root()
tex_bytes = (project_root / "vendor" / "arxiv" / "arxiv_submission.tex").read_text(encoding="utf-8")
mutated = tex_bytes.replace("Depth vs. Width Scaling in Decoding", "Disabled Theorem")
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
(tmp_path / "vendor" / "arxiv").mkdir(parents=True)
(tmp_path / "vendor" / "arxiv" / "arxiv_submission.tex").write_text(mutated, encoding="utf-8")
with pytest.raises(ValueError, match="Section 4 structure mismatch|Failed closed: Theorem 4.4 decoding statement not found"):
audit_theorem(tmp_path)
def test_theorem_audit_mutation_reordering_fails():
project_root = get_project_root()
tex_bytes = (project_root / "vendor" / "arxiv" / "arxiv_submission.tex").read_text(encoding="utf-8")
# Swap Theorem 4.2 and Theorem 4.4 order in TeX
t42_pos = tex_bytes.find("\\begin{theorem}[Depth vs. Width Scaling in Prefilling")
t44_pos = tex_bytes.find("\\begin{theorem}[Depth vs. Width Scaling in Decoding")
assert t42_pos != -1 and t44_pos != -1
t42_end = tex_bytes.find("\\end{theorem}", t42_pos) + len("\\end{theorem}")
t44_end = tex_bytes.find("\\end{theorem}", t44_pos) + len("\\end{theorem}")
t42_block = tex_bytes[t42_pos:t42_end]
t44_block = tex_bytes[t44_pos:t44_end]
mutated = tex_bytes[:t42_pos] + t44_block + tex_bytes[t42_end:t44_pos] + t42_block + tex_bytes[t44_end:]
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
(tmp_path / "vendor" / "arxiv").mkdir(parents=True)
(tmp_path / "vendor" / "arxiv" / "arxiv_submission.tex").write_text(mutated, encoding="utf-8")
with pytest.raises(ValueError, match="Section 4 structure mismatch or reordering detected"):
audit_theorem(tmp_path)
def test_theorem_audit_mutation_counter_shifting_inserted_env_fails():
project_root = get_project_root()
tex_bytes = (project_root / "vendor" / "arxiv" / "arxiv_submission.tex").read_text(encoding="utf-8")
# Insert a new definition before Theorem 4.4, shifting its counter to 4.5
t44_pos = tex_bytes.find("\\begin{theorem}[Depth vs. Width Scaling in Decoding")
inserted = "\\begin{definition}[Counter Shift Environment]\nDummy definition.\n\\end{definition}\n"
mutated = tex_bytes[:t44_pos] + inserted + tex_bytes[t44_pos:]
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
(tmp_path / "vendor" / "arxiv").mkdir(parents=True)
(tmp_path / "vendor" / "arxiv" / "arxiv_submission.tex").write_text(mutated, encoding="utf-8")
with pytest.raises(ValueError, match="Section 4 structure mismatch or counter shift detected"):
audit_theorem(tmp_path)
def test_theorem_audit_mutation_missing_equation_fails():
project_root = get_project_root()
tex_bytes = (project_root / "vendor" / "arxiv" / "arxiv_submission.tex").read_text(encoding="utf-8")
# Remove the $$...$$ decoding equation from Theorem 4.4
old_eq = "$$d_{\\text{DF}}(T) = d_{\\text{AR}}(T) \\quad \\text{and} \\quad w_{\\text{DF}}(T) > w_{\\text{AR}}(T),$$"
mutated = tex_bytes.replace(old_eq, "[Equation Removed]")
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
(tmp_path / "vendor" / "arxiv").mkdir(parents=True)
(tmp_path / "vendor" / "arxiv" / "arxiv_submission.tex").write_text(mutated, encoding="utf-8")
with pytest.raises(ValueError, match="Theorem 4.4 equation or inequality missing/invalid"):
audit_theorem(tmp_path)
def test_theorem_audit_mutation_reversed_inequality_fails():
project_root = get_project_root()
tex_bytes = (project_root / "vendor" / "arxiv" / "arxiv_submission.tex").read_text(encoding="utf-8")
# Reverse the > inequality to < in Theorem 4.4
old_eq = "w_{\\text{DF}}(T) > w_{\\text{AR}}(T)"
new_eq = "w_{\\text{DF}}(T) < w_{\\text{AR}}(T)"
mutated = tex_bytes.replace(old_eq, new_eq)
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
(tmp_path / "vendor" / "arxiv").mkdir(parents=True)
(tmp_path / "vendor" / "arxiv" / "arxiv_submission.tex").write_text(mutated, encoding="utf-8")
with pytest.raises(ValueError, match="Theorem 4.4 equation or inequality missing/invalid"):
audit_theorem(tmp_path)
def test_theorem_audit_mutation_unrelated_proof_fails():
project_root = get_project_root()
tex_bytes = (project_root / "vendor" / "arxiv" / "arxiv_submission.tex").read_text(encoding="utf-8")
# Attach an unrelated proof environment to Theorem 4.4
t44_end = tex_bytes.find("\\end{theorem}", tex_bytes.find("\\begin{theorem}[Depth vs. Width Scaling in Decoding"))
assert t44_end != -1
inserted_proof = "\n\\begin{proof}\nFake proof.\n\\end{proof}\n"
mutated = tex_bytes[:t44_end + len("\\end{theorem}")] + inserted_proof + tex_bytes[t44_end + len("\\end{theorem}"):]
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
(tmp_path / "vendor" / "arxiv").mkdir(parents=True)
(tmp_path / "vendor" / "arxiv" / "arxiv_submission.tex").write_text(mutated, encoding="utf-8")
with pytest.raises(ValueError, match="Unrelated proof environment found for decoding theorem"):
audit_theorem(tmp_path)
def test_theorem_audit_mutation_missing_kv_cache_sharing_fails():
project_root = get_project_root()
tex_bytes = (project_root / "vendor" / "arxiv" / "arxiv_submission.tex").read_text(encoding="utf-8")
# Remove "and KV-cache sharing are employed" from decoding theorem
mutated = tex_bytes.replace("and KV-cache sharing are employed", "are employed")
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
(tmp_path / "vendor" / "arxiv").mkdir(parents=True)
(tmp_path / "vendor" / "arxiv" / "arxiv_submission.tex").write_text(mutated, encoding="utf-8")
with pytest.raises(ValueError, match="Theorem 4.4 assumptions missing/invalid"):
audit_theorem(tmp_path)