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

tactic: have h : Set.range (sum_to C ho) = _ ∪ _ := Set.Sum.elim_range _ _
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
⊢ Set.range (sum_to C ho) = GoodProducts (π C fun x => ord I x < o) ∪ MaxProducts C ho
state_after: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
⊢ Set.range (sum_to C ho) = GoodProducts (π C fun x => ord I x < o) ∪ MaxProducts C ho

tactic: rw [h]
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
⊢ Set.range (sum_to C ho) = GoodProducts (π C fun x => ord I x < o) ∪ MaxProducts C ho
state_after: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
⊢ Set.range Subtype.val ∪ Set.range Subtype.val = GoodProducts (π C fun x => ord I x < o) ∪ MaxProducts C ho

tactic: congr<;> ext l
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
⊢ Set.range Subtype.val ∪ Set.range Subtype.val = GoodProducts (π C fun x => ord I x < o) ∪ MaxProducts C ho
state_after: case e_a.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
⊢ l ∈ Set.range Subtype.val ↔ l ∈ GoodProducts (π C fun x => ord I x < o)

case e_a.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
⊢ l ∈ Set.range Subtype.val ↔ l ∈ MaxProducts C ho

tactic: exact ⟨fun ⟨m,hm⟩ ↦ by rw [← hm]; exact m.prop, fun hl ↦ ⟨⟨l,hl⟩, rfl⟩⟩
state_before: case e_a.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
⊢ l ∈ Set.range Subtype.val ↔ l ∈ GoodProducts (π C fun x => ord I x < o)
state_after: no goals

tactic: rw [← hm]
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
x✝ : l ∈ Set.range Subtype.val
m : ↑(GoodProducts (π C fun x => ord I x < o))
hm : ↑m = l
⊢ l ∈ GoodProducts (π C fun x => ord I x < o)
state_after: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
x✝ : l ∈ Set.range Subtype.val
m : ↑(GoodProducts (π C fun x => ord I x < o))
hm : ↑m = l
⊢ ↑m ∈ GoodProducts (π C fun x => ord I x < o)

tactic: exact m.prop
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
x✝ : l ∈ Set.range Subtype.val
m : ↑(GoodProducts (π C fun x => ord I x < o))
hm : ↑m = l
⊢ ↑m ∈ GoodProducts (π C fun x => ord I x < o)
state_after: no goals

tactic: exact ⟨fun ⟨m,hm⟩ ↦ by rw [← hm]; exact m.prop, fun hl ↦ ⟨⟨l,hl⟩, rfl⟩⟩
state_before: case e_a.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
⊢ l ∈ Set.range Subtype.val ↔ l ∈ MaxProducts C ho
state_after: no goals

tactic: rw [← hm]
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
x✝ : l ∈ Set.range Subtype.val
m : ↑(MaxProducts C ho)
hm : ↑m = l
⊢ l ∈ MaxProducts C ho
state_after: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
x✝ : l ∈ Set.range Subtype.val
m : ↑(MaxProducts C ho)
hm : ↑m = l
⊢ ↑m ∈ MaxProducts C ho

tactic: exact m.prop
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
h : Set.range (sum_to C ho) = Set.range Subtype.val ∪ Set.range Subtype.val
l : Products I
x✝ : l ∈ Set.range Subtype.val
m : ↑(MaxProducts C ho)
hm : ↑m = l
⊢ ↑m ∈ MaxProducts C ho
state_after: no goals