@@ -88,6 +88,23 @@ instance : Rxo.HasSize UInt8 := .ofClosed
8888instance : Rxo.LawfulHasSize UInt8 := inferInstance
8989instance : Rxo.IsAlwaysFinite UInt8 := inferInstance
9090
91+ instance : Rxi.HasSize UInt8 where
92+ size lo := 2 ^ 8 - lo.toNat
93+
94+ theorem rxiHasSize_eq_toBitVec :
95+ Rxi.HasSize.size (UInt8.ofBitVec lo) = Rxi.HasSize.size lo := by
96+ simp [Rxi.HasSize.size]
97+
98+ instance : Rxi.LawfulHasSize UInt8 where
99+ size_eq_one_of_succ?_eq_none lo := by
100+ cases lo
101+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
102+ Rxi.LawfulHasSize.size_eq_one_of_succ?_eq_none (α := BitVec 8 ) _
103+ size_eq_succ_of_succ?_eq_some lo lo' := by
104+ cases lo; cases lo'
105+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
106+ Rxi.LawfulHasSize.size_eq_succ_of_succ?_eq_some (α := BitVec 8 ) _ _
107+
91108end UInt8
92109
93110namespace UInt16
@@ -162,6 +179,23 @@ instance : Rxo.HasSize UInt16 := .ofClosed
162179instance : Rxo.LawfulHasSize UInt16 := inferInstance
163180instance : Rxo.IsAlwaysFinite UInt16 := inferInstance
164181
182+ instance : Rxi.HasSize UInt16 where
183+ size lo := 2 ^ 16 - lo.toNat
184+
185+ theorem rxiHasSize_eq_toBitVec :
186+ Rxi.HasSize.size (UInt16.ofBitVec lo) = Rxi.HasSize.size lo := by
187+ simp [Rxi.HasSize.size]
188+
189+ instance : Rxi.LawfulHasSize UInt16 where
190+ size_eq_one_of_succ?_eq_none lo := by
191+ cases lo
192+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
193+ Rxi.LawfulHasSize.size_eq_one_of_succ?_eq_none (α := BitVec 16 ) _
194+ size_eq_succ_of_succ?_eq_some lo lo' := by
195+ cases lo; cases lo'
196+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
197+ Rxi.LawfulHasSize.size_eq_succ_of_succ?_eq_some (α := BitVec 16 ) _ _
198+
165199end UInt16
166200
167201namespace UInt32
@@ -236,6 +270,23 @@ instance : Rxo.HasSize UInt32 := .ofClosed
236270instance : Rxo.LawfulHasSize UInt32 := inferInstance
237271instance : Rxo.IsAlwaysFinite UInt32 := inferInstance
238272
273+ instance : Rxi.HasSize UInt32 where
274+ size lo := 2 ^ 32 - lo.toNat
275+
276+ theorem rxiHasSize_eq_toBitVec :
277+ Rxi.HasSize.size (UInt32.ofBitVec lo) = Rxi.HasSize.size lo := by
278+ simp [Rxi.HasSize.size]
279+
280+ instance : Rxi.LawfulHasSize UInt32 where
281+ size_eq_one_of_succ?_eq_none lo := by
282+ cases lo
283+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
284+ Rxi.LawfulHasSize.size_eq_one_of_succ?_eq_none (α := BitVec 32 ) _
285+ size_eq_succ_of_succ?_eq_some lo lo' := by
286+ cases lo; cases lo'
287+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
288+ Rxi.LawfulHasSize.size_eq_succ_of_succ?_eq_some (α := BitVec 32 ) _ _
289+
239290end UInt32
240291
241292namespace UInt64
@@ -310,6 +361,23 @@ instance : Rxo.HasSize UInt64 := .ofClosed
310361instance : Rxo.LawfulHasSize UInt64 := inferInstance
311362instance : Rxo.IsAlwaysFinite UInt64 := inferInstance
312363
364+ instance : Rxi.HasSize UInt64 where
365+ size lo := 2 ^ 64 - lo.toNat
366+
367+ theorem rxiHasSize_eq_toBitVec :
368+ Rxi.HasSize.size (UInt64.ofBitVec lo) = Rxi.HasSize.size lo := by
369+ simp [Rxi.HasSize.size]
370+
371+ instance : Rxi.LawfulHasSize UInt64 where
372+ size_eq_one_of_succ?_eq_none lo := by
373+ cases lo
374+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
375+ Rxi.LawfulHasSize.size_eq_one_of_succ?_eq_none (α := BitVec 64 ) _
376+ size_eq_succ_of_succ?_eq_some lo lo' := by
377+ cases lo; cases lo'
378+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
379+ Rxi.LawfulHasSize.size_eq_succ_of_succ?_eq_some (α := BitVec 64 ) _ _
380+
313381end UInt64
314382
315383namespace USize
@@ -384,4 +452,21 @@ instance : Rxo.HasSize USize := .ofClosed
384452instance : Rxo.LawfulHasSize USize := inferInstance
385453instance : Rxo.IsAlwaysFinite USize := inferInstance
386454
455+ instance : Rxi.HasSize USize where
456+ size lo := 2 ^ System.Platform.numBits - lo.toNat
457+
458+ theorem rxiHasSize_eq_toBitVec :
459+ Rxi.HasSize.size (USize.ofBitVec lo) = Rxi.HasSize.size lo := by
460+ simp [Rxi.HasSize.size]
461+
462+ instance : Rxi.LawfulHasSize USize where
463+ size_eq_one_of_succ?_eq_none lo := by
464+ cases lo
465+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
466+ Rxi.LawfulHasSize.size_eq_one_of_succ?_eq_none (α := BitVec System.Platform.numBits) _
467+ size_eq_succ_of_succ?_eq_some lo lo' := by
468+ cases lo; cases lo'
469+ simpa [rxiHasSize_eq_toBitVec, succ?_ofBitVec] using
470+ Rxi.LawfulHasSize.size_eq_succ_of_succ?_eq_some (α := BitVec System.Platform.numBits) _ _
471+
387472end USize
0 commit comments