Zulip Chat Archive
Stream: new members
Topic: Reflexive product order
YurySerdyuk (Jun 29 2023 at 15:43):
What is wrong with the syntax of my code :
@[class] structure refl_order (A : Type) extends has_le A :=
(refl : ∀ a, le a a)
def prod_order {A B : Type} (o₁ : A → A → Prop) (o₂ : B → B → Prop) (s : A × B) (t : A × B) :=
o₁ (s.1) (t.1) ∧ o₂ (s.2) (t.2)
instance refl_prod {A B: Type} [o₁ : refl_order A] [o₂ : refl_order B] : refl_order (A × B) :=
let op : A × B → A × B → Prop := prod_order o₁.le o₂.le in
have refl : ∀ p : A × B, op p p, by intro; apply and.intro; repeat {apply refl_order.refl},
show _, from refl_order.mk (has_le.mk op) refl
type mismatch at application
{to_has_le := ?m_2, refl := {le := op}}
term
{le := op}
has type
has_le (A × B) : Type
but is expected to have type
∀ (a : ?m_1), a ≤ a : Prop
error message
too many arguments
Bolton Bailey (Jun 29 2023 at 16:03):
Here is the code with #backticks
@[class] structure refl_order (A : Type) extends has_le A :=
(refl : ∀ a, le a a)
def prod_order {A B : Type} (o₁ : A → A → Prop) (o₂ : B → B → Prop) (s : A × B) (t : A × B) :=
o₁ (s.1) (t.1) ∧ o₂ (s.2) (t.2)
instance refl_prod {A B: Type} [o₁ : refl_order A] [o₂ : refl_order B] : refl_order (A × B) :=
let op : A × B → A × B → Prop := prod_order o₁.le o₂.le in
have refl : ∀ p : A × B, op p p, by intro; apply and.intro; repeat {apply refl_order.refl},
show _, from refl_order.mk (has_le.mk op) refl
Bolton Bailey (Jun 29 2023 at 16:08):
It seems refl_order.mk
is supposed to only have one explicit argument, of type (∀ (a : A), a ≤ a)
, but this code gives two arguments, (has_le.mk op)
and refl
Bolton Bailey (Jun 29 2023 at 16:10):
I see the issue - you included the (has_le.mk op)
as one of the arguments, but this was supposed to be implicit, so Lean got confused.
Bolton Bailey (Jun 29 2023 at 16:11):
This fixes it @refl_order.mk _ (has_le.mk op) refl
. The @
tells Lean to treat all implicit arguments as explicit, after which there are three arguments, and the _
tells Lean to infer the first one.
Bolton Bailey (Jun 29 2023 at 16:14):
@YurySerdyuk
Last updated: Dec 20 2023 at 11:08 UTC