Theorem: FirstOrder.Language.Embedding.isElementary_of_exists
File: Mathlib/ModelTheory/ElementaryMaps.lean

tactic: suffices h :
  ∀ (n : ℕ) (φ : L.BoundedFormula Empty n) (xs : Fin n → M),
    φ.Realize (f ∘ default) (f ∘ xs) ↔ φ.Realize default xs
state_before: L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
⊢ ∀ {n : ℕ} (φ : Formula L (Fin n)) (x : Fin n → M), Formula.Realize φ (↑f ∘ x) ↔ Formula.Realize φ x

tactic: refine' fun n φ => φ.recOn _ _ _ _ _
state_before: case h
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
⊢ ∀ (n : ℕ) (φ : BoundedFormula L Empty n) (xs : Fin n → M),
    BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs

tactic: intro n φ x
state_before: L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
h :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty n) (xs : Fin n → M),
    BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
⊢ ∀ {n : ℕ} (φ : Formula L (Fin n)) (x : Fin n → M), Formula.Realize φ (↑f ∘ x) ↔ Formula.Realize φ x

tactic: refine' φ.realize_relabel_sum_inr.symm.trans (_root_.trans (h n _ _) φ.realize_relabel_sum_inr)
state_before: L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
h :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty n) (xs : Fin n → M),
    BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
n : ℕ
φ : Formula L (Fin n)
x : Fin n → M
⊢ Formula.Realize φ (↑f ∘ x) ↔ Formula.Realize φ x

tactic: exact fun {_} _ => Iff.rfl
state_before: case h.refine'_1
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n : ℕ
φ : BoundedFormula L Empty n
⊢ ∀ {n : ℕ} (xs : Fin n → M),
    BoundedFormula.Realize BoundedFormula.falsum (↑f ∘ default) (↑f ∘ xs) ↔
      BoundedFormula.Realize BoundedFormula.falsum default xs

tactic: intros
state_before: case h.refine'_2
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n : ℕ
φ : BoundedFormula L Empty n
⊢ ∀ {n : ℕ} (t₁ t₂ : Term L (Empty ⊕ Fin n)) (xs : Fin n → M),
    BoundedFormula.Realize (BoundedFormula.equal t₁ t₂) (↑f ∘ default) (↑f ∘ xs) ↔
      BoundedFormula.Realize (BoundedFormula.equal t₁ t₂) default xs

tactic: simp [BoundedFormula.Realize, ← Sum.comp_elim, Embedding.realize_term]
state_before: case h.refine'_2
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n : ℕ
φ : BoundedFormula L Empty n
n✝ : ℕ
t₁✝ t₂✝ : Term L (Empty ⊕ Fin n✝)
xs✝ : Fin n✝ → M
⊢ BoundedFormula.Realize (BoundedFormula.equal t₁✝ t₂✝) (↑f ∘ default) (↑f ∘ xs✝) ↔
    BoundedFormula.Realize (BoundedFormula.equal t₁✝ t₂✝) default xs✝

tactic: intros
state_before: case h.refine'_3
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n : ℕ
φ : BoundedFormula L Empty n
⊢ ∀ {n l : ℕ} (R : Relations L l) (ts : Fin l → Term L (Empty ⊕ Fin n)) (xs : Fin n → M),
    BoundedFormula.Realize (BoundedFormula.rel R ts) (↑f ∘ default) (↑f ∘ xs) ↔
      BoundedFormula.Realize (BoundedFormula.rel R ts) default xs

tactic: simp [BoundedFormula.Realize, ← Sum.comp_elim, Embedding.realize_term]
state_before: case h.refine'_3
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n : ℕ
φ : BoundedFormula L Empty n
n✝ l✝ : ℕ
R✝ : Relations L l✝
ts✝ : Fin l✝ → Term L (Empty ⊕ Fin n✝)
xs✝ : Fin n✝ → M
⊢ BoundedFormula.Realize (BoundedFormula.rel R✝ ts✝) (↑f ∘ default) (↑f ∘ xs✝) ↔
    BoundedFormula.Realize (BoundedFormula.rel R✝ ts✝) default xs✝

tactic: erw [map_rel f]
state_before: case h.refine'_3
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n : ℕ
φ : BoundedFormula L Empty n
n✝ l✝ : ℕ
R✝ : Relations L l✝
ts✝ : Fin l✝ → Term L (Empty ⊕ Fin n✝)
xs✝ : Fin n✝ → M
⊢ (RelMap R✝ fun i => ↑f (Term.realize (Sum.elim default xs✝) (ts✝ i))) ↔
    RelMap R✝ fun i => Term.realize (Sum.elim default xs✝) (ts✝ i)

