Theorem: Arith.Model.Definable.imp (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 : ℕ
Γ : SigmaPiDelta
h₁ : Definable L (Γ.alt, m) P
h₂ : Definable L (Γ, m) Q
⊢ Definable L (Γ, m) fun v => P v → Q v
Tactic:
match Γ with
| 𝚺 =>
  rcases h₁ with ⟨p₁, h₁⟩; rcases h₂ with ⟨p₂, h₂⟩
  exact ⟨p₁.negPi.or p₂, (h₁.negPi.or h₂).of_iff (fun x ↦ by simp [imp_iff_not_or])⟩
| 𝚷 =>
  rcases h₁ with ⟨p₁, h₁⟩; rcases h₂ with ⟨p₂, h₂⟩
  exact ⟨p₁.negSigma.or p₂, (h₁.negSigma.or h₂).of_iff (fun x ↦ by simp [imp_iff_not_or])⟩
| 𝚫 =>
  rcases h₁ with ⟨p₁, h₁⟩; rcases h₂ with ⟨p₂, h₂⟩; exact ⟨p₁ ⟶ p₂, h₁.imp h₂⟩
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 : ℕ
Γ : SigmaPiDelta
h₁ : Definable L (𝚺.alt, m) P
h₂ : Definable L (𝚺, m) Q
⊢ Definable L (𝚺, m) fun v => P v → Q v
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 : ℕ
Γ : SigmaPiDelta
h₂ : Definable L (𝚺, m) Q
p₁ : HSemiformula L M k (𝚺.alt, m)
h₁ : DefinedWithParam P p₁
⊢ Definable L (𝚺, m) fun v => P v → Q v

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 : ℕ
Γ : SigmaPiDelta
h₂ : Definable L (𝚺, m) Q
p₁ : HSemiformula L M k (𝚺.alt, m)
h₁ : DefinedWithParam P p₁
⊢ Definable L (𝚺, m) fun v => P v → Q v
Tactic:
rcases h₂ with ⟨p₂, h₂⟩
State after:
case mk.intro.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 : ℕ
Γ : SigmaPiDelta
p₁ : HSemiformula L M k (𝚺.alt, m)
h₁ : DefinedWithParam P p₁
p₂ : HSemiformula L M k (𝚺, m)
h₂ : DefinedWithParam Q p₂
⊢ Definable L (𝚺, m) fun v => P v → Q v

State before:
case mk.intro.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 : ℕ
Γ : SigmaPiDelta
p₁ : HSemiformula L M k (𝚺.alt, m)
h₁ : DefinedWithParam P p₁
p₂ : HSemiformula L M k (𝚺, m)
h₂ : DefinedWithParam Q p₂
⊢ Definable L (𝚺, m) fun v => P v → Q v
Tactic:
exact ⟨p₁.negPi.or p₂, (h₁.negPi.or h₂).of_iff (fun x ↦ by simp [imp_iff_not_or])⟩
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 : ℕ
Γ : SigmaPiDelta
p₁ : HSemiformula L M k (𝚺.alt, m)
h₁ : DefinedWithParam P p₁
p₂ : HSemiformula L M k (𝚺, m)
h₂ : DefinedWithParam Q p₂
x : Fin k → M
⊢ P x → Q x ↔ ¬P x ∨ Q x
Tactic:
simp [imp_iff_not_or]
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 : ℕ
Γ : SigmaPiDelta
h₁ : Definable L (𝚷.alt, m) P
h₂ : Definable L (𝚷, m) Q
⊢ Definable L (𝚷, m) fun v => P v → Q v
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 : ℕ
Γ : SigmaPiDelta
h₂ : Definable L (𝚷, m) Q
p₁ : HSemiformula L M k (𝚷.alt, m)
h₁ : DefinedWithParam P p₁
⊢ Definable L (𝚷, m) fun v => P v → Q v

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 : ℕ
Γ : SigmaPiDelta
h₂ : Definable L (𝚷, m) Q
p₁ : HSemiformula L M k (𝚷.alt, m)
h₁ : DefinedWithParam P p₁
⊢ Definable L (𝚷, m) fun v => P v → Q v
Tactic:
rcases h₂ with ⟨p₂, h₂⟩
State after:
case mk.intro.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 : ℕ
Γ : SigmaPiDelta
p₁ : HSemiformula L M k (𝚷.alt, m)
h₁ : DefinedWithParam P p₁
p₂ : HSemiformula L M k (𝚷, m)
h₂ : DefinedWithParam Q p₂
⊢ Definable L (𝚷, m) fun v => P v → Q v

State before:
case mk.intro.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 : ℕ
Γ : SigmaPiDelta
p₁ : HSemiformula L M k (𝚷.alt, m)
h₁ : DefinedWithParam P p₁
p₂ : HSemiformula L M k (𝚷, m)
h₂ : DefinedWithParam Q p₂
⊢ Definable L (𝚷, m) fun v => P v → Q v
Tactic:
exact ⟨p₁.negSigma.or p₂, (h₁.negSigma.or h₂).of_iff (fun x ↦ by simp [imp_iff_not_or])⟩
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 : ℕ
Γ : SigmaPiDelta
p₁ : HSemiformula L M k (𝚷.alt, m)
h₁ : DefinedWithParam P p₁
p₂ : HSemiformula L M k (𝚷, m)
h₂ : DefinedWithParam Q p₂
x : Fin k → M
⊢ P x → Q x ↔ ¬P x ∨ Q x
Tactic:
simp [imp_iff_not_or]
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 : ℕ
Γ : SigmaPiDelta
h₁ : Definable L (𝚫.alt, m) P
h₂ : Definable L (𝚫, m) Q
⊢ Definable L (𝚫, m) fun v => P v → Q v
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 : ℕ
Γ : SigmaPiDelta
h₂ : Definable L (𝚫, m) Q
p₁ : HSemiformula L M k (𝚫.alt, m)
h₁ : DefinedWithParam P p₁
⊢ Definable L (𝚫, m) fun v => P v → Q v

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 : ℕ
Γ : SigmaPiDelta
h₂ : Definable L (𝚫, m) Q
p₁ : HSemiformula L M k (𝚫.alt, m)
h₁ : DefinedWithParam P p₁
⊢ Definable L (𝚫, m) fun v => P v → Q v
Tactic:
rcases h₂ with ⟨p₂, h₂⟩
State after:
case mk.intro.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 : ℕ
Γ : SigmaPiDelta
p₁ : HSemiformula L M k (𝚫.alt, m)
h₁ : DefinedWithParam P p₁
p₂ : HSemiformula L M k (𝚫, m)
h₂ : DefinedWithParam Q p₂
⊢ Definable L (𝚫, m) fun v => P v → Q v

State before:
case mk.intro.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 : ℕ
Γ : SigmaPiDelta
p₁ : HSemiformula L M k (𝚫.alt, m)
h₁ : DefinedWithParam P p₁
p₂ : HSemiformula L M k (𝚫, m)
h₂ : DefinedWithParam Q p₂
⊢ Definable L (𝚫, m) fun v => P v → Q v
Tactic:
exact ⟨p₁ ⟶ p₂, h₁.imp h₂⟩
State after:
no goals