Documentation

Foundation.Syntax.Predicate.Rew

Rewriting #

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

Rewritings FFL.FirstOrder.Rew is naturally converted to formula rewritings by FFL.FirstOrder.Rew.hom.

structure FFL.FirstOrder.Rew (L : Language) (ξ₁ : Type u_1) (n₁ : ℕ) (ξ₂ : Type u_2) (n₂ : ℕ) :
Type (max (max u_1 u_2) u_3)

A structure for maps which rewrite the semiterms occurring in a term.

toFun - A function from Semiterm L ξ₁ n₁ to Semiterm L ξ₂ n₂.

func'' - A proof that toFun respects the function symbols of L.

Instances For
    @[reducible, inline]
    abbrev FFL.FirstOrder.SyntacticRew (L : Language) (n₁ n₂ : ℕ) :
    Type u_1
    Equations
    Instances For
      @[instance_reducible]
      instance FFL.FirstOrder.Rew.instFunLikeSemiterm {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} :
      FunLike (Rew L ξ₁ n₁ ξ₂ n₂) (Semiterm L ξ₁ n₁) (Semiterm L ξ₂ n₂)
      Equations
      @[instance_reducible]
      instance FFL.FirstOrder.Rew.instCoeFunForallSemiterm {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} :
      CoeFun (Rew L ξ₁ n₁ ξ₂ n₂) fun (x : Rew L ξ₁ n₁ ξ₂ n₂) => Semiterm L ξ₁ n₁ → Semiterm L ξ₂ n₂
      Equations
      @[simp]
      theorem FFL.FirstOrder.Rew.func {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) {k : ℕ} (f : L.Func k) (v : Fin k → Semiterm L ξ₁ n₁) :
      ω (Semiterm.func f v) = Semiterm.func f (⇑ω ∘ v)
      theorem FFL.FirstOrder.Rew.func' {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) {k : ℕ} (f : L.Func k) (v : Fin k → Semiterm L ξ₁ n₁) :
      ω (Semiterm.func f v) = Semiterm.func f fun (i : Fin k) => ω (v i)
      theorem FFL.FirstOrder.Rew.ext {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω₁ ω₂ : Rew L ξ₁ n₁ ξ₂ n₂) (hb : ∀ (x : Fin n₁), ω₁ (Semiterm.bvar x) = ω₂ (Semiterm.bvar x)) (hf : ∀ (x : ξ₁), ω₁ (Semiterm.fvar x) = ω₂ (Semiterm.fvar x)) :
      ω₁ = ω₂
      theorem FFL.FirstOrder.Rew.ext_iff {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} {ω₁ ω₂ : Rew L ξ₁ n₁ ξ₂ n₂} :
      ω₁ = ω₂ ↔ (∀ (x : Fin n₁), ω₁ (Semiterm.bvar x) = ω₂ (Semiterm.bvar x)) ∧ ∀ (x : ξ₁), ω₁ (Semiterm.fvar x) = ω₂ (Semiterm.fvar x)
      theorem FFL.FirstOrder.Rew.ext' {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} {ω₁ ω₂ : Rew L ξ₁ n₁ ξ₂ n₂} (h : ω₁ = ω₂) (t : Semiterm L ξ₁ n₁) :
      ω₁ t = ω₂ t
      def FFL.FirstOrder.Rew.id {L : Language} {ξ : Type u_1} {n : ℕ} :
      Rew L ξ n ξ n
      Equations
      Instances For
        @[simp]
        theorem FFL.FirstOrder.Rew.id_app {L : Language} {ξ : Type u_1} {n : ℕ} (t : Semiterm L ξ n) :
        Rew.id t = t
        def FFL.FirstOrder.Rew.comp {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {ξ₃ : Type u_5} {n₁ n₂ n₃ : ℕ} (ω₂ : Rew L ξ₂ n₂ ξ₃ n₃) (ω₁ : Rew L ξ₁ n₁ ξ₂ n₂) :
        Rew L ξ₁ n₁ ξ₃ n₃
        Equations
        Instances For
          theorem FFL.FirstOrder.Rew.comp_app {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {ξ₃ : Type u_5} {n₁ n₂ n₃ : ℕ} (ω₂ : Rew L ξ₂ n₂ ξ₃ n₃) (ω₁ : Rew L ξ₁ n₁ ξ₂ n₂) (t : Semiterm L ξ₁ n₁) :
          (ω₂.comp ω₁) t = ω₂ (ω₁ t)
          @[simp]
          theorem FFL.FirstOrder.Rew.id_comp {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) :
          Rew.id.comp ω = ω
          @[simp]
          theorem FFL.FirstOrder.Rew.comp_id {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) :
          ω.comp Rew.id = ω
          def FFL.FirstOrder.Rew.bindAux {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (b : Fin n₁ → Semiterm L ξ₂ n₂) (e : ξ₁ → Semiterm L ξ₂ n₂) :
          Semiterm L ξ₁ n₁ → Semiterm L ξ₂ n₂
          Equations
          Instances For
            def FFL.FirstOrder.Rew.bind {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (b : Fin n₁ → Semiterm L ξ₂ n₂) (e : ξ₁ → Semiterm L ξ₂ n₂) :
            Rew L ξ₁ n₁ ξ₂ n₂

            FFL.FirstOrder.Rew.bind f is a substitution of the bound variables occurring in a term by b : Fin n₁ → Semiterm L ξ₂ n₂, and the free variables occurring in a term by e : ξ₁ → Semiterm L ξ₂ n₂.

            Equations
            Instances For
              def FFL.FirstOrder.Rew.rewrite {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n : ℕ} (f : ξ₁ → Semiterm L ξ₂ n) :
              Rew L ξ₁ n ξ₂ n

              FFL.FirstOrder.Rew.rewrite f is a substitution of the free variables occurring in a term by f : ξ₁ → Semiterm L ξ₂ n.

              Equations
              Instances For
                def FFL.FirstOrder.Rew.rewriteMap {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n : ℕ} (e : ξ₁ → ξ₂) :
                Rew L ξ₁ n ξ₂ n

                FFL.FirstOrder.Rew.rewriteMap f is a substitution of the free variables occurring in a term by e : ξ₁ → ξ₂.

                Equations
                Instances For
                  def FFL.FirstOrder.Rew.map {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (b : Fin n₁ → Fin n₂) (e : ξ₁ → ξ₂) :
                  Rew L ξ₁ n₁ ξ₂ n₂
                  Equations
                  Instances For
                    def FFL.FirstOrder.Rew.subst {L : Language} {ξ : Type u_1} {n n' : ℕ} (v : Fin n → Semiterm L ξ n') :
                    Rew L ξ n ξ n'

                    FFL.FirstOrder.Rew.subst v is a substitution of the bound variables occurring in a term by v : Fin n → Semiterm L ξ n'.

                    Equations
                    Instances For
                      def FFL.FirstOrder.Rew.emb {L : Language} {o : Type v₁} [h : IsEmpty o] {ξ : Type v₂} {n : ℕ} :
                      Rew L o n ξ n

                      FFL.FirstOrder.Rew.emb is a embedding of a term with no free variables. It can be thought of as a cast from Semiterm L Empty n to Semiterm L ξ n for any type ξ.

                      Equations
                      Instances For
                        @[reducible, inline]
                        abbrev FFL.FirstOrder.Rew.embs {L : Language} {o : Type v₁} [IsEmpty o] {n : ℕ} :
                        Rew L o n ℕ n
                        Equations
                        Instances For
                          def FFL.FirstOrder.Rew.empty {L : Language} {o : Type v₁} [h : IsEmpty o] {ξ : Type v₂} {n : ℕ} :
                          Rew L o 0 ξ n
                          Equations
                          Instances For
                            def FFL.FirstOrder.Rew.bShift {L : Language} {ξ : Type u_1} {n : ℕ} :
                            Rew L ξ n ξ (n + 1)

                            FFL.FirstOrder.Rew.bShift is a transformation of the bounded variables occurring in a term by #x ↦ #(Fin.succ x).

                            Equations
                            Instances For
                              def FFL.FirstOrder.Rew.bShiftAdd {L : Language} {ξ : Type u_1} {n : ℕ} (m : ℕ) :
                              Rew L ξ n ξ (n + m)
                              Equations
                              Instances For
                                def FFL.FirstOrder.Rew.cast {L : Language} {ξ : Type u_1} {n n' : ℕ} (h : n = n') :
                                Rew L ξ n ξ n'
                                Equations
                                Instances For
                                  def FFL.FirstOrder.Rew.castLE {L : Language} {ξ : Type u_1} {n n' : ℕ} (h : n ≤ n') :
                                  Rew L ξ n ξ n'
                                  Equations
                                  Instances For
                                    def FFL.FirstOrder.Rew.embSubsts {L : Language} {ξ : Type u_1} {n k : ℕ} (v : Fin k → Semiterm L ξ n) :
                                    Rew L Empty k ξ n

                                    FFL.FirstOrder.Rew.embSubsts v is a substitution of the bound variables occurring in a term with no free variables by v : Fin n → Semiterm L ξ n'. This closely resembles FFL.FirstOrder.Rew.subst, however the term is required to have free variables of type Empty.

                                    Equations
                                    Instances For
                                      def FFL.FirstOrder.Rew.q {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) :
                                      Rew L ξ₁ (n₁ + 1) ξ₂ (n₂ + 1)
                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        theorem FFL.FirstOrder.Rew.eq_id_of_eq {L : Language} {ξ : Type u_1} {n : ℕ} {ω : Rew L ξ n ξ n} (hb : ∀ (x : Fin n), ω (Semiterm.bvar x) = Semiterm.bvar x) (he : ∀ (x : ξ), ω (Semiterm.fvar x) = Semiterm.fvar x) (t : Semiterm L ξ n) :
                                        ω t = t
                                        def FFL.FirstOrder.Rew.qpow {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) (k : ℕ) :
                                        Rew L ξ₁ (n₁ + k) ξ₂ (n₂ + k)
                                        Equations
                                        Instances For
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.qpow_zero {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) :
                                          ω.qpow 0 = ω
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.qpow_succ {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) (k : ℕ) :
                                          ω.qpow (k + 1) = (ω.qpow k).q
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.bind_fvar {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (b : Fin n₁ → Semiterm L ξ₂ n₂) (e : ξ₁ → Semiterm L ξ₂ n₂) (m : ξ₁) :
                                          (bind b e) (Semiterm.fvar m) = e m
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.bind_bvar {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (b : Fin n₁ → Semiterm L ξ₂ n₂) (e : ξ₁ → Semiterm L ξ₂ n₂) (n : Fin n₁) :
                                          (bind b e) (Semiterm.bvar n) = b n
                                          theorem FFL.FirstOrder.Rew.eq_bind {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.bind_eq_id_of_zero {L : Language} {ξ₂ : Type u_4} (f : Fin 0 → Semiterm L ξ₂ 0) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.map_fvar {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (b : Fin n₁ → Fin n₂) (e : ξ₁ → ξ₂) (m : ξ₁) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.map_bvar {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (b : Fin n₁ → Fin n₂) (e : ξ₁ → ξ₂) (n : Fin n₁) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.map_id {L : Language} {ξ : Type u_1} {n : ℕ} :
                                          theorem FFL.FirstOrder.Rew.map_inj {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} {b : Fin n₁ → Fin n₂} {e : ξ₁ → ξ₂} (hb : Function.Injective b) (he : Function.Injective e) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.rewrite_fvar {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n : ℕ} (f : ξ₁ → Semiterm L ξ₂ n) (x : ξ₁) :
                                          (rewrite f) (Semiterm.fvar x) = f x
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.rewrite_bvar {L : Language} {ξ₁ : Type u_3} {n : ℕ} {ξ✝ : Type u_6} {e : ξ₁ → Semiterm L ξ✝ n} (x : Fin n) :
                                          theorem FFL.FirstOrder.Rew.rewrite_comp_rewrite {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {ξ₃ : Type u_5} {n : ℕ} (v : ξ₂ → Semiterm L ξ₃ n) (w : ξ₁ → Semiterm L ξ₂ n) :
                                          (rewrite v).comp (rewrite w) = rewrite (⇑(rewrite v) ∘ w)
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.rewriteMap_fvar {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n : ℕ} (e : ξ₁ → ξ₂) (x : ξ₁) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.rewriteMap_bvar {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n : ℕ} (e : ξ₁ → ξ₂) (x : Fin n) :
                                          theorem FFL.FirstOrder.Rew.eq_rewriteMap_of_funEqOn_fv {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} [DecidableEq ξ₁] (t : Semiterm L ξ₁ n₁) (f g : ξ₁ → Semiterm L ξ₂ n₂) (h : Function.funEqOn t.FVar? f g) :
                                          (rewriteMap f) t = (rewriteMap g) t
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.emb_bvar {L : Language} {ξ : Type u_1} {n : ℕ} {o : Type v₂} [IsEmpty o] (x : Fin n) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.emb_eq_id {L : Language} {n : ℕ} {o : Type v₂} [IsEmpty o] :
                                          theorem FFL.FirstOrder.Rew.eq_empty {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n : ℕ} [h : IsEmpty ξ₁] (ω : Rew L ξ₁ 0 ξ₂ n) :
                                          ω = empty
                                          @[simp]
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.bShift_fvar {L : Language} {ξ : Type u_1} {n : ℕ} (x : ξ) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.bShift_ne_zero {L : Language} {ξ : Type u_1} {n : ℕ} (t : Semiterm L ξ n) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.bShift_positive {L : Language} {ξ : Type u_1} {n : ℕ} (t : Semiterm L ξ n) :
                                          theorem FFL.FirstOrder.Rew.positive_iff {L : Language} {ξ : Type u_1} {n : ℕ} {t : Semiterm L ξ (n + 1)} :
                                          t.Positive ↔ ∃ (t' : Semiterm L ξ n), t = bShift t'
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.bShiftAdd_bvar {L : Language} {ξ : Type u_1} {n : ℕ} (m : ℕ) (x : Fin n) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.bShiftAdd_fvar {L : Language} {ξ : Type u_1} {n : ℕ} (m : ℕ) (x : ξ) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.subst_bvar {L : Language} {ξ : Type u_1} {n n' : ℕ} (w : Fin n → Semiterm L ξ n') (x : Fin n) :
                                          (subst w) (Semiterm.bvar x) = w x
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.subst_fvar {L : Language} {ξ : Type u_1} {n n' : ℕ} (w : Fin n → Semiterm L ξ n') (x : ξ) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.subst_zero {L : Language} {ξ : Type u_1} (w : Fin 0 → Term L ξ) :
                                          theorem FFL.FirstOrder.Rew.subst_comp_subst {L : Language} {ξ : Type u_1} {n l k : ℕ} (v : Fin l → Semiterm L ξ k) (w : Fin k → Semiterm L ξ n) :
                                          (subst w).comp (subst v) = subst (⇑(subst w) ∘ v)
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.cast_bvar {L : Language} {ξ : Type u_1} {n n' : ℕ} (h : n = n') (x : Fin n) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.cast_fvar {L : Language} {ξ : Type u_1} {n n' : ℕ} (h : n = n') (x : ξ) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.cast_eq_id {L : Language} {ξ : Type u_1} {n : ℕ} {h : n = n} :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.castLe_bvar {L : Language} {ξ : Type u_1} {n n' : ℕ} (h : n ≤ n') (x : Fin n) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.castLe_fvar {L : Language} {ξ : Type u_1} {n n' : ℕ} (h : n ≤ n') (x : ξ) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.castLe_eq_id {L : Language} {ξ : Type u_1} {n : ℕ} {h : n ≤ n} :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.castLE_comp {L : Language} {ξ : Type u_1} {n₁ n₂ n₃ : ℕ} {h₁ : n₁ ≤ n₂} {h₂ : n₂ ≤ n₃} :
                                          (castLE h₂).comp (castLE h₁) = castLE ⋯
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.embSubsts_bvar {L : Language} {ξ : Type u_1} {n k : ℕ} (w : Fin k → Semiterm L ξ n) (x : Fin k) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.embSubsts_zero {L : Language} {ξ : Type u_1} (w : Fin 0 → Term L ξ) :
                                          theorem FFL.FirstOrder.Rew.subst_comp_embSubsts {L : Language} {ξ : Type u_1} {n k l : ℕ} (v : Fin l → Semiterm L ξ k) (w : Fin k → Semiterm L ξ n) :
                                          (subst w).comp (embSubsts v) = embSubsts (⇑(subst w) ∘ v)
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_bvar_zero {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_bvar_succ {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) (i : Fin n₁) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_fvar {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) (x : ξ₁) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_comp_bShift {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_comp_bShift_app {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) (t : Semiterm L ξ₁ n₁) :
                                          ω.q (bShift t) = bShift (ω t)
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_id {L : Language} {ξ : Type u_1} {n : ℕ} :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_eq_zero_iff {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) {t : Semiterm L ξ₁ (n₁ + 1)} :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_positive_iff {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (ω : Rew L ξ₁ n₁ ξ₂ n₂) {t : Semiterm L ξ₁ (n₁ + 1)} :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.qpow_id {L : Language} {ξ : Type u_1} {n k : ℕ} :
                                          theorem FFL.FirstOrder.Rew.q_comp {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {ξ₃ : Type u_5} {n₁ n₂ n₃ : ℕ} (ω₂ : Rew L ξ₂ n₂ ξ₃ n₃) (ω₁ : Rew L ξ₁ n₁ ξ₂ n₂) :
                                          (ω₂.comp ω₁).q = ω₂.q.comp ω₁.q
                                          theorem FFL.FirstOrder.Rew.qpow_comp {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {ξ₃ : Type u_5} {n₁ n₂ n₃ : ℕ} (k : ℕ) (ω₂ : Rew L ξ₂ n₂ ξ₃ n₃) (ω₁ : Rew L ξ₁ n₁ ξ₂ n₂) :
                                          (ω₂.comp ω₁).qpow k = (ω₂.qpow k).comp (ω₁.qpow k)
                                          theorem FFL.FirstOrder.Rew.q_bind {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (b : Fin n₁ → Semiterm L ξ₂ n₂) (e : ξ₁ → Semiterm L ξ₂ n₂) :
                                          (bind b e).q = bind (Semiterm.bvar 0 :> ⇑bShift ∘ b) (⇑bShift ∘ e)
                                          theorem FFL.FirstOrder.Rew.q_map {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (b : Fin n₁ → Fin n₂) (e : ξ₁ → ξ₂) :
                                          (map b e).q = map (0 :> Fin.succ ∘ b) e
                                          theorem FFL.FirstOrder.Rew.q_rewrite {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n : ℕ} (f : ξ₁ → Semiterm L ξ₂ n) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_rewriteMap {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n : ℕ} (e : ξ₁ → ξ₂) :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_emb {L : Language} {ξ₂ : Type u_4} {o : Type v₁} [e : IsEmpty o] {n : ℕ} :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.qpow_emb {L : Language} {ξ₂ : Type u_4} {o : Type v₁} [e : IsEmpty o] {n k : ℕ} :
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_cast {L : Language} {ξ : Type u_1} {n n' : ℕ} (h : n = n') :
                                          (cast h).q = cast ⋯
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.q_castLE {L : Language} {ξ : Type u_1} {n n' : ℕ} (h : n ≤ n') :
                                          (castLE h).q = castLE ⋯
                                          @[simp]
                                          theorem FFL.FirstOrder.Rew.qpow_castLE {L : Language} {ξ : Type u_1} {k n n' : ℕ} (h : n ≤ n') :
                                          (castLE h).qpow k = castLE ⋯
                                          theorem FFL.FirstOrder.Rew.q_subst {L : Language} {ξ : Type u_1} {n n' : ℕ} (w : Fin n → Semiterm L ξ n') :
                                          theorem FFL.FirstOrder.Rew.q_embSubsts {L : Language} {ξ : Type u_1} {n k : ℕ} (w : Fin k → Semiterm L ξ n) :

                                          FFL.FirstOrder.Rew.shift is a transformation of the free variables occurring in the term by &x ↦ &(x + 1).

                                          Equations
                                          Instances For
                                            theorem FFL.FirstOrder.Rew.shift_func {L : Language} {n k : ℕ} (f : L.Func k) (v : Fin k → SyntacticSemiterm L n) :
                                            shift (Semiterm.func f v) = Semiterm.func f fun (i : Fin k) => shift (v i)
                                            theorem FFL.FirstOrder.Rew.bShift_comp_subst {L : Language} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (v : Fin n₁ → Semiterm L ξ₂ n₂) :
                                            theorem FFL.FirstOrder.Rew.shift_comp_subst {L : Language} {n₁ n₂ : ℕ} (v : Fin n₁ → SyntacticSemiterm L n₂) :
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.rewrite_comp_emb {L : Language} {ξ₂ : Type u_4} {ξ₃ : Type u_5} {n : ℕ} {o : Type v₁} [e : IsEmpty o] (f : ξ₂ → Semiterm L ξ₃ n) :
                                            @[simp]
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.comp_emb_eq_emb {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {o : Type v₁} [e : IsEmpty o] {ω : Rew L ξ₁ 0 ξ₂ 0} :
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.subst_comp_bShift_eq_id {L : Language} {ξ : Type u_1} (v : Fin 1 → Semiterm L ξ 0) :
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.rewriteMap_comp_rewriteMap {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {ξ₃ : Type u_5} {n : ℕ} (f : ξ₁ → ξ₂) (g : ξ₂ → ξ₃) :
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.fix_free_app {L : Language} {n : ℕ} (t : SyntacticSemiterm L (n + 1)) :
                                            fix (free t) = t
                                            @[simp]
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.subst_bShift_app {L : Language} {ξ : Type u_1} {t : Semiterm L ξ 0} (v : Fin 1 → Semiterm L ξ 0) :
                                            (subst v) (bShift t) = t
                                            theorem FFL.FirstOrder.Rew.fixitr_succ {L : Language} {n : ℕ} (m : ℕ) :
                                            fixitr n (m + 1) = Rew.comp fix (fixitr n m)
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.fixitr_fvar {L : Language} (n m x : ℕ) :
                                            (fixitr n m) (Semiterm.fvar x) = if h : x < m then Semiterm.bvar (Fin.natAdd n ⟨x, h⟩) else Semiterm.fvar (x - m)
                                            theorem FFL.FirstOrder.Rew.subst_bv {L : Language} {ξ : Type u_1} {n m : ℕ} (t : Semiterm L ξ n) (v : Fin n → Semiterm L ξ m) :
                                            ((subst v) t).bv = t.bv.biUnion fun (i : Fin n) => (v i).bv
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.subst_positive {L : Language} {ξ : Type u_1} {n m : ℕ} (t : Semiterm L ξ n) (v : Fin n → Semiterm L ξ (m + 1)) :
                                            ((subst v) t).Positive ↔ ∀ i ∈ t.bv, (v i).Positive
                                            theorem FFL.FirstOrder.Rew.embSubsts_bv {L : Language} {ξ : Type u_1} {n m : ℕ} (t : ClosedSemiterm L n) (v : Fin n → Semiterm L ξ m) :
                                            ((embSubsts v) t).bv = (Semiterm.bv t).biUnion fun (i : Fin n) => (v i).bv
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.embSubsts_positive {L : Language} {ξ : Type u_1} {n m : ℕ} (t : ClosedSemiterm L n) (v : Fin n → Semiterm L ξ (m + 1)) :
                                            ((embSubsts v) t).Positive ↔ ∀ i ∈ Semiterm.bv t, (v i).Positive
                                            @[simp]
                                            theorem FFL.FirstOrder.Rew.bshift_positive {L : Language} {ξ : Type u_1} {n : ℕ} (t : Semiterm L ξ n) :
                                            theorem FFL.FirstOrder.Rew.emb_bShift_term {L : Language} {ξ : Type u_1} {n : ℕ} {o : Type v₁} [IsEmpty o] (t : Semiterm L o n) :

                                            Rewriting system of terms #

                                            @[simp]
                                            theorem FFL.FirstOrder.Semiterm.freeVariables_emb {L : Language} {ξ : Type u_1} {n : ℕ} {ο : Type u_6} [IsEmpty ο] [DecidableEq ξ] {t : Semiterm L ο n} :
                                            theorem FFL.FirstOrder.Semiterm.rew_eq_of_funEqOn {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} [DecidableEq ξ₁] (ω₁ ω₂ : Rew L ξ₁ n₁ ξ₂ n₂) (t : Semiterm L ξ₁ n₁) (hb : ∀ (x : Fin n₁), ω₁ (bvar x) = ω₂ (bvar x)) (he : Function.funEqOn t.FVar? (⇑ω₁ ∘ fvar) (⇑ω₂ ∘ fvar)) :
                                            ω₁ t = ω₂ t
                                            theorem FFL.FirstOrder.Semiterm.lMap_bind {L₁ : Language} {L₂ : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (Φ : L₁.Hom L₂) (b : Fin n₁ → Semiterm L₁ ξ₂ n₂) (e : ξ₁ → Semiterm L₁ ξ₂ n₂) (t : Semiterm L₁ ξ₁ n₁) :
                                            lMap Φ ((Rew.bind b e) t) = (Rew.bind (lMap Φ ∘ b) (lMap Φ ∘ e)) (lMap Φ t)
                                            theorem FFL.FirstOrder.Semiterm.lMap_map {L₁ : Language} {L₂ : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} (Φ : L₁.Hom L₂) (b : Fin n₁ → Fin n₂) (e : ξ₁ → ξ₂) (t : Semiterm L₁ ξ₁ n₁) :
                                            lMap Φ ((Rew.map b e) t) = (Rew.map b e) (lMap Φ t)
                                            theorem FFL.FirstOrder.Semiterm.lMap_bShift {L₁ : Language} {L₂ : Language} {ξ₁ : Type u_3} {n : ℕ} (Φ : L₁.Hom L₂) (t : Semiterm L₁ ξ₁ n) :
                                            theorem FFL.FirstOrder.Semiterm.lMap_shift {L₁ : Language} {L₂ : Language} {n : ℕ} (Φ : L₁.Hom L₂) (t : SyntacticSemiterm L₁ n) :
                                            lMap Φ (Rew.shift t) = Rew.shift (lMap Φ t)
                                            theorem FFL.FirstOrder.Semiterm.lMap_free {L₁ : Language} {L₂ : Language} {n : ℕ} (Φ : L₁.Hom L₂) (t : SyntacticSemiterm L₁ (n + 1)) :
                                            lMap Φ (Rew.free t) = Rew.free (lMap Φ t)
                                            theorem FFL.FirstOrder.Semiterm.lMap_fix {L₁ : Language} {L₂ : Language} {n : ℕ} (Φ : L₁.Hom L₂) (t : SyntacticSemiterm L₁ n) :
                                            lMap Φ (Rew.fix t) = Rew.fix (lMap Φ t)
                                            theorem FFL.FirstOrder.Semiterm.fvar?_rew {L : Language} {ξ₁ : Type u_3} {ξ₂ : Type u_4} {n₁ n₂ : ℕ} [DecidableEq ξ₁] [DecidableEq ξ₂] {ω : Rew L ξ₁ n₁ ξ₂ n₂} {t : Semiterm L ξ₁ n₁} {x : ξ₂} :
                                            (ω t).FVar? x → (∃ (i : Fin n₁), (ω (bvar i)).FVar? x) ∨ ∃ (z : ξ₁), t.FVar? z ∧ (ω (fvar z)).FVar? x
                                            @[simp]
                                            theorem FFL.FirstOrder.Semiterm.fvar?_bShift {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] {t : Semiterm L ξ n} {x : ξ} :
                                            @[simp]
                                            theorem FFL.FirstOrder.Semiterm.emb_toEmpty {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (t : Semiterm L ξ n) (ht : t.freeVariables = ∅) :
                                            Rew.emb (t.toEmpty ht) = t
                                            @[simp]
                                            theorem FFL.FirstOrder.Semiterm.toEmpty_emb {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (t : ClosedSemiterm L n) :
                                            (Rew.emb t).toEmpty ⋯ = t

                                            Rewriting system of formulae #

                                            class FFL.FirstOrder.Rewriting (L : outParam Language) (ξ : outParam (Type u_1)) (F : ℕ → Type u_2) (ζ : Type u_3) (G : outParam (ℕ → Type u_4)) [LCWQ F] [LCWQ G] :
                                            Type (max (max (max (max u_1 u_2) u_3) u_4) u_5)

                                            A typeclass for Rews which additionally respect quantifiers.

                                            app - A notion of application of Rews to formulas.

                                            app_all - Application preserves universal quantification.

                                            app_exs - Application preserves existential quantification.

                                            • app {n₁ n₂ : ℕ} : Rew L ξ n₁ ζ n₂ → F n₁ →ˡᶜ G n₂
                                            • app_all {n₁ n₂ : ℕ} (ω₁₂ : Rew L ξ n₁ ζ n₂) (φ : F (n₁ + 1)) : (app ω₁₂) (∀¹ φ) = ∀¹ (app ω₁₂.q) φ
                                            • app_exs {n₁ n₂ : ℕ} (ω₁₂ : Rew L ξ n₁ ζ n₂) (φ : F (n₁ + 1)) : (app ω₁₂) (∃¹ φ) = ∃¹ (app ω₁₂.q) φ
                                            Instances
                                              @[reducible, inline]
                                              abbrev FFL.FirstOrder.SyntacticRewriting (L : outParam Language) (F : ℕ → Type u_1) (G : outParam (ℕ → Type u_2)) [LCWQ F] [LCWQ G] :
                                              Type (max (max u_1 u_2) u_3)
                                              Equations
                                              Instances For

                                                Application of a Rewriting to a formula.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  theorem FFL.FirstOrder.Rewriting.smul_ext' {F : ℕ → Type u_5} {G : ℕ → Type u_4} {L : Language} {ξ : Type u_1} {ζ : Type u_2} [LCWQ F] [LCWQ G] [Rewriting L ξ F ζ G] {n₁ n₂ : ℕ} {ω₁ ω₂ : Rew L ξ n₁ ζ n₂} (h : ω₁ = ω₂) {φ : F n₁} :
                                                  (app ω₁) φ = (app ω₂) φ
                                                  @[simp]
                                                  theorem FFL.FirstOrder.Rewriting.smul_ball {F : ℕ → Type u_5} {G : ℕ → Type u_4} {L : Language} {ξ : Type u_1} {ζ : Type u_2} [LCWQ F] [LCWQ G] [Rewriting L ξ F ζ G] {n₁ n₂ : ℕ} (ω : Rew L ξ n₁ ζ n₂) (φ ψ : F (n₁ + 1)) :
                                                  (app ω) (∀¹[φ] ψ) = ∀¹[(app ω.q) φ] (app ω.q) ψ
                                                  @[simp]
                                                  theorem FFL.FirstOrder.Rewriting.smul_bexs {F : ℕ → Type u_5} {G : ℕ → Type u_4} {L : Language} {ξ : Type u_1} {ζ : Type u_2} [LCWQ F] [LCWQ G] [Rewriting L ξ F ζ G] {n₁ n₂ : ℕ} (ω : Rew L ξ n₁ ζ n₂) (φ ψ : F (n₁ + 1)) :
                                                  (app ω) (∃¹[φ] ψ) = ∃¹[(app ω.q) φ] (app ω.q) ψ
                                                  @[simp]
                                                  theorem FFL.FirstOrder.Rewriting.smul_allItr {F : ℕ → Type u_5} {G : ℕ → Type u_4} {L : Language} {ξ : Type u_1} {ζ : Type u_2} [LCWQ F] [LCWQ G] [Rewriting L ξ F ζ G] {n₁ n₂ k : ℕ} (ω : Rew L ξ n₁ ζ n₂) (φ : F (n₁ + k)) :
                                                  (app ω) (∀¹^[k] φ) = ∀¹^[k] (app (ω.qpow k)) φ
                                                  @[simp]
                                                  theorem FFL.FirstOrder.Rewriting.smul_exsItr {F : ℕ → Type u_5} {G : ℕ → Type u_4} {L : Language} {ξ : Type u_1} {ζ : Type u_2} [LCWQ F] [LCWQ G] [Rewriting L ξ F ζ G] {n₁ n₂ k : ℕ} (ω : Rew L ξ n₁ ζ n₂) (φ : F (n₁ + k)) :
                                                  (app ω) (∃¹^[k] φ) = ∃¹^[k] (app (ω.qpow k)) φ
                                                  @[simp]
                                                  theorem FFL.FirstOrder.Rewriting.smul_quant {F : ℕ → Type u_5} {G : ℕ → Type u_4} {L : Language} {ξ : Type u_1} {ζ : Type u_2} [LCWQ F] [LCWQ G] [Rewriting L ξ F ζ G] {n₁ n₂ : ℕ} (ω : Rew L ξ n₁ ζ n₂) (Γ : Polarity) (φ : F (n₁ + 1)) :
                                                  (app ω) (Γ.quant φ) = Γ.quant ((app ω.q) φ)
                                                  @[simp]
                                                  theorem FFL.FirstOrder.Rewriting.smul_quantItr {F : ℕ → Type u_5} {G : ℕ → Type u_4} {L : Language} {ξ : Type u_1} {ζ : Type u_2} [LCWQ F] [LCWQ G] [Rewriting L ξ F ζ G] {n₁ n₂ k : ℕ} (ω : Rew L ξ n₁ ζ n₂) (Γ : Polarity) (φ : F (n₁ + k)) :
                                                  (app ω) (Γ.quantItr k φ) = Γ.quantItr k ((app (ω.qpow k)) φ)
                                                  @[reducible, inline]
                                                  abbrev FFL.FirstOrder.Rewriting.subst {F : ℕ → Type u_1} {L : Language} {ξ : Type u_3} [LCWQ F] {n₁ n₂ : ℕ} [Rewriting L ξ F ξ F] (φ : F n₁) (w : Fin n₁ → Semiterm L ξ n₂) :
                                                  F n₂
                                                  Equations
                                                  Instances For

                                                    Applies the substitution FFL.FirstOrder.Rew.subst w to a formula. This substitutes the bound variables occurring in the formula by w : Fin n₁ → Semiterm L ξ n₂.

                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      @[reducible, inline]
                                                      abbrev FFL.FirstOrder.Rewriting.shift {F : ℕ → Type u_1} {L : Language} [LCWQ F] {n : ℕ} [Rewriting L ℕ F ℕ F] :
                                                      F n →ˡᶜ F n

                                                      Applies the substitution FFL.FirstOrder.Rew.shift to a formula. This substitutes each free variable &x with &(x + 1).

                                                      Equations
                                                      Instances For
                                                        @[reducible, inline]
                                                        abbrev FFL.FirstOrder.Rewriting.free {F : ℕ → Type u_1} {L : Language} [LCWQ F] {n : ℕ} [Rewriting L ℕ F ℕ F] :
                                                        F (n + 1) →ˡᶜ F n
                                                        Equations
                                                        Instances For
                                                          @[reducible, inline]
                                                          abbrev FFL.FirstOrder.Rewriting.fix {F : ℕ → Type u_1} {L : Language} [LCWQ F] {n : ℕ} [Rewriting L ℕ F ℕ F] :
                                                          F n →ˡᶜ F (n + 1)
                                                          Equations
                                                          Instances For
                                                            @[simp]
                                                            theorem FFL.FirstOrder.Rewriting.shifts_empty {F : ℕ → Type u_1} {L : Language} [LCWQ F] {n : ℕ} [Rewriting L ℕ F ℕ F] :
                                                            shifts 0 = 0
                                                            @[simp]
                                                            theorem FFL.FirstOrder.Rewriting.shifts_add {F : ℕ → Type u_1} {L : Language} [LCWQ F] {n : ℕ} [Rewriting L ℕ F ℕ F] (Γ Δ : Multiset (F n)) :
                                                            shifts (Γ + Δ) = shifts Γ + shifts Δ
                                                            @[simp]
                                                            theorem FFL.FirstOrder.Rewriting.shifts_singleton {F : ℕ → Type u_1} {L : Language} [LCWQ F] {n : ℕ} [Rewriting L ℕ F ℕ F] (φ : F n) :
                                                            @[simp]
                                                            theorem FFL.FirstOrder.Rewriting.shifts_neg {F : ℕ → Type u_1} {L : Language} [LCWQ F] {n : ℕ} [Rewriting L ℕ F ℕ F] (Γ : Multiset (F n)) :
                                                            @[reducible, inline]
                                                            abbrev FFL.FirstOrder.Rewriting.emb {L : Language} {n : ℕ} {ο : Type u_4} {ξ : Type u_5} [IsEmpty ο] {O : ℕ → Type u_1} {F : ℕ → Type u_2} [LCWQ O] [LCWQ F] [Rewriting L ο O ξ F] :
                                                            O n →ˡᶜ F n
                                                            Equations
                                                            Instances For
                                                              Equations
                                                              • One or more equations did not get rendered due to their size.
                                                              Instances For
                                                                Equations
                                                                • One or more equations did not get rendered due to their size.
                                                                Instances For
                                                                  class FFL.FirstOrder.ReflectiveRewriting (L : outParam Language) (ξ : outParam (Type u_1)) (F : ℕ → Type u_2) [LCWQ F] [Rewriting L ξ F ξ F] :
                                                                  Instances
                                                                    class FFL.FirstOrder.TransitiveRewriting (L : outParam Language) (ξ₁ : outParam (Type u_1)) (F₁ : ℕ → Type u_2) (ξ₂ : Type u_3) (F₂ : outParam (ℕ → Type u_4)) (ξ₃ : Type u_5) (F₃ : outParam (ℕ → Type u_6)) [LCWQ F₁] [LCWQ F₂] [LCWQ F₃] [Rewriting L ξ₁ F₁ ξ₂ F₂] [Rewriting L ξ₂ F₂ ξ₃ F₃] [Rewriting L ξ₁ F₁ ξ₃ F₃] :
                                                                    Instances
                                                                      class FFL.FirstOrder.InjMapRewriting (L : outParam Language) (ξ : outParam (Type u_1)) (F : ℕ → Type u_2) (ζ : Type u_3) (G : outParam (ℕ → Type u_4)) [LCWQ F] [LCWQ G] [Rewriting L ξ F ζ G] :
                                                                      Instances
                                                                        Instances
                                                                          theorem FFL.FirstOrder.Rewriting.quantItr_succ_smul_castLE {F : ℕ → Type u_1} {L : Language} {ξ : Type u_2} [LCWQ F] [Rewriting L ξ F ξ F] [ReflectiveRewriting L ξ F] {n s : ℕ} {Γ : Polarity} {φ : F (n + 1 + s)} :
                                                                          Γ.quantItr (s + 1) ((app (Rew.castLE ⋯)) φ) = Γ.quant (Γ.alt.quantItr s φ)

                                                                          Renaming free variables by predecessor undoes shift (a routine substitution law).

                                                                          @[simp]
                                                                          theorem FFL.FirstOrder.LawfulSyntacticRewriting.subst_empty {L : Language} {S : ℕ → Type u_1} [LCWQ S] [SyntacticRewriting L S S] [LawfulSyntacticRewriting L S] (φ : S 0) (v : Fin 0 → Semiterm L ℕ 0) :
                                                                          φ ⇜ v = φ
                                                                          theorem FFL.FirstOrder.Rewriting.emb_injective {ο : Type u_1} {ξ : Type u_2} [IsEmpty ο] {O : ℕ → Type u_3} {F : ℕ → Type u_4} [LCWQ O] [LCWQ F] {L : Language} {n : ℕ} [Rewriting L ο O ξ F] [InjMapRewriting L ο O ξ F] :
                                                                          Function.Injective fun (φ : O n) => emb φ
                                                                          @[simp]
                                                                          theorem FFL.FirstOrder.Rewriting.emb_allClosure {ο : Type u_1} {ξ : Type u_2} [IsEmpty ο] {O : ℕ → Type u_3} {F : ℕ → Type u_4} [LCWQ O] [LCWQ F] {L : Language} {n : ℕ} [Rewriting L ο O ξ F] {σ : O n} :
                                                                          @[simp]
                                                                          theorem FFL.FirstOrder.Rewriting.rew_emb_eq_emb {ο : Type u_1} [IsEmpty ο] {O : ℕ → Type u_3} {F₁ : ℕ → Type u_5} {F₂ : ℕ → Type u_6} [LCWQ O] [LCWQ F₁] [LCWQ F₂] {L : Language} {ξ₁ : Type u_8} {ξ₂ : Type u_9} [Rewriting L ξ₁ F₁ ξ₂ F₂] [Rewriting L ο O ξ₁ F₁] [Rewriting L ο O ξ₂ F₂] [TransitiveRewriting L ο O ξ₁ F₁ ξ₂ F₂] (φ : O 0) (ω : Rew L ξ₁ 0 ξ₂ 0) :
                                                                          (app ω) (emb φ) = emb φ
                                                                          theorem FFL.FirstOrder.Rewriting.emb_subst_eq_subst_emb {ο : Type u_1} {ξ : Type u_2} [IsEmpty ο] {O : ℕ → Type u_3} {F : ℕ → Type u_4} [LCWQ O] [LCWQ F] {L : Language} {k n : ℕ} [Rewriting L ο O ο O] [Rewriting L ο O ξ F] [Rewriting L ξ F ξ F] [TransitiveRewriting L ο O ο O ξ F] [TransitiveRewriting L ο O ξ F ξ F] (φ : O k) (v : Fin k → Semiterm L ο n) :
                                                                          emb (φ ⇜ v) = emb φ ⇜ fun (i : Fin k) => Rew.emb (v i)

                                                                          coe_subst_eq_subst_coe

                                                                          theorem FFL.FirstOrder.Rewriting.emb_subst_eq_subst_coe₁ {ο : Type u_1} {ξ : Type u_2} [IsEmpty ο] {O : ℕ → Type u_3} {F : ℕ → Type u_4} [LCWQ O] [LCWQ F] {L : Language} {n : ℕ} [Rewriting L ο O ο O] [Rewriting L ο O ξ F] [Rewriting L ξ F ξ F] [TransitiveRewriting L ο O ο O ξ F] [TransitiveRewriting L ο O ξ F ξ F] (φ : O 1) (t : Semiterm L ο n) :
                                                                          emb (φ/[t]) = (emb φ)/[Rew.emb t]

                                                                          coe_subst_eq_subst_coe₁

                                                                          @[simp]
                                                                          theorem FFL.FirstOrder.Rewriting.shifts_emb {L : Language} {ο : Type u_1} [IsEmpty ο] {O : ℕ → Type u_3} {F : ℕ → Type u_4} [LCWQ O] [LCWQ F] {n : ℕ} [Rewriting L ο O ℕ F] [Rewriting L ℕ F ℕ F] [TransitiveRewriting L ο O ℕ F ℕ F] (Γ : Multiset (O n)) :
                                                                          @[simp]
                                                                          theorem FFL.FirstOrder.Rewriting.subst1_bvar0_eq {L : Language} {ξ : Type u_2} {F : ℕ → Type u_4} [LCWQ F] [Rewriting L ξ F ξ F] [ReflectiveRewriting L ξ F] (φ : F 1) :