blob: f93a1c4694e80217f6f812a743cb19ae74e56092 [file] [edit]
(*
* Copyright 2016, NICTA
*
* 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(NICTA_GPL)
*)
theory InodeT
imports
"../adt/BilbyT"
begin
text {*
We need to find a way to deal with abstract inodes,
my idea is to add an axiomatize inode functions the
same way we do it with ../adt/WordArray
*}
consts \<alpha>inode :: "VfsInode\<^sub>T \<Rightarrow> VfsT.VfsInode"
definition
time_conv :: "OSTimeSpec\<^sub>T \<Rightarrow> TimeT"
where "time_conv ts \<equiv> ((ucast (tv_sec\<^sub>f ts) :: U64) << 32) OR ucast (tv_nsec\<^sub>f ts)"
axiomatization
where
vfs_inode_set_flags_ret:
"\<alpha>inode (vfs_inode_set_flags (r,v)) = (\<alpha>inode r)\<lparr> VfsT.VfsInode.v_flags := v \<rparr>"
and
vfs_inode_set_mode_ret:
"\<alpha>inode (vfs_inode_set_mode (r,v)) = (\<alpha>inode r)\<lparr> VfsT.VfsInode.v_mode := v \<rparr>"
and
vfs_inode_set_gid_ret:
"\<alpha>inode (vfs_inode_set_gid (r,v)) = (\<alpha>inode r)\<lparr> VfsT.VfsInode.v_gid := v \<rparr>"
and
vfs_inode_set_uid_ret:
"\<alpha>inode (vfs_inode_set_uid (r,v)) = (\<alpha>inode r)\<lparr> VfsT.VfsInode.v_uid := v \<rparr>"
and
vfs_inode_set_ctime_ret:
"\<alpha>inode (vfs_inode_set_ctime (r,t)) = (\<alpha>inode r)\<lparr> VfsT.VfsInode.v_ctime := time_conv t \<rparr>"
and
vfs_inode_set_mtime_ret:
"\<alpha>inode (vfs_inode_set_mtime (r,t)) = (\<alpha>inode r)\<lparr> VfsT.VfsInode.v_mtime := time_conv t \<rparr>"
and
vfs_inode_set_nlink_ret:
"\<alpha>inode (vfs_inode_set_nlink (r,v)) = (\<alpha>inode r)\<lparr> VfsT.VfsInode.v_nlink := v \<rparr>"
and
vfs_inode_set_size_ret:
"\<alpha>inode (vfs_inode_set_size (r,v')) = (\<alpha>inode r)\<lparr> VfsT.VfsInode.v_size := v' \<rparr>"
and
vfs_inode_set_ino_ret:
"\<alpha>inode (vfs_inode_set_ino (r,v)) = (\<alpha>inode r)\<lparr> VfsT.VfsInode.v_ino := v \<rparr>"
end