Research-Stack/4-Infrastructure/shim/failure_flexure_bank.py

85 lines
5.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Failure Flexure Expansion — 50+ deliberately diverse failed/partial Lean proofs.
Covers 8 failure types: missing_rewrite, missing_assumption, arithmetic_gap,
case_split_missing, induction_incomplete, simplifier_gap, coercion_mismatch, order_gap.
Each theorem is designed to fail with the specific obstruction type.
"""
FAILURE_THEOREMS = [
# ── Missing rewrite direction (rw needs ← or different order) ──
("rw_missing_dir_1", "theorem t (a b : Nat) (h : a = b) : b + 0 = a + 0 := by\n simp"),
("rw_missing_dir_2", "theorem t (a b c : Nat) (h1 : a = b) (h2 : b = c) : a = c := by\n rfl"),
("rw_missing_dir_3", "theorem t (a b : Nat) (h : a + b = b + a) : b + a = a + b := by\n rfl"),
("rw_missing_dir_4", "theorem t (a b : Nat) (h : a = b) : a*2 = b*2 := by\n simp"),
("rw_missing_dir_5", "theorem t (a b : Nat) (h : a = b) : a + 1 = b + 1 := by\n rfl"),
("rw_missing_dir_6", "theorem t (a b : Nat) (h : a = b) : 0 + a = 0 + b := by\n simp"),
("rw_missing_dir_7", "theorem t (a b : Nat) (h : a = b) (c : Nat) : a + c = b + c := by\n rfl"),
# ── Missing assumption bridge (needs exact, assumption, apply) ──
("missing_assume_1", "theorem t (A B : Prop) (hA : A) (hAB : A → B) : B := by\n rfl"),
("missing_assume_2", "theorem t (A B C : Prop) (hA : A) (hAB : A → B) (hBC : B → C) : C := by\n simp"),
("missing_assume_3", "theorem t (A B : Prop) (h : A ∧ B) : A := by\n rfl"),
("missing_assume_4", "theorem t (A B : Prop) (h : A B) : A B := by\n simp"),
("missing_assume_5", "theorem t (A B : Prop) (h : A → B) (hA : A) : B := by\n rfl"),
("missing_assume_6", "theorem t (A B : Prop) : A → B → A := by\n rfl"),
("missing_assume_7", "theorem t (P : Prop) : P → ¬¬P := by\n rfl"),
# ── Arithmetic gap (needs omega, linarith, nlinarith) ──
("arith_gap_1", "theorem t (a b : Nat) (h : a ≤ b) : a + 1 ≤ b + 1 := by\n rfl"),
("arith_gap_2", "theorem t (a b c : Nat) (h1 : a ≤ b) (h2 : b ≤ c) : a ≤ c := by\n simp"),
("arith_gap_3", "theorem t (a b : Nat) (h : a + b = b + a) : a = b := by\n rfl"),
("arith_gap_4", "theorem t (a b c : Nat) : a + b + c = a + c + b := by\n simp"),
("arith_gap_5", "theorem t (a b : Nat) : a * (b + 1) = a * b + a := by\n simp"),
("arith_gap_6", "theorem t (x : Nat) (h : x > 0) : x - 1 < x := by\n simp"),
("arith_gap_7", "theorem t (a b : Nat) : a + b = b + a := by\n omega"),
("arith_gap_8", "theorem t (a b : Nat) : (a + b) * (a + b) = a*a + 2*a*b + b*b := by\n simp"),
("arith_gap_9", "theorem t (x : Nat) : x + x = 2 * x := by\n simp"),
("arith_gap_10", "theorem t (n : Nat) : n + 0 = n := by\n rfl"),
# ── Case split missing (needs cases, by_cases, constructor) ──
("case_split_1", "theorem t (A B : Prop) (h : A B) : B A := by\n simp"),
("case_split_2", "theorem t (A B C : Prop) (h : A ∧ B) (h2 : A → C) : C := by\n simp"),
("case_split_3", "theorem t (A B : Prop) (hA : A) (hB : B) : A ∧ B := by\n rfl"),
("case_split_4", "theorem t (A B : Prop) (h : A B) : A B := by\n rfl"),
("case_split_5", "theorem t (A B : Prop) (h : A → B) : A B → B := by\n simp"),
("case_split_6", "theorem t (A B : Prop) (hA : A) (hB : B) : A ∧ B := by\n simp"),
("case_split_7", "theorem t (A B : Prop) (h : A ∧ B) : A := by\n simp"),
("case_split_8", "theorem t (A : Prop) : A → A := by\n rfl"),
# ── Induction incomplete (missing induction case handling) ──
("induction_gap_1", "theorem t (n : Nat) : n + 0 = n := by\n simp"),
("induction_gap_2", "theorem t (n m : Nat) : n + m.succ = (n + m).succ := by\n simp"),
("induction_gap_3", "theorem t (n : Nat) : n * 0 = 0 := by\n simp"),
("induction_gap_4", "theorem t (m n : Nat) : m + n = n + m := by\n omega"),
("induction_gap_5", "theorem t (n : Nat) : 0 + n = n := by\n simp"),
("induction_gap_6", "theorem t (n : Nat) : n + 0 = n := by\n rfl"),
("induction_gap_7", "theorem t (n : Nat) : n ≤ n := by\n simp"),
("induction_gap_8", "theorem t (n : Nat) : n - n = 0 := by\n simp"),
("induction_gap_9", "theorem t (n : Nat) : n * 1 = n := by\n simp"),
("induction_gap_10", "theorem t (n m : Nat) : n + m = m + n := by\n simp"),
# ── Simplifier almost works (needs extra simp lemma) ──
("simplifier_gap_1", "theorem t (l : List Nat) : l.reverse.reverse = l := by\n simp"),
("simplifier_gap_2", "theorem t (l : List Nat) : [] ++ l = l := by\n simp"),
("simplifier_gap_3", "theorem t (s : Set Nat) : s s = s := by\n simp"),
("simplifier_gap_4", "theorem t (s : Set Nat) : s ∩ s = s := by\n simp"),
("simplifier_gap_5", "theorem t (n : Nat) : n + 0 = n := by\n simp"),
("simplifier_gap_6", "theorem t (a b : Nat) : a + b = b + a := by\n simp"),
# ── Coercion / type mismatch ──
("coercion_gap_1", "theorem t (n : Nat) : (n : Nat) = (n : Int) := by\n rfl"),
("coercion_gap_2", "theorem t (n : Nat) : n = (n : Nat) := by\n rfl"),
("coercion_gap_3", "theorem t (n : Nat) (m : Nat) : n + m = m + n := by\n omega"),
("coercion_gap_4", "theorem t (x : Int) : (x : Nat) = (x : Int) := by\n rfl"),
# ── Order / inequality gap ──
("order_gap_1", "theorem t (a b : Nat) (h : a ≤ b) : a * 2 ≤ b * 2 := by\n simp"),
("order_gap_2", "theorem t (a b c : Nat) (h1 : a ≤ b) (h2 : b ≤ c) : a ≤ c := by\n rfl"),
("order_gap_3", "theorem t (a b : Nat) (h : a ≤ b) : a + 1 ≤ b + 1 := by\n simp"),
("order_gap_4", "theorem t (a b : Nat) : a ≤ a := by\n rfl"),
("order_gap_5", "theorem t (a b : Nat) (h : a ≤ b) (h2 : b ≤ a) : a = b := by\n simp"),
("order_gap_6", "theorem t (a b : Nat) (h : a ≤ b) : 0 ≤ b - a := by\n simp"),
("order_gap_7", "theorem t (a b : Nat) (h : a < b) : a + 1 ≤ b := by\n simp"),
("order_gap_8", "theorem t (a b : Nat) (h : a ≤ b) : a ≤ b + 1 := by\n simp"),
]