Theorem: FirstOrder.Language.BoundedFormula.realize_restrictFreeVar
File: Mathlib/ModelTheory/Semantics.lean

Proof steps:
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
n✝ l : ℕ
φ✝ ψ : L.BoundedFormula α l
θ : L.BoundedFormula α l.succ
v✝ : α → M
xs✝ : Fin l → M
inst✝ : DecidableEq α
n : ℕ
φ : L.BoundedFormula α n
s : Set α
h : ↑φ.freeVarFinset ⊆ s
v : α → M
xs : Fin n → M
⊢ (φ.restrictFreeVar (Set.inclusion h)).Realize (v ∘ Subtype.val) xs ↔ φ.Realize v xs
state_after: case falsum
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
n✝¹ l : ℕ
φ ψ : L.BoundedFormula α l
θ : L.BoundedFormula α l.succ
v✝ : α → M
xs✝ : Fin l → M
inst✝ : DecidableEq α
n : ℕ
s : Set α
v : α → M
n✝ : ℕ
h : ↑falsum.freeVarFinset ⊆ s
xs : Fin n✝ → M
⊢ (falsum.restrictFreeVar (Set.inclusion h)).Realize (v ∘ Subtype.val) xs ↔ falsum.Realize v xs

case equal
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
n✝¹ l : ℕ
φ ψ : L.BoundedFormula α l
θ : L.BoundedFormula α l.succ
v✝ : α → M
xs✝ : Fin l → M
inst✝ : DecidableEq α
n : ℕ
s : Set α
v : α → M
n✝ : ℕ
t₁✝ t₂✝ : L.Term (α ⊕ Fin n✝)
h : ↑(equal t₁✝ t₂✝).freeVarFinset ⊆ s
xs : Fin n✝ → M
⊢ ((equal t₁✝ t₂✝).restrictFreeVar (Set.inclusion h)).Realize (v ∘ Subtype.val) xs ↔ (equal t₁✝ t₂✝).Realize v xs

case rel
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
n✝¹ l : ℕ
φ ψ : L.BoundedFormula α l
θ : L.BoundedFormula α l.succ
v✝ : α → M
xs✝ : Fin l → M
inst✝ : DecidableEq α
n : ℕ
s : Set α
v : α → M
n✝ l✝ : ℕ
R✝ : L.Relations l✝
ts✝ : Fin l✝ → L.Term (α ⊕ Fin n✝)
h : ↑(rel R✝ ts✝).freeVarFinset ⊆ s
xs : Fin n✝ → M
⊢ ((rel R✝ ts✝).restrictFreeVar (Set.inclusion h)).Realize (v ∘ Subtype.val) xs ↔ (rel R✝ ts✝).Realize v xs

case imp
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
n✝¹ l : ℕ
φ ψ : L.BoundedFormula α l
θ : L.BoundedFormula α l.succ
v✝ : α → M
xs✝ : Fin l → M
inst✝ : DecidableEq α
n : ℕ
s : Set α
v : α → M
n✝ : ℕ
f₁✝ f₂✝ : L.BoundedFormula α n✝
ih1 :
  ∀ (h : ↑f₁✝.freeVarFinset ⊆ s) {xs : Fin n✝ → M},
    (f₁✝.restrictFreeVar (Set.inclusion h)).Realize (v ∘ Subtype.val) xs ↔ f₁✝.Realize v xs
ih2 :
  ∀ (h : ↑f₂✝.freeVarFinset ⊆ s) {xs : Fin n✝ → M},
    (f₂✝.restrictFreeVar (Set.inclusion h)).Realize (v ∘ Subtype.val) xs ↔ f₂✝.Realize v xs
h : ↑(f₁✝ ⟹ f₂✝).freeVarFinset ⊆ s
xs : Fin n✝ → M
⊢ ((f₁✝ ⟹ f₂✝).restrictFreeVar (Set.inclusion h)).Realize (v ∘ Subtype.val) xs ↔ (f₁✝ ⟹ f₂✝).Realize v xs

case all
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
n✝¹ l : ℕ
φ ψ : L.BoundedFormula α l
θ : L.BoundedFormula α l.succ
v✝ : α → M
xs✝ : Fin l → M
inst✝ : DecidableEq α
n : ℕ
s : Set α
v : α → M
n✝ : ℕ
f✝ : L.BoundedFormula α (n✝ + 1)
ih3 :
  ∀ (h : ↑f✝.freeVarFinset ⊆ s) {xs : Fin (n✝ + 1) → M},
    (f✝.restrictFreeVar (Set.inclusion h)).Realize (v ∘ Subtype.val) xs ↔ f✝.Realize v xs
h : ↑(∀'f✝).freeVarFinset ⊆ s
xs : Fin n✝ → M
⊢ ((∀'f✝).restrictFreeVar (Set.inclusion h)).Realize (v ∘ Subtype.val) xs ↔ (∀'f✝).Realize v xs
tactic: induction' φ with _ _ _ _ _ _ _ _ _ _ _ ih1 ih2 _ _ ih3