Zulip Chat Archive

Stream: new members

Topic: Don't know how to synthesize placeholder (2)


Gareth Ma (Feb 17 2023 at 15:24):

Hi, I am trying the follow code, but I am not sure why it says "don't know how to synthesize placeholder". Isn't the required condition in the global scope (or whatever it's called)? Also, when I click on the error, the hf : monotone f is in the context as well.

import tactic

open set
open_locale big_operators

namespace seq

variables (f :   ) {hf : monotone f}
include hf

-- Property indicating a number which is the sum of subsequence of f
def summable (x : ) : Prop :=  (S : finset ), ( s in S, f s) = x

-- The set of subset sums is numbers which is the sum of subsequence of f
def subset_sums : set  := { x :  | summable f x }

Gareth Ma (Feb 17 2023 at 15:25):

Oh, and also writing it as @summable f hf x fixes the problem? Which makes it even more confusing, since hf is literally in the scope

Reid Barton (Feb 17 2023 at 15:29):

Lean doesn't try to fill placeholders with stuff from the environment, even when (as I'm assuming is the case here) it's a proposition so it could be a sensible thing to do.

Reid Barton (Feb 17 2023 at 15:30):

I recommend making hf explicit. Otherwise it will be annoying anyways when, eventually, you have to actually provide it somewhere.

Gareth Ma (Feb 17 2023 at 15:33):

Ah okay, so replace {} with () then write summable f hf x?

Yaël Dillies (Feb 17 2023 at 15:33):

Or simply remove it, as it's a useless assumption.

Gareth Ma (Feb 17 2023 at 15:33):

I need it for later lemmas

Yaël Dillies (Feb 17 2023 at 15:37):

Yes, but the definition doesn't need it.

Gareth Ma (Feb 17 2023 at 15:56):

Oh, I see what you mean now\

Gareth Ma (Feb 17 2023 at 17:49):

Another question, I think I am slightly confused. For the following definitions:

def complete  : Prop :=  (N : ) (h : 0 < N),  (n : ) (N  n), summable f n
def complete' : Prop :=  (N : ) (h : 0 < N),  (n : ), N  n  summable f n

Are these two definitions different? And is the second definition the correct style to write it, or is there some better syntax

Kyle Miller (Feb 17 2023 at 18:00):

The first one is inadvertently incorrect. If you did

def complete  : Prop :=  (N : ) (h : 0 < N),  (n : ) (h : N  n), summable f n

then it'd be equivalent to the second one.

Instead, it's the same as

def complete  : Prop :=  (N : ) (h : 0 < N),  (n : ) (N : ) (H : N  n), summable f n

and that N in the for-all shadows the N from the there-exists. This is how the "cute binders" feature works when applied to (N ≤ n).

Gareth Ma (Feb 17 2023 at 23:40):

Oh, now I understand. No wonder my proof didn't work :P


Last updated: Dec 20 2023 at 11:08 UTC