Theorem: LO.FirstOrder.Semiformula.eval_exItr (Logic/FirstOrder/Basic/Semantics/Semantics.lean)

State before:
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
e : Fin n → M
p : Semiformula L μ (n + k)
⊢ (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
Tactic:
induction' k with k ih generalizing e <;> simp [*, Matrix.empty_eq, exItr_succ]
State after:
case succ
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∃ e' x, (Eval s (x :> Matrix.appendr e' e) ε) p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p

State before:
case succ
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∃ e' x, (Eval s (x :> Matrix.appendr e' e) ε) p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
Tactic:
constructor
State after:
case succ.mp
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∃ e' x, (Eval s (x :> Matrix.appendr e' e) ε) p) → ∃ e', (Eval s (Matrix.appendr e' e) ε) p

case succ.mpr
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∃ e', (Eval s (Matrix.appendr e' e) ε) p) → ∃ e' x, (Eval s (x :> Matrix.appendr e' e) ε) p

State before:
case succ.mp
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∃ e' x, (Eval s (x :> Matrix.appendr e' e) ε) p) → ∃ e', (Eval s (Matrix.appendr e' e) ε) p
Tactic:
rintro ⟨e', x, h⟩
State after:
case succ.mp.intro.intro
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
e' : Fin k → M
x : M
h : (Eval s (x :> Matrix.appendr e' e) ε) p
⊢ ∃ e', (Eval s (Matrix.appendr e' e) ε) p

State before:
case succ.mp.intro.intro
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
e' : Fin k → M
x : M
h : (Eval s (x :> Matrix.appendr e' e) ε) p
⊢ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
Tactic:
exact ⟨x :> e', by simpa using h⟩
State after:
no goals

State before:
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
e' : Fin k → M
x : M
h : (Eval s (x :> Matrix.appendr e' e) ε) p
⊢ (Eval s (Matrix.appendr (x :> e') e) ε) p
Tactic:
simpa using h
State after:
no goals

State before:
case succ.mpr
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∃ e', (Eval s (Matrix.appendr e' e) ε) p) → ∃ e' x, (Eval s (x :> Matrix.appendr e' e) ε) p
Tactic:
rintro ⟨e, h⟩
State after:
case succ.mpr.intro
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝¹ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e✝ : Fin n → M
p : Semiformula L μ (n + (k + 1))
e : Fin (k + 1) → M
h : (Eval s (Matrix.appendr e e✝) ε) p
⊢ ∃ e' x, (Eval s (x :> Matrix.appendr e' e✝) ε) p

State before:
case succ.mpr.intro
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝¹ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e✝ : Fin n → M
p : Semiformula L μ (n + (k + 1))
e : Fin (k + 1) → M
h : (Eval s (Matrix.appendr e e✝) ε) p
⊢ ∃ e' x, (Eval s (x :> Matrix.appendr e' e✝) ε) p
Tactic:
exact ⟨Matrix.vecTail e, Matrix.vecHead e,
  by rw [←Matrix.appendr_cons, Matrix.cons_head_tail]; exact h⟩
State after:
no goals

State before:
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝¹ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e✝ : Fin n → M
p : Semiformula L μ (n + (k + 1))
e : Fin (k + 1) → M
h : (Eval s (Matrix.appendr e e✝) ε) p
⊢ (Eval s (Matrix.vecHead e :> Matrix.appendr (Matrix.vecTail e) e✝) ε) p
Tactic:
rw [←Matrix.appendr_cons, Matrix.cons_head_tail]
State after:
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝¹ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e✝ : Fin n → M
p : Semiformula L μ (n + (k + 1))
e : Fin (k + 1) → M
h : (Eval s (Matrix.appendr e e✝) ε) p
⊢ (Eval s (Matrix.appendr e e✝) ε) p

State before:
n₂ : ℕ
L : Language
μ : Type v
μ₁ : Type v₁
μ₂ : Type v₂
M : Type w
s : Structure L M
n : ℕ
e✝¹ : Fin n → M
e₂ : Fin n₂ → M
ε : μ → M
ε₂ : μ₂ → M
k : ℕ
ih : ∀ {e : Fin n → M} {p : Semiformula L μ (n + k)}, (Eval s e ε) (∃^[k] p) ↔ ∃ e', (Eval s (Matrix.appendr e' e) ε) p
e✝ : Fin n → M
p : Semiformula L μ (n + (k + 1))
e : Fin (k + 1) → M
h : (Eval s (Matrix.appendr e e✝) ε) p
⊢ (Eval s (Matrix.appendr e e✝) ε) p
Tactic:
exact h
State after:
no goals