Documentation

LeanPool.PDL.Discon

(Big) Disjunction and Conjunction #

Here we define ⋀ and ⋁ on formulas and seveal helper lemmas.

Conjunction #

Conjunction of a list of formulas, with the empty conjunction equal to truth.

Equations
Instances For
    @[simp]
    theorem PDL.consingle {f : Formula} :
    con [f] = f
    theorem PDL.listEq_to_conEq {l1 l2 : List Formula} :
    l1 = l2 → con l1 = con l2
    theorem PDL.conEvalHT {X : List Formula} {f : Formula} {W : Type} {M : KripkeModel W} {w : W} :
    evaluate M w (con (f :: X)) ↔ evaluate M w f ∧ evaluate M w (con X)
    theorem PDL.conEval {W : Type} {M : KripkeModel W} {X : List Formula} {w : W} :
    evaluate M w (con X) ↔ ∀ f ∈ X, evaluate M w f
    theorem PDL.in_voc_con (n : ℕ ⊕ ℕ) (L : List Formula) :
    n ∈ (con L).voc ↔ ∃ φ ∈ L, n ∈ φ.voc

    Vocabulary of Conjunction

    The conjunction of a Finset of formulas, via Finset.pdlSort.

    Equations
    Instances For
      theorem PDL.Finset.conEval {W : Type} {M : KripkeModel W} {X : Finset Formula} {w : W} :
      evaluate M w X.pdlCon ↔ ∀ f ∈ X, evaluate M w f
      theorem PDL.evaluate_con_sort {W✝ : Type} {M : KripkeModel W✝} {w : W✝} (X : Finset Formula) :
      evaluate M w (con (X.sort fun (a b : Formula) => a ≤ b)) ↔ ∀ φ ∈ X, evaluate M w φ

      Evaluating a conjunction does not care about sorting.

      theorem PDL.Finset.in_voc_con (n : ℕ ⊕ ℕ) (X : Finset Formula) :
      n ∈ X.pdlCon.voc ↔ ∃ φ ∈ X, n ∈ φ.voc

      Vocabulary of the conjunction of a Finset.

      Disjunction #

      Disjunction of a list of formulas, with the empty disjunction equal to falsity.

      Equations
      Instances For
        @[simp]
        @[simp]
        theorem PDL.dissingle {f : Formula} :
        dis [f] = f
        theorem PDL.listEq_to_disEq {l1 l2 : List Formula} :
        l1 = l2 → dis l1 = dis l2
        theorem PDL.disEvalHT {X : List Formula} {f : Formula} {W : Type} {M : KripkeModel W} {w : W} :
        evaluate M w (dis (f :: X)) ↔ evaluate M w f ∨ evaluate M w (dis X)
        theorem PDL.disEval {W : Type} {M : KripkeModel W} {X : List Formula} {w : W} :
        evaluate M w (dis X) ↔ ∃ f ∈ X, evaluate M w f
        theorem PDL.in_voc_dis (n : ℕ ⊕ ℕ) (L : List Formula) :
        n ∈ (dis L).voc ↔ ∃ φ ∈ L, n ∈ φ.voc

        Vocabulary of Disjunction

        The disjunction of a Finset of formulas, via Finset.pdlSort.

        Equations
        Instances For
          theorem PDL.Finset.disEval {W : Type} {M : KripkeModel W} {X : Finset Formula} {w : W} :
          evaluate M w X.pdlDis ↔ ∃ f ∈ X, evaluate M w f
          theorem PDL.Finset.in_voc_dis (n : ℕ ⊕ ℕ) (X : Finset Formula) :
          n ∈ X.pdlDis.voc ↔ ∃ φ ∈ X, n ∈ φ.voc

          Vocabulary of the disjunction of a Finset.

          Disjunction of Conjunctions #

          Disjunction of the conjunctions represented by a list of formula lists.

          Equations
          Instances For
            @[simp]
            theorem PDL.disconEvalHT {X : List Formula} (XS : List (List Formula)) :
            semEquiv (discon (X :: XS)) ((con X).or (discon XS))
            theorem PDL.disconEval' {W : Type} {M : KripkeModel W} {w : W} {N : ℕ} (XS : List (List Formula)) :
            XS.length = N → (evaluate M w (discon XS) ↔ ∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f)

            Variant of disconEval for a specific length of XS to be provable by induction.

            theorem PDL.disconEval {W : Type} {M : KripkeModel W} {w : W} (XS : List (List Formula)) :
            evaluate M w (discon XS) ↔ ∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
            theorem PDL.disconOr {XS YS : List (List Formula)} :
            semEquiv (discon (XS ∪ YS)) ((discon XS).or (discon YS))

            Sorting lists of formulas #

            To also sort a Finset (Finset Formula) we need an order on List Formula. We use the lexicographic order List.le coming from the order on formulas.

            TODO: these could be moved to Pdl.Syntax, next to Finset.pdlSort.

            @[instance_reducible]

            The linear order on formulas, bundling the results from Pdl.Syntax. This is only used locally, to get the lexicographic order on List Formula.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              theorem PDL.List.le_iff_le_formula (l1 l2 : List Formula) :
              l1.le l2 ↔ l1 ≤ l2

              The lexicographic List.le on List Formula agrees with the ≤ coming from the linear order Formula.linearOrder.

              The disjunction of conjunctions given by a Finset (Finset Formula). The inner sets are sorted with Finset.pdlSort and the outer set is then sorted lexicographically with List.le.

              Equations
              Instances For
                theorem PDL.Finset.disconEval {W : Type} {M : KripkeModel W} {w : W} (XS : Finset (Finset Formula)) :
                evaluate M w XS.pdlDiscon ↔ ∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f

                Pairwise Union #

                All concatenations of one formula list from each input family.

                Equations
                Instances For

                  All unions of one formula finset from each input family.

                  Equations
                  Instances For
                    class PDL.HasUplus (α : Type → Type) :

                    Containers supporting pairwise combination of families of formula collections.

                    • pairunion : α (α Formula) → α (α Formula) → α (α Formula)

                      Combine every collection from the first family with every collection from the second.

                    Instances

                      Pairwise combination of two families of formula collections.

                      Equations
                      Instances For
                        @[instance_reducible]
                        Equations
                        @[instance_reducible]
                        Equations
                        theorem PDL.union_elem_uplus {XS YS : Finset (Finset Formula)} {X Y : Finset Formula} :
                        X ∈ XS → Y ∈ YS → X ∪ Y ∈ HasUplus.pairunion XS YS
                        theorem PDL.mapCon_mapForall {W : Type} {X : List (List Formula × List Program)} (M : KripkeModel W) (w : W) (φ : Formula) (g : List Formula × List Program → Formula → List Formula) :
                        (∃ f ∈ List.map (fun (Fδ : List Formula × List Program) => con (g Fδ φ)) X, evaluate M w f) ↔ ∃ fs ∈ List.map (fun (Fδ : List Formula × List Program) => g Fδ φ) X, ∀ f ∈ fs, evaluate M w f

                        Helper for oneSidedLocalRuleTruth, used with g = Yset.