My comment is about how this is done in HOL, where the existing axiomatization 
is sufficient to give the behaviour as I have explained it.

Michael

From: Saburou Saitoh <saburou.sai...@gmail.com>
Date: Saturday, 10 August 2019 at 10:28
To: "Norrish, Michael (Data61, Acton)" <michael.norr...@data61.csiro.au>
Cc: "Chun Tian (binghe)" <binghe.l...@gmail.com>, hol-info 
<hol-info@lists.sourceforge.net>
Subject: Re: [Hol-info] 0 / 0 = 0 ???


Dear  Michael

For  x/0, the essential problem is on its definition.
I think the division by zero is trivial and clear all.
However, we will need a new axiom.
So, I would like to ask for your kind help for the axiom problem; Foundation of 
Mathematics.

Please look the draft:


viXra:1908.0100<http://vixra.org/abs/1908.0100> submitted on 2019-08-06 
20:03:01,

Fundamental of Mathematics; Division by Zero Calculus and a New Axiom


With best regards,
Sincerely yours,

Saburou Saitoh
2019.8.10.9:25



2019年8月10日(土) 9:07 Norrish, Michael (Data61, Acton) 
<michael.norr...@data61.csiro.au<mailto:michael.norr...@data61.csiro.au>>:
It’s still defined inasmuch as it is perfectly legitimate to write x/0 and use 
that term to define other things in turn.   For example, I can define foo = x/0 
+ 1 and then quite successfully prove that x/0 < foo.

I would avoid the use of the word undefined in this context; rather x/0 has an 
unspecified value.  All functions are total so all applications of functions to 
all possible arguments have values.

Michael

