Skip to content

feat(Propositional/Hilbert/F): prove DT_list, removing two sorries#4

Closed
gotrevor wants to merge 1 commit into
dt-list-dispel-basefrom
dt-list-dispel
Closed

feat(Propositional/Hilbert/F): prove DT_list, removing two sorries#4
gotrevor wants to merge 1 commit into
dt-list-dispel-basefrom
dt-list-dispel

Conversation

@gotrevor

Copy link
Copy Markdown
Owner

What

Dispels the two sorrys in DT_list (the deduction theorem for List contexts in the F-system), Foundation/Propositional/Hilbert/F/Deduction.lean. DT_list is now sorry-free and axiom-clean.

  • forward ctx case → exact F_conj₂_mem (List.mem_toFinset.mp hφ)
  • backward hcons case → Deduction.andIR (head via ctx, tail via deduct_conj lifted by deduction_subset), discharged by Deduction.mp
  • new private helper F_conj₂_mem : φ ∈ Γ → H ⊢ Γ.conj₂ 🡒 φ, built from F-level tools only (ruleI transitivity + and₁!/and₂!). Entailment.F provides neither HasAxiomImplyK nor HasAxiomImplyS, so the Minimal-layer left_Conj₂!_intro / C_trans are out of reach.

These holes have been present since the Hilbert-systems redesign (FormalizedFormalLogic#812) and transitively block DT_finset / DT_set, which are proved via DT_list.

Verification

  • lean-sorry on the file → 0
  • #print axioms DT_list[propext, Classical.choice, Quot.sound] (no sorryAx)
  • Originally build-verified on the fork's v4.31.0 port; this branch is staged on upstream master (Lean v4.29.0) — CI here is the v4.29.0 confirmation. The fix uses no version-specific tactics; ruleI/impId and the rest all exist in v4.29.0.

Why this PR lives in the fork

Canonical practice for external contributions: branched off the exact upstream-target SHA (c28942b = FormalizedFormalLogic/Foundation@master) into base dt-list-dispel-base, so this PR's diff is identical to the eventual upstream diff and CI runs on the upstream toolchain. After approval here, it goes upstream as a PR against FormalizedFormalLogic/Foundation:master.

`DT_list` (the deduction theorem for `List` contexts in the F-system) carried
two `sorry`s since the Hilbert-systems redesign (FormalizedFormalLogic#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>
@gotrevor

Copy link
Copy Markdown
Owner Author

v4.29.0 build check — the fork CI only triggers on master-based PRs, so this fork-internal PR (base dt-list-dispel-base) won't auto-run it. I pushed throwaway branch ci/dt-list-v429 (this exact change + a relaxed trigger) to get the upstream-toolchain build now:

The eventual upstream PR (base = FormalizedFormalLogic/Foundation:master) will run this same CI natively. Throwaway branch gets deleted once green.

@gotrevor

gotrevor commented Jul 3, 2026

Copy link
Copy Markdown
Owner Author

Superseded by the rehomed version (post-FormalizedFormalLogic#794 master), now upstream as FormalizedFormalLogic#832.

@gotrevor gotrevor closed this Jul 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant