File: splitlist.hlp

package info (click to toggle)
hol-light 1%3A3.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 50,136 kB
  • sloc: ml: 753,527; cpp: 439; sh: 435; makefile: 399; lisp: 286; java: 279; yacc: 108; perl: 78; ansic: 57; python: 53; sed: 39
file content (33 lines) | stat: -rw-r--r-- 700 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
\DOC splitlist

\TYPE {splitlist : ('a -> 'b * 'a) -> 'a -> 'b list * 'a}

\SYNOPSIS
Applies a binary destructor repeatedly in left-associative mode.

\DESCRIBE
If a destructor function {d} inverts a binary constructor {f}, for example
{dest_comb} for {mk_comb}, and fails when applied to {y}, then:
{
  splitlist d (f(x1,f(x2,f(...f(xn,y)))))
}
\noindent returns
{
  ([x1; ... ; xn],y)
}

\FAILURE
Never fails.

\EXAMPLE
The function {strip_forall} is actually just defined as
{splitlist dest_forall}, which acts as follows:
{
  # splitlist dest_forall `!x y z. x + y = z`;;
  val it : term list * term = ([`x`; `y`; `z`], `x + y = z`)
}

\SEEALSO
itlist, nsplit, rev_splitlist, striplist.

\ENDDOC