Theorem: FirstOrder.Language.BoundedFormula.realize_liftAt
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
n n' m : ℕ
φ : L.BoundedFormula α n
v : α → M
xs : Fin (n + n') → M
hmn : m + n' ≤ n + 1
⊢ (liftAt n' m φ).Realize v xs ↔ φ.Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n')
state_after: 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
n n' m : ℕ
φ : L.BoundedFormula α n
v : α → M
xs : Fin (n + n') → M
hmn : m + n' ≤ n + 1
⊢ (mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) φ).Realize v xs ↔
    φ.Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n')
tactic: rw [liftAt]
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
n n' m : ℕ
φ : L.BoundedFormula α n
v : α → M
xs : Fin (n + n') → M
hmn : m + n' ≤ n + 1
⊢ (mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) φ).Realize v xs ↔
    φ.Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n')
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
n n' m : ℕ
v : α → M
n✝ : ℕ
xs : Fin (n✝ + n') → M
hmn : m + n' ≤ n✝ + 1
⊢ (mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) falsum).Realize v xs ↔
    falsum.Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n')

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
n n' m : ℕ
v : α → M
n✝ : ℕ
t₁✝ t₂✝ : L.Term (α ⊕ Fin n✝)
xs : Fin (n✝ + n') → M
hmn : m + n' ≤ n✝ + 1
⊢ (mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) (equal t₁✝ t₂✝)).Realize v xs ↔
    (equal t₁✝ t₂✝).Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n')

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
n n' m : ℕ
v : α → M
n✝ l✝ : ℕ
R✝ : L.Relations l✝
ts✝ : Fin l✝ → L.Term (α ⊕ Fin n✝)
xs : Fin (n✝ + n') → M
hmn : m + n' ≤ n✝ + 1
⊢ (mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) (rel R✝ ts✝)).Realize v xs ↔
    (rel R✝ ts✝).Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n')

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
n n' m : ℕ
v : α → M
n✝ : ℕ
f₁✝ f₂✝ : L.BoundedFormula α n✝
ih1 :
  ∀ {xs : Fin (n✝ + n') → M},
    m + n' ≤ n✝ + 1 →
      ((mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) f₁✝).Realize v xs ↔
        f₁✝.Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n'))
ih2 :
  ∀ {xs : Fin (n✝ + n') → M},
    m + n' ≤ n✝ + 1 →
      ((mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) f₂✝).Realize v xs ↔
        f₂✝.Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n'))
xs : Fin (n✝ + n') → M
hmn : m + n' ≤ n✝ + 1
⊢ (mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) (f₁✝ ⟹ f₂✝)).Realize v xs ↔
    (f₁✝ ⟹ f₂✝).Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n')

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
n n' m : ℕ
v : α → M
k : ℕ
f✝ : L.BoundedFormula α (k + 1)
ih3 :
  ∀ {xs : Fin (k + 1 + n') → M},
    m + n' ≤ k + 1 + 1 →
      ((mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) f✝).Realize v xs ↔
        f✝.Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n'))
xs : Fin (k + n') → M
hmn : m + n' ≤ k + 1
⊢ (mapTermRel (fun k t => Term.liftAt n' m t) (fun x => id) (fun x => castLE ⋯) (∀'f✝)).Realize v xs ↔
    (∀'f✝).Realize v (xs ∘ fun i => if ↑i < m then castAdd n' i else i.addNat n')
tactic: induction' φ with _ _ _ _ _ _ _ _ _ _ _ ih1 ih2 k _ ih3