Documentation

Foundation.FirstOrder.Basic.Syntax.Rew

Rewriting System #

term/formula morphisms such as Rewritings, substitutions, and embeddings are handled by the structure LO.FirstOrder.Rew.

Rewritings LO.FirstOrder.Rew is naturally converted to formula Rewritings by LO.FirstOrder.Rew.hom.

theorem Finset.biUnion_eq_empty {β : Type u_1} {α : Type u_2} [DecidableEq β] {s : Finset α} {f : αFinset β} :
s.biUnion f = is, f i =
theorem LO.FirstOrder.Semiformula.rewAux_neg {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (φ : LO.FirstOrder.Semiformula L ξ₁ n₁) :
theorem LO.FirstOrder.Semiformula.ext_rewAux' {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } {ω₁ ω₂ : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂} (h : ω₁ = ω₂) (φ : LO.FirstOrder.Semiformula L ξ₁ n₁) :
def LO.FirstOrder.Semiformula.rew {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) :
Equations
Instances For
    Equations
    • LO.FirstOrder.Semiformula.instRewriting = { app := fun {n₁ n₂ : } => LO.FirstOrder.Semiformula.rew, app_all := , app_ex := }
    theorem LO.FirstOrder.Semiformula.rew_rel {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {k : } (r : L.Rel k) (v : Fin kLO.FirstOrder.Semiterm L ξ₁ n₁) :
    theorem LO.FirstOrder.Semiformula.rew_nrel {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {k : } (r : L.Rel k) (v : Fin kLO.FirstOrder.Semiterm L ξ₁ n₁) :
    theorem LO.FirstOrder.Semiformula.rew_rel' {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {k : } {r : L.Rel k} {v : Fin kLO.FirstOrder.Semiterm L ξ₁ n₁} :
    theorem LO.FirstOrder.Semiformula.nrel' {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {k : } {r : L.Rel k} {v : Fin kLO.FirstOrder.Semiterm L ξ₁ n₁} :
    @[simp]
    theorem LO.FirstOrder.Semiformula.rew_rel0 {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {r : L.Rel 0} {v : Fin 0LO.FirstOrder.Semiterm L ξ₁ n₁} :
    @[simp]
    theorem LO.FirstOrder.Semiformula.rew_rel1 {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {r : L.Rel 1} {t : LO.FirstOrder.Semiterm L ξ₁ n₁} :
    @[simp]
    theorem LO.FirstOrder.Semiformula.rew_rel2 {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {r : L.Rel 2} {t₁ t₂ : LO.FirstOrder.Semiterm L ξ₁ n₁} :
    @[simp]
    theorem LO.FirstOrder.Semiformula.rew_rel3 {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {r : L.Rel 3} {t₁ t₂ t₃ : LO.FirstOrder.Semiterm L ξ₁ n₁} :
    (LO.FirstOrder.Rewriting.app ω) (LO.FirstOrder.Semiformula.rel r ![t₁, t₂, t₃]) = LO.FirstOrder.Semiformula.rel r ![ω t₁, ω t₂, ω t₃]
    @[simp]
    theorem LO.FirstOrder.Semiformula.rew_nrel0 {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {r : L.Rel 0} {v : Fin 0LO.FirstOrder.Semiterm L ξ₁ n₁} :
    @[simp]
    theorem LO.FirstOrder.Semiformula.rew_nrel1 {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {r : L.Rel 1} {t : LO.FirstOrder.Semiterm L ξ₁ n₁} :
    @[simp]
    theorem LO.FirstOrder.Semiformula.rew_nrel2 {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {r : L.Rel 2} {t₁ t₂ : LO.FirstOrder.Semiterm L ξ₁ n₁} :
    @[simp]
    theorem LO.FirstOrder.Semiformula.rew_nrel3 {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {r : L.Rel 3} {t₁ t₂ t₃ : LO.FirstOrder.Semiterm L ξ₁ n₁} :
    (LO.FirstOrder.Rewriting.app ω) (LO.FirstOrder.Semiformula.nrel r ![t₁, t₂, t₃]) = LO.FirstOrder.Semiformula.nrel r ![ω t₁, ω t₂, ω t₃]
    Equations
    • =
    @[simp]
    theorem LO.FirstOrder.Semiformula.complexity_rew {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (φ : LO.FirstOrder.Semiformula L ξ₁ n₁) :
    ((LO.FirstOrder.Rewriting.app ω) φ).complexity = φ.complexity
    @[simp]
    theorem LO.FirstOrder.Semiformula.eq_top_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} :
    @[simp]
    theorem LO.FirstOrder.Semiformula.eq_bot_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} :
    theorem LO.FirstOrder.Semiformula.eq_rel_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {k : } {r : L.Rel k} {v : Fin kLO.FirstOrder.Semiterm L ξ₂ n₂} :
    theorem LO.FirstOrder.Semiformula.eq_nrel_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {k : } {r : L.Rel k} {v : Fin kLO.FirstOrder.Semiterm L ξ₂ n₂} :
    @[simp]
    theorem LO.FirstOrder.Semiformula.eq_and_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {ψ₁ ψ₂ : LO.FirstOrder.Semiformula L ξ₂ n₂} :
    (LO.FirstOrder.Rewriting.app ω) φ = ψ₁ ψ₂ ∃ (φ₁ : LO.FirstOrder.Semiformula L ξ₁ n₁) (φ₂ : LO.FirstOrder.Semiformula L ξ₁ n₁), (LO.FirstOrder.Rewriting.app ω) φ₁ = ψ₁ (LO.FirstOrder.Rewriting.app ω) φ₂ = ψ₂ φ = φ₁ φ₂
    @[simp]
    theorem LO.FirstOrder.Semiformula.eq_or_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {ψ₁ ψ₂ : LO.FirstOrder.Semiformula L ξ₂ n₂} :
    (LO.FirstOrder.Rewriting.app ω) φ = ψ₁ ψ₂ ∃ (φ₁ : LO.FirstOrder.Semiformula L ξ₁ n₁) (φ₂ : LO.FirstOrder.Semiformula L ξ₁ n₁), (LO.FirstOrder.Rewriting.app ω) φ₁ = ψ₁ (LO.FirstOrder.Rewriting.app ω) φ₂ = ψ₂ φ = φ₁ φ₂
    theorem LO.FirstOrder.Semiformula.eq_all_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {ψ : LO.FirstOrder.Semiformula L ξ₂ (n₂ + 1)} :
    (LO.FirstOrder.Rewriting.app ω) φ = ∀' ψ ∃ (φ' : LO.FirstOrder.Semiformula L ξ₁ (n₁ + 1)), (LO.FirstOrder.Rewriting.app ω.q) φ' = ψ φ = ∀' φ'
    theorem LO.FirstOrder.Semiformula.eq_ex_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {ψ : LO.FirstOrder.Semiformula L ξ₂ (n₂ + 1)} :
    (LO.FirstOrder.Rewriting.app ω) φ = ∃' ψ ∃ (φ' : LO.FirstOrder.Semiformula L ξ₁ (n₁ + 1)), (LO.FirstOrder.Rewriting.app ω.q) φ' = ψ φ = ∃' φ'
    @[simp]
    theorem LO.FirstOrder.Semiformula.eq_neg_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {ψ₁ ψ₂ : LO.FirstOrder.Semiformula L ξ₂ n₂} :
    (LO.FirstOrder.Rewriting.app ω) φ = ψ₁ ψ₂ ∃ (φ₁ : LO.FirstOrder.Semiformula L ξ₁ n₁) (φ₂ : LO.FirstOrder.Semiformula L ξ₁ n₁), (LO.FirstOrder.Rewriting.app ω) φ₁ = ψ₁ (LO.FirstOrder.Rewriting.app ω) φ₂ = ψ₂ φ = φ₁ φ₂
    theorem LO.FirstOrder.Semiformula.eq_ball_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {ψ₁ ψ₂ : LO.FirstOrder.Semiformula L ξ₂ (n₂ + 1)} :
    ((LO.FirstOrder.Rewriting.app ω) φ = ∀[ψ₁] ψ₂) ∃ (φ₁ : LO.FirstOrder.Semiformula L ξ₁ (n₁ + 1)) (φ₂ : LO.FirstOrder.Semiformula L ξ₁ (n₁ + 1)), (LO.FirstOrder.Rewriting.app ω.q) φ₁ = ψ₁ (LO.FirstOrder.Rewriting.app ω.q) φ₂ = ψ₂ φ = ∀[φ₁] φ₂
    theorem LO.FirstOrder.Semiformula.eq_bex_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_1} {n₁ : } {ξ₂ : Type u_3} {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {ψ₁ ψ₂ : LO.FirstOrder.Semiformula L ξ₂ (n₂ + 1)} :
    ((LO.FirstOrder.Rewriting.app ω) φ = ∃[ψ₁] ψ₂) ∃ (φ₁ : LO.FirstOrder.Semiformula L ξ₁ (n₁ + 1)) (φ₂ : LO.FirstOrder.Semiformula L ξ₁ (n₁ + 1)), (LO.FirstOrder.Rewriting.app ω.q) φ₁ = ψ₁ (LO.FirstOrder.Rewriting.app ω.q) φ₂ = ψ₂ φ = ∃[φ₁] φ₂
    Equations
    • LO.FirstOrder.Semiformula.instCoeSemisentenceSyntacticSemiformula = { coe := LO.FirstOrder.Rewriting.embedding }
    @[simp]
    theorem LO.FirstOrder.Semiformula.coe_substitute_eq_substitute_coe {L : LO.FirstOrder.Language} {k n : } (φ : LO.FirstOrder.Semisentence L k) (v : Fin kLO.FirstOrder.Semiterm L Empty n) :
    (φ v) = φ fun (i : Fin k) => LO.FirstOrder.Rew.emb (v i)
    theorem LO.FirstOrder.Semiformula.coe_substs_eq_substs_coe₁ {L : LO.FirstOrder.Language} {n : } (φ : LO.FirstOrder.Semisentence L 1) (t : LO.FirstOrder.Semiterm L Empty n) :
    (φ/[t]) = φ/[LO.FirstOrder.Rew.emb t]
    @[irreducible]
    def LO.FirstOrder.Semiformula.formulaRec {L : LO.FirstOrder.Language} {C : LO.FirstOrder.SyntacticFormula LSort u_2} (verum : C ) (falsum : C ) (rel : {l : } → (r : L.Rel l) → (v : Fin lLO.FirstOrder.SyntacticTerm L) → C (LO.FirstOrder.Semiformula.rel r v)) (nrel : {l : } → (r : L.Rel l) → (v : Fin lLO.FirstOrder.SyntacticTerm L) → C (LO.FirstOrder.Semiformula.nrel r v)) (and : (φ ψ : LO.FirstOrder.SyntacticFormula L) → C φC ψC (φ ψ)) (or : (φ ψ : LO.FirstOrder.SyntacticFormula L) → C φC ψC (φ ψ)) (all : (φ : LO.FirstOrder.SyntacticSemiformula L 1) → C (LO.FirstOrder.Rewriting.free φ)C (∀' φ)) (ex : (φ : LO.FirstOrder.SyntacticSemiformula L 1) → C (LO.FirstOrder.Rewriting.free φ)C (∃' φ)) (φ : LO.FirstOrder.SyntacticFormula L) :
    C φ
    Equations
    Instances For
      theorem LO.FirstOrder.Semiformula.fvar?_rew {ξ₁ : Type u_1} {ξ₂ : Type u_2} {L : LO.FirstOrder.Language} {n₁ n₂ : } [DecidableEq ξ₁] [DecidableEq ξ₂] {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} {ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂} {x : ξ₂} (h : ((LO.FirstOrder.Rewriting.app ω) φ).FVar? x) :
      (∃ (i : Fin n₁), (ω (LO.FirstOrder.Semiterm.bvar i)).FVar? x) ∃ (z : ξ₁), φ.FVar? z (ω (LO.FirstOrder.Semiterm.fvar z)).FVar? x
      @[simp]
      theorem LO.FirstOrder.Semiformula.freeVariables_emb {ξ : Type u_2} {L : LO.FirstOrder.Language} {n : } [DecidableEq ξ] {ο : Type u_1} [IsEmpty ο] (φ : LO.FirstOrder.Semiformula L ο n) :
      (↑φ).freeVariables =
      theorem LO.FirstOrder.Semiformula.rew_eq_of_funEqOn {ξ₁ : Type u_1} {L : LO.FirstOrder.Language} {n₁ : } {ξ₂ : Type u_3} {n₂ : } [DecidableEq ξ₁] {ω₁ ω₂ : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂} {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} (hb : ∀ (x : Fin n₁), ω₁ (LO.FirstOrder.Semiterm.bvar x) = ω₂ (LO.FirstOrder.Semiterm.bvar x)) (hf : Function.funEqOn φ.FVar? (ω₁ LO.FirstOrder.Semiterm.fvar) (ω₂ LO.FirstOrder.Semiterm.fvar)) :
      theorem LO.FirstOrder.Semiformula.rew_eq_of_funEqOn₀ {ξ₁ : Type u_1} {L : LO.FirstOrder.Language} {ξ₂ : Type u_3} {n₂ : } [DecidableEq ξ₁] {ω₁ ω₂ : LO.FirstOrder.Rew L ξ₁ 0 ξ₂ n₂} {φ : LO.FirstOrder.Semiformula L ξ₁ 0} (hf : Function.funEqOn φ.FVar? (ω₁ LO.FirstOrder.Semiterm.fvar) (ω₂ LO.FirstOrder.Semiterm.fvar)) :
      Equations
      Instances For
        @[simp]
        theorem LO.FirstOrder.Semiformula.emb_toEmpty {ξ : Type u_1} {L : LO.FirstOrder.Language} {n : } [DecidableEq ξ] (φ : LO.FirstOrder.Semiformula L ξ n) (hp : φ.freeVariables = ) :
        (φ.toEmpty hp) = φ
        @[simp]
        @[simp]
        @[simp]
        theorem LO.FirstOrder.Semiformula.toEmpty_and {ξ : Type u_1} {L : LO.FirstOrder.Language} {n : } [DecidableEq ξ] (φ ψ : LO.FirstOrder.Semiformula L ξ n) (h : (φ ψ).freeVariables = ) :
        (φ ψ).toEmpty h = φ.toEmpty ψ.toEmpty
        @[simp]
        theorem LO.FirstOrder.Semiformula.toEmpty_or {ξ : Type u_1} {L : LO.FirstOrder.Language} {n : } [DecidableEq ξ] (φ ψ : LO.FirstOrder.Semiformula L ξ n) (h : (φ ψ).freeVariables = ) :
        (φ ψ).toEmpty h = φ.toEmpty ψ.toEmpty
        @[simp]
        theorem LO.FirstOrder.Semiformula.toEmpty_all {ξ : Type u_1} {L : LO.FirstOrder.Language} {n : } [DecidableEq ξ] (φ : LO.FirstOrder.Semiformula L ξ (n + 1)) (h : (∀' φ).freeVariables = ) :
        (∀' φ).toEmpty h = ∀' φ.toEmpty h
        @[simp]
        theorem LO.FirstOrder.Semiformula.toEmpty_ex {ξ : Type u_1} {L : LO.FirstOrder.Language} {n : } [DecidableEq ξ] (φ : LO.FirstOrder.Semiformula L ξ (n + 1)) (h : (∃' φ).freeVariables = ) :
        (∃' φ).toEmpty h = ∃' φ.toEmpty h
        theorem LO.FirstOrder.Semiformula.lMap_map {L₁ : LO.FirstOrder.Language} {L₂ : LO.FirstOrder.Language} {Φ : L₁.Hom L₂} {n₁ n₂ : } {ξ₁ : Type u_2} {ξ₂ : Type u_3} (b : Fin n₁Fin n₂) (e : ξ₁ξ₂) (φ : LO.FirstOrder.Semiformula L₁ ξ₁ n₁) :
        theorem LO.FirstOrder.Semiformula.lMap_emb {L₁ : LO.FirstOrder.Language} {L₂ : LO.FirstOrder.Language} {ξ : Type u_1} {Φ : L₁.Hom L₂} {n : } {ο : Type u_2} [IsEmpty ο] (φ : LO.FirstOrder.Semiformula L₁ ο n) :
        @[simp]
        theorem LO.FirstOrder.Semiformula.rew_open_iff {L : LO.FirstOrder.Language} {ξ₁ : Type u_2} {n₁ : } {ξ₂ : Type u_3} {n₂ : } {ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂} {φ : LO.FirstOrder.Semiformula L ξ₁ n₁} :
        ((LO.FirstOrder.Rewriting.app ω) φ).Open φ.Open