-- Mathlib/Dynamics/TopologicalEntropy/Semiconj.lean
theorem coverEntropy_image_of_comap (u : UniformSpace Y) {S : X → X} {T : Y → Y} {φ : X → Y}
    (h : Semiconj φ S T) (F : Set X) :
    coverEntropy T (φ '' F) = @coverEntropy X (comap φ u) S F

Proof state:
case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
⊢ coverEntropy S F ≤ coverEntropy T (φ '' F)

Tactic:
refine iSup₂_le fun U U_uni ↦ ?_

Result:
case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
U_uni : U ∈ 𝓤 X
⊢ coverEntropyEntourage S F U ≤ coverEntropy T (φ '' F)

Proof state:
case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
⊢ coverEntropyEntourage S F (Prod.map φ φ ⁻¹' V) ≤ coverEntropy S F

Tactic:
apply @coverEntropyEntourage_le_coverEntropy X (comap φ u) S F

Result:
case a.h
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
⊢ Prod.map φ φ ⁻¹' V ∈ 𝓤 X

Proof state:
case a.h
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
⊢ Prod.map φ φ ⁻¹' V ∈ 𝓤 X

Tactic:
rw [uniformity_comap φ, mem_comap]

Result:
case a.h
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
⊢ ∃ t ∈ 𝓤 Y, Prod.map φ φ ⁻¹' t ⊆ Prod.map φ φ ⁻¹' V

Proof state:
case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
U_uni : U ∈ 𝓤 X
⊢ coverEntropyEntourage S F U ≤ coverEntropy T (φ '' F)

Tactic:
simp only [uniformity_comap φ, mem_comap] at U_uni

Result:
case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
U_uni : ∃ t ∈ 𝓤 Y, Prod.map φ φ ⁻¹' t ⊆ U
⊢ coverEntropyEntourage S F U ≤ coverEntropy T (φ '' F)

Proof state:
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
⊢ coverEntropy T (φ '' F) = coverEntropy S F

Tactic:
apply le_antisymm

Result:
case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
⊢ coverEntropy T (φ '' F) ≤ coverEntropy S F

case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
⊢ coverEntropy S F ≤ coverEntropy T (φ '' F)

Proof state:
case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
U_uni : ∃ t ∈ 𝓤 Y, Prod.map φ φ ⁻¹' t ⊆ U
⊢ coverEntropyEntourage S F U ≤ coverEntropy T (φ '' F)

Tactic:
rcases U_uni with ⟨V, V_uni, V_sub⟩

Result:
case a.intro.intro
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
V_sub : Prod.map φ φ ⁻¹' V ⊆ U
⊢ coverEntropyEntourage S F U ≤ coverEntropy T (φ '' F)

Proof state:
case a.intro.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
V_sub : Prod.map φ φ ⁻¹' V ⊆ U
W : Set (Y × Y)
W_uni : W ∈ 𝓤 Y
W_symm : SymmetricRel W
W_V : W ○ W ⊆ V
⊢ (fun U => coverEntropyEntourage S F U) (Prod.map φ φ ⁻¹' (W ○ W)) ≤ coverEntropy T (φ '' F)

Tactic:
apply (le_coverEntropyEntourage_image h F W_symm).trans

Result:
case a.intro.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
V_sub : Prod.map φ φ ⁻¹' V ⊆ U
W : Set (Y × Y)
W_uni : W ∈ 𝓤 Y
W_symm : SymmetricRel W
W_V : W ○ W ⊆ V
⊢ coverEntropyEntourage T (φ '' F) W ≤ coverEntropy T (φ '' F)

Proof state:
case a.intro.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
V_sub : Prod.map φ φ ⁻¹' V ⊆ U
W : Set (Y × Y)
W_uni : W ∈ 𝓤 Y
W_symm : SymmetricRel W
W_V : W ○ W ⊆ V
⊢ coverEntropyEntourage T (φ '' F) W ≤ coverEntropy T (φ '' F)

Tactic:
exact coverEntropyEntourage_le_coverEntropy T (φ '' F) W_uni

Result:
no goals

Proof state:
case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
⊢ coverEntropy T (φ '' F) ≤ coverEntropy S F

Tactic:
refine iSup₂_le fun V V_uni ↦ (coverEntropyEntourage_image_le h F V).trans ?_

Result:
case a
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
⊢ coverEntropyEntourage S F (Prod.map φ φ ⁻¹' V) ≤ coverEntropy S F

Proof state:
case a.intro.intro
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
V_sub : Prod.map φ φ ⁻¹' V ⊆ U
⊢ coverEntropyEntourage S F U ≤ coverEntropy T (φ '' F)

Tactic:
rcases comp_symm_mem_uniformity_sets V_uni with ⟨W, W_uni, W_symm, W_V⟩

Result:
case a.intro.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
V_sub : Prod.map φ φ ⁻¹' V ⊆ U
W : Set (Y × Y)
W_uni : W ∈ 𝓤 Y
W_symm : SymmetricRel W
W_V : W ○ W ⊆ V
⊢ coverEntropyEntourage S F U ≤ coverEntropy T (φ '' F)

Proof state:
case a.h
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
⊢ ∃ t ∈ 𝓤 Y, Prod.map φ φ ⁻¹' t ⊆ Prod.map φ φ ⁻¹' V

Tactic:
exact ⟨V, V_uni, Subset.rfl⟩

Result:
no goals

Proof state:
case a.intro.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
V_sub : Prod.map φ φ ⁻¹' V ⊆ U
W : Set (Y × Y)
W_uni : W ∈ 𝓤 Y
W_symm : SymmetricRel W
W_V : W ○ W ⊆ V
⊢ coverEntropyEntourage S F U ≤ coverEntropy T (φ '' F)

Tactic:
apply (coverEntropyEntourage_antitone S F ((preimage_mono W_V).trans V_sub)).trans

Result:
case a.intro.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
u : UniformSpace Y
S : X → X
T : Y → Y
φ : X → Y
h : Semiconj φ S T
F : Set X
U : Set (X × X)
V : Set (Y × Y)
V_uni : V ∈ 𝓤 Y
V_sub : Prod.map φ φ ⁻¹' V ⊆ U
W : Set (Y × Y)
W_uni : W ∈ 𝓤 Y
W_symm : SymmetricRel W
W_V : W ○ W ⊆ V
⊢ (fun U => coverEntropyEntourage S F U) (Prod.map φ φ ⁻¹' (W ○ W)) ≤ coverEntropy T (φ '' F)