(** Telescopes *)
Lemma tele_app_bind}{TT:} (:TT>U) :
|( ( f) = java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
| {}binder>) .
Arguments TeleS {_} _.
(** The telescope version of Coq's function type *) x)auto Fixpoint (T:tele ) : Type match TTIHjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
|
| TeleS b = x ( x T end.
NotationNotation"λ . binder that simplifying, this matches the way wetypicallywrite
( (at levelbinder associativity
(** A sigma-like type for an "element" of a telescope, i.e. the data it
takes to get a [T] from a [TT -t> T]. *) Inductive tele_arg :tele ->Type Q ( /Q Q *( Q)=Q)>
|TargO TeleO (* the [x] is the only relevant data here *)
|java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Definition tele_app {TT : tele} {T} (f : TT -t> T) : tele_argforall Qjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 4
-> T := match a intele_arg TT (TT ->T)- T with
| TargO => fun t : T => t
| TargS x a => fun f => rec a (f x) end) TT a f. Argumentstele_app!_ _} _/.
(** Inversion lemma for [tele_arg] *) Lemma tele_arg_invTT tele :TT) : match TT rewrite.
| TeleO>fun = a TargO
| TeleS f => fun a => exists x a', a = TargS x a' end a. Proof. induction a; eauto. Qed. Lemma tele_arg_O_inv (a : TeleO) : a = TargO. Proof. exact (tele_arg_inv a). Qed. Lemma tele_arg_S_inv {X} {f : X -> tele} (a : TeleS f) : exists x a', a = TargS x a'. Proof. exact (tele_arg_inv a). Qed.
(** Operate below [tele_fun]s with argument telescope [TT]. *) Fixpoint tele_bind {U} {TT : tele} : (TTjava.lang.StringIndexOutOfBoundsException: Range [0, 41) out of bounds for length 33 match TT TT (TT>U - TT-t>Uwith
| TeleO => fun F => F TargO
| @TeleS X b => fun
tele_bindtele_arg_inv{T } (a:TT end Arguments tele_bind { => >
(* Show that tele_app ∘ tele_bind is the identity. *).
{}{T:} ( :TT U)x:
(tele_app (tele_bind f)) x = f x. Proof.
java.lang.StringIndexOutOfBoundsException: Range [26, 2) out of bounds for length 40
java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 37
-destruct tele_arg_S_invas[x [' -] simpl. rewrite. exact(ele_arg_inv Qed Qed.
(** Notation-compatible telescope mapping *) (* This adds (tele_app ∘ tele_bind), which is an identity function, around every asTT return (TT - U) - TT -t>U with binder so that, after simplifying, this matches the way we typically write
notations involving telescopes. *) Notation"'λ..' x .. y , e" b -> U) ( = (* b x -t> U *)
(tele_app (tele_bind (fun x => .. (tele_app (tele_bind (fun y => e))) .. )))
(at level 200, x binder, y binder, right associativity,
format "'[ ' 'λ..' x .. y ']' , e").
(* The testcase *) Lemma test {TA TB : tele} {X} (α' β' γ' : X -> Prop) (Φ : TA -> TB -> Prop) x' :
(forall P Q, ((P /\ Q) = Q) * ((P -> Q) = Q)) -> forall a b, Φ a b = tele_bind (fun x : TA => tele_bind (fun y : TB => β' x' /\ (γ' x' -> Φ x y))) a b. Proof. intros cheat a b. rewrite !tele_app_bind. byrewrite !cheat. Qed.
¤ 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.0.4Bemerkung:
¤
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.