Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • ci-release
  • ci/msammler/more_feed
  • ci/refactor_staging
  • coq-stdpp-1.0
  • dfrumin/coq-stdpp-set_map_2
  • master
  • msammler/bitvector
  • msammler/bool_decide_simpl_never
  • msammler/monad_without_universe_constraints
  • ralf/empty-opaque
  • ralf/hint-mode-check
  • ralf/hint-mode-plus
  • ralf/listZ
  • ralf/lookup_insert
  • ralf/make_simple_intropattern
  • ralf/multiset-solver
  • robbert/cancel_inj_surj
  • robbert/cbn
  • robbert/f_equiv_pointwise
  • robbert/from_option
  • robbert/map_Forall_Exist
  • robbert/map_disjoint_difference
  • robbert/map_filter_True_False
  • robbert/map_fold_foldr
  • robbert/multiset_singleton
  • robbert/new_stuff
  • robbert/rel_decision
  • robbert/set_fold_delete
  • robbert/set_guide
  • robbert/tc_opaque
  • rodolphe/dune-rocq
  • tchajed/stdpp-sprop-gmap
  • coq-stdpp-1.0.0
  • coq-stdpp-1.1.0
  • coq-stdpp-1.10.0
  • coq-stdpp-1.11.0
  • coq-stdpp-1.12.0
  • coq-stdpp-1.2.0
  • coq-stdpp-1.2.1
  • coq-stdpp-1.3.0
  • coq-stdpp-1.4.0
  • coq-stdpp-1.5.0
  • coq-stdpp-1.6.0
  • coq-stdpp-1.7.0
  • coq-stdpp-1.8.0
  • coq-stdpp-1.9.0
46 results

Target

Select target project
  • iris/stdpp
  • johannes/stdpp
  • proux1/stdpp
  • dosualdo/stdpp
  • benoit/coq-stdpp
  • dfrumin/coq-stdpp
  • haidang/stdpp
  • amintimany/coq-stdpp
  • swasey/coq-stdpp
  • simongregersen/stdpp
  • proux/stdpp
  • janno/coq-stdpp
  • amaurremi/coq-stdpp
  • msammler/stdpp
  • tchajed/stdpp
  • YaZko/stdpp
  • maximedenes/stdpp
  • jakobbotsch/stdpp
  • Blaisorblade/stdpp
  • simonspies/stdpp
  • lepigre/stdpp
  • devilhena/stdpp
  • simonfv/stdpp
  • jihgfee/stdpp
  • snyke7/stdpp
  • Armael/stdpp
  • gmalecha/stdpp
  • olaure01/stdpp
  • sarahzrf/stdpp
  • atrieu/stdpp
  • herbelin/stdpp
  • arthuraa/stdpp
  • lgaeher/stdpp
  • mrhaandi/stdpp
  • mattam82/stdpp
  • Quarkbeast/stdpp
  • aa755/stdpp
  • gmevel/stdpp
  • lstefane/stdpp
  • jung/stdpp
  • vsiles/stdpp
  • dlesbre/stdpp
  • bergwerf/stdpp
  • marijnvanwezel/stdpp
  • ivanbakel/stdpp
  • tperami/stdpp
  • adamAndMath/stdpp
  • Villetaneuse/stdpp
  • sanjit/stdpp
  • yiyunliu/stdpp
  • thomas-lamiaux/stdpp
  • Tragicus/stdpp
  • kbedarka/stdpp
53 results
Select Git revision
  • bsd-fix
  • ci-release
  • ci/msammler/_1_2_lemmas
  • ci/msammler/more_feed
  • ci/refactor_staging
  • coq-stdpp-1.0
  • dfrumin/coq-stdpp-set_map_2
  • master
  • msammler/bitvector
  • msammler/bool_decide_simpl_never
  • msammler/monad_without_universe_constraints
  • ralf/empty-opaque
  • ralf/hint-mode-check
  • ralf/hint-mode-plus
  • ralf/listZ
  • ralf/lookup_insert
  • ralf/make_simple_intropattern
  • ralf/multiset-solver
  • robbert/cancel_inj_surj
  • robbert/cbn
  • robbert/f_equiv_pointwise
  • robbert/from_option
  • robbert/lookup_total_fmap
  • robbert/map_disjoint_difference
  • robbert/map_filter_True_False
  • robbert/multiset_singleton
  • robbert/set_fold_union
  • robbert/set_guide
  • robbert/tc_opaque
  • tchajed/stdpp-sprop-gmap
  • coq-stdpp-1.0.0
  • coq-stdpp-1.1.0
  • coq-stdpp-1.10.0
  • coq-stdpp-1.2.0
  • coq-stdpp-1.2.1
  • coq-stdpp-1.3.0
  • coq-stdpp-1.4.0
  • coq-stdpp-1.5.0
  • coq-stdpp-1.6.0
  • coq-stdpp-1.7.0
  • coq-stdpp-1.8.0
  • coq-stdpp-1.9.0
