It seems that isCA1_praxi should be declared
as follows:

praxi
isCA1_praxi{cb:catB} (): [isCA1(sA_1(cA_1,cb))] void

On Saturday, April 7, 2018 at 12:25:05 AM UTC-4, M88 wrote:
>
>
> I was looking into the rock-paper-scissors example (here 
> <https://groups.google.com/forum/#!topic/ats-lang-users/YcdEzhJdJzs> and 
> here 
> <https://github.com/githwxi/ATS-Postiats-test/blob/master/contrib/hwxi/TEST20/test25.dats>)
>  
> and I found it very useful for learning how to define  predicates in the 
> statics.
>
> I had made an attempt something similar, but using independent datasorts 
> as parameters. 
>
> For example:
>
> datasort catA =
>    | cA_1
>    | cA_2
>    | cA_3
>
> datasort catB =
>    | cB_1
>    | cB_2
>    | cB_3
>
> datasort sortA =
>    | sA_1 of (catA, catB)
>    | sA_2
>    | sA_3
>
> // only sortA is used to define types. Eg,
> abst@ype typeA(sortA)
>
> I ran into a few issues.  I arrived at a solution, but I thought it could 
> be cleaner.
>
> First, I discovered that I wasn't  able to define equalities with 
> datasorts.  Eg, {sa:sortA | sa == sA_2}.  It would typecheck, but the 
> constraints could not be solved. I suppose this makes sense, considering 
> the definition of ==.  Does ATS supply a way to determine equalities on 
> datasorts?  Is there another feature that would make this unnecessary?
>
> As an alternative, I decided to declare a static predicate, as in the 
> rock-paper-scissors example:
>
> stacst isCA1 : sortA -> bool
>
> // This works, but becomes quite verbose.
> praxi isCA1_praxi ():
>    [
>       isCA1(sA_1(cA_1,cB_1)) &&
>       isCA1(sA_1(cA_1,cB_2)) &&
>       isCA1(sA_1(cA_1,cB_3))
>    ] void
>
> The verbosity isn't an issue in this example, but becomes pretty 
> unmanageable as the relationships get more complex. I would like to say, 
> "for any catB".  I tried using universal and existential quantification, 
> but the constraints would not solve.  I would like to avoid passing catB 
> explicitly. 
>
> Is there a  way to reduce it to something like this:
>
> // The constraints will not solve:
> praxi isCA1_praxi ():
>    [ cb: catB |
>       isCA1(sA_1(cA_1,cb)) 
>    ] void
>
> Perhaps I am abusing datasorts -- suggestions for other approaches are 
> welcome.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ats-lang-users+unsubscr...@googlegroups.com.
To post to this group, send email to ats-lang-users@googlegroups.com.
Visit this group at https://groups.google.com/group/ats-lang-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/ab0f7c98-e2a9-4dda-9427-2016555f66c3%40googlegroups.com.

Reply via email to