Commit Graph

1176 Commits

Author SHA1 Message Date
Gerwin Klein 49f0c84c6e lib: stronger version of mapM_x_commute for True guard
mapM_x_commute requires "distinct" even if the operations in the mapM
don't require any guards. Add a separate version without distinct when
guard is \top.

Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-10-24 15:33:46 +11:00
Gerwin Klein 8228bf7404 word_lib: shiftr is always less than max word
Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-09-24 22:24:08 +02:00
Rafal Kolanski 53f44dea1e lib: Requalify_Test: add example of requalify-hide-requalify
Document/test surprising interactions of hide_const, locales and
requalify for the purposes of temporarily making arch-specific constants
visible in theory scope.

Signed-off-by: Rafal Kolanski <rafal.kolanski@proofcraft.systems>
2024-08-28 15:17:03 +10:00
Rafal Kolanski a82a5b4574 lib: Requalify: better document annotation
Previous attempts to update the code to allow ctrl+clicking on names
resulted in markup overlap errors for arch_requalify commands.
This was due to a misconception that YXML strings already containing
correct position information (e.g. obtained via Parse.const) would
be used directly by Proof_context.read_const/read_type_name. This is not
the case. Instead, position information is adjusted for the content
length, and since we add a prefix for L4V_ARCH, we got annotation that
did not match the document text.

After hours of digging to uncover the above issue, we get this:
* the "check_parsed_nm" in gen_requalify was not an extra check, but a
  hook to do document annotation; updated comments
* use Proof_Context.check_const/check_type_name with user-supplied name
  and parsed position of Parse.name, and manually report resulting markup
  (do not use previously resolved name as it could point to a hidden
  const/type)
* since the above works for arch_requalify_const, the normal
  requalify_const becomes a simpler instance of it
* the whole Parse.const/Parse.typ was a red herring and ultimately did
  not add anything to the code except for read_const/read_type_name
  interaction; removed

The resulting code is simpler; large cautionary comments remain for
future generations.

Signed-off-by: Rafal Kolanski <rafal.kolanski@proofcraft.systems>
2024-08-28 15:17:03 +10:00
Rafal Kolanski 92971eeb89 lib: Requalify: enable ctrl+click jumps for arch_requalify
This uses a complex workaround to unify the parse location of the
original name encoded in YXML with the name the user is actually aiming
for. While intuitively one could think to use the position of the name we
parsed, there appears to be no way to pass that location to
read_const/read_type_name, as those expect to be fed the result of
Parse.const and Parse.typ respectively.

Signed-off-by: Rafal Kolanski <rafal.kolanski@proofcraft.systems>
2024-08-21 04:15:51 +10:00
Rafal Kolanski bc948e30ec lib: migrate Requalify tests into test/
Stops namespace pollution, allows us to use Arch locale as example.

Signed-off-by: Rafal Kolanski <rafal.kolanski@proofcraft.systems>
2024-07-23 16:47:33 +10:00
Rafal Kolanski 34dfa6c344 lib: overhaul Requalify, add arch variants
* add warnings when exporting a name that already exists in theory
  context, suppressable by `(aliasing)` option
* add `arch` variants of requalify commands that implicitly add the
  value of L4V_ARCH before whatever you give them, with optional
  suffixes for abstract (A) and Haskell (H) spec global naming.
* write hopefully-understandable documentation with commented examples

