packages feed

tamarin-prover-0.8.0.0: data/examples/loops/Minimal_Loop_Example.spthy

theory Minimal_Loop_Example begin



/*
  Author: Simon Meier <simon.meier@inf.ethz.ch>
  Date:   2012 06 10
  Status: Working

  A minimal example that is looping and satisfies a property cannot be proven
  without inductive strengthening.

*/

rule Start: [ Fr(x) ] --[ Start(x) ]-> [ A(x) ]

rule Loop:  [ A(x) ]  --[ Loop(x)  ]-> [ A(x) ]

rule Stop:  [ A(x) ]  --[ Stop(x)  ]-> [ ]

lemma Start_before_Loop [reuse, use_induction]:
  "All x #j. Loop(x) @ j ==> (Ex #i. Start(x) @ i & i < j)"

lemma Start_before_Stop:
  "All x #j. Stop(x) @ j ==> (Ex #i. Start(x) @ i & i < j)"

lemma Loop_before_Stop [reuse, use_induction]:
  "All x #i #j. Stop(x) @ j & Loop(x) @ i ==> #i < #j"

lemma Stop_unique [reuse]:
  "All x #i #j. Stop(x) @ j & Stop(x) @ i ==> #i = #j"

lemma Satisfied_by_empty_trace_only [use_induction]:
  exists-trace
  "All x #j. Loop(x) @ j ==> F"

end