Skip to content

Commit 6552666

Browse files
committed
feat(proof-libs): Add max and trailing_zeros
1 parent 7a21606 commit 6552666

File tree

2 files changed

+71
-1
lines changed

2 files changed

+71
-1
lines changed

hax-lib/proof-libs/fstar/core/Core_models.Cmp.fsti

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,15 @@ class min_tc t = {
66
}
77

88
instance min_inttype (#t:inttype): min_tc (int_t t) = {
9-
min = fun a b -> if a <. b then a else b
9+
min = fun a b -> if b <. a then b else a
10+
}
11+
12+
class max_tc t = {
13+
max: t -> t -> t
14+
}
15+
16+
instance max_inttype (#t:inttype): max_tc (int_t t) = {
17+
max = fun a b -> if b <. a then a else b
1018
}
1119

1220
class t_PartialEq (v_Self: Type) (v_Rhs: Type) = {

hax-lib/proof-libs/fstar/core/Core_models.Num.fsti

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,68 @@ val impl_u16__from_be_bytes: t_Array u8 (sz 2) -> u16
119119
val impl_u8__from_be_bytes: t_Array u8 (sz 1) -> u8
120120
val impl_usize__from_be_bytes: t_Array u8 (sz 8) -> usize
121121

122+
val impl_u8__trailing_zeros: u8 -> shiftval U8 U32
123+
val impl_u16__trailing_zeros: u16 -> shiftval U16 U32
124+
val impl_u32__trailing_zeros: u32 -> shiftval U32 U32
125+
val impl_u64__trailing_zeros: u64 -> shiftval U64 U32
126+
val impl_u128__trailing_zeros: u128 -> shiftval U128 U32
127+
val impl_usize__trailing_zeros: usize -> shiftval USIZE U32
128+
129+
val shift_right_trailing_zeros_nonzero_lemma_u8 (a:u8) :
130+
Lemma (requires (v a <> 0))
131+
(ensures (v (shift_right a (impl_u8__trailing_zeros a)) <> 0))
132+
[SMTPat (shift_right a (impl_u8__trailing_zeros a))]
133+
134+
val shift_right_trailing_zeros_nonzero_lemma_u16 (a:u16) :
135+
Lemma (requires (v a <> 0))
136+
(ensures (v (shift_right a (impl_u16__trailing_zeros a)) <> 0))
137+
[SMTPat (shift_right a (impl_u16__trailing_zeros a))]
138+
139+
val shift_right_trailing_zeros_nonzero_lemma_u32 (a:u32) :
140+
Lemma (requires (v a <> 0))
141+
(ensures (v (shift_right a (impl_u32__trailing_zeros a)) <> 0))
142+
[SMTPat (shift_right a (impl_u32__trailing_zeros a))]
143+
144+
val shift_right_trailing_zeros_nonzero_lemma_u64 (a:u64) :
145+
Lemma (requires (v a <> 0))
146+
(ensures (v (shift_right a (impl_u64__trailing_zeros a)) <> 0))
147+
[SMTPat (shift_right a (impl_u64__trailing_zeros a))]
148+
149+
val shift_right_trailing_zeros_nonzero_lemma_u128 (a:u128) :
150+
Lemma (requires (v a <> 0))
151+
(ensures (v (shift_right a (impl_u128__trailing_zeros a)) <> 0))
152+
[SMTPat (shift_right a (impl_u128__trailing_zeros a))]
153+
154+
val shift_right_trailing_zeros_nonzero_lemma_usize (a:usize) :
155+
Lemma (requires (v a <> 0))
156+
(ensures (v (shift_right a (impl_usize__trailing_zeros a)) <> 0))
157+
[SMTPat (shift_right a (impl_usize__trailing_zeros a))]
158+
159+
val shift_right_trailing_zeros_le_lemma_u8 (a:u8) :
160+
Lemma (v (shift_right a (impl_u8__trailing_zeros a)) <= v a)
161+
[SMTPat (shift_right a (impl_u8__trailing_zeros a))]
162+
163+
val shift_right_trailing_zeros_le_lemma_u16 (a:u16) :
164+
Lemma (v (shift_right a (impl_u16__trailing_zeros a)) <= v a)
165+
[SMTPat (shift_right a (impl_u16__trailing_zeros a))]
166+
167+
val shift_right_trailing_zeros_le_lemma_u32 (a:u32) :
168+
Lemma (v (shift_right a (impl_u32__trailing_zeros a)) <= v a)
169+
[SMTPat (shift_right a (impl_u32__trailing_zeros a))]
170+
171+
val shift_right_trailing_zeros_le_lemma_u64 (a:u64) :
172+
Lemma (v (shift_right a (impl_u64__trailing_zeros a)) <= v a)
173+
[SMTPat (shift_right a (impl_u64__trailing_zeros a))]
174+
175+
val shift_right_trailing_zeros_le_lemma_u128 (a:u128) :
176+
Lemma (v (shift_right a (impl_u128__trailing_zeros a)) <= v a)
177+
[SMTPat (shift_right a (impl_u128__trailing_zeros a))]
178+
179+
val shift_right_trailing_zeros_le_lemma_usize (a:usize) :
180+
Lemma (v (shift_right a (impl_usize__trailing_zeros a)) <= v a)
181+
[SMTPat (shift_right a (impl_usize__trailing_zeros a))]
182+
183+
122184
let impl_i8__abs (a:i8{minint i8_inttype < v a}) : i8 = abs_int a
123185
let impl_i16__abs (a:i16{minint i16_inttype < v a}) : i16 = abs_int a
124186
let impl_i32__abs (a:i32{minint i32_inttype < v a}) : i32 = abs_int a

0 commit comments

Comments
 (0)