Thanks for your comments.

If I quotient [1] the original CCS datatype into another one, I could expect to 
have the a “fix” constructor with a finite map, right?

On the the other side, what if I directly define another similar constant, say 
“Fix” in this form:

|- Fix fm X = fix (alist_to_fmap ls) X

And in all theorems I only use “Fix”. Is this possible (as a cheap solution) 
for resolving the “structural congruences” issue?

Regards,

Chun Tian

[1] Homeier, P.V.: Higher Order Quotients in Higher Order Logic. preparation; 
draft available at http://www cis …. (1969).

> Il giorno 27 ott 2017, alle ore 00:20, michael.norr...@data61.csiro.au ha 
> scritto:
> 
> Using alists rather than finite-maps will have the issue that
> 
>   fix [(X, a + Y); (Y, b + X)] X
> 
> will be seen as different to
> 
> fix [(Y, b + X); (X, a + Y)] X
> 
> when you might prefer them to be syntactically identical, but there are so 
> many “structural congruences” in this syntax that having to deal with one 
> more perhaps won’t be such a big deal.
> 
> And of course, you could try quotienting it up to all those identities….
> 
> Michael
> 
> From: "Chun Tian (binghe)" <binghe.l...@gmail.com>
> Date: Thursday, 26 October 2017 at 21:00
> To: "Norrish, Michael (Data61, Acton)" <michael.norr...@data61.csiro.au>
> Cc: hol-info <hol-info@lists.sourceforge.net>
> Subject: Re: [Hol-info] How to define term-like multi-recursive structures?
> 
> Hi again,
> 
> I'm surprised that, ``('a, 'b) alist`` (or ``('a # 'b) list``) is supported 
> by datatype package. So I'm going to have the following datatype in the 
> future:
> 
> val _ = Datatype `CCS = nil
>      | var 'a
>      | prefix ('b Action) CCS
>      | sum CCS CCS
>      | par CCS CCS
>      | restr (('b Label) set) CCS
>      | relab CCS ('b Relabeling)
>      | fix (('a # CCS) list) 'a `;
> 
> I wanted to use finite_map (learnt from Konrad Slind) but datatype package 
> doesn't support it, however alist is a prefect replacement.
> 
> Thus I would say my question can be closed, if there's no other suggestions.
> 
> Regards,
> 
> Chun Tian
> 
> 
> 
> On Thu, Oct 26, 2017 at 10:56 AM, Chun Tian (binghe) <binghe.l...@gmail.com> 
> wrote:
> Let me describe the problem again: (actually I have a candidate solution)
> 
> The central idea in the CCS grammar designed by Robin Milner is to use 
> inductively defined finite structures to represent potential infinite 
> structures. If I have the following equation of CCS:
> 
> X = a + X
> 
> The only solution would be an infinite sum of a:
> 
> X = a + a + a + ...
> 
> But we don't really need the infinite sum as part of CCS grammar, we can 
> write this form instead:
> 
> rec X (a + var X)
> 
> So the "equation with single variable" itself can be treated as a CCS 
> process.   But if I have multi-variable equations:
> 
> X = a + Y
> Y = b + X
> 
> the solution should be:
> 
> X = a + b + a + b + ...
> Y = b + a + b + a + ...
> 
> to represent the equation itself as a CCS process, I should at least put the 
> following "fix" constructor into the datatype:
> 
> fix ('a list) (CCS list) 'a
> 
> so that I can write a term
> 
> ``fix [X; Y] [a + var Y; b + var X] X``
> 
> which means "the value of X in the equation group in which X and Y are 
> unknown variables".  But if I write only partially:
> 
> ``fix [X; Y] [a + var Y; b + var X]``
> 
> above term should have the type ``:'a -> ('a, 'b) CCS``, which works like a 
> choice function, given any variable it returns the corresponding value of 
> that variable.
> 
> In my initial question, I wanted to put only ``fix ('a list) (CCS list)`` 
> into the CCS datatype, and that was wrong because the type of ``fix ('a list) 
> (CCS list)`` is not CCS, but (CCS list).
> 
> Can you see a better way to have a similar datatype?
> 
> Regards,
> 
> Chun Tian
> 
> 
> On Thu, Oct 26, 2017 at 1:20 AM, <michael.norr...@data61.csiro.au> wrote:
> I’m not sure why you say that you can’t add “fix” to the datatype declaration.
> 
> A line like
> 
>    | fix (CCS list)
> 
> would be accepted by Datatype.  Then the type of the constructor “fix” would 
> be
> 
>   fix : ('a,'b) CCS list -> ('a,'b) CCS
> 
> In short, I don't understand why you write "the type of ``fix …`` is *not* 
> CCS at all".
> 
> If your underlying constructors don't allow for "infinite" CCS terms (or 
> their encoding), then it's hard to know how you would ever define the sorts 
> of CCS constants that have infinite behaviours in time.  Perhaps one approach 
> would be to define the syntax as a co-datatype, allowing the syntax itself to 
> be infinite.  This'd be a bit weird though…
> 
> Michael
> 
> From: "Chun Tian (binghe)" <binghe.l...@gmail.com>
> Date: Thursday, 26 October 2017 at 00:05
> To: hol-info <hol-info@lists.sourceforge.net>
> Subject: [Hol-info] How to define term-like multi-recursive structures?
> 
> Hi,
> 
> sorry for keeping asking questions.  In my current CCS datatype, there's a 
> recursive constructor:
> 
> val _ = Datatype `CCS = nil
>      | var 'a
> ...
>      | rec 'a CCS `;
> 
> A term ``rec X (f (var X))`` is like the solution of an equation X = f(X), or 
> the fixed-point of f(), and its behavior is then defined by a set of rules.  
> What the Datatype package gives me, is to make sure "rec" and "var" are kind 
> of *primitive* constants, such that they're part of the one_one and 
> distinctness theorems of the CCS. (if I simply define a constant outside of 
> the datatype, I don't have such benefits at all, and many theorems will not 
> be proved)
> 
> Now  (as a long-term plan) I want to implement the ultimate, original form of 
> Milner's CCS [1], in which there's a "fix" (fixed-point) constructor.  It's 
> like a multi-variable version of above "rec" costructor, something like:
> 
> fix X p1 Y p2 Z p3 ...
> 
> If you think above term as a multi-variable equation groups, then each part 
> in its solution will be defined as a valid CCS term.  Such a "solution" (as a 
> container of CCS terms) may be represented as a finite_map ``:('a |-> ('a, 
> 'b) CCS)`` or simply a list ``:('a, 'b) CCS list``.
> 
> Obviously I can't put this "fix" directly into the definition of above CCS 
> datatype (let's assume HOL4 can do support nesting recursive datatype), 
> because the type of ``fix ...`` is *not* CCS at all.   But what is it if I 
> want such a constant? some kind of specification?
> 
> Regards,
> 
> Chun Tian
> 
> --
> Chun Tian (binghe)
> University of Bologna (Italy)
> 
> [1] Milner, R.: Operational and Algebraic Semantics of Concurrent Processes. 
> 1–41 (2017).
> 
> 
> 
> ------------------------------------------------------------------------------
> 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
> hol-info@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/hol-info
> 
> 
> 
> --
> Chun Tian (binghe)
> University of Bologna (Italy)
> 
> 
> 
> 
> --
> Chun Tian (binghe)
> University of Bologna (Italy)
> 
> ------------------------------------------------------------------------------
> 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
> hol-info@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/hol-info

Attachment: 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
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to