It seems to me that proving an arbitrary property over an n-ary HOL function of type (a1 => (a2 => ... (an => b))) is not possible, since STT doesn't permit quantifying over types themselves. Is there some sort of smart workaround that I can use to prove properties over n-ary (curried or uncurried) functions
(note: n is variable)
fold + lists is a workaround
wouldn't that work if all of the a_i are the same type
which they aren't?
since lists are homogenous
Correct, but usually n-ary operators have a fixed type as argument...
(at least in my experience)
I'm guessing I'm making an X-Y problem here, sorry about that.
I'm trying to get the hang of HOLCF. What I'd like to prove is that if (σ1, ... σn) are all flat types, then (σ1 -> (σ2 -> ... -> (σn -> τ))) that is strict in its first n arguments is monotonic (Logic and Computation, exercise 3.4)
(typo: exercise 3.3)
In HOLCF, a good method to work over type-erased values is to work with deflations of udom. Each domain type has an associated DEFL(type) deflation. Sadly for some reason there isn't a standard symbol for "this udom value is of this type" judgment.
Functions do become awkward in this notation though.
thanks! I've been meaning to grok udom one of these days (yes, I have been going through Brian Huffman's thesis, unless you have some other resources)
Last updated: Nov 08 2026 at 20:15 UTC