Theorem: LO.FirstOrder.Semiterm.val_operator₂ (Logic/FirstOrder/Basic/Operator.lean)

State before:
L : Language
M : Type w
s : Structure L M
n✝ : ℕ
e : Fin n✝ → M
ξ✝ : Type u_1
ε : ξ✝ → M
o : Operator L 2
t u : Semiterm L ξ✝ n✝
⊢ val s e ε (o.operator ![t, u]) = o.val ![val s e ε t, val s e ε u]
Tactic:
simp [val_operator]
State after:
L : Language
M : Type w
s : Structure L M
n✝ : ℕ
e : Fin n✝ → M
ξ✝ : Type u_1
ε : ξ✝ → M
o : Operator L 2
t u : Semiterm L ξ✝ n✝
⊢ (o.val fun x => val s e ε (![t, u] x)) = o.val ![val s e ε t, val s e ε u]

State before:
L : Language
M : Type w
s : Structure L M
n✝ : ℕ
e : Fin n✝ → M
ξ✝ : Type u_1
ε : ξ✝ → M
o : Operator L 2
t u : Semiterm L ξ✝ n✝
⊢ (o.val fun x => val s e ε (![t, u] x)) = o.val ![val s e ε t, val s e ε u]
Tactic:
congr
State after:
case e_v
L : Language
M : Type w
s : Structure L M
n✝ : ℕ
e : Fin n✝ → M
ξ✝ : Type u_1
ε : ξ✝ → M
o : Operator L 2
t u : Semiterm L ξ✝ n✝
⊢ (fun x => val s e ε (![t, u] x)) = ![val s e ε t, val s e ε u]

State before:
case e_v
L : Language
M : Type w
s : Structure L M
n✝ : ℕ
e : Fin n✝ → M
ξ✝ : Type u_1
ε : ξ✝ → M
o : Operator L 2
t u : Semiterm L ξ✝ n✝
⊢ (fun x => val s e ε (![t, u] x)) = ![val s e ε t, val s e ε u]
Tactic:
funext i
State after:
case e_v.h
L : Language
M : Type w
s : Structure L M
n✝ : ℕ
e : Fin n✝ → M
ξ✝ : Type u_1
ε : ξ✝ → M
o : Operator L 2
t u : Semiterm L ξ✝ n✝
i : Fin 2
⊢ val s e ε (![t, u] i) = ![val s e ε t, val s e ε u] i

State before:
case e_v.h
L : Language
M : Type w
s : Structure L M
n✝ : ℕ
e : Fin n✝ → M
ξ✝ : Type u_1
ε : ξ✝ → M
o : Operator L 2
t u : Semiterm L ξ✝ n✝
i : Fin 2
⊢ val s e ε (![t, u] i) = ![val s e ε t, val s e ε u] i
Tactic:
cases' i using Fin.cases with i <;> simp
State after:
no goals