Documentation

Cslib.Computability.Languages.OmegaLanguage

ωLanguage #

This file contains the definition and operations on formal ω-languages, which are sets of infinite sequences over an alphabet α (namely, objects of type ωSequence α).

Main definitions and notations #

In general we will use p and q to denote ω-languages and l and m to denote languages (namely, sets of finite sequences of type List α).

Main theorems #

TODO #

def Language.toSet {α : Type u_1} (l : Language α) :
Set (List α)

The set of lists in a language.

Equations
Instances For
    structure Cslib.ωLanguage (α : Type u) :

    An ω-language is a set of ω-sequences over an alphabet.

    • ofSet :: (
      • toSet : Set (ωSequence α)

        The set of ω-sequences in an ω-language.

    • )
    Instances For
      theorem Cslib.ωLanguage.ext {α : Type u} {x y : ωLanguage α} (toSet : x.toSet = y.toSet) :
      x = y
      theorem Cslib.ωLanguage.ext_iff {α : Type u} {x y : ωLanguage α} :
      x = y x.toSet = y.toSet
      @[implicit_reducible]
      Equations
      @[simp]
      theorem Cslib.ωLanguage.ofSet_toSet {α : Type u_1} (l : ωLanguage α) :
      { toSet := l.toSet } = l
      theorem Cslib.ωLanguage.toSet_ofSet {α : Type u_1} (s : Set (ωSequence α)) :
      { toSet := s }.toSet = s

      The equivalence between ωLanguage α and Set (ωSequence α).

      Equations
      Instances For
        @[implicit_reducible]
        Equations
        @[implicit_reducible]
        Equations
        theorem Cslib.ωLanguage.le_def {α : Type u_1} (p q : ωLanguage α) :
        theorem Cslib.ωLanguage.top_def {α : Type u_1} :
        = { toSet := Set.univ }
        theorem Cslib.ωLanguage.bot_def {α : Type u_1} :
        = { toSet := }
        theorem Cslib.ωLanguage.sup_def {α : Type u_1} (p q : ωLanguage α) :
        pq = { toSet := p.toSet q.toSet }
        theorem Cslib.ωLanguage.inf_def {α : Type u_1} (p q : ωLanguage α) :
        pq = { toSet := p.toSet q.toSet }
        theorem Cslib.ωLanguage.compl_def {α : Type u_1} (p : ωLanguage α) :
        p = { toSet := p.toSet }
        theorem Cslib.ωLanguage.sSup_def {α : Type u_1} (s : Set (ωLanguage α)) :
        sSup s = { toSet := ps, p.toSet }
        theorem Cslib.ωLanguage.sInf_def {α : Type u_1} (s : Set (ωLanguage α)) :
        sInf s = { toSet := ps, p.toSet }
        theorem Cslib.ωLanguage.iSup_def {α : Type u_1} {ι : Sort v} {p : ιωLanguage α} :
        ⨆ (i : ι), p i = { toSet := ⋃ (i : ι), (p i).toSet }
        theorem Cslib.ωLanguage.iInf_def {α : Type u_1} {ι : Sort v} {p : ιωLanguage α} :
        ⨅ (i : ι), p i = { toSet := ⋂ (i : ι), (p i).toSet }
        @[implicit_reducible]

        The concatenation of a language l and an ω-language p is the ω-language made of infinite sequences x ++ω y where x ∈ l and y ∈ p.

        Equations
        • One or more equations did not get rendered due to their size.
        theorem Cslib.ωLanguage.hmul_def {α : Type u_1} (l : Language α) (p : ωLanguage α) :
        l * p = { toSet := Set.image2 (fun (x1 : List α) (x2 : ωSequence α) => x1 ++ω x2) l.toSet p.toSet }

        Concatenation of infinitely many copies of a languages, resulting in an ω-language. A.k.a. ω-power.

        Equations
        Instances For
          class Cslib.ωLanguage.OmegaPow (α : Type u_4) (β : outParam (Type u_5)) :
          Type (max u_4 u_5)

          Notation class for omegaPow.

          • omegaPow : αβ

            The omegaPow operation.

          Instances

            Use the postfix notation ^ωforomegaPow`.

            Equations
            Instances For
              theorem Cslib.ωLanguage.omegaPow_def {α : Type u_1} [Inhabited α] (l : Language α) :
              l = { toSet := {s : ωSequence α | ∃ (xs : ωSequence (List α)), xs.flatten = s ∀ (k : ), xs k l - 1} }

              The ω-limit of a language l is the ω-language of infinite sequences each of which contains infinitely many distinct prefixes in l.

              Equations
              Instances For
                class Cslib.ωLanguage.OmegaLim (α : Type u_4) (β : outParam (Type u_5)) :
                Type (max u_4 u_5)

                Notation class for omegaLim.

                • omegaLim : αβ

                  The omegaLim operation.

                Instances

                  Use the postfix notation ↗ωforomegaLim`.

                  Equations
                  Instances For
                    @[implicit_reducible]
                    Equations
                    theorem Cslib.ωLanguage.omegaLim_def {α : Type u_1} (l : Language α) :
                    l↗ω = { toSet := {s : ωSequence α | ∃ᶠ (m : ) in Filter.atTop, s.extract 0 m l} }
                    def Cslib.ωLanguage.map {α : Type u_1} {β : Type u_2} (f : αβ) :

                    transform an ω-language p over α into an ω-language over β by mapping through f : α → β.

                    Equations
                    Instances For
                      theorem Cslib.ωLanguage.map_def {α : Type u_1} {β : Type u_2} (f : αβ) (p : ωLanguage α) :
                      map f p = { toSet := ωSequence.map f '' p.toSet }
                      theorem Cslib.ωLanguage.mem_def {α : Type u_1} (p : ωLanguage α) (s : ωSequence α) :
                      s p s p.toSet
                      theorem Cslib.ωLanguage.mem_ext {α : Type u_1} {p q : ωLanguage α} (h : ∀ (s : ωSequence α), s p s q) :
                      p = q
                      @[simp]
                      theorem Cslib.ωLanguage.mem_top {α : Type u_1} (s : ωSequence α) :
                      @[simp]
                      theorem Cslib.ωLanguage.notMem_bot {α : Type u_1} (s : ωSequence α) :
                      s
                      @[simp]
                      theorem Cslib.ωLanguage.mem_sup {α : Type u_1} (p q : ωLanguage α) (s : ωSequence α) :
                      s pq s p s q
                      @[simp]
                      theorem Cslib.ωLanguage.mem_inf {α : Type u_1} (p q : ωLanguage α) (s : ωSequence α) :
                      s pq s p s q
                      @[simp]
                      theorem Cslib.ωLanguage.mem_compl {α : Type u_1} (p : ωLanguage α) (s : ωSequence α) :
                      s p sp
                      @[simp]
                      theorem Cslib.ωLanguage.mem_sSup {α : Type u_1} (ps : Set (ωLanguage α)) {s : ωSequence α} :
                      s sSup ps pps, s p
                      @[simp]
                      theorem Cslib.ωLanguage.mem_sInf {α : Type u_1} (ps : Set (ωLanguage α)) {s : ωSequence α} :
                      s sInf ps pps, s p
                      @[simp]
                      theorem Cslib.ωLanguage.mem_iSup {α : Type u_1} {ι : Sort v} {p : ιωLanguage α} {s : ωSequence α} :
                      s ⨆ (i : ι), p i ∃ (i : ι), s p i
                      @[simp]
                      theorem Cslib.ωLanguage.mem_iInf {α : Type u_1} {ι : Sort v} {p : ιωLanguage α} {s : ωSequence α} :
                      s ⨅ (i : ι), p i ∀ (i : ι), s p i
                      @[simp]
                      theorem Cslib.ωLanguage.mem_hmul {α : Type u_1} {l : Language α} {p : ωLanguage α} {s : ωSequence α} :
                      s l * p xl, tp, x ++ω t = s
                      theorem Cslib.ωLanguage.append_mem_hmul {α : Type u_1} {l : Language α} {p : ωLanguage α} {x : List α} {s : ωSequence α} :
                      x ls px ++ω s l * p
                      @[simp]
                      theorem Cslib.ωLanguage.mem_omegaPow {α : Type u_1} {l : Language α} {s : ωSequence α} [Inhabited α] :
                      s l ∃ (xs : ωSequence (List α)), xs.flatten = s ∀ (k : ), xs k l - 1
                      theorem Cslib.ωLanguage.flatten_mem_omegaPow {α : Type u_1} {l : Language α} [Inhabited α] {xs : ωSequence (List α)} (h_xs : ∀ (k : ), xs k l - 1) :
                      @[simp]
                      theorem Cslib.ωLanguage.mem_omegaLim {α : Type u_1} {l : Language α} {s : ωSequence α} :
                      theorem Cslib.ωLanguage.mul_hmul {α : Type u_1} {l m : Language α} {p : ωLanguage α} :
                      l * m * p = l * (m * p)
                      @[simp]
                      theorem Cslib.ωLanguage.zero_hmul {α : Type u_1} {p : ωLanguage α} :
                      0 * p =
                      @[simp]
                      theorem Cslib.ωLanguage.hmul_bot {α : Type u_1} {l : Language α} :
                      @[simp]
                      theorem Cslib.ωLanguage.one_hmul {α : Type u_1} {p : ωLanguage α} :
                      1 * p = p
                      theorem Cslib.ωLanguage.hmul_sup {α : Type u_1} {l : Language α} {p q : ωLanguage α} :
                      l * (pq) = l * pl * q
                      theorem Cslib.ωLanguage.add_hmul {α : Type u_1} {l m : Language α} {p : ωLanguage α} :
                      (l + m) * p = l * pm * p
                      theorem Cslib.ωLanguage.iSup_hmul {α : Type u_1} {ι : Sort v} (l : ιLanguage α) (p : ωLanguage α) :
                      (⨆ (i : ι), l i) * p = ⨆ (i : ι), l i * p
                      theorem Cslib.ωLanguage.hmul_iSup {α : Type u_1} {ι : Sort v} (p : ιωLanguage α) (l : Language α) :
                      l * ⨆ (i : ι), p i = ⨆ (i : ι), l * p i
                      theorem Cslib.ωLanguage.le_hmul_congr {α : Type u_1} {l1 l2 : Language α} {p1 p2 : ωLanguage α} (hl : l1 l2) (hp : p1 p2) :
                      l1 * p1 l2 * p2
                      theorem Cslib.ωLanguage.le_omegaPow_congr {α : Type u_1} [Inhabited α] {l1 l2 : Language α} (h : l1 l2) :
                      l1 l2
                      @[simp]
                      theorem Cslib.ωLanguage.omegaPow_of_sub_one {α : Type u_1} {l : Language α} [Inhabited α] :
                      (l - 1) = l
                      @[simp]
                      @[simp]
                      @[simp]
                      theorem Cslib.ωLanguage.omegaPow_of_le_one {α : Type u_1} {l : Language α} [Inhabited α] (h : l 1) :
                      theorem Cslib.ωLanguage.omegaPow_eq_empty {α : Type u_1} {l : Language α} [Inhabited α] (h : l = ) :
                      l 1
                      theorem Cslib.ωLanguage.hmul_seq_prop {α : Type u_1} {l : Language α} {p : ωLanguage α} :
                      l * p = { toSet := {s : ωSequence α | ∃ (k : ), ωSequence.take k s l ωSequence.drop k s p} }

                      An alternative characterization of l * p.

                      theorem Cslib.ωLanguage.omegaPow_seq_prop {α : Type u_1} {l : Language α} [Inhabited α] :
                      l = { toSet := {s : ωSequence α | ∃ (f : ), StrictMono f f 0 = 0 ∀ (m : ), s.extract (f m) (f (m + 1)) l} }

                      An alternative characterization of l^ω.

                      theorem Cslib.ωLanguage.omegaPow_coind' {α : Type u_1} {l : Language α} {p : ωLanguage α} [Inhabited α] (h_nn : []l) (h_le : p l * p) :
                      p l
                      theorem Cslib.ωLanguage.omegaPow_coind {α : Type u_1} {l : Language α} {p : ωLanguage α} [Inhabited α] (h_le : p (l - 1) * p) :
                      p l

                      A "coinductive" rule for proving p is a subset of l^ω.

                      @[simp]
                      @[simp]
                      @[simp]
                      theorem Cslib.ωLanguage.map_id {α : Type u_1} (p : ωLanguage α) :
                      map id p = p
                      theorem Cslib.ωLanguage.map_map {α : Type u_1} {β : Type u_2} {γ : Type u_3} (g : βγ) (f : αβ) (p : ωLanguage α) :
                      map g (map f p) = map (g f) p