Documentation

Linglib.Logic.Natural.Monotonicity.Structure

Domains for the monotonicity calculus #

This file interprets the marked types of the [IMT17] monotonicity calculus as preordered domains: base types by a given assignment, +-arrows as the monotone maps (→o), -arrows as the antitone maps (·ᵒᵈ →o ·), unmarked arrows as all maps, each with the pointwise order. Each subtyping σ ≤ τ is interpreted as an order-preserving coercion, functorial in .

Main declarations #

References #

@[instance_reducible]
instance NaturalLogic.instPreorderα_linglib (D : CategoryTheory.Bundled Preorder) :
Preorder D
Equations
def NaturalLogic.Ty.Dom {B : Type u_1} (Db : BCategoryTheory.Bundled Preorder) :
Ty BCategoryTheory.Bundled Preorder

Interpret each marked type as a preordered domain over the base assignment Db ([IMT17] Definition 3.6): +-arrows as the monotone maps, -arrows as the antitone maps, unmarked arrows as all maps, ordered pointwise.

Equations
Instances For
    @[irreducible]
    def NaturalLogic.Ty.castLE {B : Type u_1} {Db : BCategoryTheory.Bundled Preorder} {σ τ : Ty B} :
    σ τ(Dom Db σ) →o (Dom Db τ)

    The coercion along subtyping ([IMT17] Definition 3.5): the identity on base types; on arrows, conjugation by the inner coercions, forgetting the order-behaviour where the marking weakens to ·.

    Equations
    Instances For

      Application lemmas #

      @[simp]
      theorem NaturalLogic.Ty.castLE_base {B : Type u_1} {Db : BCategoryTheory.Bundled Preorder} {b : B} (h : base b base b) :
      castLE h = OrderHom.id
      @[simp]
      theorem NaturalLogic.Ty.castLE_pos_pos {B : Type u_1} {Db : BCategoryTheory.Bundled Preorder} {σ₁ σ₂ τ₁ τ₂ : Ty B} (h : σ₁.arr Marking.pos τ₁ σ₂.arr Marking.pos τ₂) (k : (Dom Db σ₁) →o (Dom Db τ₁)) :
      (castLE h) k = (castLE ).comp (k.comp (castLE ))
      @[simp]
      theorem NaturalLogic.Ty.castLE_neg_neg {B : Type u_1} {Db : BCategoryTheory.Bundled Preorder} {σ₁ σ₂ τ₁ τ₂ : Ty B} (h : σ₁.arr Marking.neg τ₁ σ₂.arr Marking.neg τ₂) (k : (↑(Dom Db σ₁))ᵒᵈ →o (Dom Db τ₁)) :
      (castLE h) k = (castLE ).comp (k.comp (OrderHom.dual (castLE )))
      @[simp]
      theorem NaturalLogic.Ty.castLE_pos_unmarked {B : Type u_1} {Db : BCategoryTheory.Bundled Preorder} {σ₁ σ₂ τ₁ τ₂ : Ty B} (h : σ₁.arr Marking.pos τ₁ σ₂.arr Marking.unmarked τ₂) (k : (Dom Db σ₁) →o (Dom Db τ₁)) (a : (Dom Db σ₂)) :
      (castLE h) k a = (castLE ) (k ((castLE ) a))
      @[simp]
      theorem NaturalLogic.Ty.castLE_neg_unmarked {B : Type u_1} {Db : BCategoryTheory.Bundled Preorder} {σ₁ σ₂ τ₁ τ₂ : Ty B} (h : σ₁.arr Marking.neg τ₁ σ₂.arr Marking.unmarked τ₂) (k : (↑(Dom Db σ₁))ᵒᵈ →o (Dom Db τ₁)) (a : (Dom Db σ₂)) :
      (castLE h) k a = (castLE ) (k (OrderDual.toDual ((castLE ) a)))
      @[simp]
      theorem NaturalLogic.Ty.castLE_unmarked_unmarked {B : Type u_1} {Db : BCategoryTheory.Bundled Preorder} {σ₁ σ₂ τ₁ τ₂ : Ty B} (h : σ₁.arr Marking.unmarked τ₁ σ₂.arr Marking.unmarked τ₂) (k : (Dom Db σ₁)(Dom Db τ₁)) (a : (Dom Db σ₂)) :
      (castLE h) k a = (castLE ) (k ((castLE ) a))

      Functor laws #

      @[simp]
      theorem NaturalLogic.Ty.castLE_rfl {B : Type u_1} {Db : BCategoryTheory.Bundled Preorder} (σ : Ty B) :
      castLE = OrderHom.id

      The coercion along le_refl is the identity.

      theorem NaturalLogic.Ty.castLE_castLE {B : Type u_1} {Db : BCategoryTheory.Bundled Preorder} {σ τ μ : Ty B} (h₁ : σ τ) (h₂ : τ μ) (a : (Dom Db σ)) :
      (castLE h₂) ((castLE h₁) a) = (castLE ) a

      The coercions compose: casting along h₁ then h₂ is casting along h₁.trans h₂.