Documentation

Pdl.SemQuot

Semantic Quotients #

Defining the Quotient of Formulas #

@[reducible, inline]
abbrev SemProp :

A semantic property is an element of the quotient given by semEquiv.

Equations
Instances For

    Defining the Quotient of Programs #

    @[reducible, inline]
    abbrev RelProp :

    A relational property is an element of the quotient given by relEquiv.

    Equations
    Instances For

      Lifting congruent functions (in general) #

      These two should maybe go in mathlib? Or they already exist somewhere?

      theorem congr_liftFun {α β : Type} {R : ααProp} {S : ββProp} {f : αβ} (h : ∀ (x y : α), R x yS (f x) (f y)) :
      Relator.LiftFun (fun (x1 x2 : α) => R x1 x2) (fun (x1 x2 : β) => S x1 x2) f f
      theorem congr_liftFun₂ {γ : Sort u_1} {α β : Type} [HasEquiv α] [HasEquiv β] [HasEquiv γ] {f : αβγ} (h : ∀ (x₁ x₂ : α) (y₁ y₂ : β), x₁ x₂y₁ y₂f x₁ y₁ f x₂ y₂) :
      Relator.LiftFun (fun (x1 x2 : α) => x1 x2) (Relator.LiftFun (fun (x1 x2 : β) => x1 x2) fun (x1 x2 : γ) => x1 x2) f f

      Lifting formula connectives to the quotient #

      theorem Formula.neg_congr {φ ψ : Formula} (h : φ ψ) :
      (~φ) (~ψ)
      theorem Formula.and_congr {φ₁ ψ₁ φ₂ ψ₂ : Formula} (h₁ : φ₁ φ₂) (h₂ : ψ₁ ψ₂) :
      φ₁ψ₁ φ₂ψ₂
      theorem Formula.box_congr {α β : Program} {φ ψ : Formula} (h₁ : α β) (h₂ : φ ψ) :
      (αφ) βψ

      Lifting program operators to the quotient #

      Examples #

      theorem neg_eq {φ ψ : Formula} (h : φ ψ) :
      theorem trans_calc {P Q R : Prop} (hpq : P Q) (hqr : Q R) :
      P R
      theorem neg_neg_eq {φ : Formula} :
      (~~φ) φ