Skip to content

feat: prove that the Buchi congruence has the saturation property#325

Open
ctchou wants to merge 53 commits intoleanprover:mainfrom
ctchou:buchi-saturation
Open

feat: prove that the Buchi congruence has the saturation property#325
ctchou wants to merge 53 commits intoleanprover:mainfrom
ctchou:buchi-saturation

Conversation

@ctchou
Copy link
Contributor

@ctchou ctchou commented Feb 6, 2026

This PR proves that the Buchi congruence introduced in #278 has the saturation property defined in Cslib.Foundations.Data.Set.Saturation. More precisely, the family of omega-languages of the form U * V^ω, where U and V are equivalence classes of the Buchi congruence, saturates the omega-language accepted by the underlying Buchi automaton. This proof is the hardest step in proving the closure of ω-regular languages under complementation and explains why the Buchi congruence is defined the way it is. Some miscellaneous results about LTS and infinite sequences that are needed by the proof are also added.

fmontesi and others added 30 commits January 11, 2026 13:15
Copy link
Collaborator

@chenson2018 chenson2018 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I mention I've not fully reviewed buchiFamily_saturation, but here is an initial review.

@ctchou ctchou mentioned this pull request Feb 22, 2026
Copy link
Collaborator

@fmontesi fmontesi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks pretty good to me, just minor things.

∃ ss : List State, lts.IsExecution s1 μs s2 ss := by
grind

lemma LTS.IsExecution.comp_seg2
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be a problem with my editor, but I can't find a comp_seg, so why is this called comp_seg2?

Copy link
Collaborator

@chenson2018 chenson2018 Mar 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And in general, I don't think we should have names with numbers like this.

open ωSequence

/-- Any finite execution extracted from an infinite execution is valid. -/
theorem LTS.ωTr_isExecution (h : lts.ωTr ss μs) {n m : ℕ} (hnm : n ≤ m) :
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd call this LTS.ωTr_extract_isExecution

grind [extract_apppend_right_right]
· have h : f n + k ≤ f (n + 1) := by lia
specialize exec h
grind [extract_apppend_right_right]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes me notice that apppend has an extra p.

@chenson2018
Copy link
Collaborator

My delay in approving this is because of buchiFamily_saturation. I have looked at this off and on and could make some incremental grind improvements, but I don't have the subject expertise here. Is there anything that can be split off in separate lemmas? The existential from mem_buchiFamily seems to make this awkward, but is there any way this could be reworked more cleanly?

@ctchou
Copy link
Contributor Author

ctchou commented Mar 3, 2026

We can work on this after I get back from my trip on March 12. I don't have my laptop with me now.

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.

3 participants