Theorem: LO.FirstOrder.Semiterm.fvarList_to_finset (Logic/FirstOrder/Basic/Syntax/Term.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₃ : ℕ
inst✝¹ inst✝ : DecidableEq ξ
t : Semiterm L ξ n
⊢ t.fvarList.toFinset = t.fv
Tactic:
induction t <;> try simp [fvarList, fv_func]
State after:
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₃ : ℕ
inst✝¹ inst✝ : DecidableEq ξ
arity✝ : ℕ
a✝¹ : L.Func arity✝
a✝ : Fin arity✝ → Semiterm L ξ n
a_ih✝ : ∀ (a : Fin arity✝), (a✝ a).fvarList.toFinset = (a✝ a).fv
⊢ (Matrix.toList fun i => (a✝ i).fvarList).join.toFinset = Finset.univ.biUnion fun i => (a✝ i).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₃ : ℕ
inst✝¹ inst✝ : DecidableEq ξ
arity✝ : ℕ
a✝¹ : L.Func arity✝
a✝ : Fin arity✝ → Semiterm L ξ n
ih : ∀ (a : Fin arity✝), (a✝ a).fvarList.toFinset = (a✝ a).fv
⊢ (Matrix.toList fun i => (a✝ i).fvarList).join.toFinset = Finset.univ.biUnion fun i => (a✝ i).fv
Tactic:
case func ih => ext x; simp [←ih]
State after:
no goals

State before:
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₃ : ℕ
inst✝¹ inst✝ : DecidableEq ξ
arity✝ : ℕ
a✝¹ : L.Func arity✝
a✝ : Fin arity✝ → Semiterm L ξ n
a_ih✝ : ∀ (a : Fin arity✝), (a✝ a).fvarList.toFinset = (a✝ a).fv
⊢ (func a✝¹ a✝).fvarList.toFinset = (func a✝¹ a✝).fv
Tactic:
simp [fvarList, fv_func]
State after:
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₃ : ℕ
inst✝¹ inst✝ : DecidableEq ξ
arity✝ : ℕ
a✝¹ : L.Func arity✝
a✝ : Fin arity✝ → Semiterm L ξ n
a_ih✝ : ∀ (a : Fin arity✝), (a✝ a).fvarList.toFinset = (a✝ a).fv
⊢ (Matrix.toList fun i => (a✝ i).fvarList).join.toFinset = Finset.univ.biUnion fun i => (a✝ i).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₃ : ℕ
inst✝¹ inst✝ : DecidableEq ξ
arity✝ : ℕ
a✝¹ : L.Func arity✝
a✝ : Fin arity✝ → Semiterm L ξ n
ih : ∀ (a : Fin arity✝), (a✝ a).fvarList.toFinset = (a✝ a).fv
⊢ (Matrix.toList fun i => (a✝ i).fvarList).join.toFinset = Finset.univ.biUnion fun i => (a✝ i).fv
Tactic:
ext x
State after:
case a
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₃ : ℕ
inst✝¹ inst✝ : DecidableEq ξ
arity✝ : ℕ
a✝¹ : L.Func arity✝
a✝ : Fin arity✝ → Semiterm L ξ n
ih : ∀ (a : Fin arity✝), (a✝ a).fvarList.toFinset = (a✝ a).fv
x : ξ
⊢ x ∈ (Matrix.toList fun i => (a✝ i).fvarList).join.toFinset ↔ x ∈ Finset.univ.biUnion fun i => (a✝ i).fv

State before:
case a
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₃ : ℕ
inst✝¹ inst✝ : DecidableEq ξ
arity✝ : ℕ
a✝¹ : L.Func arity✝
a✝ : Fin arity✝ → Semiterm L ξ n
ih : ∀ (a : Fin arity✝), (a✝ a).fvarList.toFinset = (a✝ a).fv
x : ξ
⊢ x ∈ (Matrix.toList fun i => (a✝ i).fvarList).join.toFinset ↔ x ∈ Finset.univ.biUnion fun i => (a✝ i).fv
Tactic:
simp [←ih]
State after:
no goals