Satisfaction Ordering #
A SatisfactionOrdering α Criterion bundles a Preorder α with the data
that constructs it: a satisfies : α → Criterion → Bool relation and a
criteria : List Criterion. The induced ≤ is subset inclusion of
satisfied criteria.
Used by Kratzer modal semantics (worlds by ordering source) and Phillips-Brown desire semantics (propositions by desires).
Design #
The structure extends Preorder α, so all of mathlib's order vocabulary
(≤, <, IsMax, Maximal, etc.) is available on α once
o.toPreorder is opened as an instance (e.g. letI := o.toPreorder).
The smart constructor ofCriteria builds the canonical satisfaction-based
preorder from a satisfies relation and a criteria list. A decLE field
carries decidability of ≤, automatic for the ofCriteria construction.
atLeastAsGood, equivalent, strictlyBetter are kept as @[reducible]
aliases for o.le, AntisymmRel, and o.lt so call sites can use
domain-friendly names.
Satisfaction-based preorder on α by subset inclusion of satisfied
criteria. Extends Preorder α so downstream code gets ≤, <, and
mathlib's order vocabulary; retains satisfies/criteria so the
construction data is recoverable. decLE carries decidability of ≤.
- satisfies : α → Criterion → Bool
- criteria : List Criterion
- decLE (a a' : α) : Decidable (a ≤ a')
Instances For
Equations
- o.instDecidableLe a a' = o.decLE a a'
The list of criteria from o.criteria that a satisfies.
Equations
- o.satisfiedBy a = List.filter (o.satisfies a) o.criteria
Instances For
Canonical constructor: build a SatisfactionOrdering from a satisfaction
relation and a criteria list. The induced ≤ is "every criterion a'
satisfies, a also satisfies".
Equations
- One or more equations did not get rendered due to their size.
Instances For
Domain-friendly aliases #
These let study files use names that match the source literature ("at least as good as", "strictly better", "equivalent") while staying definitionally equal to the underlying preorder.
Readability alias for a ≤ a' under o.
Equations
- o.atLeastAsGood a a' = (a ≤ a')
Instances For
Readability alias for a < a' under o.
Equations
- o.strictlyBetter a a' = (a ≤ a' ∧ ¬a' ≤ a)
Instances For
a and a' satisfy the same criteria.
Equations
- o.equivalent a a' = (a ≤ a' ∧ a' ≤ a)
Instances For
Reflexivity, transitivity, symmetry #
Direct wrappers over the underlying Preorder methods, exposed under the
domain-friendly names.
NormalityOrder projection #
The induced NormalityOrder: connects satisfaction-based orderings
(Kratzer modal semantics, Phillips-Brown desire) to the default reasoning
infrastructure (optimal, refine, respects, CR1–CR4).
Equations
- o.toNormalityOrder = { le := LE.le, le_refl := ⋯, le_trans := ⋯ }
Instances For
Maxima and undominated elements #
Best elements: those at-least-as-good as every candidate. (Greatest
elements; when the order is partial, see undominated for maximal
elements.)
Equations
Instances For
Undominated elements: those not strictly dominated by any candidate. The
Pareto frontier — equivalent to best when the ordering is total, but
more general for partial orders where incomparable elements can both be
undominated without either dominating all others.
Equations
- o.undominated candidates = List.filter (fun (a : α) => decide ¬∃ (a' : α), a' ∈ candidates ∧ o.strictlyBetter a' a) candidates
Instances For
Membership characterization for best.
Membership characterization for undominated.
Every best element is undominated.
Empty-criteria boundary #
When constructed via ofCriteria with an empty criteria list, the induced
preorder is total: every pair is ≤.