File: Mathlib/Data/Finset/MulAntidiagonal.lean

full_name: Set.IsPWO.mul
code: @[to_additive]
theorem IsPWO.mul [OrderedCancelCommMonoid α] (hs : s.IsPWO) (ht : t.IsPWO) : IsPWO (s * t) 
goal: (s * t).IsPWO

full_name: Set.IsPWO.add
code: @[to_additive]
theorem IsPWO.mul [OrderedCancelCommMonoid α] (hs : s.IsPWO) (ht : t.IsPWO) : IsPWO (s * t) 
goal: (s + t).IsPWO

full_name: Set.IsWF.mul
code: @[to_additive]
theorem IsWF.mul (hs : s.IsWF) (ht : t.IsWF) : IsWF (s * t) 
goal: (s * t).IsWF

full_name: Set.IsWF.add
code: @[to_additive]
theorem IsWF.mul (hs : s.IsWF) (ht : t.IsWF) : IsWF (s * t) 
goal: (s + t).IsWF

full_name: Set.IsWF.min_add
code: @[to_additive]
theorem IsWF.min_mul (hs : s.IsWF) (ht : t.IsWF) (hsn : s.Nonempty) (htn : t.Nonempty) :
    (hs.mul ht).min (hsn.mul htn) = hs.min hsn * ht.min htn 
goal: ⋯.min ⋯ = hs.min hsn + ht.min htn

full_name: Set.IsWF.min_mul
code: @[to_additive]
theorem IsWF.min_mul (hs : s.IsWF) (ht : t.IsWF) (hsn : s.Nonempty) (htn : t.Nonempty) :
    (hs.mul ht).min (hsn.mul htn) = hs.min hsn * ht.min htn 
goal: ⋯.min ⋯ = hs.min hsn * ht.min htn

