-- Mathlib/Data/Set/MulAntidiagonal.lean
theorem finite_of_isPWO (hs : s.IsPWO) (ht : t.IsPWO) (a) : (mulAntidiagonal s t a).Finite

Proof state:
case intro.intro.intro.intro
α : Type u_1
inst✝³ : CancelCommMonoid α
inst✝² : PartialOrder α
inst✝¹ : MulLeftMono α
inst✝ : MulRightStrictMono α
s t : Set α
hs : s.IsPWO
ht : t.IsPWO
a : α
h : (s.mulAntidiagonal t a).Infinite
h1 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2)
h2 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
m n : ℕ
mn : m < n
h2' :
  (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
    ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
⊢ False

Tactic:
refine mn.ne (g.injective <| (h.natEmbedding _).injective ?_)

Result:
case intro.intro.intro.intro
α : Type u_1
inst✝³ : CancelCommMonoid α
inst✝² : PartialOrder α
inst✝¹ : MulLeftMono α
inst✝ : MulRightStrictMono α
s t : Set α
hs : s.IsPWO
ht : t.IsPWO
a : α
h : (s.mulAntidiagonal t a).Infinite
h1 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2)
h2 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
m n : ℕ
mn : m < n
h2' :
  (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
    ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
⊢ (Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m) = (Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n)

Proof state:
α : Type u_1
inst✝³ : CancelCommMonoid α
inst✝² : PartialOrder α
inst✝¹ : MulLeftMono α
inst✝ : MulRightStrictMono α
s t : Set α
hs : s.IsPWO
ht : t.IsPWO
a : α
h : (s.mulAntidiagonal t a).Infinite
h1 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2)
h2 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2)
⊢ False

Tactic:
obtain ⟨g, hg⟩ :=
  h1.exists_monotone_subseq (fun n => h.natEmbedding _ n) fun n => (h.natEmbedding _ n).2

Result:
case intro
α : Type u_1
inst✝³ : CancelCommMonoid α
inst✝² : PartialOrder α
inst✝¹ : MulLeftMono α
inst✝ : MulRightStrictMono α
s t : Set α
hs : s.IsPWO
ht : t.IsPWO
a : α
h : (s.mulAntidiagonal t a).Infinite
h1 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2)
h2 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
⊢ False

Proof state:
case intro.intro.intro.intro
α : Type u_1
inst✝³ : CancelCommMonoid α
inst✝² : PartialOrder α
inst✝¹ : MulLeftMono α
inst✝ : MulRightStrictMono α
s t : Set α
hs : s.IsPWO
ht : t.IsPWO
a : α
h : (s.mulAntidiagonal t a).Infinite
h1 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2)
h2 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
m n : ℕ
mn : m < n
h2' :
  (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
    ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
⊢ (Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m) = (Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n)

Tactic:
exact eq_of_fst_le_fst_of_snd_le_snd _ _ _ (hg _ _ mn.le) h2'

Result:
no goals

Proof state:
α : Type u_1
inst✝³ : CancelCommMonoid α
inst✝² : PartialOrder α
inst✝¹ : MulLeftMono α
inst✝ : MulRightStrictMono α
s t : Set α
hs : s.IsPWO
ht : t.IsPWO
a : α
⊢ (s.mulAntidiagonal t a).Finite

Tactic:
refine not_infinite.1 fun h => ?_

Result:
α : Type u_1
inst✝³ : CancelCommMonoid α
inst✝² : PartialOrder α
inst✝¹ : MulLeftMono α
inst✝ : MulRightStrictMono α
s t : Set α
hs : s.IsPWO
ht : t.IsPWO
a : α
h : (s.mulAntidiagonal t a).Infinite
⊢ False

Proof state:
case intro
α : Type u_1
inst✝³ : CancelCommMonoid α
inst✝² : PartialOrder α
inst✝¹ : MulLeftMono α
inst✝ : MulRightStrictMono α
s t : Set α
hs : s.IsPWO
ht : t.IsPWO
a : α
h : (s.mulAntidiagonal t a).Infinite
h1 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2)
h2 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
⊢ False

Tactic:
obtain ⟨m, n, mn, h2'⟩ := h2 (fun x => (h.natEmbedding _) (g x)) fun n => (h.natEmbedding _ _).2

Result:
case intro.intro.intro.intro
α : Type u_1
inst✝³ : CancelCommMonoid α
inst✝² : PartialOrder α
inst✝¹ : MulLeftMono α
inst✝ : MulRightStrictMono α
s t : Set α
hs : s.IsPWO
ht : t.IsPWO
a : α
h : (s.mulAntidiagonal t a).Infinite
h1 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2)
h2 : (s.mulAntidiagonal t a).PartiallyWellOrderedOn (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2)
g : ℕ ↪o ℕ
hg :
  ∀ (m n : ℕ),
    m ≤ n →
      (Prod.fst ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
        ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
m n : ℕ
mn : m < n
h2' :
  (Prod.snd ⁻¹'o fun x1 x2 => x1 ≤ x2) ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g m))
    ↑((Infinite.natEmbedding (s.mulAntidiagonal t a) h) (g n))
⊢ False