PAIRED_ETA_CONV : conv

SYNOPSIS
Performs generalized eta conversion for tupled eta-redexes.

DESCRIBE
The conversion PAIRED_ETA_CONV generalizes ETA_CONV to eta-redexes with tupled abstractions.
   PAIRED_ETA_CONV "\(v1..(..)..vn). f (v1..(..)..vn)"
    = |- \(v1..(..)..vn). f (v1..(..)..vn) = f

FAILURE
Fails unless the given term is a paired eta-redex as illustrated above.

COMMENTS
Note that this result cannot be achieved by ordinary eta-reduction because the tupled abstraction is a surface syntax for a term which does not correspond to a normal pattern for eta reduction. Disabling the relevant prettyprinting reveals the true form of a paired eta redex:
   #set_flag(`print_uncurry`,false);;
   true : bool

   #let tm = "\(x:num,y:num). FST (x,y)";;
   tm = "UNCURRY(\x y. FST(x,y))" : term

EXAMPLE
The following is a typical use of the conversion:
   let SELECT_PAIR_EQ = PROVE
    ("(@(x:*,y:**). (a,b) = (x,y)) = (a,b)",
     CONV_TAC (ONCE_DEPTH_CONV PAIRED_ETA_CONV) THEN
     ACCEPT_TAC (SYM (MATCH_MP SELECT_AX (REFL "(a:*,b:**)"))));;

SEEALSO  ETA_CONV

HOL  Kananaskis 0