Skip to content

partial_fixpoint の健全性に関する説明と実証コードを追加#2336

Open
Copilot wants to merge 3 commits into
mainfrom
copilot/explain-partial-fixpoint-soundness
Open

partial_fixpoint の健全性に関する説明と実証コードを追加#2336
Copilot wants to merge 3 commits into
mainfrom
copilot/explain-partial-fixpoint-soundness

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 20, 2026

partial_fixpoint は停止性証明を省略できる一方で証明にも使えるため、partial との違いから「健全性が壊れないのか」が不明瞭でした。
本PRでは、partial_fixpoint が許される理由を「定義上の簡約ではなく命題的等式で扱う」点に絞って、コードで確認できる形で追記しています。

  • 健全性の説明を新設

    • LeanByExample/Modifier/PartialFixpoint.lean に「なぜ partial_fixpoint では健全性が壊れないのか?」節を追加
    • partial_fixpoint の展開は definitional equality ではなく eq_def による propositional equality であることを明示
    • Lean公式リファレンスへの脚注を追加(partial_fixpoint 節)
  • 説明を裏付けるコード例を追加

    • searchFrfl では展開できず、searchF.eq_def で展開できることを fail_if_success 付きで実証
    • Option False を返す divergeOrNonepartial_fixpoint)を追加し、停止しない可能性があっても False を取り出せないことを示す補題を追加
example (f : Nat → Option α) (n : Nat) :
    searchF f n = (match f n with
      | some _ => some n
      | none => searchF f (n + 1)) := by
  fail_if_success exact rfl
  rw [searchF.eq_def]

@[grind] def divergeOrNone (n : Nat) : Option False :=
  if n = 0 then none else divergeOrNone (n + 1)
partial_fixpoint

Copilot AI changed the title [WIP] Add explanation for soundness with partial_fixpoint partial_fixpoint の健全性に関する説明と実証コードを追加 May 20, 2026
Copilot AI requested a review from Seasawher May 20, 2026 17:10
@Seasawher Seasawher marked this pull request as ready for review May 20, 2026 17:34
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.

partial_fixpoint によって健全性が破られないのはなぜか?について説明する

3 participants