42 results
Show changes
...@@ -424,7 +424,7 @@ Section properties. ...@@ -424,7 +424,7 @@ Section properties.
constructor; simpl; intros x' Hxx'. constructor; simpl; intros x' Hxx'.
assert (x' xs) as (xs1&xs2&->)%elem_of_list_split by eauto using tc_once. assert (x' xs) as (xs1&xs2&->)%elem_of_list_split by eauto using tc_once.
refine (IH (length xs1 + length xs2) _ _ (xs1 ++ xs2) _ _); refine (IH (length xs1 + length xs2) _ _ (xs1 ++ xs2) _ _);
[rewrite app_length; simpl; lia..|]. [rewrite length_app; simpl; lia..|].
intros x'' Hx'x''. opose proof* (Hfin x'') as Hx''; [by econstructor|]. intros x'' Hx'x''. opose proof* (Hfin x'') as Hx''; [by econstructor|].
cut (x' x''); [set_solver|]. cut (x' x''); [set_solver|].
intros ->. by apply (Hirr x''). intros ->. by apply (Hirr x'').
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -628,28 +628,30 @@ Ltac opose_core p tac := ...@@ -628,28 +628,30 @@ Ltac opose_core p tac :=
(** Turn all leading ∀ and → of [p] into evars (∀-evars will be shelved), and (** Turn all leading ∀ and → of [p] into evars (∀-evars will be shelved), and
call [tac] with the term applied with those evars. This fill unfold definitions call [tac] with the term applied with those evars. This fill unfold definitions
to find leading ∀/→. to find leading ∀/→.
The type of [p] will be normalized by calling the [normalizer] function.
[_name_guard] is an unused argument where you can pass anything you want. If the [_name_guard] is an unused argument where you can pass anything you want. If the
argument is an intro pattern, those will be taken into account by the [fresh] argument is an intro pattern, those will be taken into account by the [fresh]
that is inside this tactic, avoiding name collisions that can otherwise arise. that is inside this tactic, avoiding name collisions that can otherwise arise.
This is a work-around for https://github.com/coq/coq/issues/18109. *) This is a work-around for https://github.com/coq/coq/issues/18109. *)
Ltac ospecialize_foralls p _name_guard tac := Ltac evar_foralls p _name_guard normalizer tac :=
let T := type of p in let T := type of p in
lazymatch eval hnf in T with lazymatch normalizer T with
| ?T1 ?T2 => | ?T1 ?T2 =>
(* This is the [fresh] where the presence of [_name_guard] matters. (* This is the [fresh] where the presence of [_name_guard] matters.
Note that the "opose_internal" is nice but not sufficient because Note that the "opose_internal" is nice but not sufficient because
it gets ignored when name mangling is enabled. *) it gets ignored when name mangling is enabled. *)
let pT1 := fresh "opose_internal" in let pT1 := fresh "__evar_foralls_internal" in
assert T1 as pT1; [| ospecialize_foralls (p pT1) _name_guard tac; clear pT1] assert T1 as pT1; [| evar_foralls (p pT1) _name_guard normalizer tac; clear pT1]
| x : ?T1, _ => | x : ?T1, _ =>
let e := mk_evar T1 in let e := mk_evar T1 in
ospecialize_foralls (p e) _name_guard tac evar_foralls (p e) _name_guard normalizer tac
| ?T1 => tac p | ?T1 => tac p
end. end.
Ltac opose_specialize_foralls_core p _name_guard tac := Ltac opose_specialize_foralls_core p _name_guard tac :=
opose_core p ltac:(fun p => ospecialize_foralls p _name_guard tac). opose_core p ltac:(fun p =>
evar_foralls p _name_guard ltac:(fun t => eval hnf in t) tac).
Tactic Notation "opose" "proof" uconstr(p) "as" simple_intropattern(pat) := Tactic Notation "opose" "proof" uconstr(p) "as" simple_intropattern(pat) :=
opose_core p ltac:(fun p => pose proof p as pat). opose_core p ltac:(fun p => pose proof p as pat).
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.