Theorem: LO.FirstOrder.Semiformula.eval_univItr (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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
Tactic:
induction' k with k ih generalizing e <;> simp [*, Matrix.empty_eq, univItr_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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∀ (e' : Fin k → M) (x : M), (Eval s (x :> Matrix.appendr e' e) ε) p) ↔
    ∀ (e' : Fin (k + 1) → M), (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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∀ (e' : Fin k → M) (x : M), (Eval s (x :> Matrix.appendr e' e) ε) p) ↔
    ∀ (e' : Fin (k + 1) → M), (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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∀ (e' : Fin k → M) (x : M), (Eval s (x :> Matrix.appendr e' e) ε) p) →
    ∀ (e' : Fin (k + 1) → M), (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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∀ (e' : Fin (k + 1) → M), (Eval s (Matrix.appendr e' e) ε) p) →
    ∀ (e' : Fin k → M) (x : M), (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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∀ (e' : Fin k → M) (x : M), (Eval s (x :> Matrix.appendr e' e) ε) p) →
    ∀ (e' : Fin (k + 1) → M), (Eval s (Matrix.appendr e' e) ε) p
Tactic:
intro h e'
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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
h : ∀ (e' : Fin k → M) (x : M), (Eval s (x :> Matrix.appendr e' e) ε) p
e' : Fin (k + 1) → M
⊢ (Eval s (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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
h : ∀ (e' : Fin k → M) (x : M), (Eval s (x :> Matrix.appendr e' e) ε) p
e' : Fin (k + 1) → M
⊢ (Eval s (Matrix.appendr e' e) ε) p
Tactic:
exact Eval.of_eq (h (Matrix.vecTail e') (Matrix.vecHead e'))
  (by rw [←Matrix.appendr_cons, Matrix.cons_head_tail]) rfl
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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
h : ∀ (e' : Fin k → M) (x : M), (Eval s (x :> Matrix.appendr e' e) ε) p
e' : Fin (k + 1) → M
⊢ Matrix.vecHead e' :> Matrix.appendr (Matrix.vecTail e') e = Matrix.appendr e' e
Tactic:
rw [←Matrix.appendr_cons, Matrix.cons_head_tail]
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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
⊢ (∀ (e' : Fin (k + 1) → M), (Eval s (Matrix.appendr e' e) ε) p) →
    ∀ (e' : Fin k → M) (x : M), (Eval s (x :> Matrix.appendr e' e) ε) p
Tactic:
intro h e' x
State after:
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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
h : ∀ (e' : Fin (k + 1) → M), (Eval s (Matrix.appendr e' e) ε) p
e' : Fin k → M
x : M
⊢ (Eval s (x :> Matrix.appendr e' e) ε) p

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' : Fin k → M), (Eval s (Matrix.appendr e' e) ε) p
e : Fin n → M
p : Semiformula L μ (n + (k + 1))
h : ∀ (e' : Fin (k + 1) → M), (Eval s (Matrix.appendr e' e) ε) p
e' : Fin k → M
x : M
⊢ (Eval s (x :> Matrix.appendr e' e) ε) p
Tactic:
simpa using h (x :> e')
State after:
no goals