Theorem: LO.FirstOrder.Rew.eq_rewriteMap_of_funEqOn_fv (Logic/FirstOrder/Basic/Syntax/Rew.lean)

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
t : Semiterm L ξ₁ n₁
f g : ξ₁ → Semiterm L ξ₂ n₂
h : Function.funEqOn (fun x => x ∈ t.fv) f g
⊢ (rewriteMap f) t = (rewriteMap g) t
Tactic:
induction t <;> simp [Rew.func]
State after:
case fvar
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f g : ξ₁ → Semiterm L ξ₂ n₂
a✝ : ξ₁
h : Function.funEqOn (fun x => x ∈ (&a✝).fv) f g
⊢ f a✝ = g a✝

case func
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f g : ξ₁ → Semiterm L ξ₂ n₂
arity✝ : ℕ
a✝¹ : L.Func arity✝
a✝ : Fin arity✝ → Semiterm L ξ₁ n₁
a_ih✝ :
  ∀ (a : Fin arity✝), Function.funEqOn (fun x => x ∈ (a✝ a).fv) f g → (rewriteMap f) (a✝ a) = (rewriteMap g) (a✝ a)
h : Function.funEqOn (fun x => x ∈ (func a✝¹ a✝).fv) f g
⊢ (fun i => (rewriteMap f) (a✝ i)) = fun i => (rewriteMap g) (a✝ i)

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f g : ξ₁ → Semiterm L ξ₂ n₂
x : ξ₁
h : Function.funEqOn (fun x_1 => x_1 ∈ (&x).fv) f g
⊢ f x = g x
Tactic:
case fvar x => exact h x (by simp)
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f✝ g : ξ₁ → Semiterm L ξ₂ n₂
arity✝ : ℕ
f : L.Func arity✝
v : Fin arity✝ → Semiterm L ξ₁ n₁
ih : ∀ (a : Fin arity✝), Function.funEqOn (fun x => x ∈ (v a).fv) f✝ g → (rewriteMap f✝) (v a) = (rewriteMap g) (v a)
h : Function.funEqOn (fun x => x ∈ (func f v).fv) f✝ g
⊢ (fun i => (rewriteMap f✝) (v i)) = fun i => (rewriteMap g) (v i)
Tactic:
case func f v ih =>
  funext i
  exact ih i (fun x hx ↦ h x (by simp [Semiterm.fv_func]; exact ⟨i, hx⟩))
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f g : ξ₁ → Semiterm L ξ₂ n₂
x : ξ₁
h : Function.funEqOn (fun x_1 => x_1 ∈ (&x).fv) f g
⊢ f x = g x
Tactic:
exact h x (by simp)
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f g : ξ₁ → Semiterm L ξ₂ n₂
x : ξ₁
h : Function.funEqOn (fun x_1 => x_1 ∈ (&x).fv) f g
⊢ (fun x_1 => x_1 ∈ (&x).fv) x
Tactic:
simp
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f✝ g : ξ₁ → Semiterm L ξ₂ n₂
arity✝ : ℕ
f : L.Func arity✝
v : Fin arity✝ → Semiterm L ξ₁ n₁
ih : ∀ (a : Fin arity✝), Function.funEqOn (fun x => x ∈ (v a).fv) f✝ g → (rewriteMap f✝) (v a) = (rewriteMap g) (v a)
h : Function.funEqOn (fun x => x ∈ (func f v).fv) f✝ g
⊢ (fun i => (rewriteMap f✝) (v i)) = fun i => (rewriteMap g) (v i)
Tactic:
funext i
State after:
case h
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f✝ g : ξ₁ → Semiterm L ξ₂ n₂
arity✝ : ℕ
f : L.Func arity✝
v : Fin arity✝ → Semiterm L ξ₁ n₁
ih : ∀ (a : Fin arity✝), Function.funEqOn (fun x => x ∈ (v a).fv) f✝ g → (rewriteMap f✝) (v a) = (rewriteMap g) (v a)
h : Function.funEqOn (fun x => x ∈ (func f v).fv) f✝ g
i : Fin arity✝
⊢ (rewriteMap f✝) (v i) = (rewriteMap g) (v i)

State before:
case h
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f✝ g : ξ₁ → Semiterm L ξ₂ n₂
arity✝ : ℕ
f : L.Func arity✝
v : Fin arity✝ → Semiterm L ξ₁ n₁
ih : ∀ (a : Fin arity✝), Function.funEqOn (fun x => x ∈ (v a).fv) f✝ g → (rewriteMap f✝) (v a) = (rewriteMap g) (v a)
h : Function.funEqOn (fun x => x ∈ (func f v).fv) f✝ g
i : Fin arity✝
⊢ (rewriteMap f✝) (v i) = (rewriteMap g) (v i)
Tactic:
exact ih i (fun x hx ↦ h x (by simp [Semiterm.fv_func]; exact ⟨i, hx⟩))
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f✝ g : ξ₁ → Semiterm L ξ₂ n₂
arity✝ : ℕ
f : L.Func arity✝
v : Fin arity✝ → Semiterm L ξ₁ n₁
ih : ∀ (a : Fin arity✝), Function.funEqOn (fun x => x ∈ (v a).fv) f✝ g → (rewriteMap f✝) (v a) = (rewriteMap g) (v a)
h : Function.funEqOn (fun x => x ∈ (func f v).fv) f✝ g
i : Fin arity✝
x : ξ₁
hx : (fun x => x ∈ (v i).fv) x
⊢ (fun x => x ∈ (func f v).fv) x
Tactic:
simp [Semiterm.fv_func]
State after:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f✝ g : ξ₁ → Semiterm L ξ₂ n₂
arity✝ : ℕ
f : L.Func arity✝
v : Fin arity✝ → Semiterm L ξ₁ n₁
ih : ∀ (a : Fin arity✝), Function.funEqOn (fun x => x ∈ (v a).fv) f✝ g → (rewriteMap f✝) (v a) = (rewriteMap g) (v a)
h : Function.funEqOn (fun x => x ∈ (func f v).fv) f✝ g
i : Fin arity✝
x : ξ₁
hx : (fun x => x ∈ (v i).fv) x
⊢ ∃ a, x ∈ (v a).fv

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
e : ξ₁ → ξ₂
inst✝ : DecidableEq ξ₁
f✝ g : ξ₁ → Semiterm L ξ₂ n₂
arity✝ : ℕ
f : L.Func arity✝
v : Fin arity✝ → Semiterm L ξ₁ n₁
ih : ∀ (a : Fin arity✝), Function.funEqOn (fun x => x ∈ (v a).fv) f✝ g → (rewriteMap f✝) (v a) = (rewriteMap g) (v a)
h : Function.funEqOn (fun x => x ∈ (func f v).fv) f✝ g
i : Fin arity✝
x : ξ₁
hx : (fun x => x ∈ (v i).fv) x
⊢ ∃ a, x ∈ (v a).fv
Tactic:
exact ⟨i, hx⟩
State after:
no goals