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

tactic: refine Function.Injective.sum_elim Subtype.val_injective Subtype.val_injective
  (fun ⟨a,ha⟩ ⟨b,hb⟩  ↦ (fun (hab : a = b) ↦ ?_))
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
⊢ Function.Injective (sum_to 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
x✝¹ : ↑(GoodProducts (π C fun x => ord I x < o))
x✝ : ↑(MaxProducts C ho)
a : Products I
ha : a ∈ GoodProducts (π C fun x => ord I x < o)
b : Products I
hb : b ∈ MaxProducts C ho
hab : a = b
⊢ False

tactic: rw [← hab] at hb
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
x✝¹ : ↑(GoodProducts (π C fun x => ord I x < o))
x✝ : ↑(MaxProducts C ho)
a : Products I
ha : a ∈ GoodProducts (π C fun x => ord I x < o)
b : Products I
hb : b ∈ MaxProducts C ho
hab : a = b
⊢ False
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
x✝¹ : ↑(GoodProducts (π C fun x => ord I x < o))
x✝ : ↑(MaxProducts C ho)
a : Products I
ha : a ∈ GoodProducts (π C fun x => ord I x < o)
b : Products I
hb : a ∈ MaxProducts C ho
hab : a = b
⊢ False

tactic: have ha' := Products.prop_of_isGood  C _ ha (term I ho) hb.2
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
x✝¹ : ↑(GoodProducts (π C fun x => ord I x < o))
x✝ : ↑(MaxProducts C ho)
a : Products I
ha : a ∈ GoodProducts (π C fun x => ord I x < o)
b : Products I
hb : a ∈ MaxProducts C ho
hab : a = b
⊢ False
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
x✝¹ : ↑(GoodProducts (π C fun x => ord I x < o))
x✝ : ↑(MaxProducts C ho)
a : Products I
ha : a ∈ GoodProducts (π C fun x => ord I x < o)
b : Products I
hb : a ∈ MaxProducts C ho
hab : a = b
ha' : ord I (term I ho) < o
⊢ False

tactic: simp only [ord_term_aux, lt_self_iff_false] at ha'
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
x✝¹ : ↑(GoodProducts (π C fun x => ord I x < o))
x✝ : ↑(MaxProducts C ho)
a : Products I
ha : a ∈ GoodProducts (π C fun x => ord I x < o)
b : Products I
hb : a ∈ MaxProducts C ho
hab : a = b
ha' : ord I (term I ho) < o
⊢ False
state_after: no goals