(* -*- mode: coq; coq-prog-args: ("-noinit" "-indices-matter" "-w" "-notation-overridden,-deprecated-option") -*- *)
(* The Coq Proof Assistant, version 8.7.1 (January 2018) compiled on Jan 21 2018 15:02:24 with OCaml 4.06.0 from commit 391bb5e196901a3a9426295125b8d1c700ab6992 *)
Require Export Coq.Init.Notations.
Notation "'∏'  x .. y , P" := (forall x, .. (forall y, P) ..)
(at level 200, x binder, y binder, right associativity) : type_scope.
Notation "'λ' x .. y , t" := (fun x => .. (fun y => t) ..)
(at level 200, x binder, y binder, right associativity).
Notation "A -> B" := (forall (_ : A), B) : type_scope.
Reserved Notation "p @ q" (at level 60, right associativity).
Reserved Notation "! p " (at level 50).
Monomorphic Universe uu.
Monomorphic Universe uu0.
Monomorphic Universe uu1.
Constraint uu0 < uu1.
Global Set Universe Polymorphism.
Global Set Polymorphic Inductive Cumulativity.
Global Unset Universe Minimization ToSet.
Notation UU  := Type (only parsing).
Notation UU0 := Type@{uu0} (only parsing).
Global Set Printing Universes.
Inductive unit : UU0 := tt : unit.
Inductive paths@{i} {A:Type@{i}} (a:A) : A -> Type@{i} := idpath : paths a a.
Hint Resolve idpath : core .
Notation "a = b" := (paths a b) (at level 70, no associativity) : type_scope.
Set Primitive Projections.
Set Nonrecursive Elimination Schemes.
Record total2@{i} { T: Type@{i} } ( P: T -> Type@{i} ) : Type@{i}
:= tpair { pr1 : T; pr2 : P pr1 }.
Arguments tpair {_} _ _ _.
Arguments pr1 {_ _} _.
Arguments pr2 {_ _} _.
Notation "'∑'  x .. y , P" := (total2 (λ x, .. (total2 (λ y, P)) ..))
(at level 200, x binder, y binder, right associativity) : type_scope.
Definition foo (X:Type) (xy : @total2 X (λ _, X)) : X.
induction xy as [x y].
exact x.
Defined.
Definition idfun (T : UU) := λ t:T, t.
Definition pathscomp0 {X : UU} {a b c : X} (e1 : a = b) (e2 : b = c) : a = c.

Lemma ifcontrthenunitl0 (e1 e2 : tt = tt) : e1 = e2.