Documentation

Pdl.SemQuot

Semantic Quotients #

Defining the Quotient of Formulas #

@[instance_reducible]
Equations
@[reducible, inline]
abbrev SemProp :

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

Equations
Instances For

    Defining the Quotient of Programs #

    @[instance_reducible]
    Equations
    @[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 y → S (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} :
      ~~φ ≈ φ