Dear Professor Chun Tian:

I am very interesting the problem.

Could you kindly give your kind comments and suggestions on 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
?

It seems that the problem is very Fundamental for our Mathematics.

With best regards,
Sincerely yours,

Saburou Saitoh
2019.8.9.21:08



2019年8月9日(金) 20:47 Chun Tian (binghe) <binghe.l...@gmail.com>:

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

Reply via email to