Documentation

Linglib.Syntax.Clause.Scenario

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 #

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 #

structure Clause.Scenario (α : Type u_1) :
Type u_1

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
    theorem Clause.Scenario.ext_iff {α : Type u_1} {x y : Scenario α} :
    x = y ↔ x.high = y.high ∧ x.low = y.low
    theorem Clause.Scenario.ext {α : Type u_1} {x y : Scenario α} (high : x.high = y.high) (low : x.low = y.low) :
    x = y
    def Clause.instDecidableEqScenario.decEq {α✝ : Type u_1} [DecidableEq α✝] (x✝ x✝¹ : Scenario α✝) :
    Decidable (x✝ = x✝¹)
    Equations
    Instances For
      @[instance_reducible]
      instance Clause.instDecidableEqScenario {α✝ : Type u_1} [DecidableEq α✝] :
      DecidableEq (Scenario α✝)
      Equations
      @[instance_reducible]
      instance Clause.instFintypeScenario {α✝ : Type u_1} [Fintype α✝] :
      Fintype (Scenario α✝)
      Equations
      def Clause.Scenario.map {α : Type u_1} {β : Type u_2} (f : α → β) (s : Scenario α) :

      Apply a map to both prominence values.

      Equations
      Instances For
        @[simp]
        theorem Clause.Scenario.map_high {α : Type u_1} {β : Type u_2} (f : α → β) (s : Scenario α) :
        (map f s).high = f s.high
        @[simp]
        theorem Clause.Scenario.map_low {α : Type u_1} {β : Type u_2} (f : α → β) (s : Scenario α) :
        (map f s).low = f s.low
        def Clause.Scenario.equivProd {α : Type u_1} :
        Scenario α ≃ α × α

        A scenario is the pair of its higher- and lower-ranked values.

        Equations
        Instances For
          @[simp]
          theorem Clause.Scenario.equivProd_symm_apply_low {α : Type u_1} (p : α × α) :
          (equivProd.symm p).low = p.2
          @[simp]
          theorem Clause.Scenario.equivProd_apply {α : Type u_1} (s : Scenario α) :
          equivProd s = (s.high, s.low)
          @[simp]
          theorem Clause.Scenario.equivProd_symm_apply_high {α : Type u_1} (p : α × α) :
          (equivProd.symm p).high = p.1

          The order on scenarios #

          @[instance_reducible]
          instance Clause.Scenario.instLE {α : Type u_1} [LE α] :
          LE (Scenario α)
          Equations
          theorem Clause.Scenario.le_def {α : Type u_1} [LE α] {s t : Scenario α} :
          s ≤ t ↔ s.high ≤ t.high ∧ t.low ≤ s.low
          @[instance_reducible]
          instance Clause.Scenario.instDecidableLE {α : Type u_1} [LE α] [DecidableLE α] :
          DecidableLE (Scenario α)
          Equations
          @[instance_reducible]
          instance Clause.Scenario.instBoundedOrder {α : Type u_1} [LE α] [BoundedOrder α] :
          BoundedOrder (Scenario α)

          The top scenario is ⟨⊤, ⊥⟩ and the bottom one ⟨⊥, ⊤⟩.

          Equations
          @[simp]
          theorem Clause.Scenario.top_high {α : Type u_1} [LE α] [BoundedOrder α] :
          ⊤.high = ⊤
          @[simp]
          theorem Clause.Scenario.top_low {α : Type u_1} [LE α] [BoundedOrder α] :
          ⊤.low = ⊥
          @[simp]
          theorem Clause.Scenario.bot_high {α : Type u_1} [LE α] [BoundedOrder α] :
          ⊥.high = ⊥
          @[simp]
          theorem Clause.Scenario.bot_low {α : Type u_1} [LE α] [BoundedOrder α] :
          ⊥.low = ⊤
          @[instance_reducible]
          instance Clause.Scenario.instPreorder {α : Type u_1} [Preorder α] :
          Preorder (Scenario α)
          Equations
          @[instance_reducible]
          instance Clause.Scenario.instDecidableLTOfDecidableLE {α : Type u_1} [Preorder α] [DecidableLE α] :
          DecidableLT (Scenario α)
          Equations
          theorem Clause.Scenario.high_mono {α : Type u_1} [Preorder α] :
          Monotone high
          theorem Clause.Scenario.low_anti {α : Type u_1} [Preorder α] :
          Antitone low
          @[instance_reducible]
          instance Clause.Scenario.instPartialOrder {α : Type u_1} [PartialOrder α] :
          PartialOrder (Scenario α)
          Equations

          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
            @[instance_reducible]
            Equations
            @[instance_reducible]
            Equations
            def Clause.Scenario.instReprKind.repr :
            Kind → ℕ → Std.Format
            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[instance_reducible]

              ⊥ = 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
                @[simp]
                theorem Clause.Scenario.Kind.ofOrdering_eq_upstream {o : Ordering} :
                ofOrdering o = upstream ↔ o = Ordering.lt
                @[simp]
                theorem Clause.Scenario.Kind.ofOrdering_eq_balanced {o : Ordering} :
                ofOrdering o = balanced ↔ o = Ordering.eq
                @[simp]
                theorem Clause.Scenario.Kind.ofOrdering_eq_downstream {o : Ordering} :
                ofOrdering o = downstream ↔ o = Ordering.gt
                def Clause.Scenario.kind {α : Type u_1} [LinearOrder α] (s : Scenario α) :

                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
                Instances For
                  theorem Clause.Scenario.kind_eq_downstream_iff {α : Type u_1} [LinearOrder α] {s : Scenario α} :
                  theorem Clause.Scenario.kind_eq_upstream_iff {α : Type u_1} [LinearOrder α] {s : Scenario α} :
                  s.kind = Kind.upstream ↔ s.high < s.low
                  theorem Clause.Scenario.kind_eq_balanced_iff {α : Type u_1} [LinearOrder α] {s : Scenario α} :
                  s.kind = Kind.balanced ↔ s.high = s.low
                  theorem Clause.Scenario.kind_le_balanced_iff {α : Type u_1} [LinearOrder α] {s : Scenario α} :
                  s.kind ≤ Kind.balanced ↔ s.high ≤ s.low
                  theorem Clause.Scenario.balanced_le_kind_iff {α : Type u_1} [LinearOrder α] {s : Scenario α} :
                  Kind.balanced ≤ s.kind ↔ s.low ≤ s.high
                  theorem Clause.Scenario.kind_mono {α : Type u_1} [LinearOrder α] :
                  Monotone kind

                  Raising the higher-ranked argument or lowering the lower-ranked one never lowers the kind.

                  theorem Clause.Scenario.kind_map {α : Type u_1} {β : Type u_2} [LinearOrder α] [LinearOrder β] {f : α → β} (hf : StrictMono f) (s : Scenario α) :
                  (map f s).kind = s.kind

                  A strictly monotone map of the scale preserves the kind.

                  theorem Clause.Scenario.map_le_map_iff {α : Type u_1} {β : Type u_2} [LinearOrder α] {s t : Scenario α} [LinearOrder β] {f : α → β} (hf : StrictMono f) :
                  map f s ≤ map f t ↔ s ≤ t
                  theorem Clause.Scenario.map_lt_map_iff {α : Type u_1} {β : Type u_2} [LinearOrder α] {s t : Scenario α} [LinearOrder β] {f : α → β} (hf : StrictMono f) :
                  map f s < map f t ↔ s < t

                  Two-element scales #

                  theorem Clause.Scenario.kind_lt_kind_iff {α : Type u_1} [LinearOrder α] {s t : Scenario α} [BoundedOrder α] [IsSimpleOrder α] :
                  s.kind < t.kind ↔ s < t

                  On a two-element scale a scenario's kind is below another's exactly when the scenario is below the other, since such a scale is Bool.

                  theorem Clause.Scenario.kind_eq_downstream_iff_eq_top {α : Type u_1} [LinearOrder α] {s : Scenario α} [BoundedOrder α] [IsSimpleOrder α] :
                  s.kind = Kind.downstream ↔ s = ⊤

                  On a two-element scale the downstream scenario is ⊤ = ⟨⊤, ⊥⟩ alone.