Theorem: Set.SMulAntidiagonal.finite_of_isPWO
File: Mathlib/Data/Set/SMulAntidiagonal.lean

Proof steps:
state_before: G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
⊢ (s.smulAntidiagonal t a).Finite
state_after: G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
⊢ False
tactic: refine Set.not_infinite.1 fun h => ?_
state_before: G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
⊢ False
state_after: G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
⊢ False
tactic: have isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 ↦ x ≤ x_1) := by
    refine { refl := ?refl }
    simp_all only [Order.Preimage, le_refl, Prod.forall, implies_true]
state_before: G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
⊢ False
state_after: G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
istrns : IsTrans (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
⊢ False
tactic: have istrns : IsTrans (G × P) (Prod.fst ⁻¹'o fun x x_1 ↦ x ≤ x_1) := by
    refine { trans := ?trans }
    simp_all only [Order.Preimage, Prod.forall]
    exact fun a _ a_1 _ a_2 _ a_3 a_4 ↦ Preorder.le_trans a a_1 a_2 a_3 a_4
state_before: G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
istrns : IsTrans (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
⊢ False
state_after: case intro
G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
istrns : IsTrans (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
⊢ False
tactic: obtain ⟨g, hg⟩ :=
    h1.exists_monotone_subseq (fun n => h.natEmbedding _ n) fun n => (h.natEmbedding _ n).2
state_before: case intro
G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
istrns : IsTrans (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
⊢ False
state_after: case intro.intro.intro.intro
G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
istrns : IsTrans (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
m n : ℕ
mn : m < n
h2' :
  (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
    ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
⊢ False
tactic: obtain ⟨m, n, mn, h2'⟩ := h2 (fun x => (h.natEmbedding _) (g x)) fun n => (h.natEmbedding _ _).2
state_before: case intro.intro.intro.intro
G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
istrns : IsTrans (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
m n : ℕ
mn : m < n
h2' :
  (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
    ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
⊢ False
state_after: case intro.intro.intro.intro
G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
istrns : IsTrans (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
m n : ℕ
mn : m < n
h2' :
  (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
    ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
⊢ (Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m) = (Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n)
tactic: refine mn.ne (g.injective <| (h.natEmbedding _).injective ?_)
state_before: case intro.intro.intro.intro
G : Type u_1
P : Type u_2
s : Set G
t : Set P
a✝ : P
inst✝³ : PartialOrder G
inst✝² : PartialOrder P
inst✝¹ : SMul G P
inst✝ : IsOrderedCancelSMul G P
x y : ↑(s.smulAntidiagonal t a✝)
hs : s.IsPWO
ht : t.IsPWO
a : P
h : (s.smulAntidiagonal t a).Infinite
h1 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
h2 : (s.smulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1)
isrfl : IsRefl (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
istrns : IsTrans (G × P) (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
m n : ℕ
mn : m < n
h2' :
  (Prod.snd ⁻¹'o fun x x_1 => x ≤ x_1) ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m))
    ↑((Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n))
⊢ (Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g m) = (Infinite.natEmbedding (s.smulAntidiagonal t a) h) (g n)
state_after: no goals
tactic: exact eq_of_fst_le_fst_of_snd_le_snd (hg _ _ mn.le) h2'