Theorem: LO.FirstOrder.Semiformula.eval_rel₂ (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
r : L.Rel 2
t₁ t₂ : Semiterm L μ n
⊢ (Eval s e ε) (rel r ![t₁, t₂]) ↔ Structure.rel r ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂]
Tactic:
simp [eval_rel]
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
r : L.Rel 2
t₁ t₂ : Semiterm L μ n
⊢ (Structure.rel r fun i => Semiterm.val s e ε (![t₁, t₂] i)) ↔
    Structure.rel r ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂]

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
r : L.Rel 2
t₁ t₂ : Semiterm L μ n
⊢ (Structure.rel r fun i => Semiterm.val s e ε (![t₁, t₂] i)) ↔
    Structure.rel r ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂]
Tactic:
apply 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
r : L.Rel 2
t₁ t₂ : Semiterm L μ n
⊢ (Structure.rel r fun i => Semiterm.val s e ε (![t₁, t₂] i)) =
    Structure.rel r ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂]

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
r : L.Rel 2
t₁ t₂ : Semiterm L μ n
⊢ (Structure.rel r fun i => Semiterm.val s e ε (![t₁, t₂] i)) =
    Structure.rel r ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂]
Tactic:
congr
State after:
case a.e_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
r : L.Rel 2
t₁ t₂ : Semiterm L μ n
⊢ (fun i => Semiterm.val s e ε (![t₁, t₂] i)) = ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂]

State before:
case a.e_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
r : L.Rel 2
t₁ t₂ : Semiterm L μ n
⊢ (fun i => Semiterm.val s e ε (![t₁, t₂] i)) = ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂]
Tactic:
funext i
State after:
case a.e_a.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
r : L.Rel 2
t₁ t₂ : Semiterm L μ n
i : Fin 2
⊢ Semiterm.val s e ε (![t₁, t₂] i) = ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂] i

State before:
case a.e_a.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
r : L.Rel 2
t₁ t₂ : Semiterm L μ n
i : Fin 2
⊢ Semiterm.val s e ε (![t₁, t₂] i) = ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂] i
Tactic:
cases' i using Fin.cases with i <;> simp
State after:
no goals