From aa03bb5570c2d0189b6606b7b42a52c302f6fe5f Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Fri, 19 Jun 2026 16:05:32 +0200 Subject: refactoring --- SymbolicModalLogic/FixedPoints.lean | 73 ++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 34 deletions(-) (limited to 'SymbolicModalLogic/FixedPoints.lean') diff --git a/SymbolicModalLogic/FixedPoints.lean b/SymbolicModalLogic/FixedPoints.lean index 2074992..58d768c 100644 --- a/SymbolicModalLogic/FixedPoints.lean +++ b/SymbolicModalLogic/FixedPoints.lean @@ -1,46 +1,51 @@ import Mathlib -namespace FixedPoints - variable {α : Type} [CompleteLattice α] +structure Function.IsLeastFixedPt (f : α → α) (x : α) : Prop where + fixedPt : Function.IsFixedPt f x + least : ∀ y, Function.IsFixedPt f y → x ≤ y + +structure Function.IsGreatestFixedPt (f : α → α) (x : α) : Prop where + fixedPt : Function.IsFixedPt f x + greatest : ∀ y, Function.IsFixedPt f y → y ≤ x + +namespace FixedPoints + def lfp (f : α → α) : α := sInf { x | f x ≤ x } def gfp (f : α → α) : α := sSup { x | x ≤ f x } -lemma lfp_isFixedPt (f : α → α) (h : Monotone f) : Function.IsFixedPt f (lfp f) := by - have hmem : f (lfp f) ≤ lfp f := by - rw [lfp, le_sInf_iff] - intro x hx - grw [h (sInf_le hx)] - exact hx - apply Std.IsPartialOrder.le_antisymm - · exact hmem - · exact (sInf_le (h hmem)) - -lemma lfp_is_least (f : α → α) : - ∀ x, Function.IsFixedPt f x → lfp f ≤ x := by - intro x hfix - apply sInf_le - simp [show f x = x from hfix] +lemma lfp_isLeastFixedPt (f : α → α) (hf : Monotone f) : Function.IsLeastFixedPt f (lfp f) where + fixedPt := by + have hmem : f (lfp f) ≤ lfp f := by + rw [lfp, le_sInf_iff] + intro x hx + grw [hf (sInf_le hx)] + exact hx + apply Std.IsPartialOrder.le_antisymm + · exact hmem + · exact (sInf_le (hf hmem)) + least := by + intro x hfix + apply sInf_le + simp [show f x = x from hfix] -- TODO: Avoid repitition - -lemma gfp_isFixedPt (f : α → α) (h : Monotone f) : Function.IsFixedPt f (gfp f) := by - have hmem : gfp f ≤ f (gfp f) := by - rw [gfp, sSup_le_iff] - intro x hx - grw [show x ≤ f x from hx] - exact h (le_sSup hx) - apply Std.IsPartialOrder.le_antisymm - · apply le_sSup - exact h hmem - · exact hmem - -lemma gfp_is_greatest (f : α → α) : - ∀ x, Function.IsFixedPt f x → x ≤ gfp f := by - intro x hfix - apply le_sSup - simp [show f x = x from hfix] +lemma gfp_isGreatestFixedPt (f : α → α) (hf : Monotone f) : Function.IsGreatestFixedPt f (gfp f) where + fixedPt := by + have hmem : gfp f ≤ f (gfp f) := by + rw [gfp, sSup_le_iff] + intro x hx + grw [show x ≤ f x from hx] + exact hf (le_sSup hx) + apply Std.IsPartialOrder.le_antisymm + · apply le_sSup + exact hf hmem + · exact hmem + greatest := by + intro x hfix + apply le_sSup + simp [show f x = x from hfix] end FixedPoints -- cgit v1.3.1