Theorem: extremePoints_prod
File: Mathlib/Analysis/Convex/Extreme.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
⊢ extremePoints 𝕜 (s ×ˢ t) = extremePoints 𝕜 s ×ˢ extremePoints 𝕜 t
state_after: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
x✝ : E × F
⊢ x✝ ∈ extremePoints 𝕜 (s ×ˢ t) ↔ x✝ ∈ extremePoints 𝕜 s ×ˢ extremePoints 𝕜 t
tactic: ext
state_before: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
x✝ : E × F
⊢ x✝ ∈ extremePoints 𝕜 (s ×ˢ t) ↔ x✝ ∈ extremePoints 𝕜 s ×ˢ extremePoints 𝕜 t
state_after: case h.refine_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
x✝ : E × F
hx : x✝ ∈ s ×ˢ t
h : ∀ ⦃x₁ : E × F⦄, x₁ ∈ s ×ˢ t → ∀ ⦃x₂ : E × F⦄, x₂ ∈ s ×ˢ t → x✝ ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝ ∧ x₂ = x✝
⊢ (∀ ⦃x₁ : E⦄, x₁ ∈ s → ∀ ⦃x₂ : E⦄, x₂ ∈ s → x✝.1 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.1 ∧ x₂ = x✝.1) ∧
    ∀ ⦃x₁ : F⦄, x₁ ∈ t → ∀ ⦃x₂ : F⦄, x₂ ∈ t → x✝.2 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.2 ∧ x₂ = x✝.2

case h.refine_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
x✝ : E × F
hx : x✝ ∈ s ×ˢ t
h :
  (∀ ⦃x₁ : E⦄, x₁ ∈ s → ∀ ⦃x₂ : E⦄, x₂ ∈ s → x✝.1 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.1 ∧ x₂ = x✝.1) ∧
    ∀ ⦃x₁ : F⦄, x₁ ∈ t → ∀ ⦃x₂ : F⦄, x₂ ∈ t → x✝.2 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.2 ∧ x₂ = x✝.2
⊢ ∀ ⦃x₁ : E × F⦄, x₁ ∈ s ×ˢ t → ∀ ⦃x₂ : E × F⦄, x₂ ∈ s ×ˢ t → x✝ ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝ ∧ x₂ = x✝
tactic: refine (and_congr_right fun hx ↦ ⟨fun h ↦ ?_, fun h ↦ ?_⟩).trans and_and_and_comm
state_before: case h.refine_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
x✝ : E × F
hx : x✝ ∈ s ×ˢ t
h : ∀ ⦃x₁ : E × F⦄, x₁ ∈ s ×ˢ t → ∀ ⦃x₂ : E × F⦄, x₂ ∈ s ×ˢ t → x✝ ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝ ∧ x₂ = x✝
⊢ (∀ ⦃x₁ : E⦄, x₁ ∈ s → ∀ ⦃x₂ : E⦄, x₂ ∈ s → x✝.1 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.1 ∧ x₂ = x✝.1) ∧
    ∀ ⦃x₁ : F⦄, x₁ ∈ t → ∀ ⦃x₂ : F⦄, x₂ ∈ t → x✝.2 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.2 ∧ x₂ = x✝.2

case h.refine_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
x✝ : E × F
hx : x✝ ∈ s ×ˢ t
h :
  (∀ ⦃x₁ : E⦄, x₁ ∈ s → ∀ ⦃x₂ : E⦄, x₂ ∈ s → x✝.1 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.1 ∧ x₂ = x✝.1) ∧
    ∀ ⦃x₁ : F⦄, x₁ ∈ t → ∀ ⦃x₂ : F⦄, x₂ ∈ t → x✝.2 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.2 ∧ x₂ = x✝.2
⊢ ∀ ⦃x₁ : E × F⦄, x₁ ∈ s ×ˢ t → ∀ ⦃x₂ : E × F⦄, x₂ ∈ s ×ˢ t → x✝ ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝ ∧ x₂ = x✝
state_after: case h.refine_1.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
x✝ : E × F
hx : x✝ ∈ s ×ˢ t
h : ∀ ⦃x₁ : E × F⦄, x₁ ∈ s ×ˢ t → ∀ ⦃x₂ : E × F⦄, x₂ ∈ s ×ˢ t → x✝ ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝ ∧ x₂ = x✝
⊢ ∀ ⦃x₁ : E⦄, x₁ ∈ s → ∀ ⦃x₂ : E⦄, x₂ ∈ s → x✝.1 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.1 ∧ x₂ = x✝.1

case h.refine_1.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
x✝ : E × F
hx : x✝ ∈ s ×ˢ t
h : ∀ ⦃x₁ : E × F⦄, x₁ ∈ s ×ˢ t → ∀ ⦃x₂ : E × F⦄, x₂ ∈ s ×ˢ t → x✝ ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝ ∧ x₂ = x✝
⊢ ∀ ⦃x₁ : F⦄, x₁ ∈ t → ∀ ⦃x₂ : F⦄, x₂ ∈ t → x✝.2 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.2 ∧ x₂ = x✝.2

case h.refine_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
π : ι → Type u_5
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : (i : ι) → AddCommGroup (π i)
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 F
inst✝ : (i : ι) → Module 𝕜 (π i)
A B : Set E
x : E
s : Set E
t : Set F
x✝ : E × F
hx : x✝ ∈ s ×ˢ t
h :
  (∀ ⦃x₁ : E⦄, x₁ ∈ s → ∀ ⦃x₂ : E⦄, x₂ ∈ s → x✝.1 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.1 ∧ x₂ = x✝.1) ∧
    ∀ ⦃x₁ : F⦄, x₁ ∈ t → ∀ ⦃x₂ : F⦄, x₂ ∈ t → x✝.2 ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝.2 ∧ x₂ = x✝.2
⊢ ∀ ⦃x₁ : E × F⦄, x₁ ∈ s ×ˢ t → ∀ ⦃x₂ : E × F⦄, x₂ ∈ s ×ˢ t → x✝ ∈ openSegment 𝕜 x₁ x₂ → x₁ = x✝ ∧ x₂ = x✝
tactic: constructor