Hi, I’d like to close an old question. 3 months ago I was trying to define the free names in CCS process but failed to deal with list deletions. Today I found another way to delete elements from list, inspired by DROP:
val DELETE_ELEMENT_def = Define `
(DELETE_ELEMENT e [] = []) /\
(DELETE_ELEMENT e (x::l) = if (e = x) then DELETE_ELEMENT e l
else x::DELETE_ELEMENT e l)`;
And the previous definition suggested by Ramana based on FILTER now becomes a
theorem as alternative definition:
[DELETE_ELEMENT_FILTER] Theorem
|- ∀e L. DELETE_ELEMENT e L = FILTER (λy. e ≠ y) L
I found it’s easier to use the recursive definition, because many useful
results can be proved easily by induction on the list. For example:
[EVERY_DELETE_ELEMENT] Theorem
|- ∀e L P. P e ∧ EVERY P (DELETE_ELEMENT e L) ⇒ EVERY P L
[LENGTH_DELETE_ELEMENT_LE] Theorem
|- ∀e L. MEM e L ⇒ LENGTH (DELETE_ELEMENT e L) < LENGTH L
[LENGTH_DELETE_ELEMENT_LEQ] Theorem
|- ∀e L. LENGTH (DELETE_ELEMENT e L) ≤ LENGTH L
[NOT_MEM_DELETE_ELEMENT] Theorem
|- ∀e L. ¬MEM e (DELETE_ELEMENT e L)
What I actually needed is LENGTH_DELETE_ELEMENT_LE, but 3 months ago I just
couldn’t prove it!
However, I still have one more question: how can I express the fact that all
elements in (DELETE_ELEMENT e L) are also elements of L, with exactly the same
order and number of appearances? In another words, by inserting some “e” into
(DELETE_ELEMENT e L) I got the original list L?
Regards,
Chun Tian
> Il giorno 02 lug 2017, alle ore 10:23, Ramana Kumar
> <[email protected]> ha scritto:
>
> Sure, that's fine. I probably wouldn't even define such a constant but would
> instead use ``FILTER ((<>) x) ls`` in place.
>
> Stylistically it's usually better to use Define instead of new_definition,
> and to name defining theorems with a "_def" suffix. I'd also keep the name
> short like "DELETE" or even "delete".
>
> On 2 Jul 2017 17:04, "Chun Tian (binghe)" <[email protected]> wrote:
> Hi,
>
> It seems that ListTheory didn’t provide a way to remove elements from list?
> What’s the recommended way to do such operation? Should I use FILTER, for
> example, like this?
>
> val DELETE_FROM_LIST = new_definition (
> "DELETE_FROM_LIST", ``DELETE_FROM_LIST x list = (FILTER (\i. ~(i = x))
> list)``);
>
> Regards,
>
> Chun
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> hol-info mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/hol-info
>
signature.asc
Description: Message signed with OpenPGP using GPGMail
------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________ hol-info mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/hol-info
