Theorem: LO.FirstOrder.Semiterm.substs_primrec (Logic/FirstOrder/Computability/Term.lean)

State before:
L : Language
μ : Type v
α : Type u_1
inst✝⁶ : Primcodable α
inst✝⁵ : Primcodable μ
inst✝⁴ : (k : ℕ) → Primcodable (L.Func k)
inst✝³ : UniformlyPrimcodable L.Func
σ : Type u_2
μ₁ : Type u_3
μ₂ : Type u_4
inst✝² : Primcodable μ₁
inst✝¹ : Primcodable μ₂
inst✝ : Primcodable σ
n n' : ℕ
this : Primrec₂ fun v t => (Rew.bind v fun x => &x) t
⊢ Primrec₂ fun v p => (Rew.substs v) p
Tactic:
exact this.of_eq <| by { intro v p; rw[Rew.eq_bind (Rew.substs v)]; simp[Function.comp] }
State after:
no goals

State before:
L : Language
μ : Type v
α : Type u_1
inst✝⁶ : Primcodable α
inst✝⁵ : Primcodable μ
inst✝⁴ : (k : ℕ) → Primcodable (L.Func k)
inst✝³ : UniformlyPrimcodable L.Func
σ : Type u_2
μ₁ : Type u_3
μ₂ : Type u_4
inst✝² : Primcodable μ₁
inst✝¹ : Primcodable μ₂
inst✝ : Primcodable σ
n n' : ℕ
this : Primrec₂ fun v t => (Rew.bind v fun x => &x) t
⊢ ∀ (a : Fin n → Semiterm L μ n') (b : Semiterm L μ n), (Rew.bind a fun x => &x) b = (Rew.substs a) b
Tactic:
intro v p
State after:
L : Language
μ : Type v
α : Type u_1
inst✝⁶ : Primcodable α
inst✝⁵ : Primcodable μ
inst✝⁴ : (k : ℕ) → Primcodable (L.Func k)
inst✝³ : UniformlyPrimcodable L.Func
σ : Type u_2
μ₁ : Type u_3
μ₂ : Type u_4
inst✝² : Primcodable μ₁
inst✝¹ : Primcodable μ₂
inst✝ : Primcodable σ
n n' : ℕ
this : Primrec₂ fun v t => (Rew.bind v fun x => &x) t
v : Fin n → Semiterm L μ n'
p : Semiterm L μ n
⊢ (Rew.bind v fun x => &x) p = (Rew.substs v) p

State before:
L : Language
μ : Type v
α : Type u_1
inst✝⁶ : Primcodable α
inst✝⁵ : Primcodable μ
inst✝⁴ : (k : ℕ) → Primcodable (L.Func k)
inst✝³ : UniformlyPrimcodable L.Func
σ : Type u_2
μ₁ : Type u_3
μ₂ : Type u_4
inst✝² : Primcodable μ₁
inst✝¹ : Primcodable μ₂
inst✝ : Primcodable σ
n n' : ℕ
this : Primrec₂ fun v t => (Rew.bind v fun x => &x) t
v : Fin n → Semiterm L μ n'
p : Semiterm L μ n
⊢ (Rew.bind v fun x => &x) p = (Rew.substs v) p
Tactic:
rw[Rew.eq_bind (Rew.substs v)]
State after:
L : Language
μ : Type v
α : Type u_1
inst✝⁶ : Primcodable α
inst✝⁵ : Primcodable μ
inst✝⁴ : (k : ℕ) → Primcodable (L.Func k)
inst✝³ : UniformlyPrimcodable L.Func
σ : Type u_2
μ₁ : Type u_3
μ₂ : Type u_4
inst✝² : Primcodable μ₁
inst✝¹ : Primcodable μ₂
inst✝ : Primcodable σ
n n' : ℕ
this : Primrec₂ fun v t => (Rew.bind v fun x => &x) t
v : Fin n → Semiterm L μ n'
p : Semiterm L μ n
⊢ (Rew.bind v fun x => &x) p = (Rew.bind (⇑(Rew.substs v) ∘ bvar) (⇑(Rew.substs v) ∘ fvar)) p

State before:
L : Language
μ : Type v
α : Type u_1
inst✝⁶ : Primcodable α
inst✝⁵ : Primcodable μ
inst✝⁴ : (k : ℕ) → Primcodable (L.Func k)
inst✝³ : UniformlyPrimcodable L.Func
σ : Type u_2
μ₁ : Type u_3
μ₂ : Type u_4
inst✝² : Primcodable μ₁
inst✝¹ : Primcodable μ₂
inst✝ : Primcodable σ
n n' : ℕ
this : Primrec₂ fun v t => (Rew.bind v fun x => &x) t
v : Fin n → Semiterm L μ n'
p : Semiterm L μ n
⊢ (Rew.bind v fun x => &x) p = (Rew.bind (⇑(Rew.substs v) ∘ bvar) (⇑(Rew.substs v) ∘ fvar)) p
Tactic:
simp[Function.comp]
State after:
no goals