Bill Page wrote:
> 
> Rather than adding something new to the compiler and user interface, I
> think it might be more appropriate if the FriCAS library was more
> explicit about possibly independent properties such as 'Associative'
> and 'Commutative'. FriCAS already has the category 'CommuativeStar'
> which propagates to many of the relevant domains but as far as I can
> see there is nothing like 'AssociativeStar'. If such categories are
> used consistently it might be useful to make the exports of
> 'MagmaWithUnit' conditional, e.g.
> 
> wspage@strix ~/fricas $ git diff | cat
> diff --git a/src/algebra/naalgc.spad b/src/algebra/naalgc.spad
> index a9209da..6dc8ff9 100644
> --- a/src/algebra/naalgc.spad
> +++ b/src/algebra/naalgc.spad
> @@ -84,15 +84,16 @@ MagmaWithUnit() : Category == Magma with
>          ++ inverse of \spad{a},
>          ++ or \spad{"failed"} if such an element doesn't exist or cannot
>          ++ be determined (see unitsKnown).
> -      leftRecip : % -> Union(%,"failed")
> -        ++ leftRecip(a) returns an element, which is a left inverse
> of \spad{a},
> -        ++ or \spad{"failed"} if such an element doesn't exist or cannot
> -        ++ be determined (see unitsKnown).
> -      rightRecip : % -> Union(%,"failed")
> -        ++ rightRecip(a) returns an element, which is a right inverse of
> -        ++ \spad{a}, or \spad{"failed"} if such an element doesn't exist
> -        ++ or cannot be determined (see unitsKnown).
> -    add
> +      if not(% has CommutativeStar) then
> +        leftRecip : % -> Union(%,"failed")
> +          ++ leftRecip(a) returns an element, which is a left inverse
> of \spad{a},
> +          ++ or \spad{"failed"} if such an element doesn't exist or cannot
> +          ++ be determined (see unitsKnown).
> +        rightRecip : % -> Union(%,"failed")
> +          ++ rightRecip(a) returns an element, which is a right inverse of
> +          ++ \spad{a}, or \spad{"failed"} if such an element doesn't exist
> +          ++ or cannot be determined (see unitsKnown).
> +  add
>        import from RepeatedSquaring(%)
>        one? x == x = 1
>        sample() == 1
> @@ -112,6 +113,9 @@ MagmaWithUnit() : Category == Magma with
>        recip x ==
>            (x = 1) => x
>            "failed"
> +      if not(% has CommutativeStar) then
> +        leftRecip(x) == recip(x)
> +        rightRecip(x) == recip(x)
> 
>  )abbrev category NASRNG NonAssociativeSemiRng
>  ++ Author: Waldek Hebisch
> 
> ----
> 
> Then at least in hyperdoc these functions exports do not appear in
> domains like 'Integer' and 'Complex Integer'. For some reason they
> still show up in domains like 'Polynomial Integer' although
> 'Polynomial Integer has CommutativeStar' is evaluated as 'true' in the
> interpreter so perhaps the conditional type inference is not quite as
> strong as one might like in hyperdoc.  And it seems that the ')show'
> command in the interpreter does not attempt to eliminate these
> functions from its list.
> 
> Or is making these export conditional more than what you had in mind?

1) Such use of conditionals is unsupported.  Essentially only at
   runtime we know for sure is condtion is satisfied or not.  But
   FriCAS needs list of signatures at compile time.  To avoid
   this problem Spad compiler uses "positive logic with closed
   word assumption": is something is known true it is considered
   true regardless of possible new information.  If something is
   not known to be true it is treaded as false.  Such logic works
   OK if there are no negation, but negation almost immediately
   leads to contradictions.
2) Correct version of the above can be obtained by introducing
   extra attribute, say TrurlyNonAssociative.  However, this
   would defeat the purpose of original unification of
   associative and nonassociative words: you are supposed to be
   able to pass associatieve algebra to an algorithm working
   with general algberas.  For this associatieve algebra must
   have all functions present in nonnonassociative ones,
   in particular leftRecip and rightRecip.
3) I am not sure about wisdom of hiding functions.  In old days
   a lot of folks used simple strategy to learn a new program:
   go trough menus or list of functions and look at things
   with "promising" names.  Now programs got much harder to use:
   they hide menu positions and to see them you need to satisfy
   precoditions.  In other words, to see a function you need to
   know where it is and how to use it.  Much harder to discover
   anything...

-- 
                              Waldek Hebisch

-- 
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to fricas-devel+unsubscr...@googlegroups.com.
To post to this group, send email to fricas-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to