Zulip Chat Archive

Stream: new members

Topic: More concise way to specify an implicit predicate?


Bbbbbbbbba (Jan 09 2026 at 15:16):

The following code works, but I do not like that I have to give a name to h0 : p ∅ := empty_subset x in order to specify its type. Is there a more concise way to do this?

import Mathlib

open ZFSet

def is_inducible (x : ZFSet) : Prop := z  x, z =   y  x, z = insert y y

lemma inducible_induction {x : ZFSet} {p : ZFSet  Prop}
    (hx : is_inducible x) (h0 : p ) (h1 :  y  x, p y  p (insert y y)) :  z  x, p z := by
  let x0 := x.sep fun y  ¬p y
  intro z
  by_contra! hz
  refine x0.eq_empty.mp ?_ z (mem_sep.mpr hz)
  by_contra h
  have z, hz1, hz2 := regularity x0 h
  have hzx, hzy := mem_sep.mp hz1
  apply hzy
  rcases hx z hzx with hz | w, hwx, hwz
  · rw [hz]; exact h0
  · rw [hwz]; apply h1 w hwx
    by_contra hwy
    refine (x0  z).eq_empty.mp hz2 w (mem_inter.mpr mem_sep.mpr hwx, hwy, ?_⟩)
    rw [hwz]
    exact mem_insert w w

lemma inducible_is_transitive {x : ZFSet} (hx : is_inducible x) : IsTransitive x := by
  let p := fun y  y  x
  have h0 : p  := empty_subset x
  apply inducible_induction hx h0
  intro y hyx hy z hz
  rcases mem_insert_iff.mp hz with hz | hz
  · rw [hz]; exact hyx
  · exact hy hz

Vlad Tsyrklevich (Jan 09 2026 at 15:19):

It is not clear if you're talking about inducible_induction or inducible_is_transitive. Assuming you're talking about inducible_is_transitive you could have done

  have : p  := empty_subset x
  apply inducible_induction hx this

or

  apply inducible_induction (p := p) hx (empty_subset x)

Bbbbbbbbba (Jan 09 2026 at 15:20):

Oh yeah I'm looking for the second solution. So every time I had trouble specifying an implicit binder, I could have done this?

Vlad Tsyrklevich (Jan 09 2026 at 15:23):

Yes, also you could have done

  apply @inducible_induction _ p hx (empty_subset x)

Vlad Tsyrklevich (Jan 09 2026 at 15:23):

Though I think the first form is often more usable in practice, it's nice to know about the second form as well.

Bbbbbbbbba (Jan 09 2026 at 15:24):

I learned. Thanks!


Last updated: Feb 28 2026 at 14:05 UTC