Zulip Chat Archive

Stream: new members

Topic: Restricting a function all the way


Abdullah Uyu (Apr 24 2024 at 13:11):

I have a function f: X → X → Prop that I can restrict to f' : myset → X → Prop. How can I restrict it further and get a function f'' : myset → myset → Prop:

import Mathlib.Data.Set.Function

open Set

variable (X : Type) (f : X  X  Prop) (myset : Set X)

def f' : myset  X  Prop := myset.restrict f

Abdullah Uyu (Apr 24 2024 at 13:34):

I guess I can write

def f'' :
    myset  myset  Prop :=
  fun a b : myset => myset.restrict (myset.restrict f a) b

Can I make this shorter? My original f actually is of type X → X → X → Prop, so I have to apply the restrict three times and it'll become very hard to read.

Paul Rowe (Apr 24 2024 at 14:17):

I think you're getting into trouble with your variables. If you check the type of f', you'll see that it takes all three of your variable types before accepting an argument of type myset. So you could write

def f'' : myset  myset  Prop := fun x => myset.restrict (f' X f myset x)

But I'm guessing you don't intend for those to be arguments to f' (and might not be in your real work)`. So you might be able to get away with

def f'' : myset  myset  Prop := fun  x => myset.restrict (f' x)

in your real code.


Last updated: May 02 2025 at 03:31 UTC