> On 9 Aug 2019, at 21:46, Chun Tian (binghe) 
> <binghe.l...@gmail.com<mailto:binghe.l...@gmail.com>> wrote:
>
> A follow-up of this old topic:
>
> Finally I found the following definitions of `extreal_inv` and `extreal_div` 
> based on new_specification():
>
> local
>  val lemma = Q.prove (
>     `?i. (i NegInf = Normal 0) /\
>          (i PosInf = Normal 0) /\
>          (!r. r <> 0 ==> (i (Normal r) = Normal (inv r)))`,
>   (* proof *)
>      Q.EXISTS_TAC `\x. if (x = PosInf) \/ (x = NegInf) then Normal 0
>                        else if x = Normal 0 then ARB
>                        else Normal (inv (real x))` \\
>      RW_TAC std_ss [extreal_not_infty, real_normal]);
> in
>  (* |- extreal_inv NegInf = Normal 0 /\
>        extreal_inv PosInf = Normal 0 /\
>        !r. r <> 0 ==> extreal_inv (Normal r) = Normal (inv r)
>   *)
>  val extreal_inv_def = new_specification
>    ("extreal_inv_def", ["extreal_inv"], lemma);
> end;
>
> local
>  val lemma = Q.prove (
>     `?d. (!r. d (Normal r) PosInf = Normal 0) /\
>          (!r. d (Normal r) NegInf = Normal 0) /\
>          (!x r. r <> 0 ==> (d x (Normal r) = extreal_mul x (extreal_inv 
> (Normal r))))`,
>   (* proof *)
>      Q.EXISTS_TAC `\x y.
>        if ((y = PosInf) \/ (y = NegInf)) /\ (?r. x = Normal r) then Normal 0
>        else if y = Normal 0 then ARB
>        else extreal_mul x (extreal_inv y)` \\
>      RW_TAC std_ss [extreal_not_infty, real_normal]);
> in
>  (* |- (!r. extreal_div (Normal r) PosInf = Normal 0) /\
>        (!r. extreal_div (Normal r) NegInf = Normal 0) /\
>        !x r. r <> 0 ==> extreal_div x (Normal r) = x * extreal_inv (Normal r)
>   *)
>  val extreal_div_def = new_specification
>    ("extreal_div_def", ["extreal_div"], lemma);
> end;
>
> In this way, things like `extreal_inv 0` and `extreal_div x 0` are *really* 
> undefined.
>
> --Chun
>
> Il 20/02/19 06:48, 
> michael.norr...@data61.csiro.au<mailto:michael.norr...@data61.csiro.au> ha 
> scritto:
>> Your right hand side is no better than ARB really.  You say that your aim is 
>> to avoid x/0 = y, with y a literal extreal.  But if you believe ARB is a 
>> literal extreal, then I will define
>>
>>  val pni_def = Define`pni = @x. (x = PosInf) \/ (x = NegInf)`;
>>
>> and then I can certainly prove that x/0 = pni.  If ARB is a literal extreal, 
>> surely pni is too.
>>
>> (Recall that ARB's definition is `ARB = @x. T`.)
>>
>> Michael
>>
>>
>> On 20/2/19, 09:31, "Chun Tian (binghe)" 
>> <binghe.l...@gmail.com<mailto:binghe.l...@gmail.com>> wrote:
>>
>>    Some further updates:
>>
>>    With my last definition of `extreal_div`, I still have:
>>
>>     |- !x. x / 0 = ARB
>>
>>    and
>>
>>     |- 0 / 0 = ARB
>>
>>    trivially holds (by definition). This is still not satisfied to me.
>>
>>    Now I tried the following new definition which looks more reasonable:
>>
>>    val extreal_div_def = Define
>>       `extreal_div x y = if y = Normal 0 then
>>                  (@x. (x = PosInf) \/ (x = NegInf))
>>                  else extreal_mul x (extreal_inv y)`;
>>
>>    literally, it says anything (well, let's ignore zero) divides zero is
>>    equal to either +Inf or -Inf.  But actually the choice of +Inf/-Inf is
>>    irrelevant, as the sole purpose is to prevent any theorem like ``|- x /
>>    0 = y`` being proved, in which y is a literal extreal. For example, if I
>>    try to prove ``!x. x / 0 = ARB``:
>>
>>    (* with the new definition, ``x / 0 = ARB`` (or any other extreal) can't
>>    be proved, e.g.
>>    val test_div = prove (
>>       `!x. extreal_div x (Normal 0) = ARB`,
>>        RW_TAC std_ss [extreal_div_def]
>>>> Suff `(\f. f = ARB) (@x. (x = PosInf) ∨ (x = NegInf))`
>>> - RW_TAC std_ss []
>>>> MATCH_MP_TAC SELECT_ELIM_THM
>>>> RW_TAC std_ss [] (* 3 gubgoals *)
>>       NegInf = ARB
>>
>>       PosInf = ARB
>>
>>       ∃x. (x = PosInf) ∨ (x = NegInf));
>>     *)
>>
>>    at the end I got 3 subgoals like above. I *believe*, no matter what
>>    value I put instead of ARB, at least one of the subgoals must be false.
>>    Thus the theorem should be unprovable. (am I right?)
>>
>>    Can I adopt this new definition of `extreal_div` in the future? Any
>>    objection or suggestion?
>>
>>    --Chun
>>
>>    Il 15/02/19 23:37, Chun Tian (binghe) ha scritto:
>>> I'm going to use the following definition for `extreal_div`:
>>>
>>> (* old definition of `extreal_div`, which allows `0 / 0 = 0`
>>> val extreal_div_def = Define
>>>   `extreal_div x y = extreal_mul x (extreal_inv y)`;
>>>
>>>   new definition of `extreal_div`, excluding the case `0 / 0`: *)
>>> val extreal_div_def = Define
>>>   `extreal_div x y = if (y = Normal 0) then ARB
>>>                      else extreal_mul x (extreal_inv y)`;
>>>
>>> previously ``|- !x. inv x = 1 / x`` holds, now I have to add `x <> 0` as
>>> antecedent, which makes perfectly senses.
>>>
>>> P.S. the division of extended reals in HOL4 are not used until the
>>> statement and proof of Radon-Nikodým theorem, then the conditional
>>> probability.
>>>
>>> --Chun
>>>
>>> Il 15/02/19 17:39, Mark Adams ha scritto:
>>>> I think there is definitely an advantage in keeping ``x/y`` undefined
>>>> (even granted that it will always be possible to prove ``?y. x/0 = y``),
>>>> namely that it means that your proofs are much more likely to directly
>>>> translate to other formalisms of real numbers where '/' is not total.
>>>>
>>>> Of course there is also a disadvantage, in that it makes proof harder.
>>>> But then, arguably, being forced to justify that we are staying within
>>>> the "normal" domain of the function is probably a good thing (in a
>>>> similar way as being forced to conform to a type system is a good
>>>> thing).  I understand that, historically, it is this disadvantage of
>>>> harder proofs that was the reason for making ``0/0=0`` in HOL.  It's
>>>> much easier for automated routines if they don't have to consider side
>>>> conditions.
>>>>
>>>> Mark.
>>>>
>>>>> On 15/02/2019 08:56, Chun Tian (binghe) wrote:
>>>>> Thanks to all kindly answers.
>>>>>
>>>>> Even I wanted ``0 / 0 = 0`` to be excluded from at least
>>>>> "extreal_div_def" (in extrealTheory), I found no way to do that. All I
>>>>> can do for now is to prevent ``0 / 0`` in all my proofs - whenever it's
>>>>> going to happen, I do case analysis instead.
>>>>>
>>>>> --Chun
>>>>>
>>>>> Il 14/02/19 18:12, Konrad Slind ha scritto:
>>>>>> It's a deliberate choice. See the discussion in Section 1.2 of
>>>>>>
>>>>>> http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=775DBF504F7EE4EE28CC5169488F4190?doi=10.1.1.56.4692&rep=rep1&type=pdf
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Feb 14, 2019 at 10:40 AM Chun Tian (binghe)
>>>>>> <binghe.l...@gmail.com<mailto:binghe.l...@gmail.com> 
>>>>>> <mailto:binghe.l...@gmail.com<mailto:binghe.l...@gmail.com>>> wrote:
>>>>>>
>>>>>>    Hi,
>>>>>>
>>>>>>    in HOL's realTheory, division is defined by multiplication:
>>>>>>
>>>>>>    [real_div]  Definition
>>>>>>
>>>>>>          ⊢ ∀x y. x / y = x * y⁻¹
>>>>>>
>>>>>>    and zero multiplies any other real number equals to zero, which is
>>>>>>    definitely true:
>>>>>>
>>>>>>       [REAL_MUL_LZERO]  Theorem
>>>>>>
>>>>>>          ⊢ ∀x. 0 * x = 0
>>>>>>
>>>>>>    However, above two theorems together gives ``0 / 0 = 0``, as shown
>>>>>>    below:
>>>>>>
>>>>>>> REWRITE_RULE [REAL_MUL_LZERO] (Q.SPECL [`0`, `0`] real_div);
>>>>>>    val it = ⊢ 0 / 0 = 0: thm
>>>>>>
>>>>>>    How do I understand this result? Is there anything "wrong"?
>>>>>>
>>>>>>    (The same problems happens also in extrealTheory, since the
>>>>>> definition
>>>>>>    of `*` finally reduces to `*` of real numbers)
>>>>>>
>>>>>>    Regards,
>>>>>>
>>>>>>    Chun Tian
>>>>>>
>>>>>>    _______________________________________________
>>>>>>    hol-info mailing list
>>>>>>    hol-info@lists.sourceforge.net<mailto:hol-info@lists.sourceforge.net>
>>>>>> <mailto:hol-info@lists.sourceforge.net<mailto:hol-info@lists.sourceforge.net>>
>>>>>>    https://lists.sourceforge.net/lists/listinfo/hol-info
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> hol-info mailing list
>>>>> hol-info@lists.sourceforge.net<mailto:hol-info@lists.sourceforge.net>
>>>>> https://lists.sourceforge.net/lists/listinfo/hol-info
>>>
>>
>>
>>
>>
>> _______________________________________________
>> hol-info mailing list
>> hol-info@lists.sourceforge.net<mailto:hol-info@lists.sourceforge.net>
>> https://lists.sourceforge.net/lists/listinfo/hol-info
>>
>

_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net<mailto:hol-info@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/hol-info
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to