--- /dev/null
+Section Base_Definitions.
+
+ Section inductive_sets.
+
+ Inductive Set Empty := .
+
+ Inductive Set List [S:Set] := empty: (List S) | fr: (List S) -> S -> (List S).
+
+ Inductive Id [S:Set; a:S]: S -> Set := id_r: (Id S a a).
+
+ Inductive Set Pi [S:Set; P:S->Set] := abst: ((a:S) (P a)) -> (Pi S P).
+
+ Inductive Set Sigma [S:Set; P:S->Set] := pair: (a:S) (P a) -> (Sigma S P).
+
+ Inductive Set Plus [S,T:Set] := in_l : S -> (Plus S T) | in_r : T -> (Plus S T).
+(*
+Inductive SId [A:Set] : Set -> Set := sid_r: (SId A A).
+*)
+ End inductive_sets.
+
+ Section eliminators.
+
+ Definition efq := Empty_rec.
+
+ Definition listrec := List_rec.
+
+ Definition idrec := Id_rec.
+
+ Definition fsplit := Pi_rec.
+
+ Definition psplit := Sigma_rec.
+
+ Definition when := Plus_rec.
+
+ Definition EmptyFam := Empty_rect.
+
+ Definition ListFam := List_rect.
+
+ Definition IdFam := Id_rect.
+
+ Definition PiFam := Pi_rect.
+
+ Definition SigmaFam := Sigma_rect.
+
+ Definition PlusFam := Plus_rect.
+
+ Definition ap: (S:Set; P:S->Set) (Pi S P) -> (a:S) (P a).
+ Intros.
+ Elim H.
+ Intros.
+ Apply (p a).
+ Defined.
+
+ Definition sp: (S:Set; P:S->Set) (Sigma S P) -> S.
+ Intros.
+ Elim H.
+ Intros.
+ Assumption.
+ Defined.
+
+ Definition sq: (S:Set; P:S->Set; p:(Sigma S P)) (P (sp S P p)).
+ Intros.
+ Elim p.
+ Intros.
+ Unfold sp.
+ Simpl.
+ Assumption.
+ Defined.
+
+ End eliminators.
+
+ Section functions.
+
+ Definition id: (S:Set) S -> S.
+ Intros.
+ Assumption.
+ Defined.
+
+ Definition comp: (R,S,T:Set) (R -> S) -> (S -> T) -> (R -> T).
+ Intros.
+ Apply H0.
+ Apply H.
+ Assumption.
+ Defined.
+
+ End functions.
+
+End Base_Definitions.
+
+Section Base_Results.
+
+ Section general_results.
+
+ Theorem mcut: (S,T:Set) S -> (S -> T) -> T.
+ Intros.
+ Apply H0.
+ Assumption.
+ Qed.
+
+ End general_results.
+
+ Section ID_results.
+
+ Theorem id_repl: (S:Set; a,b:S; P:S->Set) (Id ? b a) -> (P b) -> (P a).
+ Intros.
+ Elim H.
+ Assumption.
+ Qed.
+
+ Theorem id_comm: (S:Set; a,b:S) (Id ? b a) -> (Id ? a b).
+ Intros.
+ Apply (id_repl S a b).
+ Assumption.
+ Apply id_r.
+ Qed.
+
+ Theorem id_trans: (S:Set; c,a,b:S) (Id S a c) -> (Id S c b) -> (Id S a b).
+ Intros.
+ Apply (id_repl S b c).
+ Assumption.
+ Assumption.
+ Qed.
+
+ Theorem id_comp: (S,T:Set; f:S->T; a,b:S) (Id S a b) -> (Id T (f a) (f b)).
+ Intros.
+ Apply (id_repl ? b a).
+ Assumption.
+ Apply id_r.
+ Qed.
+
+ Axiom id_ext: (S,T:Set; f,g:S->T) ((a:S) (Id T (f a) (g a))) -> (Id S->T f g).
+
+ End ID_results.
+(*
+Section SID_results.
+
+Theorem sid_repl: (A,B:Set; P:Set->Set) (SId B A) -> (P B) -> (P A).
+Intros.
+Elim H.
+Assumption.
+Qed.
+
+Theorem sid_comp: (P:Set->Set; A,B:Set) (SId A B) -> (SId (P A) (P B)).
+Intros.
+Apply (sid_repl B A).
+Assumption.
+Apply sid_r.
+Qed.
+
+Axiom sid_ext: (S:Set; P:(S->Set)->Set; Q,R:S->Set) ((a:S) (SId (Q a) (R a))) -> (SId (P Q) (P R)).
+
+End SID_results.
+*)
+ Section indipendence.
+
+ Axiom list_p4: (S:Set; l:(List S); a:S) (Id (List S) (empty S) (fr S l a)) -> Empty.
+
+ Axiom plus_p4: (S:Set; a:S; T:Set; b:T) (Id (Plus S T) (in_l S T a) (in_r S T b)) -> Empty.
+(*
+Axiom id_ctt: (S:Set) (P:(a:S)(Id S a a) -> Set) ((a:S) (P a (id_r S a))) -> (a:S; p:(Id S a a)) (P a p).
+*)
+ End indipendence.
+
+End Base_Results.
+
+Tactic Definition MTrivial := Try Apply id_r; (* Try Apply sid_r; *)
+(*|*) Try Assumption; Try Apply id_comm;
+ Try Assumption; Try Apply id_comm.
+
+Tactic Definition MFold := Idtac.
+
+Tactic Definition MRed := Idtac.
+
+Tactic Definition MAuto := MTrivial; MFold; MRed.
+
+Tactic Definition MSimpl := Simpl; MAuto.
+
+Tactic Definition MElim v e := Pattern v; Elim v using e; Simpl;
+ Intros; MAuto.
+
+Tactic Definition MApply t := Apply t; Intros; MTrivial.
+
+Tactic Definition MCut t := MApply '(mcut t).
+
+Tactic Definition UnIntros T t := Apply (mcut T); Try Assumption; Clear t.