No ... my previous idea doesn't work. I got this goal unprovable:

CARD (J DELETE a) < CARD J
------------------------------------
  a ∈ J

because J is assumed to be FINITE.

I think I still need to know how to put the cardinality bound into the
relation for WF_REL_TAC ...

Regards,

Chun


On 1 July 2017 at 16:28, Chun Tian (binghe) <binghe.l...@gmail.com> wrote:

> Hi again,
>
> I think it's possible to change the original definition to make the
> cardinality *decrease* instead: previous I use the set J as the set of
> constants that have already been processed, but I can also rethink it as
> the set of contants that *remains to be processed*:
>
> So now I have a definition like this:
>
> val FN_defn = Hol_defn "FN" `
>    (FN (nil :('a, 'b) CCS) (J: 'a set) = (EMPTY :'b Label set)) /\
>    (FN (prefix (label l) p) J = l INSERT (FN p J)) /\
>    (FN (prefix tau p) J = FN p J) /\
>    (FN (sum p q) J = (FN p J) UNION (FN q J)) /\
>    (FN (par p q) J = (FN p J) UNION (FN q J)) /\
>    (FN (restr L p) J = (FN p J) DIFF (L UNION (IMAGE COMPL_LAB L))) /\
>    (FN (relab p rf) J = IMAGE (REP_Relabeling rf) (FN p J)) /\
>    (FN (var x) J = EMPTY) /\
>    (FN (rec x p) J = if (x IN J) then
>      FN (CCS_Subst p (rec x p) x) (J DELETE x)
>  else EMPTY) `;
>
> and by following your way, using: WF_REL_TAC `inv_image ($< LEX $<) (\x.
> (size (FST x), CARD (SND x)))`, and then I have the following sub-goal
> which looks perfect: (and no need to prove the well-foundness any more)
>
>      Current goal:
>
>      size (CCS_Subst p (rec x p) x) < size (rec x p) ∨
>      (size (CCS_Subst p (rec x p) x) = size (rec x p)) ∧
>      CARD (J DELETE x) < CARD J
>      ------------------------------------
>        x ∈ J
>
> To actually use this definition, I need to set the initial J set as the
> set of all constants in the CCS term, but that's irrelevant to the above FN
> definition.  So I would say my initial problem has completely resolved.
>
> Thank you again!!!
>
> Regards,
>
> Chun Tian
>
>
> On 1 July 2017 at 12:55, Ramana Kumar <ramana.ku...@cl.cam.ac.uk> wrote:
>
>> Hi Chun,
>>
>> Your relation that works looks like a lexicographic relation, which is
>> something wf_rel_tac should be able to handle automatically.
>> Could you try providing it using the LEX combinator, e.g.,
>> wf_rel_tac`inv_image ($< LEX $<) (\x y. (size(FST x), CARD(SND y)))`
>>
>> Actually, looking more closely, I see that you want the cardinality of J
>> to _increase_. This is not obviously well-founded: can you explain what the
>> upper limit of the cardinality of J is, and incorporate this into the
>> relation?
>>
>> Cheers,
>> Ramana
>>
>> On 1 July 2017 at 19:51, Konrad Slind <konrad.sl...@gmail.com> wrote:
>>
>>> Hi Chun Tian,
>>>
>>>  I'd have to look more closely at your desired function to be able to
>>> help.
>>> But, it's late and my eyes are giving out.
>>>
>>> If all you are after is to compute free names, maybe there is a better
>>> way.
>>> The following is what I would do for defining an operation calculating
>>> the free variables
>>> in the lambda calculus, and the same idea should I hope also work for
>>> CCS. The main benefit is that
>>> you don't have a call to another function (substitution) in the
>>> recursive call. And termination
>>> is trivial.
>>> ------------------------------------------------------------
>>> ---------------------------------------
>>> load "stringLib";
>>>
>>> Datatype `term = Var string | App term term | Abs string term`;
>>>
>>> val FV_def =
>>>  Define
>>>   `(FV (Var s) scope = if s IN scope then {} else {s}) /\
>>>    (FV (App t1 t2) scope = FV t1 scope UNION FV t2 scope) /\
>>>    (FV (Abs v t) scope = FV t (v INSERT scope))`;
>>>
>>>
>>> On Sat, Jul 1, 2017 at 4:14 AM, Chun Tian (binghe) <
>>> binghe.l...@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I have an inductive datatype called CCS and a recursive function FN
>>>> trying to collect all free names of any CCS term into a set:
>>>>
>>>> val FN_def = Define `
>>>>   (FN (nil :('a, 'b) CCS) (J: 'a set) = (EMPTY :'b Label set)) /\
>>>> ...
>>>>   (FN (rec x p) J = if (x IN J) then EMPTY
>>>>   else FN (CCS_Subst p (rec x p) x)
>>>>   (x INSERT J))`;
>>>>
>>>> val free_names = new_definition ("free_names",
>>>>  ``free_names p = FN(p, EMPTY)``);
>>>>
>>>> The only reason that HOL can’t prove the termination is because of the
>>>> last branch in above definition involving another recursive function
>>>> CCS_Subst: in some cases the term ``(CCS_Subst p (rec x p) x)`` may return
>>>> ``(rec x p)``, and as a result, the size of the first parameter of FN
>>>> doesn’t decrease!
>>>>
>>>> But this is why I have the second parameter J of FN: whenever
>>>> calculating the value of ``FN (rec x p) J``, it first check if x is in the
>>>> set J, and the recursive call happens only if it’s not in, and then x is
>>>> inserted into J to prevent further recursive invocation of FN at deeper
>>>> levels.  So I believe above definition is well-defined and must always
>>>> terminate.  In another words, for all other branches, the size of CCS term
>>>> must decrease in recursive calls, and in the last branch, the cardinality
>>>> of the set J will increase.
>>>>
>>>> I firstly tried to use WF_REL_TAC with a measure, but I could NOT find
>>>> a good measure with both parameters considered. For example, if I use “the
>>>> size of CCS term MINUS the cardinality of the set J”, which seems always
>>>> decrease in each recursive calls, i.e.  WF_REL_TAC `measure (\x. (size o
>>>> FST) x - (CARD o SND) x)`,   this is actually not a measure, because it may
>>>> also take negative values, thus not WF at all.
>>>>
>>>> Now if I try to use Defn.tgoal to find the tacticals which helps HOL to
>>>> prove the termination, I got the following initial goal:
>>>>
>>>>     Initial goal:
>>>>
>>>>     ∃R.
>>>>       WF R ∧
>>>>       (∀p J x.
>>>>          x ∉ J ⇒ R (CCS_Subst p (rec x p) x,x INSERT J) (rec x p,J)) ∧
>>>>       (∀q J p. R (p,J) (p || q,J)) ∧ (∀p J q. R (q,J) (p || q,J)) ∧
>>>>       (∀q J p. R (p,J) (p + q,J)) ∧ (∀p J q. R (q,J) (p + q,J)) ∧
>>>>       (∀l J p. R (p,J) (label l..p,J)) ∧
>>>>       (∀rf J p. R (p,J) (relab p rf,J)) ∧ (∀J p. R (p,J) (τ..p,J)) ∧
>>>>       ∀L J p. R (p,J) (ν L p,J)
>>>>
>>>> So the goal is nothing but to supply a relation such that, the
>>>> parameter pairs in each recursive call must be strictly “smaller”.  But if
>>>> I supply such a relation:
>>>>
>>>> Q.EXISTS_TAC `\x y. (size (FST x) < size (FST y)) \/
>>>>        ((size (FST x) = size (FST y)) /\ (CARD (SND x) > CARD (SND y)))`
>>>>
>>>> which seems precisely captured my understanding on the termination
>>>> condition. But the funny thing is, I can prove all the sub-goals except for
>>>> the well-foundness (that is, WF R), which is automatically handled in the
>>>> WF_REL_TAC approach.
>>>>
>>>> Can anyone suggest me some ideas or possible paths to resolve this
>>>> issue? or possible ways to prove the WF of arbitrary relations? Since all
>>>> the related defintions are long and omitted, I’m not expecting any
>>>> ready-to-use scripts.
>>>>
>>>> Regards,
>>>>
>>>> Chun Tian
>>>>
>>>> --
>>>> 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
>>>
>>>
>>
>
>
> --
> 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

Reply via email to