Disjointed
for functions on a SuccAddOrder
#
This file contains material excised from Mathlib.Order.Disjointed
to avoid import dependencies
from Mathlib.Algebra.Order
into Mathlib.Order
.
TODO #
Find a useful statement of disjointedRec_succ
.
theorem
disjointed_add_one
{α : Type u_1}
{ι : Type u_2}
[GeneralizedBooleanAlgebra α]
[LinearOrder ι]
[LocallyFiniteOrderBot ι]
[Add ι]
[One ι]
[SuccAddOrder ι]
[NoMaxOrder ι]
(f : ι → α)
(i : ι)
:
theorem
Monotone.disjointed_add_one_sup
{α : Type u_1}
{ι : Type u_2}
[GeneralizedBooleanAlgebra α]
[LinearOrder ι]
[LocallyFiniteOrderBot ι]
[Add ι]
[One ι]
[SuccAddOrder ι]
{f : ι → α}
(hf : Monotone f)
(i : ι)
:
theorem
Monotone.disjointed_add_one
{α : Type u_1}
{ι : Type u_2}
[GeneralizedBooleanAlgebra α]
[LinearOrder ι]
[LocallyFiniteOrderBot ι]
[Add ι]
[One ι]
[SuccAddOrder ι]
[NoMaxOrder ι]
{f : ι → α}
(hf : Monotone f)
(i : ι)
:
def
Nat.disjointedRec
{α : Type u_1}
[GeneralizedBooleanAlgebra α]
{f : ℕ → α}
{p : α → Sort u_3}
(hdiff : ⦃t : α⦄ → ⦃i : ℕ⦄ → p t → p (t \ f i))
⦃n : ℕ⦄
:
p (f n) → p (disjointed f n)
A recursion principle for disjointed
. To construct / define something for disjointed f i
,
it's enough to construct / define it for f n
and to able to extend through diffs.
Note that this version allows an arbitrary Sort*
, but requires the domain to be Nat
, while
the root-level disjointedRec
allows more general domains but requires p
to be Prop
-valued.
Equations
- Nat.disjointedRec hdiff = fun (h₀ : p (f 0)) => ⋯ ▸ h₀
- Nat.disjointedRec hdiff = fun (h : p (f (n + 1))) => let_fun H := fun (k : ℕ) => Nat.recAux (hdiff h) (fun (k : ℕ) (ih : p (f (n + 1) \ (partialSups f) k)) => ⋯.mpr (hdiff ih)) k; ⋯ ▸ H n
Instances For
@[simp]
theorem
disjointedRec_zero
{α : Type u_1}
[GeneralizedBooleanAlgebra α]
{f : ℕ → α}
{p : α → Sort u_3}
(hdiff : ⦃t : α⦄ → ⦃i : ℕ⦄ → p t → p (t \ f i))
(h₀ : p (f 0))
: