Theorem: SimpleGraph.mk'_apply_adj
File: Mathlib/Combinatorics/SimpleGraph/Basic.lean

Proof steps:
state_before: V : Type u
x : { adj // (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true }
v w : V
⊢ (fun v w => ↑x v w = true) v w → (fun v w => ↑x v w = true) w v
state_after: no goals
tactic: simp [x.2.1]
state_before: V : Type u
x : { adj // (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true }
v : V
⊢ ¬(fun v w => ↑x v w = true) v v
state_after: no goals
tactic: simp [x.2.2]
state_before: V : Type u
⊢ Injective fun x => { Adj := fun v w => ↑x v w = true, symm := ⋯, loopless := ⋯ }
state_after: case mk.mk
V : Type u
adj : V → V → Bool
property✝¹ : (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true
adj' : V → V → Bool
property✝ : (∀ (x y : V), adj' x y = adj' y x) ∧ ∀ (x : V), ¬adj' x x = true
⊢ (fun x => { Adj := fun v w => ↑x v w = true, symm := ⋯, loopless := ⋯ }) ⟨adj, property✝¹⟩ =
      (fun x => { Adj := fun v w => ↑x v w = true, symm := ⋯, loopless := ⋯ }) ⟨adj', property✝⟩ →
    ⟨adj, property✝¹⟩ = ⟨adj', property✝⟩
tactic: rintro ⟨adj, _⟩ ⟨adj', _⟩
state_before: case mk.mk
V : Type u
adj : V → V → Bool
property✝¹ : (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true
adj' : V → V → Bool
property✝ : (∀ (x y : V), adj' x y = adj' y x) ∧ ∀ (x : V), ¬adj' x x = true
⊢ (fun x => { Adj := fun v w => ↑x v w = true, symm := ⋯, loopless := ⋯ }) ⟨adj, property✝¹⟩ =
      (fun x => { Adj := fun v w => ↑x v w = true, symm := ⋯, loopless := ⋯ }) ⟨adj', property✝⟩ →
    ⟨adj, property✝¹⟩ = ⟨adj', property✝⟩
state_after: case mk.mk
V : Type u
adj : V → V → Bool
property✝¹ : (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true
adj' : V → V → Bool
property✝ : (∀ (x y : V), adj' x y = adj' y x) ∧ ∀ (x : V), ¬adj' x x = true
⊢ ((fun v w => adj v w = true) = fun v w => adj' v w = true) → adj = adj'
tactic: simp only [mk.injEq, Subtype.mk.injEq]
state_before: case mk.mk
V : Type u
adj : V → V → Bool
property✝¹ : (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true
adj' : V → V → Bool
property✝ : (∀ (x y : V), adj' x y = adj' y x) ∧ ∀ (x : V), ¬adj' x x = true
⊢ ((fun v w => adj v w = true) = fun v w => adj' v w = true) → adj = adj'
state_after: case mk.mk
V : Type u
adj : V → V → Bool
property✝¹ : (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true
adj' : V → V → Bool
property✝ : (∀ (x y : V), adj' x y = adj' y x) ∧ ∀ (x : V), ¬adj' x x = true
h : (fun v w => adj v w = true) = fun v w => adj' v w = true
⊢ adj = adj'
tactic: intro h
state_before: case mk.mk
V : Type u
adj : V → V → Bool
property✝¹ : (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true
adj' : V → V → Bool
property✝ : (∀ (x y : V), adj' x y = adj' y x) ∧ ∀ (x : V), ¬adj' x x = true
h : (fun v w => adj v w = true) = fun v w => adj' v w = true
⊢ adj = adj'
state_after: case mk.mk.h.h
V : Type u
adj : V → V → Bool
property✝¹ : (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true
adj' : V → V → Bool
property✝ : (∀ (x y : V), adj' x y = adj' y x) ∧ ∀ (x : V), ¬adj' x x = true
h : (fun v w => adj v w = true) = fun v w => adj' v w = true
v w : V
⊢ adj v w = adj' v w
tactic: funext v w
state_before: case mk.mk.h.h
V : Type u
adj : V → V → Bool
property✝¹ : (∀ (x y : V), adj x y = adj y x) ∧ ∀ (x : V), ¬adj x x = true
adj' : V → V → Bool
property✝ : (∀ (x y : V), adj' x y = adj' y x) ∧ ∀ (x : V), ¬adj' x x = true
h : (fun v w => adj v w = true) = fun v w => adj' v w = true
v w : V
⊢ adj v w = adj' v w
state_after: no goals
tactic: simpa [Bool.coe_iff_coe] using congr_fun₂ h v w