Zulip Chat Archive

Stream: lean4

Topic: Filling in some implicit variables in complicated functions


aprilgrimoire (Dec 06 2024 at 17:04):

Hi! I want to use

Subfield.closure_induction.{u} {K : Type u} [DivisionRing K] {s : Set K} {p : (x : K) → x ∈ Subfield.closure s → Prop}
  (mem : ∀ (x : K) (hx : x ∈ s), p x ⋯) (one : p 1 ⋯)
  (add : ∀ (x y : K) (hx : x ∈ Subfield.closure s) (hy : y ∈ Subfield.closure s), p x hx → p y hy → p (x + y) ⋯)
  (neg : ∀ (x : K) (hx : x ∈ Subfield.closure s), p x hx → p (-x) ⋯)
  (inv : ∀ (x : K) (hx : x ∈ Subfield.closure s), p x hx → p x⁻¹ ⋯)
  (mul : ∀ (x y : K) (hx : x ∈ Subfield.closure s) (hy : y ∈ Subfield.closure s), p x hx → p y hy → p (x * y) ⋯) {x : K}
  (h : x ∈ Subfield.closure s) : p x h

Which takes many arguments. For clarity, I want to fill in p first to make sure the type inference system provides easy-to-read complaints. However, I don't want to fill in things such as K and s explicitly. How can I achieve this?

Thanks!

EDIT: After using @, I'm asked to fill in inst variables, which I don't know how to do.

Joachim Breitner (Dec 06 2024 at 17:09):

Are you using this in apply or induction … using or outside of tactics?

Joachim Breitner (Dec 06 2024 at 17:10):

You can write `Subfield.closure_induction (p := …) to fill in only one parameter.

aprilgrimoire (Dec 06 2024 at 17:11):

T

Joachim Breitner said:

You can write `Subfield.closure_induction (p := …) to fill in only one parameter.

outside of tactics.

Thanks! That's a very convenient syntax I haven't seen in any references.


Last updated: Feb 28 2026 at 14:05 UTC