Signed-off-by: Rafal Kolanski <rafal.kolanski@proofcraft.systems>
2024-07-23 16:47:33 +10:00
Corey Lewis f00bbb735f lib/monads: resync trace monad with nondet
Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-07-17 13:37:45 +10:00
Michael McInerney e429ff680a lib: adjust corres_symb_exec_r_conj_ex_abs_forwards
This was required after a recent update to the schematics of
corres_symb_exec_r_conj_ex_abs

Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-15 19:27:16 +09:30
Michael McInerney d2535f2f2e lib+proof: move corres_add_noop_rhs and corres_add_noop_rhs2 to Lib
Moved from DRefine and CRefine, respectively

Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 5d78cd788b monads/reader_option: add ostate_assert
This adds ostate_assert and ohaskell_state_assert, which are
versions of state_assert/stateAssert for the reader monad.
Also adds several rules for basic reasoning about these
functions.

Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 9646d32868 monads/reader_option: add no_ofail_ask
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 94fdcd6d5d monads/reader_option: add ask_wp
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 0d4e925b22 monads/nondet: add gets_the_Some_get
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 469cbe5e82 lib: add more schematics to corres_symb_exec_r_conj_ex_abs
This helps to reduce dependence between the schematics used in
the assumptions, and allows for easier wp reasoning.

Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 68974c5f2b clib: add ccorres_assert2_abs
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 38256e0e10 clib: add hoarep_conj_lift
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 133b3f57cd clib: strengthen intermediate_Normal_state
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 0cf47b90d4 clib: add ccorres_to_vcg_with_prop' to Corres_UL_C
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 949512d202 clib: add ccorres_empty_handler_stackI to Corres_UL_C
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney 06ef418121 clib: add hoarep_isNormal_exec_handlers to Corres_UL_C
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Michael McInerney bb8f9aeb6e clib: remove no_fail assumption from ccorres_While
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-07-11 13:36:28 +09:30
Corey Lewis f4107b64d8 lib/monads: remove FIXMEs and hoare_gets
These FIXMEs were recently added and apart from removing hoare_gets I no
longer think that they are worth doing, as the lemmas they refer to are
used in more proofs than I first thought.

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-07-09 11:24:17 +10:00
Corey Lewis 05d0df3c63 lib+proof+sys-init: more updates for monad changes
This fixes the proofs not handled by the automated changes in the
previous commits.

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-07-09 11:24:17 +10:00
Corey Lewis 493e2b5b90 lib+proof+sys-init: update for more changed monad lemmas
The following commands are updates for changed lemma names:

sed -i 's/hoare_valid_validE/valid_validE/g' **/*.thy
sed -i 's/hoare_vcg_E_conj/hoare_vcg_conj_liftE_E/g' **/*.thy
sed -i "s/hoare_vcg_conj_liftE_R/hoare_vcg_conj_liftE_R'/g" **/*.thy
sed -i 's/hoare_vcg_R_conj/hoare_vcg_conj_liftE_R/g' **/*.thy
sed -i 's/hoare_vcg_E_elim/hoare_vcg_conj_elimE/g' **/*.thy
sed -i 's/hoare_vcg_const_imp_lift_R/hoare_vcg_const_imp_liftE_R/g' **/*.thy
sed -i 's/hoare_vcg_const_Ball_lift_R/hoare_vcg_const_Ball_liftE_R/g' **/*.thy
sed -i 's/hoare_vcg_conj_lift_R/hoare_vcg_conj_liftE_R/g' **/*.thy
sed -i 's/hoare_vcg_const_imp_lift_E/hoare_vcg_const_imp_liftE_E/g' **/*.thy
sed -i 's/hoare_weak_lift_imp_R/hoare_weak_lift_impE_R/g' **/*.thy
sed -i 's/hoare_post_imp_dc2_actual/hoare_post_impE_R_dc_actual/g' **/*.thy
sed -i 's/hoare_post_imp_dc2E_actual/hoare_post_impE_E_dc_actual/g' **/*.thy
sed -i 's/hoare_post_imp_dc2E/hoare_post_impE_E_dc/g' **/*.thy
perl -0777 -pi -e 's/hoare_pre\(1\)/hoare_weaken_pre/g' **/*.thy
perl -0777 -pi -e 's/hoare_drop_imps\(2\)/hoare_drop_impE_R/g' **/*.thy
sed -i 's/hoare_vcg_imp_lift_R/hoare_vcg_imp_liftE_R/g' **/*.thy

The following commmands update changed variable names:

