111 lines
3.7 KiB
Plaintext
111 lines
3.7 KiB
Plaintext
(*
|
|
(C) Copyright Andreas Viktor Hess, DTU, 2020
|
|
(C) Copyright Sebastian A. Mödersheim, DTU, 2020
|
|
(C) Copyright Achim D. Brucker, University of Exeter, 2020
|
|
(C) Copyright Anders Schlichtkrull, DTU, 2020
|
|
|
|
All Rights Reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are
|
|
met:
|
|
|
|
- Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
- Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
- Neither the name of the copyright holder nor the names of its
|
|
contributors may be used to endorse or promote products
|
|
derived from this software without specific prior written
|
|
permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*)
|
|
|
|
(* Title: Eisbach_Protocol_Verification.thy
|
|
Author: Andreas Viktor Hess, DTU
|
|
Author: Sebastian A. Mödersheim, DTU
|
|
Author: Achim D. Brucker, University of Exeter
|
|
Author: Anders Schlichtkrull, DTU
|
|
*)
|
|
|
|
section \<open>Useful Eisbach Methods for Automating Protocol Verification\<close>
|
|
theory Eisbach_Protocol_Verification
|
|
imports Main "HOL-Eisbach.Eisbach_Tools"
|
|
begin
|
|
|
|
named_theorems exhausts
|
|
named_theorems type_class_instance_lemmata
|
|
named_theorems protocol_checks
|
|
named_theorems coverage_check_unfold_protocol_lemma
|
|
named_theorems coverage_check_unfold_lemmata
|
|
named_theorems coverage_check_intro_lemmata
|
|
named_theorems transaction_coverage_lemmata
|
|
|
|
method UNIV_lemma =
|
|
(rule UNIV_eq_I; (subst insert_iff)+; subst empty_iff; smt exhausts)+
|
|
|
|
method type_class_instance =
|
|
(intro_classes; auto simp add: type_class_instance_lemmata)
|
|
|
|
method protocol_model_subgoal =
|
|
(((rule allI, case_tac f); (erule forw_subst)+)?; simp_all)
|
|
|
|
method protocol_model_interpretation =
|
|
(unfold_locales; protocol_model_subgoal+)
|
|
|
|
method check_protocol_intro =
|
|
(unfold_locales, unfold protocol_checks[symmetric])
|
|
|
|
method check_protocol_with methods meth =
|
|
(check_protocol_intro, meth)
|
|
|
|
method check_protocol' =
|
|
(check_protocol_with \<open>code_simp+\<close>)
|
|
|
|
method check_protocol_unsafe' =
|
|
(check_protocol_with \<open>eval+\<close>)
|
|
|
|
method check_protocol =
|
|
(check_protocol_with \<open>
|
|
code_simp,
|
|
code_simp,
|
|
code_simp,
|
|
code_simp,
|
|
code_simp\<close>)
|
|
|
|
method check_protocol_unsafe =
|
|
(check_protocol_with \<open>
|
|
eval,
|
|
eval,
|
|
eval,
|
|
eval,
|
|
eval\<close>)
|
|
|
|
method coverage_check_intro =
|
|
(((unfold coverage_check_unfold_protocol_lemma)?;
|
|
intro coverage_check_intro_lemmata;
|
|
simp only: list_all_simps list_all_append list.map concat.simps map_append product_concat_map;
|
|
intro conjI TrueI);
|
|
(clarsimp+)?;
|
|
((rule transaction_coverage_lemmata)+)?)
|
|
|
|
method coverage_check_unfold =
|
|
(unfold coverage_check_unfold_protocol_lemma coverage_check_unfold_lemmata
|
|
list_all_iff Let_def case_prod_unfold Product_Type.fst_conv Product_Type.snd_conv)
|
|
|
|
end
|