Skip to content

Commit aaf8d61

Browse files
committed
Simplify proof
1 parent 6e8fc04 commit aaf8d61

1 file changed

Lines changed: 2 additions & 85 deletions

File tree

ostd/src/sync/rwlock.rs

Lines changed: 2 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -741,98 +741,15 @@ impl<T /*: ?Sized*/, G: SpinGuardian> RwLockReadGuard<'_, T, G>
741741
ghost g => {
742742
let prev_usize = prev as usize;
743743
let next_usize = next as usize;
744-
lemma_consts_properties_value(prev_usize);
744+
lemma_consts_properties_value(next_usize);
745745
lemma_consts_properties_prev_next(prev_usize, next_usize);
746-
let ghost total_successful_readers =
747-
if g.cell_perm is Left {
748-
(V_MAX_PERM_FRACS as int) - g.cell_perm->Left_0.frac()
749-
} else {
750-
0int
751-
};
752-
let ghost pending_failed_upgrade_attempt = g.upgrade_retract_token.is_empty();
753-
let ghost upgrade_reader_count =
754-
if (prev_usize & UPGRADEABLE_READER) != 0 && !pending_failed_upgrade_attempt {
755-
1int
756-
} else {
757-
0int
758-
};
759-
let ghost successful_read_guards = total_successful_readers - upgrade_reader_count;
760-
let ghost old_read_guard_frac = g.read_guard_token.frac();
761-
assert(old_read_guard_frac + successful_read_guards == V_MAX_READ_GUARDS as int);
762746
g.read_guard_token.combine(token);
763747
g.read_guard_token.bounded();
764-
assert(old_read_guard_frac + 1int <= V_MAX_READ_GUARDS as int);
765-
assert(old_read_guard_frac < V_MAX_READ_GUARDS as int);
766-
assert(successful_read_guards > 0);
767-
assert(total_successful_readers > 0);
768-
assert((prev_usize & MAX_READER_MASK) != 0);
769-
if g.cell_perm is Right {
770-
assert(total_successful_readers == 0);
771-
assert(false);
772-
}
773-
assert((prev_usize & WRITER) == 0);
774-
let ghost old_remaining_pcell_perms = g.cell_perm->Left_0.frac();
748+
775749
let tracked mut rem = g.cell_perm.tracked_take_left();
776750
rem.combine(perm);
777751
rem.bounded();
778-
assert(rem.frac() == old_remaining_pcell_perms + 1int);
779-
assert((V_MAX_PERM_FRACS as int) - rem.frac() == total_successful_readers - 1int);
780-
assert((next_usize & MAX_READER_MASK) as int == (prev_usize & MAX_READER_MASK) as int - 1int);
781-
assert((next_usize & UPGRADEABLE_READER) == (prev_usize & UPGRADEABLE_READER));
782-
assert((next_usize & WRITER) == (prev_usize & WRITER));
783-
assert((next_usize & BEING_UPGRADED) == (prev_usize & BEING_UPGRADED));
784-
assert((next_usize & WRITER) == 0);
785-
assert(g.read_guard_token.frac() + (successful_read_guards - 1int) == V_MAX_READ_GUARDS as int);
786752
g.cell_perm = Sum::new_left(rem);
787-
let ghost next_pending_failed_upgrade_attempt = g.upgrade_retract_token.is_empty();
788-
assert(next_pending_failed_upgrade_attempt == pending_failed_upgrade_attempt);
789-
let ghost next_upgrade_reader_count =
790-
if (next_usize & UPGRADEABLE_READER) != 0 && !next_pending_failed_upgrade_attempt {
791-
1int
792-
} else {
793-
0int
794-
};
795-
assert(next_upgrade_reader_count == upgrade_reader_count);
796-
let ghost next_total_successful_readers =
797-
if g.cell_perm is Left {
798-
(V_MAX_PERM_FRACS as int) - g.cell_perm->Left_0.frac()
799-
} else {
800-
0int
801-
};
802-
assert(next_total_successful_readers == total_successful_readers - 1int);
803-
let ghost next_successful_read_guards = next_total_successful_readers - next_upgrade_reader_count;
804-
assert(next_successful_read_guards == successful_read_guards - 1int);
805-
assert(g.read_guard_token.frac() + next_successful_read_guards == V_MAX_READ_GUARDS as int);
806-
let ghost next_total_reader_attempts = (next_usize & MAX_READER_MASK) as int;
807-
assert(next_total_reader_attempts == (prev_usize & MAX_READER_MASK) as int - 1int);
808-
let ghost next_reader_count =
809-
if (next_usize & MAX_READER) != 0 {
810-
MAX_READER as int
811-
} else {
812-
(next_usize & READER_MASK) as int
813-
};
814-
let ghost next_failed_reader_attempts =
815-
next_total_reader_attempts + next_upgrade_reader_count - next_total_successful_readers;
816-
let ghost failed_reader_attempts =
817-
((prev_usize & MAX_READER_MASK) as int) + upgrade_reader_count - total_successful_readers;
818-
assert(next_failed_reader_attempts == failed_reader_attempts);
819-
assert(g.read_retract_token.frac() + next_failed_reader_attempts == V_MAX_READ_RETRACT_FRACS);
820-
assert(0 <= next_successful_read_guards);
821-
if (next_usize & MAX_READER) != 0 {
822-
assert(next_reader_count == MAX_READER as int);
823-
assert((next_usize & MAX_READER_MASK) >= MAX_READER) by (bit_vector)
824-
requires
825-
(next_usize & MAX_READER) != 0,
826-
;
827-
} else {
828-
assert((next_usize & MAX_READER_MASK) == (next_usize & READER_MASK)) by (bit_vector)
829-
requires
830-
(next_usize & MAX_READER) == 0,
831-
;
832-
assert(next_reader_count == next_total_reader_attempts);
833-
}
834-
assert(next_reader_count <= next_total_reader_attempts);
835-
assert(next_successful_read_guards <= next_reader_count);
836753
}
837754
);
838755
}

0 commit comments

Comments
 (0)