full_name: Finset.addAntidiagonal
code: /-- `Finset.mulAntidiagonal hs ht a` is the set of all pairs of an element in `s` and an
element in `t` that multiply to `a`, but its construction requires proofs that `s` and `t` are
well-ordered. -/
@[to_additive "`Finset.addAntidiagonal hs ht a` is the set of all pairs of an element in
`s` and an element in `t` that add to `a`, but its construction requires proofs that `s` and `t` are
well-ordered."]
noncomputable def mulAntidiagonal : Finset (α × α) 
goal: Finset (α × α)

full_name: Finset.mulAntidiagonal
code: /-- `Finset.mulAntidiagonal hs ht a` is the set of all pairs of an element in `s` and an
element in `t` that multiply to `a`, but its construction requires proofs that `s` and `t` are
well-ordered. -/
@[to_additive "`Finset.addAntidiagonal hs ht a` is the set of all pairs of an element in
`s` and an element in `t` that add to `a`, but its construction requires proofs that `s` and `t` are
well-ordered."]
noncomputable def mulAntidiagonal : Finset (α × α) 
goal: Finset (α × α)

full_name: Finset.mem_mulAntidiagonal
code: @[to_additive (attr := simp)]
theorem mem_mulAntidiagonal : x ∈ mulAntidiagonal hs ht a ↔ x.1 ∈ s ∧ x.2 ∈ t ∧ x.1 * x.2 = a 
goal: x ∈ Finset.mulAntidiagonal hs ht a ↔ x.1 ∈ s ∧ x.2 ∈ t ∧ x.1 * x.2 = a

full_name: Finset.mem_addAntidiagonal
code: @[to_additive (attr := simp)]
theorem mem_mulAntidiagonal : x ∈ mulAntidiagonal hs ht a ↔ x.1 ∈ s ∧ x.2 ∈ t ∧ x.1 * x.2 = a 
goal: x ∈ Finset.addAntidiagonal hs ht a ↔ x.1 ∈ s ∧ x.2 ∈ t ∧ x.1 + x.2 = a

full_name: Finset.mulAntidiagonal_mono_left
code: @[to_additive]
theorem mulAntidiagonal_mono_left (h : u ⊆ s) : mulAntidiagonal hu ht a ⊆ mulAntidiagonal hs ht a 
goal: Finset.mulAntidiagonal hu ht a ⊆ Finset.mulAntidiagonal hs ht a

full_name: Finset.addAntidiagonal_mono_left
code: @[to_additive]
theorem mulAntidiagonal_mono_left (h : u ⊆ s) : mulAntidiagonal hu ht a ⊆ mulAntidiagonal hs ht a 
goal: Finset.addAntidiagonal hu ht a ⊆ Finset.addAntidiagonal hs ht a

full_name: Finset.addAntidiagonal_mono_right
code: @[to_additive]
theorem mulAntidiagonal_mono_right (h : u ⊆ t) :
    mulAntidiagonal hs hu a ⊆ mulAntidiagonal hs ht a 
goal: Finset.addAntidiagonal hs hu a ⊆ Finset.addAntidiagonal hs ht a

full_name: Finset.mulAntidiagonal_mono_right
code: @[to_additive]
theorem mulAntidiagonal_mono_right (h : u ⊆ t) :
    mulAntidiagonal hs hu a ⊆ mulAntidiagonal hs ht a 
goal: Finset.mulAntidiagonal hs hu a ⊆ Finset.mulAntidiagonal hs ht a

full_name: Finset.swap_mem_addAntidiagonal
code: @[to_additive]
theorem swap_mem_mulAntidiagonal :
    x.swap ∈ Finset.mulAntidiagonal hs ht a ↔ x ∈ Finset.mulAntidiagonal ht hs a 
goal: x.swap ∈ Finset.addAntidiagonal hs ht a ↔ x ∈ Finset.addAntidiagonal ht hs a

full_name: Finset.swap_mem_mulAntidiagonal
code: @[to_additive]
theorem swap_mem_mulAntidiagonal :
    x.swap ∈ Finset.mulAntidiagonal hs ht a ↔ x ∈ Finset.mulAntidiagonal ht hs a 
goal: x.swap ∈ Finset.mulAntidiagonal hs ht a ↔ x ∈ Finset.mulAntidiagonal ht hs a

full_name: Finset.support_mulAntidiagonal_subset_mul
code: @[to_additive]
theorem support_mulAntidiagonal_subset_mul : { a | (mulAntidiagonal hs ht a).Nonempty } ⊆ s * t 
goal: {a | (Finset.mulAntidiagonal hs ht a).Nonempty} ⊆ s * t

full_name: Finset.support_addAntidiagonal_subset_add
code: @[to_additive]
theorem support_mulAntidiagonal_subset_mul : { a | (mulAntidiagonal hs ht a).Nonempty } ⊆ s * t 
goal: {a | (Finset.addAntidiagonal hs ht a).Nonempty} ⊆ s + t

full_name: Finset.isPWO_support_addAntidiagonal
code: @[to_additive]
theorem isPWO_support_mulAntidiagonal : { a | (mulAntidiagonal hs ht a).Nonempty }.IsPWO 
goal: {a | (Finset.addAntidiagonal hs ht a).Nonempty}.IsPWO

full_name: Finset.isPWO_support_mulAntidiagonal
code: @[to_additive]
theorem isPWO_support_mulAntidiagonal : { a | (mulAntidiagonal hs ht a).Nonempty }.IsPWO 
goal: {a | (Finset.mulAntidiagonal hs ht a).Nonempty}.IsPWO

full_name: Finset.mulAntidiagonal_min_mul_min
code: @[to_additive]
theorem mulAntidiagonal_min_mul_min {α} [LinearOrderedCancelCommMonoid α] {s t : Set α}
    (hs : s.IsWF) (ht : t.IsWF) (hns : s.Nonempty) (hnt : t.Nonempty) :
    mulAntidiagonal hs.isPWO ht.isPWO (hs.min hns * ht.min hnt) = {(hs.min hns, ht.min hnt)} 
goal: Finset.mulAntidiagonal ⋯ ⋯ (hs.min hns * ht.min hnt) = {(hs.min hns, ht.min hnt)}

full_name: Finset.addAntidiagonal_min_add_min
code: @[to_additive]
theorem mulAntidiagonal_min_mul_min {α} [LinearOrderedCancelCommMonoid α] {s t : Set α}
    (hs : s.IsWF) (ht : t.IsWF) (hns : s.Nonempty) (hnt : t.Nonempty) :
    mulAntidiagonal hs.isPWO ht.isPWO (hs.min hns * ht.min hnt) = {(hs.min hns, ht.min hnt)} 
goal: Finset.addAntidiagonal ⋯ ⋯ (hs.min hns + ht.min hnt) = {(hs.min hns, ht.min hnt)}