Theorem: SimpleGraph.isClique_map_iff_of_nontrivial
File: Mathlib/Combinatorics/SimpleGraph/Clique.lean

tactic: refine ⟨fun h ↦ ⟨f ⁻¹' t, ?_, ?_⟩, by rintro ⟨x, hs, rfl⟩; exact hs.map⟩
state_before: α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
⊢ (SimpleGraph.map f G).IsClique t ↔ ∃ s, G.IsClique s ∧ ⇑f '' s = t
state_after: case refine_1
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
⊢ G.IsClique (⇑f ⁻¹' t)

case refine_2
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
⊢ ⇑f '' (⇑f ⁻¹' t) = t

tactic: rw [Set.image_preimage_eq_iff]
state_before: case refine_2
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
⊢ ⇑f '' (⇑f ⁻¹' t) = t
state_after: case refine_2
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
⊢ t ⊆ Set.range ⇑f

tactic: intro x hxt
state_before: case refine_2
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
⊢ t ⊆ Set.range ⇑f
state_after: case refine_2
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : β
hxt : x ∈ t
⊢ x ∈ Set.range ⇑f

tactic: obtain ⟨y,hyt, hyne⟩ := ht.exists_ne x
state_before: case refine_2
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : β
hxt : x ∈ t
⊢ x ∈ Set.range ⇑f
state_after: case refine_2.intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : β
hxt : x ∈ t
y : β
hyt : y ∈ t
hyne : y ≠ x
⊢ x ∈ Set.range ⇑f

tactic: obtain ⟨u,v, -, rfl, rfl⟩ := h hyt hxt hyne
state_before: case refine_2.intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : β
hxt : x ∈ t
y : β
hyt : y ∈ t
hyne : y ≠ x
⊢ x ∈ Set.range ⇑f
state_after: case refine_2.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
u v : α
hyt : f u ∈ t
hxt : f v ∈ t
hyne : f u ≠ f v
⊢ f v ∈ Set.range ⇑f

tactic: exact Set.mem_range_self _
state_before: case refine_2.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
u v : α
hyt : f u ∈ t
hxt : f v ∈ t
hyne : f u ≠ f v
⊢ f v ∈ Set.range ⇑f
state_after: no goals

tactic: rintro ⟨x, hs, rfl⟩
state_before: α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
⊢ (∃ s, G.IsClique s ∧ ⇑f '' s = t) → (SimpleGraph.map f G).IsClique t
state_after: case intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t : Set α
a b : α
f : α ↪ β
x : Set α
hs : G.IsClique x
ht : (⇑f '' x).Nontrivial
⊢ (SimpleGraph.map f G).IsClique (⇑f '' x)

tactic: exact hs.map
state_before: case intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t : Set α
a b : α
f : α ↪ β
x : Set α
hs : G.IsClique x
ht : (⇑f '' x).Nontrivial
⊢ (SimpleGraph.map f G).IsClique (⇑f '' x)
state_after: no goals

tactic: rintro x (hx : f x ∈ t) y (hy : f y ∈ t) hne
state_before: case refine_1
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
⊢ G.IsClique (⇑f ⁻¹' t)
state_after: case refine_1
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : α
hx : f x ∈ t
y : α
hy : f y ∈ t
hne : x ≠ y
⊢ G.Adj x y

tactic: obtain ⟨u,v, huv, hux, hvy⟩ := h hx hy (by simpa)
state_before: case refine_1
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : α
hx : f x ∈ t
y : α
hy : f y ∈ t
hne : x ≠ y
⊢ G.Adj x y
state_after: case refine_1.intro.intro.intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : α
hx : f x ∈ t
y : α
hy : f y ∈ t
hne : x ≠ y
u v : α
huv : G.Adj u v
hux : f u = f x
hvy : f v = f y
⊢ G.Adj x y

tactic: rw [EmbeddingLike.apply_eq_iff_eq] at hux hvy
state_before: case refine_1.intro.intro.intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : α
hx : f x ∈ t
y : α
hy : f y ∈ t
hne : x ≠ y
u v : α
huv : G.Adj u v
hux : f u = f x
hvy : f v = f y
⊢ G.Adj x y
state_after: case refine_1.intro.intro.intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : α
hx : f x ∈ t
y : α
hy : f y ∈ t
hne : x ≠ y
u v : α
huv : G.Adj u v
hux : u = x
hvy : v = y
⊢ G.Adj x y

tactic: rwa [← hux, ← hvy]
state_before: case refine_1.intro.intro.intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : α
hx : f x ∈ t
y : α
hy : f y ∈ t
hne : x ≠ y
u v : α
huv : G.Adj u v
hux : u = x
hvy : v = y
⊢ G.Adj x y
state_after: no goals

tactic: simpa
state_before: α : Type u_1
β : Type u_2
G H : SimpleGraph α
s t✝ : Set α
a b : α
f : α ↪ β
t : Set β
ht : t.Nontrivial
h : (SimpleGraph.map f G).IsClique t
x : α
hx : f x ∈ t
y : α
hy : f y ∈ t
hne : x ≠ y
⊢ f x ≠ f y
state_after: no goals