fact: Definition MTele_of (A : Type) : forall T, T -> M (msigT (MTele_Const (s:=Typeₛ) A)) := let matchtele := fun T => mTele (fun _ : T => mBase) in let fixtele := mTele (matchtele) in mfix' (m:=fixtele) (fun T (_ : T) => msigT (MTele_Const (s:=Typeₛ) A)) ( fun f T => mtmmatch' _ matchtele _ T [m: branch_pattern (@pbase _ (fun T => T -> M (msigT (MTele_Const (s:=Typeₛ) A))) A (fun t : A => M.ret (mexistT (MTele_Const (s:=Typeₛ) A) mBase t)) UniCoq ) | branch_pattern (ptele (fun (X : Type) => ptele (fun (F : forall x : X, Type) => @pbase _ (fun T => T -> M (msigT (MTele_Const (s:=Typeₛ) A))) (forall x : X, F x) (fun t : _ => M.nu (FreshFrom T) mNone (fun x => let Fx := reduce (RedOneStep [rl:RedBeta]) (F x) in let tx := (t x) in '(mexistT _ n T) <- f Fx tx; n' <- M.abs_fun (P:=fun _ => MTele) x n; T' <- M.coerce T; T' <- M.abs_fun (P:=fun x => MTele_Const (s:=Typeₛ) A (n' x)) x T'; M.ret (mexistT (MTele_Const (s:=Typeₛ) A) (mTele n') T') ) ) UniCoq ))) ] ).
imports: Mtac2(Base Datatypes List Sorts Specif MTele Tactics MFixDef MTeleMatchDef)