Theorem: Finset.Colex.toColex_le_toColex_iff_max'_mem
File: Mathlib/Combinatorics/Colex.lean

tactic: refine ⟨fun h hst ↦ ?_, fun h a has hat ↦ ?_⟩
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
⊢ { ofColex := s } ≤ { ofColex := t } ↔ ∀ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t
state_after: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
⊢ (s ∆ t).max' ⋯ ∈ t

case refine_2
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a✝ b : α
r : ℕ
h : ∀ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t
a : α
has : a ∈ { ofColex := s }.ofColex
hat : a ∉ { ofColex := t }.ofColex
⊢ ∃ b ∈ { ofColex := t }.ofColex, b ∉ { ofColex := s }.ofColex ∧ a ≤ b

tactic: set m := (s ∆ t).max' (symmDiff_nonempty.2 hst)
state_before: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
⊢ (s ∆ t).max' ⋯ ∈ t
state_after: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
m : α := (s ∆ t).max' ⋯
⊢ m ∈ t

tactic: by_contra hmt
state_before: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
m : α := (s ∆ t).max' ⋯
⊢ m ∈ t
state_after: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
m : α := (s ∆ t).max' ⋯
hmt : m ∉ t
⊢ False

tactic: have hms : m ∈ s := by simpa [mem_symmDiff, hmt] using max'_mem _ <| symmDiff_nonempty.2 hst
state_before: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
m : α := (s ∆ t).max' ⋯
hmt : m ∉ t
⊢ False
state_after: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
m : α := (s ∆ t).max' ⋯
hmt : m ∉ t
hms : m ∈ s
⊢ False

tactic: have ⟨b, hbt, hbs, hmb⟩ := h hms hmt
state_before: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
m : α := (s ∆ t).max' ⋯
hmt : m ∉ t
hms : m ∈ s
⊢ False
state_after: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b✝ : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
m : α := (s ∆ t).max' ⋯
hmt : m ∉ t
hms : m ∈ s
b : α
hbt : b ∈ { ofColex := t }.ofColex
hbs : b ∉ { ofColex := s }.ofColex
hmb : m ≤ b
⊢ False

tactic: exact lt_irrefl _ <| (max'_lt_iff _ _).1 (hmb.lt_of_ne <| ne_of_mem_of_not_mem hms hbs) _ <|
  mem_symmDiff.2 <| Or.inr ⟨hbt, hbs⟩
state_before: case refine_1
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b✝ : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
m : α := (s ∆ t).max' ⋯
hmt : m ∉ t
hms : m ∈ s
b : α
hbt : b ∈ { ofColex := t }.ofColex
hbs : b ∉ { ofColex := s }.ofColex
hmb : m ≤ b
⊢ False
state_after: no goals

tactic: simpa [mem_symmDiff, hmt] using max'_mem _ <| symmDiff_nonempty.2 hst
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
h : { ofColex := s } ≤ { ofColex := t }
hst : s ≠ t
m : α := (s ∆ t).max' ⋯
hmt : m ∉ t
⊢ m ∈ s
state_after: no goals

tactic: have hst : s ≠ t := ne_of_mem_of_not_mem' has hat
state_before: case refine_2
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a✝ b : α
r : ℕ
h : ∀ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t
a : α
has : a ∈ { ofColex := s }.ofColex
hat : a ∉ { ofColex := t }.ofColex
⊢ ∃ b ∈ { ofColex := t }.ofColex, b ∉ { ofColex := s }.ofColex ∧ a ≤ b
state_after: case refine_2
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a✝ b : α
r : ℕ
h : ∀ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t
a : α
has : a ∈ { ofColex := s }.ofColex
hat : a ∉ { ofColex := t }.ofColex
hst : s ≠ t
⊢ ∃ b ∈ { ofColex := t }.ofColex, b ∉ { ofColex := s }.ofColex ∧ a ≤ b

tactic: refine ⟨_, h hst, ?_, le_max' _ _ <| mem_symmDiff.2 <| Or.inl ⟨has, hat⟩⟩
state_before: case refine_2
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a✝ b : α
r : ℕ
h : ∀ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t
a : α
has : a ∈ { ofColex := s }.ofColex
hat : a ∉ { ofColex := t }.ofColex
hst : s ≠ t
⊢ ∃ b ∈ { ofColex := t }.ofColex, b ∉ { ofColex := s }.ofColex ∧ a ≤ b
state_after: case refine_2
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a✝ b : α
r : ℕ
h : ∀ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t
a : α
has : a ∈ { ofColex := s }.ofColex
hat : a ∉ { ofColex := t }.ofColex
hst : s ≠ t
⊢ (s ∆ t).max' ⋯ ∉ { ofColex := s }.ofColex

tactic: simpa [mem_symmDiff, h hst] using max'_mem _ <| symmDiff_nonempty.2 hst
state_before: case refine_2
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a✝ b : α
r : ℕ
h : ∀ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t
a : α
has : a ∈ { ofColex := s }.ofColex
hat : a ∉ { ofColex := t }.ofColex
hst : s ≠ t
⊢ (s ∆ t).max' ⋯ ∉ { ofColex := s }.ofColex
state_after: no goals