Theorem: isPreconnected_univ_pi
File: Mathlib/Topology/Connected.lean

tactic: rintro u v uo vo hsuv ⟨f, hfs, hfu⟩ ⟨g, hgs, hgv⟩
state_before: α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u v : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
⊢ IsPreconnected (pi univ s)

tactic: rcases exists_finset_piecewise_mem_of_mem_nhds (uo.mem_nhds hfu) g with ⟨I, hI⟩
state_before: case intro.intro.intro.intro
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: induction' I using Finset.induction_on with i I _ ihI
state_before: case intro.intro.intro.intro.intro
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I : Finset ι
hI : Finset.piecewise I f g ∈ u
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: refine' ⟨g, hgs, ⟨_, hgv⟩⟩
state_before: case intro.intro.intro.intro.intro.empty
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I : Finset ι
hI✝ : Finset.piecewise I f g ∈ u
hI : Finset.piecewise ∅ f g ∈ u
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: simpa using hI
state_before: case intro.intro.intro.intro.intro.empty
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I : Finset ι
hI✝ : Finset.piecewise I f g ∈ u
hI : Finset.piecewise ∅ f g ∈ u
⊢ g ∈ u

tactic: rw [Finset.piecewise_insert] at hI
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : Finset.piecewise (insert i I) f g ∈ u
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: have := I.piecewise_mem_set_pi hfs hgs
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: refine' (hsuv this).elim ihI fun h => _
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: set S := update (I.piecewise f g) i '' s i
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: have hsub : S ⊆ pi univ s := by
  refine' image_subset_iff.2 fun z hz => _
  rwa [update_preimage_univ_pi]
  exact fun j _ => this j trivial
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
S : Set ((a : ι) → π a) := update (Finset.piecewise I f g) i '' s i
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: have hconn : IsPreconnected S :=
  (hs i).image _ (continuous_const.update i continuous_id).continuousOn
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
S : Set ((a : ι) → π a) := update (Finset.piecewise I f g) i '' s i
hsub : S ⊆ pi univ s
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: have hSu : (S ∩ u).Nonempty := ⟨_, mem_image_of_mem _ (hfs _ trivial), hI⟩
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
S : Set ((a : ι) → π a) := update (Finset.piecewise I f g) i '' s i
hsub : S ⊆ pi univ s
hconn : IsPreconnected S
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: have hSv : (S ∩ v).Nonempty := ⟨_, ⟨_, this _ trivial, update_eq_self _ _⟩, h⟩
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
S : Set ((a : ι) → π a) := update (Finset.piecewise I f g) i '' s i
hsub : S ⊆ pi univ s
hconn : IsPreconnected S
hSu : Set.Nonempty (S ∩ u)
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: refine' (hconn u v uo vo (hsub.trans hsuv) hSu hSv).mono _
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
S : Set ((a : ι) → π a) := update (Finset.piecewise I f g) i '' s i
hsub : S ⊆ pi univ s
hconn : IsPreconnected S
hSu : Set.Nonempty (S ∩ u)
hSv : Set.Nonempty (S ∩ v)
⊢ Set.Nonempty (pi univ s ∩ (u ∩ v))

tactic: exact inter_subset_inter_left _ hsub
state_before: case intro.intro.intro.intro.intro.insert
α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
S : Set ((a : ι) → π a) := update (Finset.piecewise I f g) i '' s i
hsub : S ⊆ pi univ s
hconn : IsPreconnected S
hSu : Set.Nonempty (S ∩ u)
hSv : Set.Nonempty (S ∩ v)
⊢ S ∩ (u ∩ v) ⊆ pi univ s ∩ (u ∩ v)

tactic: refine' image_subset_iff.2 fun z hz => _
state_before: α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
S : Set ((a : ι) → π a) := update (Finset.piecewise I f g) i '' s i
⊢ S ⊆ pi univ s

tactic: rwa [update_preimage_univ_pi]
state_before: α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
S : Set ((a : ι) → π a) := update (Finset.piecewise I f g) i '' s i
z : π i
hz : z ∈ s i
⊢ z ∈ update (Finset.piecewise I f g) i ⁻¹' pi univ s

tactic: exact fun j _ => this j trivial
state_before: α : Type u
β : Type v
ι : Type u_2
π : ι → Type u_1
inst✝¹ : TopologicalSpace α
s✝ t u✝ v✝ : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : (i : ι) → Set (π i)
hs : ∀ (i : ι), IsPreconnected (s i)
u v : Set ((i : ι) → π i)
uo : IsOpen u
vo : IsOpen v
hsuv : pi univ s ⊆ u ∪ v
f : (i : ι) → π i
hfs : f ∈ pi univ s
hfu : f ∈ u
g : (i : ι) → π i
hgs : g ∈ pi univ s
hgv : g ∈ v
I✝ : Finset ι
hI✝ : Finset.piecewise I✝ f g ∈ u
i : ι
I : Finset ι
a✝ : ¬i ∈ I
ihI : Finset.piecewise I f g ∈ u → Set.Nonempty (pi univ s ∩ (u ∩ v))
hI : update (Finset.piecewise I f g) i (f i) ∈ u
this : Finset.piecewise I f g ∈ pi univ s
h : Finset.piecewise I f g ∈ v
S : Set ((a : ι) → π a) := update (Finset.piecewise I f g) i '' s i
z : π i
hz : z ∈ s i
⊢ ∀ (j : ι), j ≠ i → Finset.piecewise I f g j ∈ s j