(** * Theorems about the empty type *)Local Set Universe Minimization ToSet. Local Open Scope path_scope. (** ** Unpacking *) (** ** Eta conversion *) (** ** Paths *) (** ** Transport *) (** ** Functorial action *) (** ** Equivalences *) (** ** Universal mapping properties *)H: Funext
A: Empty -> TypeContr (forall x : Empty, A x)H: Funext
A: Empty -> TypeContr (forall x : Empty, A x)intros f; apply path_forall@{Set u u}; intros x; elim x. Defined.H: Funext
A: Empty -> Typeforall y : forall e : Empty, A e, Empty_ind A = yT: Type
falso: EmptyTcase falso. Defined. Instance isequiv_empty_rec@{u} `{Funext} (A : Type@{u}) : IsEquiv@{Set u} (fun (_ : Unit) => @Empty_rec A) | 0 := isequiv_adjointify@{Set u} _ (fun _ => tt) (fun f => path_forall@{Set u u} _ _ (fun x => Empty_rec x)) (fun x => match x with tt => idpath end). Definition equiv_empty_rec@{u} `{Funext} (A : Type@{u}) : Unit <~> ((Empty -> A) : Type@{u}) := (Build_Equiv@{Set u} _ _ (fun (_ : Unit) => @Empty_rec A) _). (** ** Behavior with respect to truncation *)T: Type
falso: EmptyTn: trunc_indexIsTrunc n.+1 Emptyn: trunc_indexIsTrunc n.+1 Emptyn: trunc_indexIsHProp Emptyintros []. Defined.n: trunc_indexforall x y : Empty, Contr (x = y)T: Type
f: T -> EmptyIsEquiv fT: Type
f: T -> EmptyIsEquiv fT: Type
f: T -> Emptyforall x : T, match f x as fals return (f (Empty_ind (fun _ : Empty => T) fals) = fals) with end = ap f match f x return (Empty_ind (fun _ : Empty => T) (f x) = x) with endexact (Empty_rec (f t)). Defined. Definition equiv_to_empty {T : Type} (f : T -> Empty) : T <~> Empty := Build_Equiv T Empty f _. (** ** Paths *) (** We could probably prove some theorems about non-existing paths in [Empty], but this is really quite useless. As soon as an element of [Empty] is hypothesized, we can prove whatever we like with a simple elimination. *)T: Type
f: T -> Empty
t: Tmatch f t as fals return (f (Empty_ind (fun _ : Empty => T) fals) = fals) with end = ap f match f t return (Empty_ind (fun _ : Empty => T) (f t) = t) with end