Actually, something similar to your alternative characterisation is available 
but in a hard to know about way.

Try boolLib.EXISTS_UNIQUE_ALT:

``!P:'a->bool. (?!x. P x) <=> ?x. !y. P y <=> (x = y)``,

Also, as the simplifier does beta-reduction “for free”, I’d change what you had 
to

  pop_assum (qx_choose_tac `f12` o SIMP_RULE bool_ss [EXISTS_UNIQUE_ALT])

You could also accept the system’s choice of name and/or rename it later, and 
just use fs[EXISTS_UNIQUE_ALT].

Note that all three of the suggestions will do slightly different things, and 
this difference can be significant in various situations.  You might like to 
try to figure what those differences are, and decide if they matter to you in 
general and/or in your specific goal

Michael

From: Haitao Zhang <zhtp...@gmail.com>
Date: Wednesday, 27 February 2019 at 16:02
To: hol-info <hol-info@lists.sourceforge.net>
Subject: [Hol-info] Exists unique quantifier

I have trouble figuring out the best way to deal with exists unique quantifers. 
The existing theorems rewrite it in a way that does not work with CHOOSE_TAC or 
X_CHOOSE_TAC:

EXISTS_UNIQUE_DEF;                                                              
                                           |val it = ⊢ $?! = (λP. $? P ∧ ∀x y. 
P x ∧ P y ⇒ (x = y)): thm

The top level connective is a conjunction not an exists.

So I proved a version that I thought would be better with a top level exists 
connective:

EXISTS_UNIQUE_EXISTS;                                                           
                                              |val it = ⊢ $?! = (λP. ∃x. P x ∧ 
∀y. P y ⇒ (y = x)): thm
``?! = \P:'a->bool. (?x. P x /\ !y. P y ==> (y=x))``

Now I can do choose:

e (POP_ASSUM (Q.X_CHOOSE_TAC `f12` o BETA_RULE o (PURE_REWRITE_RULE 
[EXISTS_UNIQUE_EXISTS])));

Is this a good way to deal with exists unique? I am surprised that I couldn't 
find a shrink-wrap way of doing it.

Thanks,
Haitao

_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to