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

tactic: refine ⟨⟨⋃ i, DirectLimit.of L ι G f i '' Classical.choose (h i).out, ?_, ?_⟩⟩
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: exact Set.countable_iUnion fun i => Set.Countable.image (Classical.choose_spec (h i).out).1 _
state_before: 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
state_after: no goals

tactic: rw [eq_top_iff, Substructure.closure_unionᵢ]
state_before: 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 ⋯) = ⊤
state_after: 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)
⊢ ⊤ ≤ ⨆ i, (Substructure.closure L).toFun (⇑(of L ι G f i) '' Classical.choose ⋯)

tactic: simp_rw [← Embedding.coe_toHom, Substructure.closure_image]
state_before: 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)
⊢ ⊤ ≤ ⨆ i, (Substructure.closure L).toFun (⇑(of L ι G f i) '' Classical.choose ⋯)
state_after: 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)
⊢ ⊤ ≤ ⨆ i, Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯))

tactic: rw [le_iSup_iff]
state_before: 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)
⊢ ⊤ ≤ ⨆ i, Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯))
state_after: 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)
⊢ ∀ (b : L.Substructure (DirectLimit G f)),
    (∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ b) → ⊤ ≤ b

tactic: intro S hS x _
state_before: 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)
⊢ ∀ (b : L.Substructure (DirectLimit G f)),
    (∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ b) → ⊤ ≤ b
state_after: 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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
⊢ x ∈ S

tactic: let out := Quotient.out (s := DirectLimit.setoid G f)
state_before: 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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
⊢ x ∈ S
state_after: 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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
out : Quotient (setoid G f) → Σˣ f := Quotient.out
⊢ x ∈ S

tactic: refine hS (out x).1 ⟨(out x).2, ?_, ?_⟩
state_before: 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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
out : Quotient (setoid G f) → Σˣ f := Quotient.out
⊢ x ∈ S
state_after: case refine_2.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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
out : Quotient (setoid G f) → Σˣ f := Quotient.out
⊢ (out x).snd ∈ ↑((Substructure.closure L).toFun (Classical.choose ⋯))

case refine_2.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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
out : Quotient (setoid G f) → Σˣ f := Quotient.out
⊢ (of L ι G f (out x).fst).toHom (out x).snd = x

tactic: rw [(Classical.choose_spec (h (out x).1).out).2]
state_before: case refine_2.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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
out : Quotient (setoid G f) → Σˣ f := Quotient.out
⊢ (out x).snd ∈ ↑((Substructure.closure L).toFun (Classical.choose ⋯))
state_after: case refine_2.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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
out : Quotient (setoid G f) → Σˣ f := Quotient.out
⊢ (out x).snd ∈ ↑⊤

tactic: trivial
state_before: case refine_2.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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
out : Quotient (setoid G f) → Σˣ f := Quotient.out
⊢ (out x).snd ∈ ↑⊤
state_after: no goals

tactic: simp only [out, Embedding.coe_toHom, DirectLimit.of_apply, Sigma.eta, Quotient.out_eq]
state_before: case refine_2.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)
S : L.Substructure (DirectLimit G f)
hS : ∀ (i : ι), Substructure.map (of L ι G f i).toHom ((Substructure.closure L).toFun (Classical.choose ⋯)) ≤ S
x : DirectLimit G f
a✝ : x ∈ ⊤
out : Quotient (setoid G f) → Σˣ f := Quotient.out
⊢ (of L ι G f (out x).fst).toHom (out x).snd = x
state_after: no goals