access_control_module/interpretation/I_AttrConf.thy (221 lines of code) (raw):

(* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. *) theory I_AttrConf imports Main "../AttrConf" I_UsrAttr begin datatype UsrAttrConf = nousrattrconf | is_usrattrconf:usrattr_conf UsrAttrConf UsrAttr print_theorems primrec find_usrid::"UsrAttrConf\<Rightarrow>UsrAttr\<Rightarrow>bool" where "find_usrid nousrattrconf attr= False" | "find_usrid (usrattr_conf conf attrx) attr= (if usrattr_id attrx=usrattr_id attr then True else find_usrid conf attr)" primrec delete_usrattr::"UsrAttrConf\<Rightarrow>UsrAttr\<Rightarrow>UsrAttrConf" where "delete_usrattr nousrattrconf attr=nousrattrconf" | "delete_usrattr (usrattr_conf conf attrx) attr= (if usrattr_id attrx=usrattr_id attr then delete_usrattr conf attr else usrattr_conf(delete_usrattr conf attr) attrx)" primrec get_usrattr::"UsrAttrConf\<Rightarrow>UsrId\<Rightarrow>UsrAttr" where "get_usrattr nousrattrconf uid=nousrattr" | "get_usrattr (usrattr_conf conf attr) uid= (if usrattr_id attr=uid then attr else get_usrattr conf uid)" primrec valid_usrattrconf::"UsrAttrConf\<Rightarrow>bool" where "valid_usrattrconf nousrattrconf=False" | "valid_usrattrconf (usrattr_conf conf attr)= (if usrattr_id attr\<noteq>nousrid\<and> conf=nousrattrconf then True else if usrattr_id attr\<noteq>nousrid\<and> (\<not>find_usrid conf attr)\<and> valid_usrattrconf conf then True else False)" primrec rel_subset_usr::"UsrAttrConf\<Rightarrow>UsrAttrConf\<Rightarrow>bool" where "rel_subset_usr conf1 nousrattrconf=True" | "rel_subset_usr conf1 (usrattr_conf conf attr)= (if conf=nousrattrconf\<and> find_usrid conf1 attr then True else if conf\<noteq>nousrattrconf\<and> find_usrid conf1 attr then rel_subset_usr conf1 conf else False)" interpretation UsrAttrConf : UsrAttrConf nousrid valid_usrid nousrattr usr_attr usrattr_id nousrattrconf usrattr_conf is_usrattrconf find_usrid delete_usrattr get_usrattr valid_usrattrconf proof show "\<not> is_usrattrconf nousrattrconf" by auto next fix conf fix attr show "is_usrattrconf (usrattr_conf conf attr)" by auto next fix x show " x = nousrattrconf \<or> (\<exists>conf attr. x = usrattr_conf conf attr)" proof (cases x) show "x = nousrattrconf \<Longrightarrow> x = nousrattrconf \<or> (\<exists>conf attr. x = usrattr_conf conf attr)" by auto next fix x21 fix x22 show "x = usrattr_conf x21 x22 \<Longrightarrow> x = nousrattrconf \<or> (\<exists>conf attr. x = usrattr_conf conf attr)" by auto qed next show "usrattr_id nousrattr = nousrid" by (auto simp:nousrattr_def) next fix attr show "\<not>find_usrid nousrattrconf attr" by auto next fix conf fix attr fix attrx show "usrattr_id attrx = usrattr_id attr \<Longrightarrow> find_usrid (usrattr_conf conf attrx) attr" by auto next fix conf fix attrx fix attr show "find_usrid conf attr \<Longrightarrow> find_usrid (usrattr_conf conf attrx) attr" by auto next fix conf attr attrx show "\<not> find_usrid conf attr \<and> usrattr_id attrx \<noteq> usrattr_id attr \<Longrightarrow> \<not> find_usrid (usrattr_conf conf attrx) attr" by auto next fix attr show "delete_usrattr nousrattrconf attr = nousrattrconf" by auto next fix conf fix attrx fix attr show "usrattr_id attrx = usrattr_id attr \<Longrightarrow> delete_usrattr (usrattr_conf conf attrx) attr = delete_usrattr conf attr" by auto next fix attrx fix attr fix conf show "usrattr_id attrx \<noteq> usrattr_id attr \<Longrightarrow> delete_usrattr (usrattr_conf conf attrx) attr = usrattr_conf (delete_usrattr conf attr) attrx" by auto next fix elem show "get_usrattr nousrattrconf elem = nousrattr" by auto next fix attr fix elem fix conf show "usrattr_id attr = elem \<Longrightarrow> get_usrattr (usrattr_conf conf attr) elem = attr" by auto next fix conf fix elem fix attr show "usrattr_id attr \<noteq> elem \<Longrightarrow> get_usrattr (usrattr_conf conf attr) elem = get_usrattr conf elem" by auto next show "\<not> valid_usrattrconf nousrattrconf" by auto next fix conf fix attr show "usrattr_id attr \<noteq> nousrid \<and> conf = nousrattrconf \<Longrightarrow> valid_usrattrconf (usrattr_conf conf attr)" by auto next fix conf fix attr show "valid_usrattrconf conf \<and> \<not> find_usrid conf attr \<and> usrattr_id attr \<noteq> nousrid \<Longrightarrow> valid_usrattrconf (usrattr_conf conf attr)" by auto next fix conf fix attr show "usrattr_id attr = nousrid \<Longrightarrow> \<not> valid_usrattrconf (usrattr_conf conf attr)" by auto next fix conf fix attr show "conf \<noteq> nousrattrconf \<and> \<not> valid_usrattrconf conf \<Longrightarrow> \<not> valid_usrattrconf (usrattr_conf conf attr)" by auto next fix conf fix attr show "conf \<noteq> nousrattrconf \<and> find_usrid conf attr \<Longrightarrow> \<not> valid_usrattrconf (usrattr_conf conf attr)" by auto next show "\<And>P conf. P nousrattrconf \<Longrightarrow> (\<And>conf1 attr1. P conf1 \<Longrightarrow> P (usrattr_conf conf1 attr1)) \<Longrightarrow> P conf" proof (erule UsrAttrConf.induct) show "\<And>P conf x1 x2. (\<And>conf1 attr1. P conf1 \<Longrightarrow> P (usrattr_conf conf1 attr1)) \<Longrightarrow> P x1 \<Longrightarrow> P (usrattr_conf x1 x2)" by auto qed qed interpretation UsrAttrConfRel : AttrConfRel nousrid nousrattr nousrattrconf usrattr_conf is_usrattrconf usrattr_id find_usrid delete_usrattr get_usrattr valid_usrattrconf rel_subset_usr proof fix confx show "rel_subset_usr confx nousrattrconf" by auto next fix conf fix confx fix attr show "conf = nousrattrconf \<and> find_usrid confx attr \<Longrightarrow> rel_subset_usr confx (usrattr_conf conf attr)" by auto next fix conf fix confx fix attr show "conf \<noteq> nousrattrconf \<and> find_usrid confx attr \<and> rel_subset_usr confx conf \<Longrightarrow> rel_subset_usr confx (usrattr_conf conf attr)" by auto next fix conf fix confx fix attr show "\<not> rel_subset_usr confx conf \<Longrightarrow> \<not> rel_subset_usr confx (usrattr_conf conf attr)" by auto next fix confx fix conf fix attr show "rel_subset_usr confx conf \<and> \<not> find_usrid confx attr \<Longrightarrow> \<not> rel_subset_usr confx (usrattr_conf conf attr)" by auto qed end