Zulip Chat Archive

Stream: new members

Topic: orders on products


Alistair Tucker (Dec 08 2018 at 19:06):

I want definitions like

instance prod_has_le {α β : Type} [has_le α] [has_le β] : has_le (prod α β) :=
{ le            := λ a b, a.1  b.1  a.2  b.2 }

instance prod_preorder {α β : Type} [preorder α] [preorder β] : preorder (prod α β) :=
{ le_refl       := λ a, le_refl a.1, le_refl a.2,
  le_trans      := λ a b c h₁ h₂, le_trans h₁.1 h₂.1, le_trans h₁.2 h₂.2,
  .. prod_has_le }

instance prod_partial_order {α β : Type} [partial_order α] [partial_order β] : partial_order (prod α β) :=
{ le_antisymm   := λ a b h₁ h₂, prod.ext (le_antisymm h₁.1 h₂.1) (le_antisymm h₁.2 h₂.2),
  .. prod_preorder }

(At the moment just for ℕ × ℕ, Cauchy sequences and contraction mapping theorem, but probably for more later on.)

These don't seem already to be in mathlib, so should I assume there is some good reason to exclude them? And if so, can I use some namespace trick to define them 'locally'?

Kevin Buzzard (Dec 08 2018 at 19:08):

I think attribute local instance works for something which is already defined.

Kevin Buzzard (Dec 08 2018 at 19:09):

For example this is from TPIL:

open classical
local attribute [instance] prop_decidable

(after prop_decidable has been defined)

Kevin Buzzard (Dec 08 2018 at 19:12):

"However, such commands can often be prefixed with the local modifier, which indicates that they only have effect until the current section or namespace is closed, or until the end of the current file."

Alistair Tucker (Dec 08 2018 at 19:14):

Thanks, I'll do that then.

Kevin Buzzard (Dec 08 2018 at 19:19):

It would not surprise me if there were a trick to do it all in one go. Does local instance... not work?

Kevin Buzzard (Dec 08 2018 at 19:19):

Oh! Do you need to import pi_instances or something? Maybe they're there?

Alistair Tucker (Dec 08 2018 at 20:52):

Hmm possibly. I didn't know about pi_instances.

import algebra.pi_instances

def a : bool   := λ i, if i then 1 else 2
def b : bool   := λ i, if i then 3 else 4

#check a  b

Kevin Buzzard (Dec 08 2018 at 20:54):

import algebra.pi_instances

example {α β : Type} [partial_order α] [partial_order β] :
partial_order (α × β) := by apply_instance -- fails

I thought it might work out of the box. But no.

Kevin Buzzard (Dec 08 2018 at 20:55):

Maybe the reason it's not an instance is that some people might want to use lex order in some cases


Last updated: Dec 20 2023 at 11:08 UTC