Documentation

Logic.FirstOrder.Computability.Term

inductive LO.FirstOrder.UTerm (L : LO.FirstOrder.Language) (μ : Type v) :
Type (max u v)
Instances For
    Equations
    def LO.FirstOrder.UTerm.elim {L : LO.FirstOrder.Language} {μ : Type v} {γ : Type u_1} (b : γ) (e : μγ) (u : {k : } → L.Func k(Fin kγ)γ) :
    Equations
    Instances For
      def LO.FirstOrder.UTerm.rewrite {L : LO.FirstOrder.Language} {μ₁ : Type u_1} {μ₂ : Type u_2} (e : μ₁LO.FirstOrder.UTerm L μ₂) :
      Equations
      Instances For
        Equations
        Instances For
          theorem LO.FirstOrder.UTerm.bind_bind {L : LO.FirstOrder.Language} {μ₂ : Type u_1} {μ₁ : Type u_2} {μ₃ : Type u_3} {t : LO.FirstOrder.UTerm L μ₁} (b₁ : LO.FirstOrder.UTerm L μ₂) (e₁ : μ₁LO.FirstOrder.UTerm L μ₂) (b₂ : LO.FirstOrder.UTerm L μ₃) (e₂ : μ₂LO.FirstOrder.UTerm L μ₃) :
          LO.FirstOrder.UTerm.bind b₂ e₂ (LO.FirstOrder.UTerm.bind b₁ e₁ t) = LO.FirstOrder.UTerm.bind (fun (x : ) => LO.FirstOrder.UTerm.bind b₂ e₂ (b₁ x)) (fun (x : μ₁) => LO.FirstOrder.UTerm.bind b₂ e₂ (e₁ x)) t
          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            Equations
            Instances For
              Equations
              Instances For
                @[simp]
                theorem LO.FirstOrder.UTerm.subtype_val_bv_le {L : LO.FirstOrder.Language} {μ : Type v} {n : } (t : { t : LO.FirstOrder.UTerm L μ // t.bv n }) :
                (t).bv n
                theorem LO.FirstOrder.UTerm.bv_bind {L : LO.FirstOrder.Language} {μ₂ : Type u_1} {μ₁ : Type u_2} {m : } {b : LO.FirstOrder.UTerm L μ₂} {e : μ₁LO.FirstOrder.UTerm L μ₂} (t : LO.FirstOrder.UTerm L μ₁) (hb : x < t.bv, (b x).bv m) (he : ∀ (x : μ₁), (e x).bv m) :
                theorem LO.FirstOrder.UTerm.bind_eq_bind_of_eq {L : LO.FirstOrder.Language} {μ₂ : Type u_1} {μ₁ : Type u_2} (b₁ : LO.FirstOrder.UTerm L μ₂) (b₂ : LO.FirstOrder.UTerm L μ₂) (e₁ : μ₁LO.FirstOrder.UTerm L μ₂) (e₂ : μ₁LO.FirstOrder.UTerm L μ₂) (t : LO.FirstOrder.UTerm L μ₁) (hb : x < t.bv, b₁ x = b₂ x) (he : ∀ (x : μ₁), e₁ x = e₂ x) :
                theorem LO.FirstOrder.UTerm.bv_rewrite {L : LO.FirstOrder.Language} {μ₁ : Type u_1} {μ₂ : Type u_2} {m : } {e : μ₁LO.FirstOrder.UTerm L μ₂} {t : LO.FirstOrder.UTerm L μ₁} (ht : t.bv m) (he : ∀ (x : μ₁), (e x).bv m) :
                theorem LO.FirstOrder.UTerm.bv_substLast {L : LO.FirstOrder.Language} {μ : Type v} {n : } {t : LO.FirstOrder.UTerm L μ} {u : LO.FirstOrder.UTerm L μ} (ht : t.bv n + 1) (hu : u.bv n) :
                (u.substLast t).bv n
                Equations
                Instances For
                  theorem LO.FirstOrder.UTerm.ofSubterm_toSubterm {L : LO.FirstOrder.Language} {μ : Type v} {n : } (t : LO.FirstOrder.UTerm L μ) (h : t.bv n) :
                  (LO.FirstOrder.UTerm.ofSubterm (t.toSubterm h)) = t
                  Equations
                  • LO.FirstOrder.UTerm.subtEquiv = { toFun := LO.FirstOrder.UTerm.ofSubterm, invFun := fun (t : { t : LO.FirstOrder.UTerm L μ // t.bv n }) => (t).toSubterm , left_inv := , right_inv := }
                  Instances For
                    @[simp]
                    theorem LO.FirstOrder.UTerm.subtEquiv_bvar {L : LO.FirstOrder.Language} {μ : Type v} {n : } (x : Fin n) :
                    LO.FirstOrder.UTerm.subtEquiv (LO.FirstOrder.Semiterm.bvar x) = LO.FirstOrder.UTerm.bvar x,
                    @[simp]
                    theorem LO.FirstOrder.UTerm.subtEquiv_fvar {L : LO.FirstOrder.Language} {μ : Type v} {n : } (x : μ) :
                    LO.FirstOrder.UTerm.subtEquiv (LO.FirstOrder.Semiterm.fvar x) = LO.FirstOrder.UTerm.fvar x,
                    @[simp]
                    theorem LO.FirstOrder.UTerm.subtEquiv_func {L : LO.FirstOrder.Language} {μ : Type v} {n : } {k : } (f : L.Func k) (v : Fin kLO.FirstOrder.Semiterm L μ n) :
                    LO.FirstOrder.UTerm.subtEquiv (LO.FirstOrder.Semiterm.func f v) = LO.FirstOrder.UTerm.func f fun (i : Fin k) => (LO.FirstOrder.UTerm.subtEquiv (v i)),
                    theorem LO.FirstOrder.UTerm.ofSubterm_eq_subtEquiv {L : LO.FirstOrder.Language} {μ : Type v} {n : } :
                    LO.FirstOrder.UTerm.ofSubterm = LO.FirstOrder.UTerm.subtEquiv
                    @[reducible, inline]
                    abbrev LO.FirstOrder.UTerm.Node (L : LO.FirstOrder.Language) (μ : Type v) :
                    Type (max u v)
                    Equations
                    Instances For
                      @[reducible]
                      Equations
                      Instances For
                        Equations
                        Instances For
                          Equations
                          • LO.FirstOrder.UTerm.equivW L μ = { toFun := LO.FirstOrder.UTerm.toW, invFun := LO.FirstOrder.UTerm.ofW, left_inv := , right_inv := }
                          Instances For
                            Equations
                            • LO.FirstOrder.UTerm.instInhabitedWTypeNodeEdge = { default := WType.mk (Sum.inl 0) Empty.elim }
                            @[simp]
                            theorem LO.FirstOrder.UTerm.equivW_func {L : LO.FirstOrder.Language} {μ : Type v} {k : } (f : L.Func k) (v : Fin kLO.FirstOrder.UTerm L μ) :
                            @[simp]
                            theorem LO.FirstOrder.UTerm.equivW_symm_inr_inr {L : LO.FirstOrder.Language} {μ : Type v} {k : } (f : L.Func k) (v : Fin kWType (LO.FirstOrder.UTerm.Edge L μ)) :
                            (LO.FirstOrder.UTerm.equivW L μ).symm (WType.mk (Sum.inr (Sum.inr k, f)) v) = LO.FirstOrder.UTerm.func f fun (i : Fin k) => (LO.FirstOrder.UTerm.equivW L μ).symm (v i)
                            Equations
                            theorem LO.FirstOrder.UTerm.bvar_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] :
                            Primrec LO.FirstOrder.UTerm.bvar
                            theorem LO.FirstOrder.UTerm.fvar_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] :
                            Primrec LO.FirstOrder.UTerm.fvar
                            def LO.FirstOrder.UTerm.funcL {L : LO.FirstOrder.Language} {μ : Type v} (f : (k : ) × L.Func k) (l : List (LO.FirstOrder.UTerm L μ)) :
                            Equations
                            Instances For
                              theorem LO.FirstOrder.UTerm.funcL_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] :
                              Primrec₂ LO.FirstOrder.UTerm.funcL
                              theorem LO.FirstOrder.UTerm.funcL_primrec' {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] (k : ) :
                              Primrec₂ fun (x : L.Func k) => LO.FirstOrder.UTerm.funcL k, x
                              theorem LO.FirstOrder.UTerm.func_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] (k : ) :
                              Primrec₂ LO.FirstOrder.UTerm.func
                              theorem LO.FirstOrder.UTerm.elim_primrec_param {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {σ : Type u_1} {γ : Type u_2} [Primcodable σ] [Primcodable γ] {b : σγ} {e : σμγ} {u : σ((k : ) × L.Func k) × List γγ} {t : σLO.FirstOrder.UTerm L μ} (hb : Primrec₂ b) (he : Primrec₂ e) (hu : Primrec₂ u) (ht : Primrec t) :
                              Primrec fun (x : σ) => LO.FirstOrder.UTerm.elim (b x) (e x) (fun {k : } (f : L.Func k) (v : Fin kγ) => u x (k, f, List.ofFn v)) (t x)
                              theorem LO.FirstOrder.UTerm.elim_primrec_param_opt {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {σ : Type u_1} {γ : Type u_2} [Primcodable σ] [Inhabited γ] [Primcodable γ] {b : σγ} {e : σμγ} {t : σLO.FirstOrder.UTerm L μ} (hb : Primrec₂ b) (he : Primrec₂ e) (u : σ{k : } → L.Func k(Fin kγ)γ) {uOpt : σ((k : ) × L.Func k) × List γOption γ} (hu : Primrec₂ uOpt) (ht : Primrec t) (H : ∀ (x : σ) {k : } (f : L.Func k) (v : Fin kγ), uOpt x (k, f, List.ofFn v) = some (u x f v)) :
                              Primrec fun (x : σ) => LO.FirstOrder.UTerm.elim (b x) (e x) (fun {k : } => u x) (t x)
                              theorem LO.FirstOrder.UTerm.elim_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {γ : Type u_1} [Primcodable γ] {b : γ} {e : μγ} {u : (k : ) × L.Func kList γγ} (hb : Primrec b) (he : Primrec e) (hu : Primrec₂ u) :
                              Primrec (LO.FirstOrder.UTerm.elim b e fun {k : } (f : L.Func k) (v : Fin kγ) => u k, f (List.ofFn v))
                              theorem LO.FirstOrder.UTerm.elim_primrec_opt {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {γ : Type u_1} [Inhabited γ] [Primcodable γ] {b : γ} {e : μγ} (hb : Primrec b) (he : Primrec e) (u : {k : } → L.Func k(Fin kγ)γ) {uOpt : (k : ) × L.Func kList γOption γ} (hu : Primrec₂ uOpt) (H : ∀ {k : } (f : L.Func k) (v : Fin kγ), uOpt k, f (List.ofFn v) = some (u f v)) :
                              Primrec (LO.FirstOrder.UTerm.elim b e fun {k : } => u)
                              theorem LO.FirstOrder.UTerm.bv_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] :
                              Primrec LO.FirstOrder.UTerm.bv
                              theorem LO.FirstOrder.UTerm.bind_primrec_param {L : LO.FirstOrder.Language} [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {μ₁ : Type u_1} {μ₂ : Type u_2} [Primcodable μ₁] [Primcodable μ₂] {σ : Type u_3} [Primcodable σ] {b : σLO.FirstOrder.UTerm L μ₂} {e : σμ₁LO.FirstOrder.UTerm L μ₂} {g : σLO.FirstOrder.UTerm L μ₁} (hb : Primrec₂ b) (he : Primrec₂ e) (hg : Primrec g) :
                              Primrec fun (x : σ) => LO.FirstOrder.UTerm.bind (b x) (e x) (g x)
                              theorem LO.FirstOrder.UTerm.bind_primrec {L : LO.FirstOrder.Language} [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {μ₁ : Type u_1} {μ₂ : Type u_2} [Primcodable μ₁] [Primcodable μ₂] {b : LO.FirstOrder.UTerm L μ₂} {e : μ₁LO.FirstOrder.UTerm L μ₂} (hb : Primrec b) (he : Primrec e) :
                              theorem LO.FirstOrder.UTerm.bShifts_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] :
                              Primrec₂ LO.FirstOrder.UTerm.bShifts
                              Equations
                              theorem LO.FirstOrder.Semiterm.bvar_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {n : } :
                              Primrec LO.FirstOrder.Semiterm.bvar
                              theorem LO.FirstOrder.Semiterm.fvar_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {n : } :
                              Primrec LO.FirstOrder.Semiterm.fvar
                              def LO.FirstOrder.Semiterm.funcL {L : LO.FirstOrder.Language} {μ : Type v} {n : } (f : (k : ) × L.Func k) (l : List (LO.FirstOrder.Semiterm L μ n)) :
                              Equations
                              Instances For
                                theorem LO.FirstOrder.Semiterm.funcL_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {n : } :
                                Primrec₂ LO.FirstOrder.Semiterm.funcL
                                theorem LO.FirstOrder.Semiterm.funcL_primrec' {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {n : } (k : ) :
                                Primrec₂ fun (x : L.Func k) => LO.FirstOrder.Semiterm.funcL k, x
                                theorem LO.FirstOrder.Semiterm.func₁_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {n : } :
                                Primrec₂ fun (x : L.Func 1) (x_1 : LO.FirstOrder.Semiterm L μ n) => LO.FirstOrder.Semiterm.func x ![x_1]
                                theorem LO.FirstOrder.Semiterm.func₂_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {n : } :
                                Primrec₂ fun (f : L.Func 2) (t : LO.FirstOrder.Semiterm L μ n × LO.FirstOrder.Semiterm L μ n) => LO.FirstOrder.Semiterm.func f ![t.1, t.2]
                                theorem LO.FirstOrder.Semiterm.subtEquiv_bind_eq_bind {L : LO.FirstOrder.Language} {n₁ : } {μ₂ : Type u_2} {n₂ : } {μ₁ : Type u_3} (b : Fin n₁LO.FirstOrder.Semiterm L μ₂ n₂) (e : μ₁LO.FirstOrder.Semiterm L μ₂ n₂) (t : LO.FirstOrder.Semiterm L μ₁ n₁) :
                                (LO.FirstOrder.UTerm.subtEquiv ((LO.FirstOrder.Rew.bind b e) t)) = LO.FirstOrder.UTerm.bind (fun (x : ) => if hx : x < n₁ then (LO.FirstOrder.UTerm.subtEquiv (b x, hx)) else default) (fun (x : μ₁) => (LO.FirstOrder.UTerm.subtEquiv (e x))) (LO.FirstOrder.UTerm.subtEquiv t)
                                theorem LO.FirstOrder.Semiterm.bv_subtEquiv {L : LO.FirstOrder.Language} {μ : Type v} {n : } (t : LO.FirstOrder.Semiterm L μ n) :
                                ((LO.FirstOrder.UTerm.subtEquiv t)).bv n
                                theorem LO.FirstOrder.Semiterm.subtEquiv_bShift_eq_bShift {L : LO.FirstOrder.Language} {μ : Type v} {k : } (t : LO.FirstOrder.Semiterm L μ k) :
                                (LO.FirstOrder.UTerm.subtEquiv (LO.FirstOrder.Rew.bShift t)) = LO.FirstOrder.UTerm.bShifts 1 (LO.FirstOrder.UTerm.subtEquiv t)
                                theorem LO.FirstOrder.Semiterm.brew_primrec {L : LO.FirstOrder.Language} {α : Type u_1} [Primcodable α] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {μ₂ : Type u_4} [Primcodable μ₂] {n₁ : } {n₂ : } {b : αFin n₁LO.FirstOrder.Semiterm L μ₂ n₂} (hb : Primrec b) :
                                Primrec₂ fun (z : α) (x : ) => if hx : x < n₁ then (LO.FirstOrder.UTerm.subtEquiv (b z x, hx)) else default
                                theorem LO.FirstOrder.Semiterm.bind_primrec {L : LO.FirstOrder.Language} {α : Type u_1} [Primcodable α] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {μ₁ : Type u_3} {μ₂ : Type u_4} [Primcodable μ₁] [Primcodable μ₂] {n₁ : } {n₂ : } {b : αFin n₁LO.FirstOrder.Semiterm L μ₂ n₂} {e : αμ₁LO.FirstOrder.Semiterm L μ₂ n₂} {t : αLO.FirstOrder.Semiterm L μ₁ n₁} (hb : Primrec b) (he : Primrec₂ e) (ht : Primrec t) :
                                Primrec fun (x : α) => (LO.FirstOrder.Rew.bind (b x) (e x)) (t x)
                                theorem LO.FirstOrder.Semiterm.castLE_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {n₁ : } {n₂ : } (h : n₁ n₂) :
                                theorem LO.FirstOrder.Semiterm.emb_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {n : } :
                                Primrec LO.FirstOrder.Rew.emb
                                theorem LO.FirstOrder.Semiterm.Operator.term_primrec {L : LO.FirstOrder.Language} [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {k : } :
                                Primrec LO.FirstOrder.Semiterm.Operator.term
                                theorem LO.FirstOrder.Semiterm.Operator.mk_primrec {L : LO.FirstOrder.Language} [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {k : } :
                                Primrec LO.FirstOrder.Semiterm.Operator.mk
                                theorem LO.FirstOrder.Semiterm.Operator.operator_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {k : } {n : } :
                                Primrec₂ LO.FirstOrder.Semiterm.Operator.operator
                                theorem LO.FirstOrder.Semiterm.Operator.const_primrec {L : LO.FirstOrder.Language} {μ : Type v} [Primcodable μ] [(k : ) → Primcodable (L.Func k)] [UniformlyPrimcodable L.Func] {n : } :
                                Primrec LO.FirstOrder.Semiterm.Operator.const