Documentation

Linglib.Semantics.Composition.Mode

Composition modes #

The composition modes of Heim and Kratzer, with the intensional application of von Fintel and Heim and the event identification of Kratzer, are typed binary operations: a mode of type Mode σ₁ σ₂ τ composes a left daughter of type σ₁ and a right daughter of type σ₂ into a mother of type τ. Functional application, intensional application and event identification come in two orders, the function or role head being the left or the right daughter. The types of two daughters select the mode they compose by (Ty.mode?), the first that applies in the order functional application, intensional application, predicate modification, event identification.

A mode denotes an operation on the denotation domains (Mode.eval): application, application to the rigid intension of the argument, the intersection of two predicates, and event identification. Under an applicative effect a mode composes the daughters' computations in their linear order (Mode.evalM), whichever daughter is the function. In any family of values indexed by the types, Mode.combine? composes two values by the mode their types select.

Main definitions #

Main results #

References #

The composition modes are the typed binary operations of functional application, with the function as either daughter, of intensional application, which applies a daughter expecting an intension to the rigid intension of its sister in either order ([vFH11]), of predicate modification, and of event identification of a role head and an eventuality predicate in either order ([Kra96]).

Instances For
    @[instance_reducible]
    instance HeimKratzer.instDecidableEqMode {a✝ a✝¹ a✝² : Montague.Ty} :
    DecidableEq (Mode a✝ a✝¹ a✝²)
    Equations

    Selection by the daughters' types #

    def HeimKratzer.Mode.functionalLeft? (σ₁ σ₂ : Montague.Ty) :
    Option ((τ : Montague.Ty) × Mode σ₁ σ₂ τ)

    Forward functional application applies when the left daughter is a function on the right one.

    Equations
    Instances For
      def HeimKratzer.Mode.functionalRight? (σ₁ σ₂ : Montague.Ty) :
      Option ((τ : Montague.Ty) × Mode σ₁ σ₂ τ)

      Backward functional application applies when the right daughter is a function on the left one.

      Equations
      Instances For
        def HeimKratzer.Mode.intensionalLeft? (σ₁ σ₂ : Montague.Ty) :
        Option ((τ : Montague.Ty) × Mode σ₁ σ₂ τ)

        Intensional application applies when the left daughter expects the intension of the right one.

        Equations
        Instances For
          def HeimKratzer.Mode.intensionalRight? (σ₁ σ₂ : Montague.Ty) :
          Option ((τ : Montague.Ty) × Mode σ₁ σ₂ τ)

          Intensional application applies when the right daughter expects the intension of the left one.

          Equations
          Instances For
            def HeimKratzer.Mode.eventIdentification? (σ₁ σ₂ : Montague.Ty) :
            Option ((τ : Montague.Ty) × Mode σ₁ σ₂ τ)

            Event identification applies to a role head and an eventuality predicate, in either order.

            Equations
            Instances For
              def Montague.Ty.mode? (σ₁ σ₂ : Ty) :
              Option ((τ : Ty) × HeimKratzer.Mode σ₁ σ₂ τ)

              σ₁.mode? σ₂ is the mode by which a left daughter of type σ₁ and a right daughter of type σ₂ compose, the first that applies of functional application (the left daughter as the function first), intensional application, predicate modification and event identification, and none when none does.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                @[simp]
                theorem HeimKratzer.Mode.mode?_fn_left (σ τ : Montague.Ty) :
                (σ ⇒ τ).mode? σ = some ⟨τ, functionalLeft⟩

                A function type applies to an argument of its domain, the function on the left.

                No type is its own argument type, so a type never applies to a function type from itself.

                @[simp]
                theorem HeimKratzer.Mode.mode?_fn_right (σ τ : Montague.Ty) :
                σ.mode? (σ ⇒ τ) = some ⟨τ, functionalRight⟩

                A function type applies to an argument of its domain, the function on the right.

                Denotation #

                def HeimKratzer.Mode.eval {E W D : Type} {σ₁ σ₂ τ : Montague.Ty} :
                Mode σ₁ σ₂ τ → Montague.Ty.Domain E W σ₁ D → Montague.Ty.Domain E W σ₂ D → Montague.Ty.Domain E W τ D

                A mode denotes application, application to the rigid intension of the argument, the intersection of two predicates, or event identification.

                Equations
                Instances For
                  def HeimKratzer.Mode.evalM {E W D : Type} {σ₁ σ₂ τ : Montague.Ty} {M : Type → Type} [Applicative M] (m : Mode σ₁ σ₂ τ) (a : M (Montague.Ty.Domain E W σ₁ D)) (b : M (Montague.Ty.Domain E W σ₂ D)) :
                  M (Montague.Ty.Domain E W τ D)

                  The denotation of a mode under an applicative effect, which runs the left daughter's computation first.

                  Equations
                  Instances For
                    @[simp]
                    theorem HeimKratzer.Mode.evalM_id {E W D : Type} {σ₁ σ₂ τ : Montague.Ty} (m : Mode σ₁ σ₂ τ) (a : Montague.Ty.Domain E W σ₁ D) (b : Montague.Ty.Domain E W σ₂ D) :
                    m.evalM a b = m.eval a b

                    At the identity effect a mode denotes its pure denotation.

                    Composition in a family of values #

                    def HeimKratzer.Mode.combine? {V : Montague.Ty → Type u_1} (op : {σ₁ σ₂ τ : Montague.Ty} → Mode σ₁ σ₂ τ → V σ₁ → V σ₂ → V τ) (d₁ d₂ : (ty : Montague.Ty) × V ty) :
                    Option ((ty : Montague.Ty) × V ty)

                    Two values compose by the mode their types select, interpreted by op, and not at all when no mode applies.

                    Equations
                    Instances For
                      @[simp]
                      theorem HeimKratzer.Mode.combine?_map_fst {V : Montague.Ty → Type u_1} (op : {σ₁ σ₂ τ : Montague.Ty} → Mode σ₁ σ₂ τ → V σ₁ → V σ₂ → V τ) (d₁ d₂ : (ty : Montague.Ty) × V ty) :
                      Option.map (fun (x : (ty : Montague.Ty) × V ty) => x.fst) (combine? (fun {σ₁ σ₂ τ : Montague.Ty} => op) d₁ d₂) = Option.map (fun (x : (τ : Montague.Ty) × Mode d₁.fst d₂.fst τ) => x.fst) (d₁.fst.mode? d₂.fst)

                      The type of a composed value is the type the mode selects, a function of the daughters' types alone.

                      theorem HeimKratzer.Mode.combine?_map {V : Montague.Ty → Type u_1} {V' : Montague.Ty → Type u_2} {op : {σ₁ σ₂ τ : Montague.Ty} → Mode σ₁ σ₂ τ → V σ₁ → V σ₂ → V τ} {op' : {σ₁ σ₂ τ : Montague.Ty} → Mode σ₁ σ₂ τ → V' σ₁ → V' σ₂ → V' τ} {h : {ty : Montague.Ty} → V ty → V' ty} (hh : ∀ {σ₁ σ₂ τ : Montague.Ty} (m : Mode σ₁ σ₂ τ) (a : V σ₁) (b : V σ₂), h (op m a b) = op' m (h a) (h b)) (d₁ d₂ : (ty : Montague.Ty) × V ty) :
                      Option.map (fun (d : (ty : Montague.Ty) × V ty) => ⟨d.fst, h d.snd⟩) (combine? (fun {σ₁ σ₂ τ : Montague.Ty} => op) d₁ d₂) = combine? (fun {σ₁ σ₂ τ : Montague.Ty} => op') ⟨d₁.fst, h d₁.snd⟩ ⟨d₂.fst, h d₂.snd⟩

                      Composing commutes with every map of families that commutes with the modes.

                      @[simp]
                      theorem HeimKratzer.Mode.combine?_fn_left {V : Montague.Ty → Type u_1} (op : {σ₁ σ₂ τ : Montague.Ty} → Mode σ₁ σ₂ τ → V σ₁ → V σ₂ → V τ) {σ τ : Montague.Ty} (f : V (σ ⇒ τ)) (a : V σ) :
                      combine? (fun {σ₁ σ₂ τ : Montague.Ty} => op) ⟨σ ⇒ τ, f⟩ ⟨σ, a⟩ = some ⟨τ, op functionalLeft f a⟩
                      @[simp]
                      theorem HeimKratzer.Mode.combine?_fn_right {V : Montague.Ty → Type u_1} (op : {σ₁ σ₂ τ : Montague.Ty} → Mode σ₁ σ₂ τ → V σ₁ → V σ₂ → V τ) {σ τ : Montague.Ty} (a : V σ) (f : V (σ ⇒ τ)) :
                      combine? (fun {σ₁ σ₂ τ : Montague.Ty} => op) ⟨σ, a⟩ ⟨σ ⇒ τ, f⟩ = some ⟨τ, op functionalRight a f⟩
                      @[simp]
                      theorem HeimKratzer.Mode.combine?_predicateModification {V : Montague.Ty → Type u_1} (op : {σ₁ σ₂ τ : Montague.Ty} → Mode σ₁ σ₂ τ → V σ₁ → V σ₂ → V τ) (p q : V (Montague.Ty.e ⇒ Montague.Ty.t)) :