Skip to content

Commit 58250b9

Browse files
gotrevorclaude
andcommitted
feat(Propositional/Hilbert/F): prove DT_list, removing two sorries
`DT_list` (the deduction theorem for `List` contexts in the F-system) carried two `sorry`s since the Hilbert-systems redesign (#812): the forward `ctx` case and the backward `hcons` case. They transitively block `DT_finset` / `DT_set`, which are proved via `DT_list`. `Entailment.F` provides neither `HasAxiomImplyK` nor `HasAxiomImplyS`, so the `Minimal`-layer `left_Conj₂!_intro` / `C_trans` are out of reach. This adds a private helper `F_conj₂_mem` that builds `⋀Γ 🡒 φ` from `φ ∈ Γ` using only F-level tools (`ruleI` transitivity + `and₁!`/`and₂!`), and fills both cases. `#print axioms DT_list` → `[propext, Classical.choice, Quot.sound]` (no `sorryAx`). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 387f915 commit 58250b9

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

Foundation/Propositional/Hilbert/F/Deduction.lean

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,25 @@ lemma deduct_conj {Γ : List (Formula α)} : Deduction H (Γ.toFinset) Γ.conj
5959
. simp;
6060
. exact ih;
6161

62+
-- `Entailment.F` provides neither `HasAxiomImplyK` nor `HasAxiomImplyS`, so the
63+
-- `Minimal`-layer `left_Conj₂!_intro` / `C_trans` are out of reach. We instead build
64+
-- `⋀Γ 🡒 φ` from `φ ∈ Γ` using only F-level tools: `ruleI` (transitivity) and `and₁!`/`and₂!`.
65+
private lemma F_conj₂_mem {Γ : List (Formula α)} (h : φ ∈ Γ) : H ⊢ Γ.conj₂ 🡒 φ := by
66+
induction Γ using List.induction_with_singleton with
67+
| hnil => simp at h;
68+
| hsingle ψ => simp only [List.mem_singleton] at h; subst h; simpa using impId;
69+
| hcons ψ Δ he ih =>
70+
rw [List.conj₂_cons_nonempty he];
71+
simp only [List.mem_cons] at h;
72+
rcases h with rfl | h;
73+
. simp;
74+
. apply ruleI ?_ (ih h); simp;
75+
6276
lemma DT_list {Γ : List (Formula α)} : (Deduction H Γ.toFinset φ) ↔ H ⊢ Γ.conj₂ 🡒 φ := by
6377
constructor;
6478
. intro h;
6579
induction h with
66-
| ctx hφ => sorry;
80+
| ctx hφ => exact F_conj₂_mem (List.mem_toFinset.mp hφ);
6781
| thm hφ => apply af hφ;
6882
| mp => grind;
6983
| andIR => apply CK_of_C_of_C <;> assumption;
@@ -78,7 +92,13 @@ lemma DT_list {Γ : List (Formula α)} : (Deduction H Γ.toFinset φ) ↔ H ⊢
7892
apply Deduction.ctx;
7993
simp;
8094
| hcons ψ Γ hΓ ih =>
81-
sorry;
95+
rw [List.conj₂_cons_nonempty hΓ] at h;
96+
apply Deduction.mp h;
97+
apply Deduction.andIR;
98+
. apply Deduction.ctx; simp;
99+
. apply deduction_subset (Γ₁ := Γ.toFinset);
100+
. simp;
101+
. exact deduct_conj;
82102

83103
lemma DT_finset {Γ : Finset (Formula α)} : (Deduction H Γ φ) ↔ (H ⊢ Γ.conj 🡒 φ) := by simpa [Finset.conj] using DT_list (Γ := Γ.toList);
84104

0 commit comments

Comments
 (0)