abbrev
definition
FreeOrbit
show as:
view math explainer →
open explainer
Generate a durable explainer page for this declaration.
open lean source
IndisputableMonolith.Foundation.UniversalForcing.StrictRealization on GitHub at line 46.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
used by
formal source
43namespace StrictLogicRealization
44
45/-- The strict free orbit is uniformly the `LogicNat` iteration object. -/
46abbrev FreeOrbit (_R : StrictLogicRealization) : Type :=
47 LogicNat
48
49/-- Interpret the free orbit of a strict realization in its carrier by
50primitive recursion over the native generator and composition operation. -/
51def interpret (R : StrictLogicRealization) : FreeOrbit R → R.Carrier
52 | LogicNat.identity => R.one
53 | LogicNat.step n => R.compose R.generator (interpret R n)
54
55@[simp] theorem interpret_zero (R : StrictLogicRealization) :
56 interpret R LogicNat.zero = R.one := rfl
57
58@[simp] theorem interpret_step (R : StrictLogicRealization) (n : FreeOrbit R) :
59 interpret R (LogicNat.succ n) = R.compose R.generator (interpret R n) := rfl
60
61/-- Convert a strict realization to the existing lightweight interface.
62The orbit fields are all derived from `LogicNat`, not supplied by the caller. -/
63def toLightweight (R : StrictLogicRealization) : LogicRealization where
64 Carrier := R.Carrier
65 Cost := R.Cost
66 zeroCost := R.zeroCost
67 compare := R.compare
68 zero := R.one
69 step := fun x => R.compose R.generator x
70 Orbit := FreeOrbit R
71 orbitZero := LogicNat.zero
72 orbitStep := LogicNat.succ
73 interpret := interpret R
74 interpret_zero := rfl
75 interpret_step := by intro n; rfl
76 orbit_no_confusion := by