Skip to content

split: add split * and split + to iterate over top-level conjunctions#1015

Open
strub wants to merge 1 commit into
mainfrom
split-star
Open

split: add split * and split + to iterate over top-level conjunctions#1015
strub wants to merge 1 commit into
mainfrom
split-star

Conversation

@strub
Copy link
Copy Markdown
Member

@strub strub commented May 25, 2026

split * peels every top-level /\ and && until the head is no longer a
conjunction; it is a no-op when the goal is not a conjunction. split +
is the same but errors if the outermost goal is not a conjunction. No
unfolding; only the SFand head is matched.

For asymmetric && (a && X), the right side may depend on a, so the
recursion intros a as a hypothesis, peels X, then re-generalizes the
hypothesis over every leaf produced. This mirrors how plain split
handles a single &&, and keeps the semantics sound when /\ or && is
nested under &&. E.g. a && (b /\ c) yields three subgoals
a, a => b, a => c.

…ions

`split *` peels every top-level /\ and && until the head is no longer a
conjunction; it is a no-op when the goal is not a conjunction. `split +`
is the same but errors if the outermost goal is not a conjunction. No
unfolding; only the SFand head is matched.

For asymmetric && (`a && X`), the right side may depend on `a`, so the
recursion intros `a` as a hypothesis, peels X, then re-generalizes the
hypothesis over every leaf produced. This mirrors how plain `split`
handles a single &&, and keeps the semantics sound when /\ or && is
nested under &&. E.g. `a && (b /\ c)` yields three subgoals
`a`, `a => b`, `a => c`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant