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

tactic: induction' t with a _ _ _ 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 α
γ : Type u_4
t : L.Term (α ⊕ γ)
s : Set α
h : ↑t.varFinsetLeft ⊆ s
v : α → M
xs : γ → M
⊢ realize (Sum.elim (v ∘ Subtype.val) xs) (t.restrictVarLeft (Set.inclusion h)) = realize (Sum.elim v xs) 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 α
γ : Type u_4
s : Set α
v : α → M
xs : γ → M
a : α ⊕ γ
h : ↑(var a).varFinsetLeft ⊆ s
⊢ realize (Sum.elim (v ∘ Subtype.val) xs) ((var a).restrictVarLeft (Set.inclusion h)) = realize (Sum.elim v xs) (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 α
γ : Type u_4
s : Set α
v : α → M
xs : γ → M
l✝ : ℕ
_f✝ : L.Functions l✝
_ts✝ : Fin l✝ → L.Term (α ⊕ γ)
ih :
  ∀ (a : Fin l✝) (h : ↑(_ts✝ a).varFinsetLeft ⊆ s),
    realize (Sum.elim (v ∘ Subtype.val) xs) ((_ts✝ a).restrictVarLeft (Set.inclusion h)) =
      realize (Sum.elim v xs) (_ts✝ a)
h : ↑(func _f✝ _ts✝).varFinsetLeft ⊆ s
⊢ realize (Sum.elim (v ∘ Subtype.val) xs) ((func _f✝ _ts✝).restrictVarLeft (Set.inclusion h)) =
    realize (Sum.elim v xs) (func _f✝ _ts✝)

tactic: cases a <;> 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 α
γ : Type u_4
s : Set α
v : α → M
xs : γ → M
a : α ⊕ γ
h : ↑(var a).varFinsetLeft ⊆ s
⊢ realize (Sum.elim (v ∘ Subtype.val) xs) ((var a).restrictVarLeft (Set.inclusion h)) = realize (Sum.elim v xs) (var a)
state_after: no goals

tactic: simp_rw [varFinsetLeft, 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 α
γ : Type u_4
s : Set α
v : α → M
xs : γ → M
l✝ : ℕ
_f✝ : L.Functions l✝
_ts✝ : Fin l✝ → L.Term (α ⊕ γ)
ih :
  ∀ (a : Fin l✝) (h : ↑(_ts✝ a).varFinsetLeft ⊆ s),
    realize (Sum.elim (v ∘ Subtype.val) xs) ((_ts✝ a).restrictVarLeft (Set.inclusion h)) =
      realize (Sum.elim v xs) (_ts✝ a)
h : ↑(func _f✝ _ts✝).varFinsetLeft ⊆ s
⊢ realize (Sum.elim (v ∘ Subtype.val) xs) ((func _f✝ _ts✝).restrictVarLeft (Set.inclusion h)) =
    realize (Sum.elim v xs) (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 α
γ : Type u_4
s : Set α
v : α → M
xs : γ → M
l✝ : ℕ
_f✝ : L.Functions l✝
_ts✝ : Fin l✝ → L.Term (α ⊕ γ)
ih :
  ∀ (a : Fin l✝) (h : ↑(_ts✝ a).varFinsetLeft ⊆ s),
    realize (Sum.elim (v ∘ Subtype.val) xs) ((_ts✝ a).restrictVarLeft (Set.inclusion h)) =
      realize (Sum.elim v xs) (_ts✝ a)
h✝ : ↑(Finset.univ.biUnion fun i => (_ts✝ i).varFinsetLeft) ⊆ s
h : ∀ i ∈ ↑Finset.univ, ↑(_ts✝ i).varFinsetLeft ⊆ s
⊢ realize (Sum.elim (v ∘ Subtype.val) xs) ((func _f✝ _ts✝).restrictVarLeft (Set.inclusion h✝)) =
    realize (Sum.elim v xs) (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 α
γ : Type u_4
s : Set α
v : α → M
xs : γ → M
l✝ : ℕ
_f✝ : L.Functions l✝
_ts✝ : Fin l✝ → L.Term (α ⊕ γ)
ih :
  ∀ (a : Fin l✝) (h : ↑(_ts✝ a).varFinsetLeft ⊆ s),
    realize (Sum.elim (v ∘ Subtype.val) xs) ((_ts✝ a).restrictVarLeft (Set.inclusion h)) =
      realize (Sum.elim v xs) (_ts✝ a)
h✝ : ↑(Finset.univ.biUnion fun i => (_ts✝ i).varFinsetLeft) ⊆ s
h : ∀ i ∈ ↑Finset.univ, ↑(_ts✝ i).varFinsetLeft ⊆ s
⊢ realize (Sum.elim (v ∘ Subtype.val) xs) ((func _f✝ _ts✝).restrictVarLeft (Set.inclusion h✝)) =
    realize (Sum.elim v xs) (func _f✝ _ts✝)
state_after: no goals