Hi, Michael Is there an injection from :num to any type defined by HOL’s Datatype? if so, maybe I can still work out something…
Regards, Chun > Il giorno 24 lug 2017, alle ore 03:27, michael.norr...@data61.csiro.au ha > scritto: > > Even if you can’t prove your result for an arbitrary injective f, does it > hold for the particular f that you have defined? > > (There are plenty of injective functions between equi-numerous sets that are > not onto…) > > Michael > > On 23/7/17, 01:07, "Chun Tian (binghe)" <binghe.l...@gmail.com> wrote: > > Hi Konrad, > > Thanks again. But unfortunately I found that, my problem won’t get > resolved even if I have the desired datatype defined… Suppose I already have > the datatype defined by whatever method, now it contains the infinite sum > based on ordinals: > > CCS = Summ (‘c ordinal -> CCS) > > My CCS datatype already has two type variables ‘a, ‘b. Now it has three: > ``:(‘a, ‘b, ‘c) CCS``. The recursive function f() defined in my proof was > having the type ``:‘c ordinal -> (‘a, ‘b) CCS``, now it has the type ``:‘c > ordinal -> (‘a, ‘b, ‘c) CCS``. But it’s impossible to make the cardinality > of ``univ(:’c)`` bigger than any set A of type ``:(‘a, ‘b, ‘c) CCS set``, so > that there must exist an ordinal n such that ``f(n) NOTIN A`` (f is ONE_ONE), > because the theorem “univ_ord_greater_cardinal" in ordinalTheory only works > between ``univ(:’c ordinal)`` and any set of type (:‘c inf). No matter how I > change ‘c, no way to unify ``:’c ordinal`` and ``:(‘a, ‘b, ‘c) CCS set``. > (But previously it was possible when ‘c is not part of type variables in CCS, > I can choose ``:(‘a, ‘b) CCS ordinal`` as ``:’c ordinal``) > > |- 𝕌(:α inf) ≺ 𝕌(:α ordinal) [univ_ord_greater_cardinal] > > On the other side, if I have the (impossible) infinite set constructor: > CCS = Summ (CCS -> bool), then above problem doesn’t exist at all, because > type variable of ordinals (‘c) is not part of CCS datatype. > > In Michael’s paper [1], he said "Unfortunately, the typed logic > implemented in the various HOL systems (including Isabelle/HOL) is not strong > enough to define a type for all possible ordinal values”, thus essentially > this is a limitation in higher order logic. Let me know if you see > different situations... > > I’m going to deliver the project as is, with the a minimized infinite sum > axiom isolated in a very small part of the project concerning only the last > part of the last theorem. In the future, I consider to use LTS (labeled > transition systems, or (possibly infinite) directed graphs) to finish the > proof. Infinite graphs can easily be defined using pred_setTheory, no need > to use Datatype at all. > > P. S. I’ll still investigate your sample code and the paper I got from > Andrei Popescu yesterday, and try to extend my datatype with countably > infinite sums (num -> CCS) , but this work will be irrelevant with the proof > of the “last theorem” in my project. > > Regards, > > Chun Tian > > [1] Norrish, M., Huffman, B. (2013). Ordinals in HOL: Transfinite > Arithmetic up to (and Beyond), 1–14. > >> Il giorno 22 lug 2017, alle ore 16:25, Konrad Slind <konrad.sl...@gmail.com> >> ha scritto: >> >> You are welcome. If you are interested, we can try to specialize it to your >> datatype. The one I was working with was quite complicated, but yours >> is much smaller. >> >> Konrad. >> >> >> On Sat, Jul 22, 2017 at 2:58 AM, Chun Tian (binghe) <binghe.l...@gmail.com> >> wrote: >> Hi Knorad, >> >> Sorry for late response. Thank you very much for providing this sample >> script, although I have to admit that, currently I couldn’t understand such >> complicated HOL code, obviously I still have long way to learn:) >> >> Regards, >> >> Chun >> >>> Il giorno 14 lug 2017, alle ore 16:41, Konrad Slind >>> <konrad.sl...@gmail.com> ha scritto: >>> >>> I can send you a hand-rolled development that I did a few years ago >>> (with Michael's help) of Norbert Schirmer's SIMPL. The type constructor >>> defined is >>> >>> ('a,'b,'c) prog >>> >>> and one of the constructors has type >>> >>> ('a -> ('a,'b,'c) prog) -> ('a,'b,'c) prog >>> >>> which seems close to what you want. >>> >>> Konrad. >>> >>> >>> On Fri, Jul 14, 2017 at 1:47 AM, Chun Tian (binghe) <binghe.l...@gmail.com> >>> wrote: >>> Hi Michael, >>> >>> Great, thanks! Then I guess the only remain issue in my project is to >>> define this datatype by hand. I’ll make a deeper reading in Tom Melham’s >>> paper [1] and see how such job can be done. If there're other relevant >>> materials, please let me know (at least the title). >>> >>> Regards, >>> >>> Chun Tian >>> >>> [1] Melham, Tom. Automating recursive type definitions in higher order >>> logic. 1989. >>> >>>> Il giorno 14 lug 2017, alle ore 08:24, <michael.norr...@data61.csiro.au> >>>> <michael.norr...@data61.csiro.au> ha scritto: >>>> >>>> Note further that a type where you have >>>> >>>> Datatype‘CCS = C1 … | C2 .. | SUM (num -> CCS)’; >>>> >>>> does not fall foul of cardinality problems. (You can recurse to the right >>>> of a function arrow as above, but not to the left, as would happen in SUM >>>> (CCS -> bool).) >>>> >>>> So, when I wrote “you just can’t have infinite sums”, I was over-stating. >>>> If you see num -> CCS as enough of an infinite sum, then you’re OK. (And >>>> you could certainly also have “SUM : ('a ordinal -> CCS) -> CCS”.) >>>> >>>> Unfortunately, HOL4’s Datatype principle doesn’t allow the definition >>>> above as I’ve written it, but such types can be defined by hand with >>>> sufficient patience. >>>> >>>> Michael >>>> >>>> On 14/7/17, 14:47, "michael.norr...@data61.csiro.au" >>>> <michael.norr...@data61.csiro.au> wrote: >>>> >>>> You just can’t have infinite sums inside the existing type for the >>>> cardinality reasons. But there’s no reason why you couldn’t have a type >>>> that featured infinite sums over a base type that didn’t itself include >>>> infinite sums. >>>> >>>> Something like >>>> >>>> Datatype`CCS = … existing def … (* with or without finite/binary sums >>>> *)` >>>> >>>> Datatype`bigCCS = SUM (num -> CCS)` >>>> >>>> Depending on the degree of branching you want, you might replace the num >>>> above with something else. Indeed, you could replace it with ‘a ordinal. >>>> >>>> Michael >>>> >>>> On 14/7/17, 04:15, "Chun Tian (binghe)" <binghe.l...@gmail.com> wrote: >>>> >>>> Hi Ramana, >>>> >>>> Thanks for explanation and hints. Now it’s clear to me that, I >>>> *must* remove the new_axiom() from the project, even if this means I have >>>> to bring some “ugly” solutions. >>>> >>>> Now I see ord_RECURSION is a universal tool for defining recursive >>>> functions on ordinals, for this part I have no doubts any more. But my >>>> datatype is discrete, no order, no accumulation, currently I can’t see a >>>> function (lf :’a ordinal -> ‘b set -> ‘b) which can be supplied to >>>> ord_RECURSION .. >>>> >>>> Currently I’m trying to something else in the datatype, and I have >>>> to replay all theorems in the project to see the side effects. Meanwhile I >>>> would like to hear from other HOL users for possible solutions on the >>>> infinite sum problem which looks quite a common need .. >>>> >>>> Regards, >>>> >>>> Chun >>>> >>>>> Il giorno 13 lug 2017, alle ore 14:35, Ramana Kumar >>>>> <ramana.ku...@cl.cam.ac.uk> ha scritto: >>>>> >>>>> Some very quick answers. Others will probably go into more detail. >>>>> >>>>> 1. If you use new_axiom, it becomes your responsibility to ensure that >>>>> your axiom is consistent. If it is not consistent, the principle of >>>>> explosion makes any subsequent formalisation vacuous. (If you don't use >>>>> new_axiom, it can be shown that any formalisation is consistent as long >>>>> as set theory is consistent.) >>>>> >>>>> 2. Yes. But you should probably detail why you claim that the axiom is >>>>> consistent and that you wrote it down correctly. It also makes it less >>>>> appealing for others to build on your work subsequently. >>>>> >>>>> 3. Yes. Prove the existence of functions defined on ordinals, specialise >>>>> that existence theorem with your desired definition, then use >>>>> new_specification. Maybe the required theorem exists already? Does >>>>> ord_RECURSION do it? See how ordADD is defined. (I haven't looked at this >>>>> in detail.) >>>>> >>>>> On 13 July 2017 at 21:10, Chun Tian (binghe) <binghe.l...@gmail.com> >>>>> wrote: >>>>> Hi, >>>>> >>>>> (Thank you for your patience for reading this long mail with the question >>>>> at the end) >>>>> >>>>> Recently I kept working on the formal proof of an important (and elegant) >>>>> theorem in CCS, in which the proof requires the construction of a >>>>> recursive function defined on ordinals (returning infinite sums of CCS >>>>> processes). Here is the informal definition: >>>>> >>>>> 1. Klop a 0o := nil >>>>> 2. Klop a (ordSUC n) := Klop a n + (prefix a (Klop a n)) >>>>> 3. islimit n ==> >>>>> Klop a n := SUM (Klop a m) for all ordinals m < n >>>>> >>>>> (here the "+" operator is overloaded, it's the "sum" of an custom >>>>> datatype (CCS) defined by HOL's Define command. "prefix" is another >>>>> operator, both are 2-ary) >>>>> >>>>> I think it's a well-defined function, because the ordinal arguments >>>>> strictly becomes smaller in each recursive call. But I don't know how to >>>>> formall prove it, and of course HOL's Define package doesn't support >>>>> ordinals at all. >>>>> >>>>> On the other side, my datatype doesn't support infinite sums at all, and >>>>> it seems no hope for me to successfully defined it, after Michael has >>>>> replied my easier email and explained the cardinality issues for such >>>>> nested types. >>>>> >>>>> So I got two issues here: 1) no way to define infinite sums, 2) no way to >>>>> define resursive functions on ordinals. But I found a "solution" to >>>>> bypass both issues: instead of trying to express infinite sums, I turn to >>>>> focus on the behavior of the infinite sums and define the behavior >>>>> directly as an axiom. In CCS, if a process p transits to p', then p + q >>>>> + ... (infinite other process) still transit to p'. Thus I wrote the >>>>> following "cases" theorem (which looks quite like the 3rd return values >>>>> by Hol_reln) talking about a new constant "Klop" >>>>> >>>>> val _ = new_constant ("Klop", ``:'b Label -> 'c ordinal -> ('a, 'b) >>>>> CCS``); >>>>> >>>>> |- (!a. Klop a 0o = nil) ∧ >>>>> (!a n u E. >>>>> Klop a n⁺ --u-> E <==> >>>>> u = label a ∧ E = Klop a n ∨ Klop a n --u-> E) ∧ >>>>> !a n u E. >>>>> islimit n ==> (Klop a n --u-> E <==> !m. m < n ∧ Klop a m --u-> E) >>>>> >>>>> I used new_axiom() to make above definion accepted by HOL. I don't know >>>>> how to "prove" it, don't even know what to prove, because it's just a >>>>> definition on a new logical constant (acts as a black-box function), >>>>> while it's behaviour is exactly the same as if I have infinite sums in my >>>>> datatype and HOL has the ability to define recursive function on ordinals. >>>>> >>>>> From now on, I need no other axioms at all. Then I can prove the >>>>> following "rules" theorems which looks like the first return value of >>>>> Hol_reln: >>>>> >>>>> |- (!a n. Klop a n⁺ --label a-> Klop a n) ∧ >>>>> !a n m u E. islimit n ∧ m < n ∧ Klop a m --u-> E ==> Klop a n --u-> E >>>>> >>>>> Then I can use transfinite inductino to prove a lot of other properties >>>>> of the function ``Klop a``. And with a lot of work, finally I have proved >>>>> the following elegant theorem in Concurrent Theory: >>>>> >>>>> Thm. (Coarsest congruence contained in weak equivalence) >>>>> |- !g h. g ≈ʳ h <==> !r. g + r ≈ h + r >>>>> >>>>> ("≈ʳ" is observation congruence, or rooted weak bisimulation equivalence. >>>>> "≈" is weak bisimulation equivalence) >>>>> >>>>> Every lemma or proof step corresponds to the original paper [1] with >>>>> improvements or simplification. And if you let me to write down the >>>>> informal proof (from the formal proof) using strict Math notations and >>>>> theorems from related theories, I have full confidence to convince people >>>>> that it's a correct proof. >>>>> >>>>> But I do have used new_axiom() in my proof script. My questions: >>>>> >>>>> 1. What's the risk for a new_axiom() used on a new constant to break the >>>>> consistency of entire HOL Logic? >>>>> 2. With new_axiom() used, can I still claim that, I have correctly >>>>> formalized the proof of that theorem? >>>>> 3. (optionall) is there any hope to prevent using new_axiom() in my case? >>>>> >>>>> Best regards, >>>>> >>>>> Chun Tian >>>>> >>>>> [1] van Glabbeek, Rob J. "A characterisation of weak bisimulation >>>>> congruence." Lecture notes in computer science 3838 (2005): 26. >>>>> >>>>> -- >>>>> 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 >>>>> >>>>> >>>> >>>> >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> 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 >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> 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 >>> >>> >>> ------------------------------------------------------------------------------ >>> 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 >>> >>> >>> <progScript.sml> >> >> > > > > ------------------------------------------------------------------------------ > 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
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