tactic: intro _ _ _ ih1 ih2 _
state_before: case h.refine'_4
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n : ℕ
φ : BoundedFormula L Empty n
⊢ ∀ {n : ℕ} (f₁ f₂ : BoundedFormula L Empty n),
    (∀ (xs : Fin n → M), BoundedFormula.Realize f₁ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize f₁ default xs) →
      (∀ (xs : Fin n → M), BoundedFormula.Realize f₂ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize f₂ default xs) →
        ∀ (xs : Fin n → M),
          BoundedFormula.Realize (f₁ ⟹ f₂) (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize (f₁ ⟹ f₂) default xs

tactic: simp [ih1, ih2]
state_before: case h.refine'_4
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n : ℕ
φ : BoundedFormula L Empty n
n✝ : ℕ
f₁✝ f₂✝ : BoundedFormula L Empty n✝
ih1 : ∀ (xs : Fin n✝ → M), BoundedFormula.Realize f₁✝ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize f₁✝ default xs
ih2 : ∀ (xs : Fin n✝ → M), BoundedFormula.Realize f₂✝ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize f₂✝ default xs
xs✝ : Fin n✝ → M
⊢ BoundedFormula.Realize (f₁✝ ⟹ f₂✝) (↑f ∘ default) (↑f ∘ xs✝) ↔ BoundedFormula.Realize (f₁✝ ⟹ f₂✝) default xs✝

tactic: intro n φ ih xs
state_before: case h.refine'_5
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n : ℕ
φ : BoundedFormula L Empty n
⊢ ∀ {n : ℕ} (f_1 : BoundedFormula L Empty (n + 1)),
    (∀ (xs : Fin (n + 1) → M),
        BoundedFormula.Realize f_1 (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize f_1 default xs) →
      ∀ (xs : Fin n → M),
        BoundedFormula.Realize (∀'f_1) (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize (∀'f_1) default xs

tactic: simp only [BoundedFormula.realize_all]
state_before: case h.refine'_5
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
⊢ BoundedFormula.Realize (∀'φ) (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize (∀'φ) default xs

tactic: refine' ⟨fun h a => _, _⟩
state_before: case h.refine'_5
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
⊢ (∀ (a : N), BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)) ↔
    ∀ (a : M), BoundedFormula.Realize φ default (Fin.snoc xs a)

tactic: rw [← ih, Fin.comp_snoc]
state_before: case h.refine'_5.refine'_1
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
h : ∀ (a : N), BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)
a : M
⊢ BoundedFormula.Realize φ default (Fin.snoc xs a)

tactic: exact h (f a)
state_before: case h.refine'_5.refine'_1
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
h : ∀ (a : N), BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)
a : M
⊢ BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) (↑f a))

tactic: contrapose!
state_before: case h.refine'_5.refine'_2
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
⊢ (∀ (a : M), BoundedFormula.Realize φ default (Fin.snoc xs a)) →
    ∀ (a : N), BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)

tactic: rintro ⟨a, ha⟩
state_before: case h.refine'_5.refine'_2
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
⊢ (∃ a, ¬BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)) →
    ∃ a, ¬BoundedFormula.Realize φ default (Fin.snoc xs a)

tactic: obtain ⟨b, hb⟩ := htv n φ.not xs a (by
    rw [BoundedFormula.realize_not, ← Unique.eq_default (f ∘ default)]
    exact ha)
state_before: case h.refine'_5.refine'_2.intro
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
a : N
ha : ¬BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)
⊢ ∃ a, ¬BoundedFormula.Realize φ default (Fin.snoc xs a)

tactic: rw [BoundedFormula.realize_not, ← Unique.eq_default (f ∘ default)]
state_before: L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
a : N
ha : ¬BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)
⊢ BoundedFormula.Realize (∼φ) default (Fin.snoc (↑f ∘ xs) a)

tactic: exact ha
state_before: L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
a : N
ha : ¬BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)
⊢ ¬BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)

tactic: refine' ⟨b, fun h => hb (Eq.mp _ ((ih _).2 h))⟩
state_before: case h.refine'_5.refine'_2.intro.intro
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
a : N
ha : ¬BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)
b : M
hb : BoundedFormula.Realize (∼φ) default (Fin.snoc (↑f ∘ xs) (↑f b))
⊢ ∃ a, ¬BoundedFormula.Realize φ default (Fin.snoc xs a)

tactic: rw [Unique.eq_default (f ∘ default), Fin.comp_snoc]
state_before: case h.refine'_5.refine'_2.intro.intro
L : Language
M : Type u_3
N : Type u_4
P : Type ?u.353970
Q : Type ?u.353973
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
f : M ↪[L] N
htv :
  ∀ (n : ℕ) (φ : BoundedFormula L Empty (n + 1)) (x : Fin n → M) (a : N),
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) a) →
      ∃ b, BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ x) (↑f b))
n✝ : ℕ
φ✝ : BoundedFormula L Empty n✝
n : ℕ
φ : BoundedFormula L Empty (n + 1)
ih : ∀ (xs : Fin (n + 1) → M), BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ xs) ↔ BoundedFormula.Realize φ default xs
xs : Fin n → M
a : N
ha : ¬BoundedFormula.Realize φ (↑f ∘ default) (Fin.snoc (↑f ∘ xs) a)
b : M
hb : BoundedFormula.Realize (∼φ) default (Fin.snoc (↑f ∘ xs) (↑f b))
h : BoundedFormula.Realize φ default (Fin.snoc xs b)
⊢ BoundedFormula.Realize φ (↑f ∘ default) (↑f ∘ Fin.snoc xs b) =
    BoundedFormula.Realize φ default (Fin.snoc (↑f ∘ xs) (↑f b))