[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tlaplus] Re: Continuous subset of integer range





On Thursday, 2 August 2018 21:14:53 UTC-5, Maneet Bansal wrote:
Hi Hillel,

Here is the definition of Max operator

            Max(s) == {x \in s : \A y \in s : x >= y}

Looks like the issue is a type error in IF x = Max(s) . For your definition, Max(s) doesn't return the maximum of s, but the set containing the maximum of s.

>>> Max({1, 2, 3, 4})

{4} \* should be 4

The error is being caught by the value box, though, and not reaching the TLC errors display.

Hillel


On Thu, Aug 2, 2018 at 3:13 PM, Hillel Wayne <hwa...@xxxxxxxxx> wrote:

Hi,

I need to find all subsets of an integer range which are continuous. For example for 

Input:- 1..4
output:- {1}, {2}, {3}, {4}, {1,2}, {2,3}, {3,4}, {1,2,3}, {2,3,4}, {1,2,3,4}

I wrote the following operator and check with "Evaluate Constant _expression_ in TLC". It is giving me an unexpected output

{s \in SUBSET {1,2,3,4}:  /\  s # {}

  /\ \A x \in s : IF x = Max(s)                                                                                     THEN TRUE        \* if x is maximum of the range than TRUE                                                                     ELSE (x+1) \in s}   \* other wise x+1 should be there in the set


The output I am getting is

{s \in {{}, {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4}, {1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4}, {1, 2, 3, 4}} : <_expression_ line 11, col 27 to line 12, col 428 of module MC> }



Question:-

1. What are these charcaters I am getting in the output? Is this some error?


I tried it on 1.5.7 and am getting the correct result. Could you share your definition of the Max operator?
 

2. Is there a better/easier way of doing this?


In this case, instead of filtering out all of the sets that don't match your criteria, I think it's easier to generate all of the sets that do match your criteria. This would use a set map instead of a set filter:

>>> {a..b: a, b \in {1,2,3,4}}

{{}, 1..1, 2..2, 3..3, 4..4, 1..2, 2..3, 3..4, 1..3, 2..4, 1..4}

We get the empty set because if a > b, then a..b is empty.

Thanks

Maneet
   

Hillel


   

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



--
Regards
Maneet Bansal