Theorem: FirstOrder.Language.Term.realize_restrictVar
File: Mathlib/ModelTheory/Semantics.lean

tactic: induction' t with _ _ _ _ ih
state_before: L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝³ : L.Structure M
inst✝² : L.Structure N
inst✝¹ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
inst✝ : DecidableEq α
t : L.Term α
s : Set α
h : ↑t.varFinset ⊆ s
v : α → M
⊢ realize (v ∘ Subtype.val) (t.restrictVar (Set.inclusion h)) = realize v t
state_after: case var
L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝³ : L.Structure M
inst✝² : L.Structure N
inst✝¹ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
inst✝ : DecidableEq α
s : Set α
v : α → M
a✝ : α
h : ↑(var a✝).varFinset ⊆ s
⊢ realize (v ∘ Subtype.val) ((var a✝).restrictVar (Set.inclusion h)) = realize v (var a✝)

case func
L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝³ : L.Structure M
inst✝² : L.Structure N
inst✝¹ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
inst✝ : DecidableEq α
s : Set α
v : α → M
l✝ : ℕ
_f✝ : L.Functions l✝
_ts✝ : Fin l✝ → L.Term α
ih :
  ∀ (a : Fin l✝) (h : ↑(_ts✝ a).varFinset ⊆ s),
    realize (v ∘ Subtype.val) ((_ts✝ a).restrictVar (Set.inclusion h)) = realize v (_ts✝ a)
h : ↑(func _f✝ _ts✝).varFinset ⊆ s
⊢ realize (v ∘ Subtype.val) ((func _f✝ _ts✝).restrictVar (Set.inclusion h)) = realize v (func _f✝ _ts✝)

tactic: rfl
state_before: case var
L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝³ : L.Structure M
inst✝² : L.Structure N
inst✝¹ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
inst✝ : DecidableEq α
s : Set α
v : α → M
a✝ : α
h : ↑(var a✝).varFinset ⊆ s
⊢ realize (v ∘ Subtype.val) ((var a✝).restrictVar (Set.inclusion h)) = realize v (var a✝)
state_after: no goals

tactic: simp_rw [varFinset, Finset.coe_biUnion, Set.iUnion_subset_iff] at h
state_before: case func
L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝³ : L.Structure M
inst✝² : L.Structure N
inst✝¹ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
inst✝ : DecidableEq α
s : Set α
v : α → M
l✝ : ℕ
_f✝ : L.Functions l✝
_ts✝ : Fin l✝ → L.Term α
ih :
  ∀ (a : Fin l✝) (h : ↑(_ts✝ a).varFinset ⊆ s),
    realize (v ∘ Subtype.val) ((_ts✝ a).restrictVar (Set.inclusion h)) = realize v (_ts✝ a)
h : ↑(func _f✝ _ts✝).varFinset ⊆ s
⊢ realize (v ∘ Subtype.val) ((func _f✝ _ts✝).restrictVar (Set.inclusion h)) = realize v (func _f✝ _ts✝)
state_after: case func
L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝³ : L.Structure M
inst✝² : L.Structure N
inst✝¹ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
inst✝ : DecidableEq α
s : Set α
v : α → M
l✝ : ℕ
_f✝ : L.Functions l✝
_ts✝ : Fin l✝ → L.Term α
ih :
  ∀ (a : Fin l✝) (h : ↑(_ts✝ a).varFinset ⊆ s),
    realize (v ∘ Subtype.val) ((_ts✝ a).restrictVar (Set.inclusion h)) = realize v (_ts✝ a)
h✝ : ↑(Finset.univ.biUnion fun i => (_ts✝ i).varFinset) ⊆ s
h : ∀ i ∈ ↑Finset.univ, ↑(_ts✝ i).varFinset ⊆ s
⊢ realize (v ∘ Subtype.val) ((func _f✝ _ts✝).restrictVar (Set.inclusion h✝)) = realize v (func _f✝ _ts✝)

tactic: exact congr rfl (funext fun i => ih i (h i (Finset.mem_univ i)))
state_before: case func
L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝³ : L.Structure M
inst✝² : L.Structure N
inst✝¹ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
inst✝ : DecidableEq α
s : Set α
v : α → M
l✝ : ℕ
_f✝ : L.Functions l✝
_ts✝ : Fin l✝ → L.Term α
ih :
  ∀ (a : Fin l✝) (h : ↑(_ts✝ a).varFinset ⊆ s),
    realize (v ∘ Subtype.val) ((_ts✝ a).restrictVar (Set.inclusion h)) = realize v (_ts✝ a)
h✝ : ↑(Finset.univ.biUnion fun i => (_ts✝ i).varFinset) ⊆ s
h : ∀ i ∈ ↑Finset.univ, ↑(_ts✝ i).varFinset ⊆ s
⊢ realize (v ∘ Subtype.val) ((func _f✝ _ts✝).restrictVar (Set.inclusion h✝)) = realize v (func _f✝ _ts✝)
state_after: no goals