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 Cslib.ωLanguage (α : Type u_4) :
Type u_4

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

Equations
Instances For
    Equations
    theorem Cslib.ωLanguage.le_def {α : Type u_1} (p q : ωLanguage α) :
    p q p q
    theorem Cslib.ωLanguage.sup_def {α : Type u_1} (p q : ωLanguage α) :
    pq = p q
    theorem Cslib.ωLanguage.inf_def {α : Type u_1} (p q : ωLanguage α) :
    pq = p q
    theorem Cslib.ωLanguage.compl_def {α : Type u_1} (p : ωLanguage α) :
    theorem Cslib.ωLanguage.iSup_def {α : Type u_1} {ι : Sort v} {p : ιωLanguage α} :
    ⨆ (i : ι), p i = ⋃ (i : ι), p i
    theorem Cslib.ωLanguage.iInf_def {α : Type u_1} {ι : Sort v} {p : ιωLanguage α} :
    ⨅ (i : ι), p i = ⋂ (i : ι), p i

    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
    theorem Cslib.ωLanguage.hmul_def {α : Type u_1} (l : Language α) (p : ωLanguage α) :
    l * p = Set.image2 (fun (x1 : List α) (x2 : ωSequence α) => x1 ++ω x2) l p

    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 = {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
                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 α) :
                  theorem Cslib.ωLanguage.ext {α : Type u_1} {p q : ωLanguage α} (h : ∀ (s : ωSequence α), s p s q) :
                  p = q
                  theorem Cslib.ωLanguage.ext_iff {α : Type u_1} {p q : ωLanguage α} :
                  p = q ∀ (s : ωSequence α), s p s 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_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 = {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 = {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