Theorem: FirstOrder.Language.DirectLimit.cg
File: Mathlib/ModelTheory/DirectLimit.lean

Proof steps:
state_before: L : Language
ι✝ : Type v
inst✝¹³ : Preorder ι✝
G✝ : ι✝ → Type w
inst✝¹² : (i : ι✝) → L.Structure (G✝ i)
f✝ : (i j : ι✝) → i ≤ j → G✝ i ↪[L] G✝ j
inst✝¹¹ : IsDirected ι✝ fun x x_1 => x ≤ x_1
inst✝¹⁰ : DirectedSystem G✝ fun i j h => ⇑(f✝ i j h)
inst✝⁹ : Nonempty ι✝
P : Type u₁
inst✝⁸ : L.Structure P
g✝ : (i : ι✝) → G✝ i ↪[L] P
Hg : ∀ (i j : ι✝) (hij : i ≤ j) (x : G✝ i), (g✝ j) ((f✝ i j hij) x) = (g✝ i) x
G' : ι✝ → Type w'
inst✝⁷ : (i : ι✝) → L.Structure (G' i)
f' : (i j : ι✝) → i ≤ j → G' i ↪[L] G' j
g : (i : ι✝) → G✝ i ≃[L] G' i
H_commuting : ∀ (i j : ι✝) (hij : i ≤ j) (x : G✝ i), (g j) ((f✝ i j hij) x) = (f' i j hij) ((g i) x)
inst✝⁶ : DirectedSystem G' fun i j h => ⇑(f' i j h)
ι : Type u_1
inst✝⁵ : Countable ι
inst✝⁴ : Preorder ι
inst✝³ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝² : Nonempty ι
G : ι → Type w
inst✝¹ : (i : ι) → L.Structure (G i)
f : (i j : ι) → i ≤ j → G i ↪[L] G j
h : ∀ (i : ι), CG L (G i)
inst✝ : DirectedSystem G fun i j h => ⇑(f i j h)
⊢ CG L (DirectLimit G f)
state_after: case refine_1
L : Language
ι✝ : Type v
inst✝¹³ : Preorder ι✝
G✝ : ι✝ → Type w
inst✝¹² : (i : ι✝) → L.Structure (G✝ i)
f✝ : (i j : ι✝) → i ≤ j → G✝ i ↪[L] G✝ j
inst✝¹¹ : IsDirected ι✝ fun x x_1 => x ≤ x_1
inst✝¹⁰ : DirectedSystem G✝ fun i j h => ⇑(f✝ i j h)
inst✝⁹ : Nonempty ι✝
P : Type u₁
inst✝⁸ : L.Structure P
g✝ : (i : ι✝) → G✝ i ↪[L] P
Hg : ∀ (i j : ι✝) (hij : i ≤ j) (x : G✝ i), (g✝ j) ((f✝ i j hij) x) = (g✝ i) x
G' : ι✝ → Type w'
inst✝⁷ : (i : ι✝) → L.Structure (G' i)
f' : (i j : ι✝) → i ≤ j → G' i ↪[L] G' j
g : (i : ι✝) → G✝ i ≃[L] G' i
H_commuting : ∀ (i j : ι✝) (hij : i ≤ j) (x : G✝ i), (g j) ((f✝ i j hij) x) = (f' i j hij) ((g i) x)
inst✝⁶ : DirectedSystem G' fun i j h => ⇑(f' i j h)
ι : Type u_1
inst✝⁵ : Countable ι
inst✝⁴ : Preorder ι
inst✝³ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝² : Nonempty ι
G : ι → Type w
inst✝¹ : (i : ι) → L.Structure (G i)
f : (i j : ι) → i ≤ j → G i ↪[L] G j
h : ∀ (i : ι), CG L (G i)
inst✝ : DirectedSystem G fun i j h => ⇑(f i j h)
⊢ (⋃ i, ⇑(of L ι G f i) '' Classical.choose ⋯).Countable

case refine_2
L : Language
ι✝ : Type v
inst✝¹³ : Preorder ι✝
G✝ : ι✝ → Type w
inst✝¹² : (i : ι✝) → L.Structure (G✝ i)
f✝ : (i j : ι✝) → i ≤ j → G✝ i ↪[L] G✝ j
inst✝¹¹ : IsDirected ι✝ fun x x_1 => x ≤ x_1
inst✝¹⁰ : DirectedSystem G✝ fun i j h => ⇑(f✝ i j h)
inst✝⁹ : Nonempty ι✝
P : Type u₁
inst✝⁸ : L.Structure P
g✝ : (i : ι✝) → G✝ i ↪[L] P
Hg : ∀ (i j : ι✝) (hij : i ≤ j) (x : G✝ i), (g✝ j) ((f✝ i j hij) x) = (g✝ i) x
G' : ι✝ → Type w'
inst✝⁷ : (i : ι✝) → L.Structure (G' i)
f' : (i j : ι✝) → i ≤ j → G' i ↪[L] G' j
g : (i : ι✝) → G✝ i ≃[L] G' i
H_commuting : ∀ (i j : ι✝) (hij : i ≤ j) (x : G✝ i), (g j) ((f✝ i j hij) x) = (f' i j hij) ((g i) x)
inst✝⁶ : DirectedSystem G' fun i j h => ⇑(f' i j h)
ι : Type u_1
inst✝⁵ : Countable ι
inst✝⁴ : Preorder ι
inst✝³ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝² : Nonempty ι
G : ι → Type w
inst✝¹ : (i : ι) → L.Structure (G i)
f : (i j : ι) → i ≤ j → G i ↪[L] G j
h : ∀ (i : ι), CG L (G i)
inst✝ : DirectedSystem G fun i j h => ⇑(f i j h)
⊢ (Substructure.closure L).toFun (⋃ i, ⇑(of L ι G f i) '' Classical.choose ⋯) = ⊤
tactic: refine ⟨⟨⋃ i, DirectLimit.of L ι G f i '' Classical.choose (h i).out, ?_, ?_⟩⟩