(* * Copyright 2014, General Dynamics C4 Systems * * This software may be distributed and modified according to the terms of * the GNU General Public License version 2. Note that NO WARRANTY is provided. * See "LICENSE_GPLv2.txt" for details. * * @TAG(GD_GPL) *) theory Example imports System_S begin definition "id0 \ 0" definition "id1 \ 1" definition "id2 \ 2" definition "e0 \ Entity {\ target = id1, rights = {Store}\}" definition "e1 \ Entity {\ target = id2, rights = {Grant}\}" definition "e2 \ Entity {}" lemmas id_defs = id0_def id1_def id2_def lemmas entity_defs = e0_def e1_def e2_def definition example_state :: "state" where "example_state \ [0 \ e0, 1 \ e1, 2 \ e2] " lemma de0: "direct_caps_of example_state id0 = {\ target = id1, rights = {Store}\}" by (simp add: direct_caps_of_def example_state_def id_defs entity_defs split: option.splits) lemma de1: "direct_caps_of example_state id1 = {\ target = id2, rights = {Grant}\}" by (simp add: direct_caps_of_def example_state_def id_defs entity_defs split: option.splits) lemma de2: "direct_caps_of example_state id2 = {}" by (simp add: direct_caps_of_def example_state_def id_defs entity_defs split: option.splits) lemma scd: "store_connected_direct example_state = {(id0,id1)}" by (auto simp: store_connected_direct_def direct_caps_of_def example_state_def id_defs entity_defs split: split_if_asm option.splits cong: conj_cong) lemma sc: "store_connected example_state = {(id0,id1)} \ Id" apply simp apply (rule equalityI) apply (insert scd) apply (simp add: store_connected_def) apply clarsimp apply (erule converse_rtranclE) apply simp apply clarsimp apply (erule rtranclE) apply simp apply clarsimp apply (fastforce simp: store_connected_def) done lemma sc': "store_connected example_state = Id \ {(0,1)}" by (clarsimp simp: sc id_defs) lemma ce0: "caps_of example_state id0 = {\target = id1, rights = {Store}\, \target = id2, rights = {Grant}\}" by (fastforce simp: caps_of_def sc Collect_disj_eq de0 de1) lemma ce1: "caps_of example_state id1 = {\ target = id2, rights = {Grant}\}" apply (clarsimp simp: caps_of_def sc Collect_disj_eq de0 de1) apply (simp add: id0_def id1_def) done lemma ce2: "caps_of example_state id2 = {}" apply (simp add: caps_of_def sc) apply (rule allI) apply (rule conjI) apply (simp add: id0_def id2_def) apply (simp add: de2) done end