Successor and predecessor limits #
We define the predicate Order.IsSuccPrelimit
for "successor pre-limits", values that don't cover
any others. They are so named since they can't be the successors of anything smaller. We define
Order.IsPredPrelimit
analogously, and prove basic results.
For some applications, it is desirable to exclude minimal elements from being successor limits, or
maximal elements from being predecessor limits. As such, we also provide Order.IsSuccLimit
and
Order.IsPredLimit
, which exclude these cases.
TODO #
The plan is to eventually replace Ordinal.IsLimit
and Cardinal.IsLimit
with the common
predicate Order.IsSuccLimit
.
Successor limits #
A successor pre-limit is a value that doesn't cover any other.
It's so named because in a successor order, a successor pre-limit can't be the successor of anything smaller.
For some applications, it's desirable to exclude the case where an element is minimal. A future PR
will introduce IsSuccLimit
for this usage.
Equations
- Order.IsSuccPrelimit a = ∀ (b : α), ¬b ⋖ a
Instances For
Alias of Order.isSuccPrelimit_of_dense
.
A successor limit is a value that isn't minimal and doesn't cover any other.
It's so named because in a successor order, a successor limit can't be the successor of anything smaller.
This previously allowed the element to be minimal. This usage is now covered by IsSuccPrelimit
.
Equations
- Order.IsSuccLimit a = (¬IsMin a ∧ Order.IsSuccPrelimit a)
Instances For
Alias of IsMin.isSuccPrelimit
.
Alias of Order.isSuccPrelimit_bot
.
Alias of Order.IsSuccPrelimit.isMin_of_noMax
.
Alias of Order.isSuccPrelimit_iff_of_noMax
.
Alias of Order.isSuccPrelimit_of_succ_ne
.
See not_isSuccPrelimit_iff
for a version that states that a
is a successor of a value other
than itself.
Alias of Order.mem_range_succ_of_not_isSuccPrelimit
.
See not_isSuccPrelimit_iff
for a version that states that a
is a successor of a value other
than itself.
Alias of Order.mem_range_succ_or_isSuccPrelimit
.
Alias of Order.isSuccPrelimit_of_succ_lt
.
Alias of Order.isSuccPrelimit_iff_succ_lt
.
Alias of Order.isSuccPrelimit_iff_succ_ne
.
Alias of Order.not_isSuccPrelimit_iff'
.
Predecessor limits #
A predecessor pre-limit is a value that isn't covered by any other.
It's so named because in a predecessor order, a predecessor pre-limit can't be the predecessor of anything smaller.
For some applications, it's desirable to exclude maximal elements from this definition. For that,
see IsPredLimit
.
Equations
- Order.IsPredPrelimit a = ∀ (b : α), ¬a ⋖ b
Instances For
Alias of Order.isPredPrelimit_of_dense
.
Alias of the reverse direction of Order.isSuccPrelimit_toDual_iff
.
Alias of the reverse direction of Order.isPredPrelimit_toDual_iff
.
Alias of the reverse direction of Order.isSuccPrelimit_toDual_iff
.
Alias of the reverse direction of Order.isSuccPrelimit_toDual_iff
.
Alias of the reverse direction of Order.isPredPrelimit_toDual_iff
.
Alias of the reverse direction of Order.isPredPrelimit_toDual_iff
.
A predecessor limit is a value that isn't maximal and doesn't cover any other.
It's so named because in a predecessor order, a predecessor limit can't be the predecessor of anything larger.
This previously allowed the element to be maximal. This usage is now covered by IsPredPreLimit
.
Equations
- Order.IsPredLimit a = (¬IsMax a ∧ Order.IsPredPrelimit a)
Instances For
Alias of the reverse direction of Order.isSuccLimit_toDual_iff
.
Alias of the reverse direction of Order.isPredLimit_toDual_iff
.
Alias of IsMax.isPredPrelimit
.
Alias of Order.isPredPrelimit_top
.
Alias of Order.IsPredPrelimit.isMax_of_noMin
.
Alias of Order.isPredPrelimit_iff_of_noMin
.
Alias of Order.isPredPrelimit_of_pred_ne
.
See not_isPredPrelimit_iff
for a version that states that a
is a successor of a value other
than itself.
Alias of Order.mem_range_pred_of_not_isPredPrelimit
.
See not_isPredPrelimit_iff
for a version that states that a
is a successor of a value other
than itself.
Alias of Order.mem_range_pred_or_isPredPrelimit
.
Alias of Order.isPredPrelimit_of_pred_lt
.
Alias of Order.isPredPrelimit_iff_lt_pred
.
Alias of Order.IsPredPrelimit.isMax
.
Induction principles #
A value can be built by building it on successors and successor pre-limits.
Equations
- Order.isSuccPrelimitRecOn b hs hl = if hb : Order.IsSuccPrelimit b then hl b hb else cast ⋯ (hs (Classical.choose ⋯) ⋯)
Instances For
Alias of Order.isSuccPrelimitRecOn
.
A value can be built by building it on successors and successor pre-limits.
Instances For
Alias of Order.isSuccPrelimitRecOn_limit
.
Alias of Order.isSuccPrelimitRecOn_succ'
.
Alias of Order.isSuccPrelimitRecOn_succ
.
A value can be built by building it on predecessors and predecessor pre-limits.
Equations
- Order.isPredPrelimitRecOn b hs hl = Order.isSuccPrelimitRecOn b hs fun (a : αᵒᵈ) (ha : Order.IsSuccPrelimit a) => hl a ⋯
Instances For
Alias of Order.isPredPrelimitRecOn
.
A value can be built by building it on predecessors and predecessor pre-limits.
Instances For
Alias of Order.isPredPrelimitRecOn_limit
.
Alias of Order.isPredPrelimitRecOn_pred'
.
Alias of Order.isPredPrelimitRecOn_pred
.
Recursion principle on a well-founded partial SuccOrder
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Alias of SuccOrder.prelimitRecOn
.
Recursion principle on a well-founded partial SuccOrder
.
Instances For
Alias of SuccOrder.prelimitRecOn_limit
.
Alias of SuccOrder.prelimitRecOn_succ
.
Recursion principle on a well-founded partial PredOrder
.
Equations
- PredOrder.prelimitRecOn b hp hl = SuccOrder.prelimitRecOn b hp fun (a : αᵒᵈ) (ha : Order.IsSuccPrelimit a) => hl a ⋯
Instances For
Alias of PredOrder.prelimitRecOn
.
Recursion principle on a well-founded partial PredOrder
.
Instances For
Alias of PredOrder.prelimitRecOn_limit
.
Alias of PredOrder.prelimitRecOn_pred
.