Theorem: FirstOrder.Language.card_functions_sum_skolem₁
File: Mathlib/ModelTheory/Skolem.lean

tactic: simp only [card_functions_sum, skolem₁_Functions, mk_sigma, sum_add_distrib']
state_before: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ #((n : ℕ) × (L.sum L.skolem₁).Functions n) = #((n : ℕ) × L.BoundedFormula Empty (n + 1))
state_after: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ ((sum fun i => lift.{max u v, u} #(L.Functions i)) +
      sum fun i => lift.{u, max u v} #(L.BoundedFormula Empty (i + 1))) =
    sum fun i => #(L.BoundedFormula Empty (i + 1))

tactic: conv_lhs => enter [2, 1, i]; rw [lift_id'.{u, v}]
state_before: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ ((sum fun i => lift.{max u v, u} #(L.Functions i)) +
      sum fun i => lift.{u, max u v} #(L.BoundedFormula Empty (i + 1))) =
    sum fun i => #(L.BoundedFormula Empty (i + 1))
state_after: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ ((sum fun i => lift.{max u v, u} #(L.Functions i)) + sum fun i => #(L.BoundedFormula Empty (i + 1))) =
    sum fun i => #(L.BoundedFormula Empty (i + 1))

tactic: rw [add_comm, add_eq_max, max_eq_left]
state_before: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ ((sum fun i => lift.{max u v, u} #(L.Functions i)) + sum fun i => #(L.BoundedFormula Empty (i + 1))) =
    sum fun i => #(L.BoundedFormula Empty (i + 1))
state_after: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ (sum fun i => lift.{max u v, u} #(L.Functions i)) ≤ sum fun i => #(L.BoundedFormula Empty (i + 1))

L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ ℵ₀ ≤ sum fun i => #(L.BoundedFormula Empty (i + 1))

tactic: refine sum_le_sum _ _ fun n => ?_
state_before: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ (sum fun i => lift.{max u v, u} #(L.Functions i)) ≤ sum fun i => #(L.BoundedFormula Empty (i + 1))
state_after: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
n : ℕ
⊢ lift.{max u v, u} #(L.Functions n) ≤ #(L.BoundedFormula Empty (n + 1))

tactic: rw [← lift_le.{_, max u v}, lift_lift, lift_mk_le.{v}]
state_before: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
n : ℕ
⊢ lift.{max u v, u} #(L.Functions n) ≤ #(L.BoundedFormula Empty (n + 1))
state_after: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
n : ℕ
⊢ Nonempty (L.Functions n ↪ L.BoundedFormula Empty (n + 1))

tactic: refine ⟨⟨fun f => (func f default).bdEqual (func f default), fun f g h => ?_⟩⟩
state_before: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
n : ℕ
⊢ Nonempty (L.Functions n ↪ L.BoundedFormula Empty (n + 1))
state_after: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
n : ℕ
f g : L.Functions n
h : (fun f => func f default =' func f default) f = (fun f => func f default =' func f default) g
⊢ f = g

tactic: rcases h with ⟨rfl, ⟨rfl⟩⟩
state_before: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
n : ℕ
f g : L.Functions n
h : (fun f => func f default =' func f default) f = (fun f => func f default =' func f default) g
⊢ f = g
state_after: case refl
L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
n : ℕ
f : L.Functions n
⊢ f = f

tactic: rfl
state_before: case refl
L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
n : ℕ
f : L.Functions n
⊢ f = f
state_after: no goals

tactic: rw [← mk_sigma]
state_before: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ ℵ₀ ≤ sum fun i => #(L.BoundedFormula Empty (i + 1))
state_after: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ ℵ₀ ≤ #((i : ℕ) × L.BoundedFormula Empty (i + 1))

tactic: exact infinite_iff.1 (Infinite.of_injective (fun n => ⟨n, ⊥⟩) fun x y xy =>
  (Sigma.mk.inj_iff.1 xy).1)
state_before: L : Language
M : Type w
inst✝¹ : Nonempty M
inst✝ : L.Structure M
⊢ ℵ₀ ≤ #((i : ℕ) × L.BoundedFormula Empty (i + 1))
state_after: no goals