Theorem: LO.FirstOrder.Semiformula.eval_rew_q (Logic/FirstOrder/Basic/Semantics/Semantics.lean)

State before:
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e : Fin n → M
e₂✝ : Fin n₂ → M
ε : μ → M
ε₂✝ : μ₂ → M
n₁ : ℕ
x : M
e₂ : Fin n₂ → M
ε₂ : μ₂ → M
ω : Rew L μ₁ n₁ μ₂ n₂
p : Semiformula L μ₁ (n₁ + 1)
⊢ (Eval s (x :> e₂) ε₂) (ω.q.hom p) ↔
    (Eval s (x :> Semiterm.val s e₂ ε₂ ∘ ⇑ω ∘ Semiterm.bvar) (Semiterm.val s e₂ ε₂ ∘ ⇑ω ∘ Semiterm.fvar)) p
Tactic:
simp [eval_rew, Function.comp]
State after:
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e : Fin n → M
e₂✝ : Fin n₂ → M
ε : μ → M
ε₂✝ : μ₂ → M
n₁ : ℕ
x : M
e₂ : Fin n₂ → M
ε₂ : μ₂ → M
ω : Rew L μ₁ n₁ μ₂ n₂
p : Semiformula L μ₁ (n₁ + 1)
⊢ (Eval s (fun x_1 => Semiterm.val s (x :> e₂) ε₂ (ω.q #x_1)) fun x => Semiterm.val s e₂ ε₂ (ω &x)) p ↔
    (Eval s (x :> fun x => Semiterm.val s e₂ ε₂ (ω #x)) fun x => Semiterm.val s e₂ ε₂ (ω &x)) p

State before:
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e : Fin n → M
e₂✝ : Fin n₂ → M
ε : μ → M
ε₂✝ : μ₂ → M
n₁ : ℕ
x : M
e₂ : Fin n₂ → M
ε₂ : μ₂ → M
ω : Rew L μ₁ n₁ μ₂ n₂
p : Semiformula L μ₁ (n₁ + 1)
⊢ (Eval s (fun x_1 => Semiterm.val s (x :> e₂) ε₂ (ω.q #x_1)) fun x => Semiterm.val s e₂ ε₂ (ω &x)) p ↔
    (Eval s (x :> fun x => Semiterm.val s e₂ ε₂ (ω #x)) fun x => Semiterm.val s e₂ ε₂ (ω &x)) p
Tactic:
apply iff_of_eq
State after:
case a
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e : Fin n → M
e₂✝ : Fin n₂ → M
ε : μ → M
ε₂✝ : μ₂ → M
n₁ : ℕ
x : M
e₂ : Fin n₂ → M
ε₂ : μ₂ → M
ω : Rew L μ₁ n₁ μ₂ n₂
p : Semiformula L μ₁ (n₁ + 1)
⊢ (Eval s (fun x_1 => Semiterm.val s (x :> e₂) ε₂ (ω.q #x_1)) fun x => Semiterm.val s e₂ ε₂ (ω &x)) p =
    (Eval s (x :> fun x => Semiterm.val s e₂ ε₂ (ω #x)) fun x => Semiterm.val s e₂ ε₂ (ω &x)) p

State before:
case a
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e : Fin n → M
e₂✝ : Fin n₂ → M
ε : μ → M
ε₂✝ : μ₂ → M
n₁ : ℕ
x : M
e₂ : Fin n₂ → M
ε₂ : μ₂ → M
ω : Rew L μ₁ n₁ μ₂ n₂
p : Semiformula L μ₁ (n₁ + 1)
⊢ (Eval s (fun x_1 => Semiterm.val s (x :> e₂) ε₂ (ω.q #x_1)) fun x => Semiterm.val s e₂ ε₂ (ω &x)) p =
    (Eval s (x :> fun x => Semiterm.val s e₂ ε₂ (ω #x)) fun x => Semiterm.val s e₂ ε₂ (ω &x)) p
Tactic:
congr 2
State after:
case a.e_a.e_e
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e : Fin n → M
e₂✝ : Fin n₂ → M
ε : μ → M
ε₂✝ : μ₂ → M
n₁ : ℕ
x : M
e₂ : Fin n₂ → M
ε₂ : μ₂ → M
ω : Rew L μ₁ n₁ μ₂ n₂
p : Semiformula L μ₁ (n₁ + 1)
⊢ (fun x_1 => Semiterm.val s (x :> e₂) ε₂ (ω.q #x_1)) = x :> fun x => Semiterm.val s e₂ ε₂ (ω #x)

State before:
case a.e_a.e_e
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e : Fin n → M
e₂✝ : Fin n₂ → M
ε : μ → M
ε₂✝ : μ₂ → M
n₁ : ℕ
x : M
e₂ : Fin n₂ → M
ε₂ : μ₂ → M
ω : Rew L μ₁ n₁ μ₂ n₂
p : Semiformula L μ₁ (n₁ + 1)
⊢ (fun x_1 => Semiterm.val s (x :> e₂) ε₂ (ω.q #x_1)) = x :> fun x => Semiterm.val s e₂ ε₂ (ω #x)
Tactic:
funext x
State after:
case a.e_a.e_e.h
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e : Fin n → M
e₂✝ : Fin n₂ → M
ε : μ → M
ε₂✝ : μ₂ → M
n₁ : ℕ
x✝ : M
e₂ : Fin n₂ → M
ε₂ : μ₂ → M
ω : Rew L μ₁ n₁ μ₂ n₂
p : Semiformula L μ₁ (n₁ + 1)
x : Fin (n₁ + 1)
⊢ Semiterm.val s (x✝ :> e₂) ε₂ (ω.q #x) = (x✝ :> fun x => Semiterm.val s e₂ ε₂ (ω #x)) x

State before:
case a.e_a.e_e.h
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e : Fin n → M
e₂✝ : Fin n₂ → M
ε : μ → M
ε₂✝ : μ₂ → M
n₁ : ℕ
x✝ : M
e₂ : Fin n₂ → M
ε₂ : μ₂ → M
ω : Rew L μ₁ n₁ μ₂ n₂
p : Semiformula L μ₁ (n₁ + 1)
x : Fin (n₁ + 1)
⊢ Semiterm.val s (x✝ :> e₂) ε₂ (ω.q #x) = (x✝ :> fun x => Semiterm.val s e₂ ε₂ (ω #x)) x
Tactic:
cases x using Fin.cases <;> simp
State after:
no goals