Hi Tamarin group,
I want to use the subterm operator "<<". I found some Tamarin behavior with this operator that I don't understand. I provide the model in the attachment and its description below, with questions at the end of the email.
*Model Description*
We have one rule that generates a fresh value a and evaluates the function g(a). It separately saves a and g(a) in actions, and also creates, separately, A(a) and G(g(a)) facts in the conclusions. Then we have a second rule that simply takes A and G in the premises and saves an AG(a,g) action. Finally, I add the restriction "All A G #i. AG(A,G)@i ==> A << G". Generally, I want to ensure that every rule with an AG(a,g) action is constructed with an a such that it is a subterm of g (i.e., a was used to evaluate g).
I wrote some experimental lemmas and got unexpected results. I will focus specifically on the four of them: the 4th, 5th, 6th, and 7th lemmas, but in the attachment I sent a file with all of them.
Namely, the 4th lemma states that there exists a trace with an AG(A,G) action, and because of the restriction, it is false. But why exactly it is false, I don't know. Tamarin ends the proof with "contradiction /* cyclic */", where it points to a constraint system with a rule with action AG(a,g(a)). That's exactly what I wanted to prove is possible, but we have a false statement.
Moreover, the 6th lemma is the same but with added pattern matching such that we are sure that the terms a and g are created in the same rule: "Ex a g #i #j. Aa(a)@i & G(g)@i & AG(a,g)@j". This lemma is true. This lemma is more restrictive than the 4th one and is true.
Lemmas 5th and 7th are equivalents of the 4th and 6th, but they require that a is a subterm of g. Their proofs are exact copies of the 4th and 6th.
Questions:
1. What exactly does it mean that Tamarin found a "contradiction /* cyclic */"?
2. Why are the 4th and 5th lemmas false, but when we enforce that a and g are created in the same rule, then these statements are true?
Bests,
Nikodem