/-- Curry/uncurry as an order isomorphism between `α × β →o γ` and `α →o β →o γ`. -/
def curry : (α × β →o γ) ≃o (α →o β →o γ) where
  toFun f := ⟨fun x ↦ ⟨Function.curry f x, fun _ _ h ↦ f.mono ⟨le_rfl, h⟩⟩, fun _ _ h _ =>
    f.mono ⟨h, le_rfl⟩⟩
  invFun f := ⟨Function.uncurry fun x ↦ f x, fun x y h ↦ (f.mono h.1 x.2).trans ((f y.1).mono h.2)⟩
  left_inv _ := rfl
  right_inv _ := rfl
  map_rel_iff' := by 

Proof state:
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
δ : Type u_5
inst✝³ : Preorder α
inst✝² : Preorder β
inst✝¹ : Preorder γ
inst✝ : Preorder δ
⊢ ∀ {a b : α × β →o γ},
    {
            toFun := fun f =>
              {
                toFun := fun x =>
                  { toFun := Function.curry (⇑f) x,
                    monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) },
            invFun := fun f =>
              { toFun := Function.uncurry fun x => ⇑(f x),
                monotone' := (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) },
            left_inv :=
              (_ :
                ∀ (x : α × β →o γ),
                  (fun f =>
                        { toFun := Function.uncurry fun x => ⇑(f x),
                          monotone' :=
                            (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) })
                      ((fun f =>
                          {
                            toFun := fun x =>
                              { toFun := Function.curry (⇑f) x,
                                monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                            monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) })
                        x) =
                    (fun f =>
                        { toFun := Function.uncurry fun x => ⇑(f x),
                          monotone' :=
                            (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) })
                      ((fun f =>
                          {
                            toFun := fun x =>
                              { toFun := Function.curry (⇑f) x,
                                monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                            monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) })
                        x)),
            right_inv :=
              (_ :
                ∀ (x : α →o β →o γ),
                  (fun f =>
                        {
                          toFun := fun x =>
                            { toFun := Function.curry (⇑f) x,
                              monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                          monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) })
                      ((fun f =>
                          { toFun := Function.uncurry fun x => ⇑(f x),
                            monotone' :=
                              (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) })
                        x) =
                    (fun f =>
                        {
                          toFun := fun x =>
                            { toFun := Function.curry (⇑f) x,
                              monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                          monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) })
                      ((fun f =>
                          { toFun := Function.uncurry fun x => ⇑(f x),
                            monotone' :=
                              (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) })
                        x)) }
          a ≤
        {
            toFun := fun f =>
              {
                toFun := fun x =>
                  { toFun := Function.curry (⇑f) x,
                    monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) },
            invFun := fun f =>
              { toFun := Function.uncurry fun x => ⇑(f x),
                monotone' := (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) },
            left_inv :=
              (_ :
                ∀ (x : α × β →o γ),
                  (fun f =>
                        { toFun := Function.uncurry fun x => ⇑(f x),
                          monotone' :=
                            (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) })
                      ((fun f =>
                          {
                            toFun := fun x =>
                              { toFun := Function.curry (⇑f) x,
                                monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                            monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) })
                        x) =
                    (fun f =>
                        { toFun := Function.uncurry fun x => ⇑(f x),
                          monotone' :=
                            (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) })
                      ((fun f =>
                          {
                            toFun := fun x =>
                              { toFun := Function.curry (⇑f) x,
                                monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                            monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) })
                        x)),
            right_inv :=
              (_ :
                ∀ (x : α →o β →o γ),
                  (fun f =>
                        {
                          toFun := fun x =>
                            { toFun := Function.curry (⇑f) x,
                              monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                          monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) })
                      ((fun f =>
                          { toFun := Function.uncurry fun x => ⇑(f x),
                            monotone' :=
                              (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) })
                        x) =
                    (fun f =>
                        {
                          toFun := fun x =>
                            { toFun := Function.curry (⇑f) x,
                              monotone' := (_ : ∀ (x_1 x_2 : β), x_1 ≤ x_2 → f (x, x_1) ≤ f (x, x_2)) },
                          monotone' := (_ : ∀ (x x_1 : α), x ≤ x_1 → ∀ (x_2 : β), f (x, x_2) ≤ f (x_1, x_2)) })
                      ((fun f =>
                          { toFun := Function.uncurry fun x => ⇑(f x),
                            monotone' :=
                              (_ : ∀ (x y : α × β), x ≤ y → toFun (f x.1) x.2 ≤ Function.uncurry (fun x => ⇑(f x)) y) })
                        x)) }
          b ↔
      a ≤ b

Next tactic:
simp [le_def]