Scenarios #
A scenario is the pair of co-arguments of a clause ordered by role rank, A over P in a monotransitive clause and R over T in a ditransitive one, each carried as its value on a referential prominence scale. Scenarios are ordered componentwise with the lower-ranked value reversed, so a scenario lies above another when its higher-ranked argument is at least as prominent and its lower-ranked one at most as prominent. The kind of a scenario compares its two values: downstream when the higher-ranked argument is the more prominent, upstream when it is the less prominent, and balanced when they tie. The direct and inverse contexts of cyclic Agree, the IO–DO combinations the person-case constraint restricts, and co-argument-sensitive indexing are all scenarios over the person scale, and Haspelmath's argument coding splits are scenarios over his prominence scales.
Main declarations #
Clause.Scenario: the two prominence values,highandlow, withScenario.mapandScenario.equivProd, ordered with⊤ = ⟨⊤, ⊥⟩.Clause.Scenario.Kind: upstream, balanced, downstream, as a bounded linear order in that order.Clause.Scenario.kind: the kind of a scenario over a linearly ordered scale, monotone (kind_mono) and unchanged by a strictly monotone map of the scale (kind_map).Clause.Scenario.kind_lt_kind_iff: on a two-element scale one scenario's kind is below another's exactly when the scenario is below the other.
Implementation notes #
The kind is the three-way comparison compare read into the three labels by
Kind.ofOrdering, and the order on kinds, downstream above upstream, is Haspelmath's order of
usualness (11). A scenario over a scale that is not linearly ordered, such as persons, is read
on a rank map p as s.map p.
References #
A scenario records the prominence values of the two co-arguments of a clause, the
higher-ranked one first. Haspelmath writes X > Y for ⟨X, Y⟩.
- high : α
The prominence of the higher-ranked argument, A or R.
- low : α
The prominence of the lower-ranked argument, P or T.
Instances For
Equations
- Clause.instDecidableEqScenario.decEq { high := a, low := a_1 } { high := b, low := b_1 } = if h : a = b then h ▸ if h : a_1 = b_1 then h ▸ isTrue ⋯ else isFalse ⋯ else isFalse ⋯
Instances For
Equations
- Clause.instFintypeScenario = Fintype.ofEquiv ((_ : α✝) × α✝) (Clause.Scenario.proxyTypeEquiv α✝)
A scenario is the pair of its higher- and lower-ranked values.
Equations
- Clause.Scenario.equivProd = { toFun := fun (s : Clause.Scenario α) => (s.high, s.low), invFun := fun (p : α × α) => { high := p.1, low := p.2 }, left_inv := ⋯, right_inv := ⋯ }
Instances For
The order on scenarios #
Equations
- Clause.Scenario.instLE = { le := fun (s t : Clause.Scenario α) => s.high ≤ t.high ∧ t.low ≤ s.low }
Equations
- x✝¹.instDecidableLE x✝ = decidable_of_iff' (x✝¹.high ≤ x✝.high ∧ x✝.low ≤ x✝¹.low) ⋯
The top scenario is ⟨⊤, ⊥⟩ and the bottom one ⟨⊥, ⊤⟩.
Equations
- Clause.Scenario.instBoundedOrder = { top := { high := ⊤, low := ⊥ }, le_top := ⋯, bot := { high := ⊥, low := ⊤ }, bot_le := ⋯ }
Equations
- Clause.Scenario.instPreorder = { toLE := Clause.Scenario.instLE, lt := fun (a b : Clause.Scenario α) => a ≤ b ∧ ¬b ≤ a, le_refl := ⋯, le_trans := ⋯, lt_iff_le_not_ge := ⋯ }
Equations
- Clause.Scenario.instDecidableLTOfDecidableLE = decidableLTOfDecidableLE
Equations
- Clause.Scenario.instPartialOrder = { toPreorder := Clause.Scenario.instPreorder, le_antisymm := ⋯ }
Kinds #
The kinds of scenario, in order of usualness, Haspelmath's three kinds of scenarios. A kind classifies what a scenario means, not how it is coded, so it is not called a direction, the category that direct and inverse markers realize.
Instances For
Equations
- Clause.Scenario.instDecidableEqKind x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- Clause.Scenario.instFintypeKind = { elems := { val := ↑Clause.Scenario.Kind.enumList, nodup := Clause.Scenario.Kind.enumList_nodup }, complete := Clause.Scenario.instFintypeKind._proof_1 }
Equations
- Clause.Scenario.instReprKind = { reprPrec := Clause.Scenario.instReprKind.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Clause.Scenario.Kind.instLinearOrder = LinearOrder.lift' (fun (x : Clause.Scenario.Kind) => x.ctorIdx) Clause.Scenario.Kind.instLinearOrder._proof_1
⊥ = upstream, ⊤ = downstream.
Equations
- One or more equations did not get rendered due to their size.
The kind a comparison of the higher-ranked argument's prominence with the lower-ranked one's yields.
Equations
Instances For
A scenario is downstream when its higher-ranked argument ranks higher on the scale, upstream when it ranks lower, and balanced when the two tie.
Equations
- s.kind = Clause.Scenario.Kind.ofOrdering (compare s.high s.low)
Instances For
Raising the higher-ranked argument or lowering the lower-ranked one never lowers the kind.
Two-element scales #
On a two-element scale the downstream scenario is ⊤ = ⟨⊤, ⊥⟩ alone.