Theorem: Profinite.NobelingProof.iso_map_bijective
File: Mathlib/Topology/Category/Profinite/Nobeling.lean

tactic: refine ⟨fun a b h ↦ ?_, fun a ↦ ?_⟩
state_before: I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
⊢ Function.Bijective ⇑(iso_map C J)
state_after: case refine_1
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : (iso_map C J) a = (iso_map C J) b
⊢ a = b

case refine_2
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a : ↑(IndexFunctor.obj C J)
⊢ ∃ a_1, (iso_map C J) a_1 = a

tactic: ext i
state_before: case refine_1
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : (iso_map C J) a = (iso_map C J) b
⊢ a = b
state_after: case refine_1.a.h
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : (iso_map C J) a = (iso_map C J) b
i : I
⊢ ↑a i = ↑b i

tactic: rw [Subtype.ext_iff] at h
state_before: case refine_1.a.h
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : (iso_map C J) a = (iso_map C J) b
i : I
⊢ ↑a i = ↑b i
state_after: case refine_1.a.h
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : ↑((iso_map C J) a) = ↑((iso_map C J) b)
i : I
⊢ ↑a i = ↑b i

tactic: by_cases hi : J i
state_before: case refine_1.a.h
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : ↑((iso_map C J) a) = ↑((iso_map C J) b)
i : I
⊢ ↑a i = ↑b i
state_after: case pos
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : ↑((iso_map C J) a) = ↑((iso_map C J) b)
i : I
hi : J i
⊢ ↑a i = ↑b i

case neg
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : ↑((iso_map C J) a) = ↑((iso_map C J) b)
i : I
hi : ¬J i
⊢ ↑a i = ↑b i

tactic: exact congr_fun h ⟨i, hi⟩
state_before: case pos
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : ↑((iso_map C J) a) = ↑((iso_map C J) b)
i : I
hi : J i
⊢ ↑a i = ↑b i
state_after: no goals

tactic: rcases a with ⟨_, c, hc, rfl⟩
state_before: case neg
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a b : ↑(π C J)
h : ↑((iso_map C J) a) = ↑((iso_map C J) b)
i : I
hi : ¬J i
⊢ ↑a i = ↑b i
state_after: case neg.mk.intro.intro
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
b : ↑(π C J)
i : I
hi : ¬J i
c : I → Bool
hc : c ∈ C
h : ↑((iso_map C J) ⟨Proj J c, ⋯⟩) = ↑((iso_map C J) b)
⊢ ↑⟨Proj J c, ⋯⟩ i = ↑b i

tactic: rcases b with ⟨_, d, hd, rfl⟩
state_before: case neg.mk.intro.intro
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
b : ↑(π C J)
i : I
hi : ¬J i
c : I → Bool
hc : c ∈ C
h : ↑((iso_map C J) ⟨Proj J c, ⋯⟩) = ↑((iso_map C J) b)
⊢ ↑⟨Proj J c, ⋯⟩ i = ↑b i
state_after: case neg.mk.intro.intro.mk.intro.intro
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
i : I
hi : ¬J i
c : I → Bool
hc : c ∈ C
d : I → Bool
hd : d ∈ C
h : ↑((iso_map C J) ⟨Proj J c, ⋯⟩) = ↑((iso_map C J) ⟨Proj J d, ⋯⟩)
⊢ ↑⟨Proj J c, ⋯⟩ i = ↑⟨Proj J d, ⋯⟩ i

tactic: simp only [Proj, if_neg hi]
state_before: case neg.mk.intro.intro.mk.intro.intro
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
i : I
hi : ¬J i
c : I → Bool
hc : c ∈ C
d : I → Bool
hd : d ∈ C
h : ↑((iso_map C J) ⟨Proj J c, ⋯⟩) = ↑((iso_map C J) ⟨Proj J d, ⋯⟩)
⊢ ↑⟨Proj J c, ⋯⟩ i = ↑⟨Proj J d, ⋯⟩ i
state_after: no goals

tactic: refine ⟨⟨fun i ↦ if hi : J i then a.val ⟨i, hi⟩ else false, ?_⟩, ?_⟩
state_before: case refine_2
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a : ↑(IndexFunctor.obj C J)
⊢ ∃ a_1, (iso_map C J) a_1 = a
state_after: case refine_2.refine_1
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a : ↑(IndexFunctor.obj C J)
⊢ (fun i => if hi : J i then ↑a ⟨i, hi⟩ else false) ∈ π C J

case refine_2.refine_2
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a : ↑(IndexFunctor.obj C J)
⊢ (iso_map C J) ⟨fun i => if hi : J i then ↑a ⟨i, hi⟩ else false, ?refine_2.refine_1⟩ = a

tactic: rcases a with ⟨_, y, hy, rfl⟩
state_before: case refine_2.refine_1
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a : ↑(IndexFunctor.obj C J)
⊢ (fun i => if hi : J i then ↑a ⟨i, hi⟩ else false) ∈ π C J
state_after: case refine_2.refine_1.mk.intro.intro
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
y : (i : I) → (fun i => Bool) i
hy : y ∈ C
⊢ (fun i => if hi : J i then ↑⟨(precomp Subtype.val) y, ⋯⟩ ⟨i, hi⟩ else false) ∈ π C J

tactic: exact ⟨y, hy, rfl⟩
state_before: case refine_2.refine_1.mk.intro.intro
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
y : (i : I) → (fun i => Bool) i
hy : y ∈ C
⊢ (fun i => if hi : J i then ↑⟨(precomp Subtype.val) y, ⋯⟩ ⟨i, hi⟩ else false) ∈ π C J
state_after: no goals

tactic: ext i
state_before: case refine_2.refine_2
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a : ↑(IndexFunctor.obj C J)
⊢ (iso_map C J) ⟨fun i => if hi : J i then ↑a ⟨i, hi⟩ else false, ⋯⟩ = a
state_after: case refine_2.refine_2.a.h
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a : ↑(IndexFunctor.obj C J)
i : { i // J i }
⊢ ↑((iso_map C J) ⟨fun i => if hi : J i then ↑a ⟨i, hi⟩ else false, ⋯⟩) i = ↑a i

tactic: exact dif_pos i.prop
state_before: case refine_2.refine_2.a.h
I : Type u
inst✝⁴ : LinearOrder I
inst✝³ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
J K L : I → Prop
inst✝² : (i : I) → Decidable (J i)
inst✝¹ : (i : I) → Decidable (K i)
inst✝ : (i : I) → Decidable (L i)
a : ↑(IndexFunctor.obj C J)
i : { i // J i }
⊢ ↑((iso_map C J) ⟨fun i => if hi : J i then ↑a ⟨i, hi⟩ else false, ⋯⟩) i = ↑a i
state_after: no goals