feat(Logics/Propositional): five-primitive formula type with primitive bot#648
feat(Logics/Propositional): five-primitive formula type with primitive bot#648benbrastmckie wants to merge 2 commits into
Conversation
047b396 to
b041ae7
Compare
Session: sess_$(date +%s)_$(od -An -N3 -tx1 /dev/urandom | tr -d ' ')
Add Kamp1968, Xu1988, Venema1993SinceUntil to references.bib. Update pr-description.md with Burgess/Xu/Venema/GHR citations, Zulip discussion link, and PR leanprover#648 dependency reference. Session: sess_1781487302_dddcf1
Stack Modal PR on feat/propositional-v2 (PR leanprover#648) like PR leanprover#649 does, keeping it independent of temporal additions. Two-PR chain, not three. Session: sess_1781531573_4cdbb4
Stack on PR leanprover#648 (not leanprover#649), diplomatic PR description as first-class deliverable, integrate PR landscape audit (report 06). Session: sess_1781532709_eb0889
Diplomatic PR description for Modal/ formula primitives refactoring, stacking on PR leanprover#648. Coordinates with PRs leanprover#607, leanprover#528, leanprover#535, leanprover#649. Session: sess_1781535860_c7d8e9
There was a problem hiding this comment.
Some general comments:
- I like the idea of adding \bot as a primitive.
- I don't understand why we need both Semantics/Basic.lean and Semantics/Bool.lean. I think the latter alone is enough. Later we can add (for example) Kripke semantics for intuitionistic propositional logic.
- It is not helpful to the readers to refer to old papers from the 1930s, some of which are in German. A good modern reference is Jeremy Avigad's textbook:
https://www.cambridge.org/core/books/mathematical-logic-and-computation/300504EAD8410522CE0C27595D2825A2
whose chapters 2 and 3 covers everything in this PR. - You should definitely coordinate this PR with #607 abd #587. #536 is ready to merge, so you should wait for it.
|
I think the refactor to
Re the renaming Please split the semantics development into a separate PR. The point of requesting that large contributions are split up is not just length, but also so that conceptually separate issues can be discussed independently. FWIW, as I mentioned on zulip, imo the right way to resolve the Re the references, I agree with @ctchou about citing literature in English — the Gentzen paper is my bad, I read it in translation (in "The Collected Papers of Gerhard Gentzen" ed M. E. Szabo). |
…e bot Add `bot` as a primitive constructor of `Proposition Atom`, eliminating all `[Bot Atom]` constraints from propositional logic signatures. - New `Connectives.lean`: typeclass hierarchy (HasBot, HasImp, HasAnd, HasOr) - `Defs.lean`: five-primitive Proposition type with derived neg, top, iff - `Basic.lean`: natural deduction with impI/impE, andI/andE1/andE2, orI1/orI2 - `Theory.lean`: remove [Bot Atom], add instIsIntuitionisticIntuitionisticCompletion - Replace German-language references with Avigad 2022, Prawitz 1965 - Semantics files deferred to follow-up PR per reviewer request Reconciles with merged PR leanprover#536 (InferenceSystem-parameterized typeclasses). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6083b4c to
7cc0961
Compare
|
@ctchou @thomaskwaring Thank you both for the thoughtful feedback — I've reworked the PR to address each point. Changes made:
On the On bot as primitive vs atom: The key distinction is that in minimal logic bot is an unconstrained logical constant (a nullary operator), not an atom — no axioms constrain its denotation, but it's fixed under substitution. With primitive On Looking forward to your thoughts on the revised version! |
Refocused from PR leanprover#649 to PR leanprover#648 (feat/propositional-v2). Updated task description and created 6-phase plan for bot refactor. Session: sess_1781632241_ba8d68
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3-phase plan for drafting PR description, PR comment, and Zulip response for PR leanprover#648 review. All outputs target specs/tmp/ for user review. Session: sess_1781646913_02137d
Delete Proposition.instBot_eq and Proposition.instTop_eq theorems from Cslib/Logics/Propositional/Defs.lean. These two theorems auto-include the [DecidableEq Atom] section variable which they do not use, triggering unusedSectionVars/unusedDecidableInType warnings that --wfail promotes to build errors. PR leanprover#648 already removed these theorems in its direction. Session: sess_1781650791_5f754f Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Delete Proposition.instBot_eq and Proposition.instTop_eq theorems from Cslib/Logics/Propositional/Defs.lean. These two theorems auto-include the [DecidableEq Atom] section variable which they do not use, triggering unusedSectionVars/unusedDecidableInType warnings that --wfail promotes to build errors. PR leanprover#648 already removed these theorems in its direction. Session: sess_1781650791_5f754f Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update intuitionisticCompletion docstring — the old wording "Attach a bottom element" was misleading since bot is already a constructor. Change "five-primitive propositional signature" to "five constructors" in Connectives.lean to avoid conflating generators with operations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase 1: Deleted instBot_eq/instTop_eq from Defs.lean (CI fix) Phase 2: Removed snce past-time operator from Temporal.Formula Phase 3: Blocked on PR leanprover#648 approval Session: sess_1781650791_5f754f
Rebase feat/temporal-formula-propositional onto feat/propositional-v2 head (7cc0961). Resolved conflicts in Connectives.lean, Defs.lean, Basic.lean, Theory.lean — taking PR leanprover#648 as base, adding temporal classes on top. All CI checks pass: lake build, checkInitImports, lint-style, lint, lake test. instIsIntuitionisticIntuitionisticCompletion preserved, instBot_eq/instTop_eq absent, snce removed. Force-pushed to origin with --force-with-lease. Session: sess_1781650791_5f754f Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
225: Implement GHA algebraic semantics with primitive bot on main 226: Cherry-pick from main to create PR stacked on leanprover#648 Session: sess_1750107600_orchestrate
… findings Session: sess_1750130000_research227 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> task 228: complete implementation Fix two docstring issues in PR leanprover#648: update intuitionisticCompletion docstring to reflect primitive bot semantics, and change "five-primitive propositional signature" to "five constructors" in Connectives.lean module doc. Session: sess_1750217870_a3b2c1 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> task 228: complete orchestration Session: sess_1750217870_a3b2c1 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
Revises PR #648 based on reviewer feedback. Adds
botas a primitive constructor ofProposition, eliminating all[Bot Atom]constraints. Rebased on upstream/main post-#536.Key changes from #648:
botis a primitive constructor (not an atom), soIsIntuitionistic/IsClassicalno longer require[Bot Atom]imp/impI/impE(renamed fromimpl/implI/implEfor consistency with FormalizedFormalLogic convention; open to reverting if reviewers preferimpl)New files
Cslib/Foundations/Logic/Connectives.lean-- typeclass hierarchy (HasBot,HasImp,HasAnd,HasOr,PropositionalConnectives)Modified files
Cslib/Logics/Propositional/Defs.lean--Propositionwith primitivebot; derivedneg,top,iff; typeclass instancesCslib/Logics/Propositional/NaturalDeduction/Basic.lean-- derivation constructors updated toimpI/impE,andE1/andE2,orI1/orI2; explicitΓargumentsCslib/Logics/Propositional/NaturalDeduction/Theory.lean--[Bot Atom]removed from all signatures; addedinstIsIntuitionisticIntuitionisticCompletionCslib.lean-- addedConnectivesimportreferences.bib-- addedAvigad2022entryDesign rationale
Primitive
boteliminates[Bot Atom]constraints throughout the propositional logic API, givesProposition.substa natural recursive case forbot, and follows the standard treatment in Avigad (2022) wherebotis a logical constant rather than an atomic proposition. The trade-off (noted by thomaskwaring) is an extrabotcase in structural recursions.These benefits extend to planned completeness work for modal and temporal logics: primitive
botensuresProposition.substpreserves bottom structurally (subst f .bot = .bot), whereas atom-encoded bot requires additional constraints to preventsubst f (.atom ⊥) = f ⊥from mapping bottom to an arbitrary formula. As thomaskwaring notes, non-bottom-preserving maps are also useful (e.g., conservativity results viaWithBot.some).Coordination
HasImp/impwhile feat(Logic): logical operators #607 usesHasImpl/impl.Cslib/Foundations/Logic/Connectives.leanwith different content. Semantics are deferred here so no conflict on models, but the file path needs coordination. Proposing a joint design thread before either PR's next revision.Deferred
Semantics (
Basic.lean,Bool.lean) deferred to a follow-up PR per thomaskwaring's request. The question ofPropvsBoolvsGeneralizedHeytingAlgebrafor evaluation (raised by thomaskwaring and ctchou) will be addressed there.AI Tools Used
Claude Code was used to rebase, resolve merge conflicts, adapt proofs for primitive bot and
impnaming, and verify CI. All mathematical decisions reviewed by the human author.