
confluence-guide
by Arthur742Ramos
SKILL.md
name: confluence-guide description: Guide for proving confluence of a rewriting system. Use when asked to prove Church-Rosser or confluence properties.
Proving Confluence
This skill provides guidance for proving confluence of rewriting systems in the Metatheory project.
Choose Your Approach
Option 1: Diamond Property (for systems like Lambda, CL)
Best when: The reduction relation has an obvious "parallel" version.
-
Define parallel reduction that contracts multiple redexes simultaneously:
inductive ParRed : Term → Term → Prop where | var : ParRed (var n) (var n) | app : ParRed M M' → ParRed N N' → ParRed (app M N) (app M' N') | lam : ParRed M M' → ParRed (lam M) (lam M') | beta : ParRed M M' → ParRed N N' → ParRed (app (lam M) N) (M'[N']) -
Define complete development that contracts ALL redexes:
def complete : Term → Term -
Prove the key lemma: any parallel reduction reaches complete development:
theorem parRed_complete : M ⇒ N → N ⇒ complete M -
Diamond property follows from the triangle:
theorem parRed_diamond : Rewriting.Diamond ParRed -
Apply generic theorem:
theorem confluent : Confluent BetaRed := confluent_of_diamond parRed_diamond
Option 2: Newman's Lemma (for terminating systems like TRS)
Best when: You can prove termination via a well-founded measure.
-
Prove termination via a decreasing measure:
theorem step_terminating : Rewriting.Terminating Step := by apply terminating_of_measure size intro a b h exact step_decreases_size h -
Prove local confluence by critical pair analysis:
theorem local_confluent : LocalConfluent Step := by intro a b c hab hac -- Analyze all critical pairs cases hab <;> cases hac <;> ... -
Apply Newman's lemma:
theorem confluent : Confluent Step := confluent_of_terminating_localConfluent step_terminating local_confluent
Option 3: Hindley-Rosen (for unions of relations)
Best when: You have two confluent relations that commute.
theorem confluent_union : Confluent r → Confluent s → Commute r s → Confluent (Union r s)
Key Imports
import Metatheory.Rewriting.Basic
import Metatheory.Rewriting.Diamond
import Metatheory.Rewriting.Newman
import Metatheory.Rewriting.HindleyRosen
Examples in This Repo
Lambda/Confluence.lean- Diamond property approachCL/Confluence.lean- Diamond property approachTRS/Confluence.lean- Newman's lemma approachStringRewriting/Confluence.lean- Newman's lemma approach
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です