Thanks for the quick response! I tried your easy test for theory B, and that did fix the problem - but of course, only doing it for that rule is problematic because it can't execute if nothing ever generates a fact with a public name. I actually decided that it would be reasonable to replace `name` with a public variable everywhere (all the names are public anyway), so now it's `$name` everywhere (with no Fr(name) facts); I've attached the updated version. Once I did that, though, I had the same issue again. With that change in place I tried it on a larger machine than I was using, and found that Tamarin actually _does_ complete the precomputation - it just uses a huge amount of memory, takes about 20 minutes, and comes up with 126240 partial deconstructions (though, interestingly, it is then still able to prove all the lemmas it was able to prove before, which I find surprising in the presence of so many partial deconstructions). I'm going to try to get the interactive prover to dump that very large list of partial deconstructions so I can see what's going on (though it may not be able to do so with the resources I have); maybe there's a straightforward source lemma to add that would help get rid of them, though I'd imagine it wouldn't help with the precomputation time.
With respect to your Theory A, !TAS_Trustee_Set does not do any looping - at least, it was not intended to. A different fact, TAS_RegisterTrustee_Set, does looping; but it's not one of the premises of that possibly-problematic rule, and the looping it does was part of what the lemmas in the file verified as behaving properly.