(* Too weak check on the correctness of return clause was leading to an anomaly *)
Inductive Vector A: nat -> Type :=
nil: Vector A O
| cons: forall n, A -> Vector A n -> Vector A (S n).
(* This could be made working with a better inference of inner return predicates from the return predicate at the higher level of the nested matching. Currently, we only check that it does not raise an
anomaly, but eventually, the "Fail" could be removed. *)
Fail Definition hd_fst A x n (v: A * Vector A (S n)) := match v as v0 returnmatch v0 with
(l, r) => match r in Vector _ n returnmatch n with 0 => Type | S _ => Typeendwith
nil _ => A
| cons _ _ _ _ => A end endwith
(_, nil _) => x
| (_, cons _ n hd tl) => hd end.
(* This is another example of failure but involving beta-reduction and not iota-reduction. Thus, for this one, I don't see how it could be
solved by small inversion, whatever smart is small inversion. *)
Inductive A : (Type->Type) -> Type := J : A (fun x => x).
Fail Checkfun x : nat * A (fun x => x) => match x returnmatch x with
(y,z) => match z in A f return f Typewith J => bool end endwith
(y,J) => true end.
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 und die Messung sind noch experimentell.