Hi,

This mail is long, it’s very important for me, and it's a continuation of my 
previous two big questions in 3 months ago, titled "On the use of new_axiom() 
in formal projects” and "How to define "infinite sums" of custom datatypes?”.

The good thing is, I have resolved the previous difficulties in expressing 
infinite sums in process algebra, and have prevented using an axiom.  I didn’t 
use the paper of Dr. Andrei Popescu, simply because it’s too hard for my 
current skills.  I also didn’t use the idea from Michael Norrish, by 
introducing another larger Datatype:

 Datatype`CCS = … existing def … (* with or without finite/binary sums *)`
 Datatype`bigCCS = SUM (num -> CCS)`

Because the "infinite sum” in my problem happens at infinite levels, but this 
“bigCCS” cannot further include itself.

My solution is to embed LTS (labeled transition system) into CCS datatype:

val _ = type_abbrev ("LTS", ``:('a ordinal, 'b Action) graph``);

(* Define the type of (pure) CCS agent expressions. *)
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)
                      | rec 'a CCS
                      | lts ('a ordinal) (('a, 'b) LTS)`;

here the type “:(‘a, ‘b) graph” is my creation in response of providing a 
general graph theory formalization [1], ‘a is the type of vertex, ‘b is the 
type of edge label. Currently it’s far from complete, with lots of possibly 
wrong definitions but no much supporting theorems. But it worked for my current 
needs. For my problem described in this mail, the structure of this graph 
doesn’t matter, you can safely think it’s a set (defined by pred_setTheory) 
with 'a ordinals as vertices.

The “lts” constructor in above CCS datatype is my creation without knowing any 
similar work.  the term ``lts r G`` means a rooted LTS, where “r” is a vertex 
in the graph G, as the root node.   For this new constructor, I have defined a 
single transition rule:

val (TRANS_rules, TRANS_ind, TRANS_cases) = Hol_reln `
    (!E u.                           TRANS (prefix u E) u E) /\         (* 
PREFIX *)
    (!E u E1 E'.    TRANS E u E1 ==> TRANS (sum E E') u E1) /\          (* SUM1 
*)
    (!E u E1 E'.    TRANS E u E1 ==> TRANS (sum E' E) u E1) /\          (* SUM2 
*)
...
    (!E u E' G.     (E, u, E') IN (TS G)
                ==> TRANS (lts E G) u (lts E' G)) `;                    (* LTS 
*)

That is,  TRANS (lts E G) u (lts E' G) is true if and only if there is a 
labeled edge E—u—>E’ in the graph G.    The most surprising fact is, after 
introducing such a new constructor “lts” and its transition rule,   all my 
previous proved theorems are still working.  The only changes I have to do, is 
very few theorems in which the TRANS_cases theorem is used, but the additional 
sub-goal is trivial.

So, all my definitions like Bisimulation, Weak bisimulation, etc. now also work 
in pure transition systems (as rooted directed graphs). I feel so happy for 
having LTS included in my formalization of CCS and prevented for re-defining 
almost everything again.    And the mixing of LTS and CCS is now also 
meaningful:   two graphs can be connected directly by algebraic operators, and 
the combined transition characteristics still make perfect sense.

Now I have the following so-called Klop process, which is actually an set of 
“Arbitrary many non-bisimiar process”:

Klop l n =
     ABS_graph ({m | m ≤ n},{{p} --label l--> {q} | p ≤ n ∧ q < p}):

without any new axiom, now I can prove the following properties:

   [KLOP_PROP0]  Theorem (all these processes are stable, i.e. has no 
tau-transition)

      |- ∀a n. STABLE (KLOP a n)

   [KLOP_PROP1]  Theorem (any transition from such a process, leads to a 
smaller process by the same generator)

      |- ∀a n E. KLOP a n --label a--> E ⇔ ∃m. m < n ∧ (E = KLOP a m)

   [KLOP_PROP1']  Theorem (the same as above, but for weak transition, which is 
actually strong transition because there’s no tau at all)

      |- ∀a n E. KLOP a n ==label a=-> E ⇔ ∃m. m < n ∧ (E = KLOP a m)

   [KLOP_PROP2]  Theorem (two different sized such processes are not strong 
bisimilar)

      |- ∀a n m. m < n ⇒ ¬(KLOP a m ∼ KLOP a n)

   [KLOP_PROP2']  Theorem (two different sized such processes are also not weak 
bisimilar)

      |- ∀a n m. m < n ⇒ ¬(KLOP a m ≈ KLOP a n)

Again, I feel so happy for successfully proved and defined above function and 
its properties.   Now it remains to use it for proving the ultimate “simple” 
theorem above process algebra:

``!p q. OBS_CONGR p q = !r. WEAK_EQUIV (sum p r) (sum q r)``   (observation 
congruence is the coarsest congruence contained in weak bisimulation)

Now it’s touching my question and two difficulties:

The proof of above theorem has been reduced to: finding a special process K, 
which is not (weak) bisimilar with any node in the transition graph of two 
given processes p and q.  The informal proof [2] is like this:

        “Let c be the smallest infinite cardinal, such that NODES(p) and 
NODES(q) has less than c nodes. So there are less than c processes in NODES(p) 
and NODES(q).   Then there’s a tau-free process K with NODES(K) < c, such that 
k is not bisimiar with any nodes in NODES(p) and NODES(q),     BECAUSE: for 
each infinite cardinal c there are c ordinals smaller than c.”

If I've learnt correctly, in standard set theory, all cardinals are ordinals, 
but the reverse is not true, because not every ordinals “has the same number 
(as itself) of smaller ordinals”.    But in HOL’s currently formalization, 
cardinalTheory is depended by ordinalTheory, and ordinalTheory didn’t define 
“cardinal numbers” at all.    Whenever an informal proof says "Let xxx be the 
smallest infinite cardinal, such that …”, I don’t know how to formalize it at 
all, because there’s no concept of “cardinal (number)” that I can use.

Further more, my Klop function has the type:    ‘a ordinal -> (‘a, ‘b) CCS.   I 
have no way to change the first type variable to ‘c so that it’s independent 
with type variables used in CCS, because ordinal numbers were actually written 
as part of the CCS processes (as vertices in the lts graph).   But this means I 
have no way to use my previous proved theorem:

  [ONE_ONE_IMP_NOTIN]  Theorem

      |- ∀A f. ONE_ONE f ⇒ ∃n. f n ∉ A

which is based on “univ_ord_greater_cardinal” in ordinalTheory.   Because the 
type unification will fail:  for any set of type ``(:’a, ‘b) CCS -> bool``, I 
have no way to say there’s always a bigger ‘a ordinal, which is “larger” than 
the “cardinality” of the set.    Also please noticed that, now my CCS is at 
least as large as the “set" of all ‘a ordinals, because I do can inject each 
single ordinals into a CCS process, i.e. my Klop function defined above.

I hope I’ve explained well for my two questions, let me summarize them again:

1. How to express the cardinality of a set as “cardinal numbers” in HOL?
2. How to find a larger ordinal for a set of custom-defined datatype, when 
their type variables are related?

Best regards,

Chun Tian

[1] 
https://github.com/binghe/informatica-public/blob/master/thesis/GraphScript.sml
[2] van Glabbeek, R.J.: A characterisation of weak bisimulation congruence. 
Lecture notes in computer science. 3838, 26–39 (2005).


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