[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tlaplus] Creating function sets lazily
- From: "thomas...@xxxxxxxxx" <thomasgebert@xxxxxxxxx>
- Date: Tue, 22 Feb 2022 19:16:56 -0800 (PST)
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:E8UZ7KNggSXcwsBcT2n155DYdb4zR+YMi2TDiHoddfUFSKalfp 6V98jzjSWE8Qr5K0tQ4exoWZPwCU80mqQFhLX5UY3NYOCighrPEGgA1/qo/9SDIVybygc178 4JH8dD4Z/LfD9HZK3BgDVQZuxQouVvh5rY5ts2oU0NcShaL4VbqytpAAeSFUN7ACNcA4AiKZ aa7s1b4xK9ZHU+dK2AdzQ4dtmGg+eOuIPtYBYACRJiwhKJlymU5LnzFAXd9gsCUglI3awp/Q H+4kDED+SYwr6GIy3npi7uBqdt6ZvcIxx4dY+xY/0uW3vRY8CTFcZcsvO5zXUISaqUmS0XeZ H30m0d1oJImjnslyiO0GfQ8hP93jgj8WLvxGmRnGbqq838SDUmPdBMn5hYdBzu60dIhqAA7I tbm22erJZZFhXGgWD04MXJTQhjkg6urWMlivN7tQ0pbWIyUs4lkWUkxjIgLH7AJlOL1Kk3VO 11SM3M7vdfdl2XK3jfo2l02dSpGnA+BA2PTEQOstGcl2E+pgEx82IIgMgE2nsQ/pM0TJdJo+ zCL6RzjblLCssbd7h0CusNSda+TmbNXRXPOmSPJkmPLtBwB1vd75rspLkl7uCjf5IFiJM0hZ TaSVtd8XU/fkr/YPf+rqGjMiq9M1lVcQ6dtP22vaIJxYEUbICbQBG+dA==
- Ironport-sdr: EwvXD/ZiX3HWMfVNo4uRSR4sSQBQh2C8DOmt2AHuB1DEXkM3ymVSH+y94g4ergrEsn2XyRG6sZ mnF89GWUkG+x8/NlA5GebrONCF8eQ1pEQmi5XML68C3ntoX8a5qqDpQfm4I7QT3gYQI0JI8tfx Ool9XPMWmhc7db5LCIHFckkqpFyTbD5HkkkOW5Dhoc+QJamijMmslk7OqtW+yhKNug1eyAxdtC SPCgmVhwqC0Chw5EBRyMC82GsaseclVkOC+tHNufhkOJz6+Y+3Ru+dGfeKB8OO87BugoZnMNC3 3GwuZxT5k4HkPtj8+N665+8v
I have the following code in my TLA+ spec:
BitString == [1..6 -> {0,1}]
AllowedStrings == {"a", "b", "c", "d", "e"}
IsInjective(f) == \A a,b \in DOMAIN f : f[a] = f[b] => a = b
hash == CHOOSE i \in [AllowedStrings -> BitString] : IsInjective(i)
I then run hash[2] in the evaluator.
This works as expected, but it takes an *extremely* long time to run, and if I increase my domain (e.g. adding "f" to AllowedStrings), it gives me an error:
Attempted to construct a set with too many elements (>100000000)
I understand the combinatorial complexity makes these giant sets, but I was wondering if there's a way to avoid generating all the sets once it gets something that satisfies CHOOSE.
--
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+unsubscribe@xxxxxxxxxxxxxxxx.
To view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/aa184e59-2e0c-44d9-a2c3-ea631681edean%40googlegroups.com.