diff options
author | stuebinm | 2024-06-29 21:31:22 +0200 |
---|---|---|
committer | stuebinm | 2024-06-29 22:11:04 +0200 |
commit | 59214186b817329342d9d72e23adf12f7a3b1348 (patch) | |
tree | 8292abe4ca52e9742f6a4ff9d102565a6362e665 /backends/IsabelleHOL/Primitives.thy | |
parent | 5590dc87a5426cbcb32a2387701d179e107a9792 (diff) |
had some fun writing an IsabelleHOL backend
(do not actually use this, most things are broken, and the primitives
lib barely exists and is simply incorrect. But it is enough to create
syntax-correct Isabelle code for relatively simply rust code, as long
as it does not contain any uses of traits)
Diffstat (limited to '')
-rw-r--r-- | backends/IsabelleHOL/Primitives.thy | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/backends/IsabelleHOL/Primitives.thy b/backends/IsabelleHOL/Primitives.thy new file mode 100644 index 00000000..a0cc40bd --- /dev/null +++ b/backends/IsabelleHOL/Primitives.thy @@ -0,0 +1,19 @@ +theory Primitives imports + Main + "HOL-Library.Monad_Syntax" +begin + + +datatype u32 = u32 nat +datatype 'a result = Ok 'a | Err +fun u32_lt :: "u32 \<Rightarrow> u32 \<Rightarrow> bool" where + "u32_lt (u32 a) (u32 b) = (a < b)" + +definition bind :: "'a result \<Rightarrow> ('a \<Rightarrow> 'b result) \<Rightarrow> 'b result" where + "bind m f \<equiv> (case m of Err \<Rightarrow> Err | Ok a \<Rightarrow> f a)" + +adhoc_overloading Monad_Syntax.bind bind + +declare bind_def[simp] + +end
\ No newline at end of file |