(* Testing a regression of unification in 8.5 in problems of the form
"match ?y with ... end = ?x args" *)
Lemma foo : exists b, forall a, match a with tt => tt end = b a. Proof.
eexists. intro.
refine (_ : _ = match _ with tt => _ end).
refine eq_refl. Qed.
Definition list_caset A (P : list A -> Type) (N : P nil) (C : forall x xs, P (x::xs))
ls
: P ls
:= match ls with
| nil => N
| x::xs => C x xs end.
Axiom list_caset_Proper'
: forall {A P}, Proper (eq
==> pointwise_relation _ (pointwise_relation _ eq)
==> eq
==> eq)
(@list_caset A (fun _ => P)). Goalforall (T T' : Set) (a3 : list T), exists y2, forall (a4 : T' -> bool), match a3 with
| nil => 0
| (_ :: _)%list => 1 end = y2 a4.
clear; eexists; intros. reflexivity. Undo. LocalLtac t :=
lazymatch goalwith
| [ |- match ?v with nil => ?N | cons x xs => @?C x xs end = _ :> ?P ]
=> let T := type of v in let A := match (eval hnf in T) with list ?A => A end in
refine (@list_caset_Proper' A P _ _ _ _ _ _ _ _ _
: @list_caset A (fun _ => P) N C v = match _ with nil => _ | cons x xs => _ end) end.
(etransitivity; [ t | reflexivity ]) || fail 0 "too early".
Undo.
t. Abort.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.