Theorem: Arith.Model.DefinableFunction.graph_delta (Arithmetization/Definability/Hierarchy.lean)

State before:
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
m k : ℕ
f : (Fin k → M) → M
h : DefinableFunction L (𝚺, m) f
⊢ DefinableFunction L (𝚫, m) f
Tactic:
rcases h with ⟨p, h⟩
State after:
case mk.intro
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
m k : ℕ
f : (Fin k → M) → M
p : HSemiformula L M (k + 1) (𝚺, m)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
⊢ DefinableFunction L (𝚫, m) f

State before:
case mk.intro
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
m k : ℕ
f : (Fin k → M) → M
p : HSemiformula L M (k + 1) (𝚺, m)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
⊢ DefinableFunction L (𝚫, m) f
Tactic:
exact ⟨p.graphDelta, by
  cases' m with m <;> simp [HSemiformula.graphDelta]
  intro e; simp [Empty.eq_elim, h.df.iff]
  exact eq_comm, by
  intro v; simp [h.df.iff]⟩
State after:
no goals

State before:
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
m k : ℕ
f : (Fin k → M) → M
p : HSemiformula L M (k + 1) (𝚺, m)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
⊢ HSemiformula.ProperWithParamOn M p.graphDelta
Tactic:
cases' m with m <;> simp [HSemiformula.graphDelta]
State after:
case succ
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
k : ℕ
f : (Fin k → M) → M
m : ℕ
p : HSemiformula L M (k + 1) (𝚺, m + 1)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
⊢ HSemiformula.ProperWithParamOn M
    (p.mkDelta (HSemiformula.mkPi (“∀' (!((Rew.substs (#0 :> fun x => #x.succ.succ)).hom p.val) → #0 = #1)”) ⋯))

State before:
case succ
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
k : ℕ
f : (Fin k → M) → M
m : ℕ
p : HSemiformula L M (k + 1) (𝚺, m + 1)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
⊢ HSemiformula.ProperWithParamOn M
    (p.mkDelta (HSemiformula.mkPi (“∀' (!((Rew.substs (#0 :> fun x => #x.succ.succ)).hom p.val) → #0 = #1)”) ⋯))
Tactic:
intro e
State after:
case succ
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
k : ℕ
f : (Fin k → M) → M
m : ℕ
p : HSemiformula L M (k + 1) (𝚺, m + 1)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
e : Fin (k + 1) → M
⊢ (Semiformula.Evalm M e id)
      (p.mkDelta
            (HSemiformula.mkPi (“∀' (!((Rew.substs (#0 :> fun x => #x.succ.succ)).hom p.val) → #0 = #1)”)
              ⋯)).sigma.val ↔
    (Semiformula.Evalm M e id)
      (p.mkDelta
            (HSemiformula.mkPi (“∀' (!((Rew.substs (#0 :> fun x => #x.succ.succ)).hom p.val) → #0 = #1)”) ⋯)).pi.val

State before:
case succ
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
k : ℕ
f : (Fin k → M) → M
m : ℕ
p : HSemiformula L M (k + 1) (𝚺, m + 1)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
e : Fin (k + 1) → M
⊢ (Semiformula.Evalm M e id)
      (p.mkDelta
            (HSemiformula.mkPi (“∀' (!((Rew.substs (#0 :> fun x => #x.succ.succ)).hom p.val) → #0 = #1)”)
              ⋯)).sigma.val ↔
    (Semiformula.Evalm M e id)
      (p.mkDelta
            (HSemiformula.mkPi (“∀' (!((Rew.substs (#0 :> fun x => #x.succ.succ)).hom p.val) → #0 = #1)”) ⋯)).pi.val
Tactic:
simp [Empty.eq_elim, h.df.iff]
State after:
case succ
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
k : ℕ
f : (Fin k → M) → M
m : ℕ
p : HSemiformula L M (k + 1) (𝚺, m + 1)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
e : Fin (k + 1) → M
⊢ (e 0 = f fun x => e x.succ) ↔ (f fun x => e x.succ) = e 0

State before:
case succ
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
k : ℕ
f : (Fin k → M) → M
m : ℕ
p : HSemiformula L M (k + 1) (𝚺, m + 1)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
e : Fin (k + 1) → M
⊢ (e 0 = f fun x => e x.succ) ↔ (f fun x => e x.succ) = e 0
Tactic:
exact eq_comm
State after:
no goals

State before:
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
m k : ℕ
f : (Fin k → M) → M
p : HSemiformula L M (k + 1) (𝚺, m)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
⊢ FirstOrder.DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p.graphDelta.val
Tactic:
intro v
State after:
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
m k : ℕ
f : (Fin k → M) → M
p : HSemiformula L M (k + 1) (𝚺, m)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
v : Fin (k + 1) → M
⊢ (fun v => v 0 = f fun x => v x.succ) v ↔ (Semiformula.Evalm M v id) p.graphDelta.val

State before:
L : Language
inst✝⁹ : L.ORing
ξ : Type v
n : ℕ
M : Type u_1
inst✝⁸ : Zero M
inst✝⁷ : One M
inst✝⁶ : Add M
inst✝⁵ : Mul M
inst✝⁴ : LT M
inst✝³ : M ⊧ₘ* 𝐏𝐀⁻
inst✝² : Structure L M
inst✝¹ : Structure.ORing L M
inst✝ : Structure.Monotone L M
Γ : HierarchySymbol
k✝ : ℕ
P Q : (Fin k✝ → M) → Prop
m k : ℕ
f : (Fin k → M) → M
p : HSemiformula L M (k + 1) (𝚺, m)
h : DefinedWithParam (fun v => v 0 = f fun x => v x.succ) p
v : Fin (k + 1) → M
⊢ (fun v => v 0 = f fun x => v x.succ) v ↔ (Semiformula.Evalm M v id) p.graphDelta.val
Tactic:
simp [h.df.iff]
State after:
no goals