Theorem: SimpleGraph.IsTuranMaximal.degree_eq_of_not_adj
File: Mathlib/Combinatorics/SimpleGraph/Turan.lean

tactic: rw [IsTuranMaximal] at h
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
h : G.IsTuranMaximal r
hn : ¬G.Adj s t
⊢ G.degree s = G.degree t
state_after: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
h :
  G.CliqueFree (r + 1) ∧
    ∀ (H : SimpleGraph V) [inst : DecidableRel H.Adj], H.CliqueFree (r + 1) → H.edgeFinset.card ≤ G.edgeFinset.card
hn : ¬G.Adj s t
⊢ G.degree s = G.degree t

tactic: contrapose! h
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
h :
  G.CliqueFree (r + 1) ∧
    ∀ (H : SimpleGraph V) [inst : DecidableRel H.Adj], H.CliqueFree (r + 1) → H.edgeFinset.card ≤ G.edgeFinset.card
hn : ¬G.Adj s t
⊢ G.degree s = G.degree t
state_after: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
⊢ G.CliqueFree (r + 1) → ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card

tactic: intro cf
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
⊢ G.CliqueFree (r + 1) → ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
state_after: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
⊢ ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card

tactic: wlog hd : G.degree t < G.degree s generalizing G t s
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
⊢ ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
state_after: case inr
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
this :
  ∀ {G : SimpleGraph V} [inst : DecidableRel G.Adj] {s t : V},
    ¬G.Adj s t →
      G.degree s ≠ G.degree t →
        G.CliqueFree (r + 1) →
          G.degree t < G.degree s → ∃ H inst_1, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
hd : ¬G.degree t < G.degree s
⊢ ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card

V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
n r : ℕ
u : V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
s t : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
hd : G.degree t < G.degree s
⊢ ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card

tactic: use G.replaceVertex s t, inferInstance, cf.replaceVertex s t
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
n r : ℕ
u : V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
s t : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
hd : G.degree t < G.degree s
⊢ ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
state_after: case right
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
n r : ℕ
u : V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
s t : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
hd : G.degree t < G.degree s
⊢ G.edgeFinset.card < (G.replaceVertex s t).edgeFinset.card

tactic: have := G.card_edgeFinset_replaceVertex_of_not_adj hn
state_before: case right
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
n r : ℕ
u : V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
s t : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
hd : G.degree t < G.degree s
⊢ G.edgeFinset.card < (G.replaceVertex s t).edgeFinset.card
state_after: case right
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
n r : ℕ
u : V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
s t : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
hd : G.degree t < G.degree s
this : (G.replaceVertex s t).edgeFinset.card = G.edgeFinset.card + G.degree s - G.degree t
⊢ G.edgeFinset.card < (G.replaceVertex s t).edgeFinset.card

tactic: omega
state_before: case right
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
n r : ℕ
u : V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
s t : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
hd : G.degree t < G.degree s
this : (G.replaceVertex s t).edgeFinset.card = G.edgeFinset.card + G.degree s - G.degree t
⊢ G.edgeFinset.card < (G.replaceVertex s t).edgeFinset.card
state_after: no goals

tactic: replace hd : G.degree s < G.degree t := lt_of_le_of_ne (le_of_not_lt hd) h
state_before: case inr
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
this :
  ∀ {G : SimpleGraph V} [inst : DecidableRel G.Adj] {s t : V},
    ¬G.Adj s t →
      G.degree s ≠ G.degree t →
        G.CliqueFree (r + 1) →
          G.degree t < G.degree s → ∃ H inst_1, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
hd : ¬G.degree t < G.degree s
⊢ ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
state_after: case inr
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
this :
  ∀ {G : SimpleGraph V} [inst : DecidableRel G.Adj] {s t : V},
    ¬G.Adj s t →
      G.degree s ≠ G.degree t →
        G.CliqueFree (r + 1) →
          G.degree t < G.degree s → ∃ H inst_1, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
hd : G.degree s < G.degree t
⊢ ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card

tactic: exact this (by rwa [adj_comm] at hn) hd.ne' cf hd
state_before: case inr
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
this :
  ∀ {G : SimpleGraph V} [inst : DecidableRel G.Adj] {s t : V},
    ¬G.Adj s t →
      G.degree s ≠ G.degree t →
        G.CliqueFree (r + 1) →
          G.degree t < G.degree s → ∃ H inst_1, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
hd : G.degree s < G.degree t
⊢ ∃ H inst, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
state_after: no goals

tactic: rwa [adj_comm] at hn
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
s t u : V
hn : ¬G.Adj s t
h : G.degree s ≠ G.degree t
cf : G.CliqueFree (r + 1)
this :
  ∀ {G : SimpleGraph V} [inst : DecidableRel G.Adj] {s t : V},
    ¬G.Adj s t →
      G.degree s ≠ G.degree t →
        G.CliqueFree (r + 1) →
          G.degree t < G.degree s → ∃ H inst_1, H.CliqueFree (r + 1) ∧ G.edgeFinset.card < H.edgeFinset.card
hd : G.degree s < G.degree t
⊢ ¬G.Adj t s
state_after: no goals