perl -0777 -pi -e "s/hoare_post_imp\h*(\s*)\[(\s*)where\h*Q\h*=\h*/hoare_post_imp\1\[\2where Q'=/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*Q\h*=\h*\"([^\"]+)\"(\s*)in\h*hoare_post_imp/rule_tac Q'=\"\1\"\2in hoare_post_imp/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*Q\h*=\h*\"([^\"]+)\"(\s*)in\h*hoare_strengthen_post/rule_tac Q'=\"\1\"\2in hoare_strengthen_post/g" **/*.thy
perl -0777 -pi -e "s/hoare_strengthen_post\h*(\s*)\[(\s*)where\h*Q\h*=\h*/hoare_strengthen_post\1\[\2where Q'=/g" **/*.thy
perl -0777 -pi -e "s/hoare_strengthen_post\h*(\s*)\[(\s*)where\h*R\h*=\h*/hoare_strengthen_post\1\[\2where Q=/g" **/*.thy
perl -0777 -pi -e "s/hoare_drop_impE_R\h*(\s*)\[(\s*)where\h*R\h*=\h*/hoare_drop_impE_R\1\[\2where Q'=/g" **/*.thy
perl -0777 -pi -e "s/hoare_drop_imp\h*(\s*)\[(\s*)where\h*R\h*=\h*/hoare_drop_imp\1\[\2where Q'=/g" **/*.thy
perl -0777 -pi -e "s/hoare_drop_imps\h*(\s*)\[(\s*)where\h*R\h*=\h*/hoare_drop_imps\1\[\2where Q'=/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*G\h*=\h*\"([^\"]+)\"(\s*)in\h*hoare_grab_asm/rule_tac P'=\"\1\"\2in hoare_grab_asm/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*R\h*=\h*\"([^\"]+)\"(\s*)in\h*hoare_vcg_if_split/rule_tac P''=\"\1\"\2in hoare_vcg_if_split/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*R\h*=\h*\"([^\"]+)\"(\s*)in\h*hoare_post_add/rule_tac Q'=\"\1\"\2in hoare_post_add/g" **/*.thy
perl -0777 -pi -e "s/hoare_strengthen_postE\h*(\s*)\[where\h*E\h*=\h*/hoare_strengthen_postE\1\[\2where E'=/g" **/*.thy
perl -0777 -pi -e "s/hoare_disjI2\h*(\s*)\[(\s*)where\h*R\h*=\h*/hoare_disjI2\1\[\2where Q'=/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*Q\h*=\h*\"([^\"]+)\"(\s*)in\h*hoare_weaken_pre/rule_tac P'=\"\1\"\2in hoare_weaken_pre/g" **/*.thy
perl -0777 -pi -e "s/hoare_weaken_pre\h*(\s*)\[(\s*)where\h*Q\h*=\h*/hoare_weaken_pre\1\[\2where P'=/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*Q\h*=\h*\"([^\"]+)\"(\s*)in\h*hoare_pre_imp/rule_tac P'=\"\1\"\2in hoare_pre_imp/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*Q\h*=\h*\"([^\"]+)\"(\s*)and(\s*)E\h*=\h*\"([^\"]+)\"(\s*)in\h*hoare_strengthen_postE/rule_tac Q'=\"\1\"\2and\3E'=\"\4\"\5in hoare_strengthen_postE/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*E\h*=\h*\"([^\"]+)\"(\s*)and(\s*)Q\h*=\h*\"([^\"]+)\"(\s*)in\h*hoare_strengthen_postE/rule_tac E'=\"\1\"\2and\3Q'=\"\4\"\5in hoare_strengthen_postE/g" **/*.thy
perl -0777 -pi -e "s/hoare_vcg_conj_liftE_R\h*(\s*)\[(\s*)where\h*S\h*=\h*/hoare_vcg_conj_liftE_R\1\[\2where Q'=/g" **/*.thy
perl -0777 -pi -e "s/hoare_post_add\h*(\s*)\[(\s*)where\h*R\h*=\h*/hoare_post_add\1\[\2where Q'=/g" **/*.thy
perl -0777 -pi -e "s/rule_tac\h*Q\h*=\h*\"([^\"]+)\"(\s*)for(.*)(\s*)in\h*hoare_strengthen_post/rule_tac Q'=\"\1\"\2for\3\4in hoare_strengthen_post/g" **/*.thy
perl -0777 -pi -e "s/unless_wp\h*(\s*)\[(\s*)where\h*Q\h*=\h*/unless_wp\1\[\2where P'=/g" **/*.thy
perl -0777 -pi -e "s/hoare_chain\h*(\s*)\[(\s*)where\h*P\h*=\h*/hoare_chain\1\[\2where P'=/g" **/*.thy

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-07-09 11:24:17 +10:00
Corey Lewis 8546c10af3 lib/monads: more improvements to monads consistency
This makes the lemma names in the monad rule sets even more consistent,
and changes the variables used in the lemmas to avoid R and G being used
in pre or post-conditions. These variable names are instead reserved for
the rely and guarantee conditions in the trace monads RG rule set.

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-07-09 11:24:17 +10:00
Corey Lewis da814c521e lib+proof: rename crunches to crunch
sed -i 's/^crunches/crunch/g' **/*.thy
sed -i 's/crunches/crunch/g' **/*.ML

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-07-08 23:02:12 +10:00
Corey Lewis 034bd222ab lib: remove crunch keyword and parser
Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-07-08 23:02:12 +10:00
Corey Lewis 1d631cf172 lib+proof: change uses of old-style crunch to crunches
This has been performed by the following commands:

perl -0777 -pi -e "s/^crunch(\s*\(in\s*\w*\))?\s*([(]\w*[)])\s*([\w'\"-]*)\s*(\[[\w,\s\!]*\])?\s*:(\s*)([\w'\".-]+)((?:\s*,\s*[\w'\".-]+)*)(?\!\h*[\w'\",.])/crunches\1\5\6\7\n for \2 \3\4/gm" **/*.thy
perl -0777 -pi -e "s/^crunch(\s*\(in\s*\w*\))?(\s*[(]\w*[)])?\s*([\w'\"-]*)\s*(\[[\w,\s\!]*\])?\s*:(\s*)([\w'\".-]+)((?:\s*,\s*[\w'\".-]+)*)\s*([^\n]*)/crunches\1\5\6\7\n for\2 \3\4: \8/gm" **/*.thy

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-07-08 23:02:12 +10:00
Gerwin Klein 973bc91e35
lib: add variation on mod_less_eq_dividend
Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-07-05 18:02:52 +10:00
Gerwin Klein 7daf753428
word_lib: more lemmas about mask
Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-07-05 18:02:52 +10:00
Gerwin Klein 46170b58a0
word_lib: lemma on toEnum (ucast _)
Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-07-05 18:02:51 +10:00
Gerwin Klein acc5afce06 lib: update old-style "defs" to Isabelle2024
The old Global_Theory.add_defs command lost some options and no longer
processes attributes. This commit reflects these changes up into the
"defs" command:

- remove "overloading" and "unchecked" options
- remove attribute spec -- use pure binding for thm name
- only one equation per "defs" command
- remove deprecation warning, because we are using this command
  intentionally
- document these changes in the header

Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-06-12 13:25:18 +10:00
Corey Lewis 371d8a2858 lib+asmrefine+autocorres+c-parser+proof: update to Isabelle2024
- Exn.interruptible_capture has been renamed to Exn.result.
- simproc setup has changed slightly
- can no longer catch all exceptions
- Term_Subst renames
- Global_Theory.add_defs was downgraded to Global_Theory.add_def

Co-authored-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-06-12 13:25:18 +10:00
Gerwin Klein 7eef3d6586 word_lib: import changes from afp-2024
Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-06-12 13:25:18 +10:00
Gerwin Klein 76c5eeb505 word_lib+crefine: move in word lemmas from CRefine
Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-06-12 12:18:31 +10:00
Corey Lewis 1d3a26c701 lib+proof+autocorres: update for monad changes
This mostly involved renamed variable names and one lemma being removed
from the simp set.

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-06-11 10:04:55 +10:00
Corey Lewis dbf5a2a865 lib+proof+autocorres: update for renamed monad lemmas
This involved the following sed commands, with care taken to avoid
unnecessary rewrites in lib/Monads and lib/StateMonad.thy

sed -i 's/hoare_post_taut/hoare_TrueI/g' **/*.thy
sed -i 's/hoare_TrueI\s*\[where P=\\<top>\]/wp_post_taut/g'
proof/**/*.thy
sed -i 's/hoare_post_imp_R/hoare_strengthen_postE_R/g' **/*.thy
sed -i 's/hoare_seq_ext\b/bind_wp/g' **/*.thy
sed -i 's/bind_wp\s*\[rotated\]/bind_wp_fwd/g' **/*.thy
sed -i 's/hoare_vcg_precond_imp/hoare_weaken_pre/g' **/*.thy
sed -i 's/hoare_vcg_seqE/bindE_wp/g' **/*.thy
sed -i 's/bindE_wp\s*\[rotated\]/bindE_wp_fwd/g' **/*.thy
sed -i 's/validE_weaken/hoare_chainE/g' **/*.thy
sed -i 's/validE_weaken/hoare_chainE/g' **/*.ML
sed -i 's/seqE/bindE_wp_fwd/g' **/*.thy
sed -i 's/bindE_wp_fwd\s*\[rotated\]/bindE_wp/g' **/*.thy
sed -i 's/hoare_True_E_R/hoareE_R_TrueI/g' **/*.thy
sed -i -e 's/hoareE_R_TrueI\[where
P="\\<top>"\]/wp_post_tautE_R/g' **/*.thy
sed -i "s/hoare_post_impErr'/hoare_strengthen_postE/g" **/*.thy
sed -i 's/hoare_post_impErr/hoare_strengthen_postE/g' **/*.thy
sed -i 's/hoare_vcg_all_lift_R/hoare_vcg_all_liftE_R/g' **/*.thy
sed -i 's/hoare_seq_ext_skip/bind_wp_fwd_skip/g' **/*.thy
sed -i 's/True_E_E/wp_post_tautE_E/g' **/*.thy
sed -i 's/\bseq_ext/bind_wp_fwd/g' proof/**/*.thy

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-06-11 10:04:55 +10:00
Corey Lewis 88ee3c75c5 lib/monads: improve consistency of monad rule sets
This improves the structure and naming consistency of the various monad
rule sets, for both the nondet and trace monads.

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-06-11 10:04:55 +10:00
Corey Lewis ef5aaa0e71 lib/monads: improve style in Nondet_Monad_Equations
Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-06-11 10:04:55 +10:00
Gerwin Klein dd6295d744 lib+proof: remove obsolete DupSkip cache mentions
DupSkip used to be a proof caching option since replaced by "defer
proofs". It is no longer available in our Isabelle branch. Remove last
mentions and related files.

Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-06-05 09:56:13 +10:00
Corey Lewis eb3db4bf34 lib: add wp_comb section to crunch
Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-04-24 19:56:19 +10:00
Corey Lewis f0f1358ac4 lib/monads/trace: update wp attributes to match nondet
Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-04-22 14:32:53 +10:00
Corey Lewis 3b3f623b25 lib/monads/nondet: make hoare_seq_ext and hoare_vcg_seqE wp rules
We want them as wp rules instead of wp_split rules so that they are used
with the correct priority and in combination with wp_comb rules when
necessary. This also adds new validE_R and validE_E variants, along with
rules for when bind appears inside a validE term.

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-04-22 14:32:53 +10:00
Corey Lewis a6756dd37f lib/monads/wp: improve README's description of rule ordering
This tries to remove ambiguity around the order in which `wp`, `wp_comb`
and `wp_split` rules are applied.

Signed-off-by: Corey Lewis <corey.lewis@proofcraft.systems>
2024-04-22 12:06:23 +10:00
Gerwin Klein 7549c29256 lib: produce _def and _val thms in value_type
Produce a _def theorem for the value type that provides direct symbolic
access to the right-hand side of the value_type definition. This avoids
having to unfold those terms in subsequent proofs.

The numeric value as as term is still available as <type-name>_val.

This restricts value_type to nat/int inputs, i.e. word is no longer
accepted on the rhs (so far unused). A manual cast to nat on the rhs
will still work.

Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
2024-04-10 19:30:04 +10:00
Michael McInerney 0edbdb8a9a lib/monads: add reader_case_option_wp
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-04-08 21:11:09 +09:30
Michael McInerney cd44bc1b33 lib/monads: rename assert_opt_ovalid to oassert_opt_ovalid and make [wp]
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-04-08 21:11:09 +09:30
Michael McInerney 919d2f9d8c lib: add corres_stateAssert_add_assertion
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-04-08 21:11:09 +09:30
Michael McInerney a6bdfae55c lib: add some crossing lemmas for corres_underlying
Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>

reindent corres_cross_add_guard and friend squash

Signed-off-by: Michael McInerney <michael.mcinerney@proofcraft.systems>
2024-04-08 21:11:09 +09:30