From 8223584095273bc7bdf7b7dc65a6e168350cdf57 Mon Sep 17 00:00:00 2001
From: Andreas Grois <andi@grois.info>
Date: Sat, 14 Dec 2024 00:09:46 +0100
Subject: Begin Day16

---
 Common/BitVec.lean | 11 +++++++++++
 1 file changed, 11 insertions(+)
 create mode 100644 Common/BitVec.lean

(limited to 'Common/BitVec.lean')

diff --git a/Common/BitVec.lean b/Common/BitVec.lean
new file mode 100644
index 0000000..ad46efb
--- /dev/null
+++ b/Common/BitVec.lean
@@ -0,0 +1,11 @@
+def BitVec.setBitTrue {n : Nat} (i : Fin n) (a : BitVec n) : BitVec n :=
+  a ||| BitVec.ofNatLt (1 <<< i.val) (by simp[Nat.shiftLeft_eq, i.isLt, Nat.pow_lt_pow_iff_right])
+
+def BitVec.setBitFalse {n : Nat} (i : Fin n) (a : BitVec n) : BitVec n :=
+  a &&& BitVec.not (BitVec.ofNatLt (1 <<< i.val) (by simp[Nat.shiftLeft_eq, i.isLt, Nat.pow_lt_pow_iff_right]))
+
+def BitVec.setBit {n : Nat} (i : Fin n) (v : Bool) (a : BitVec n) : BitVec n :=
+  if v then
+    a.setBitTrue i
+  else
+    a.setBitFalse i
-- 
cgit v1.2.3

