theory scratch imports HoTT begin (* Typechecking *) schematic_goal "\A : U(i); B : U(i); a : A; b : B\ \ (a,b) : ?A" by derive lemma "\ : U(S S S 0)" by derive (* Simplification *) notepad begin assume asm: "f`a \ g" "g`b \ \<^bold>\x:A. d" "c : A" "d : B" have "f`a`b`c \ d" by (simplify lems: asm) end lemma "\A : U(i); a : A\ \ indEqual[A] (\x y _. y =\<^sub>A x) (\x. refl(x)) a a refl(a) \ refl(a)" by simplify lemma "\a : A; \x. x : A \ b x : X\ \ (\<^bold>\x:A. b x)`a \ b a" by simplify schematic_goal "\a : A; b: A \ X\ \ (\<^bold>\x:A. b x)`a \ ?x" by rsimplify lemma assumes "a : A" and "\x. x : A \ b x : B x" shows "(\<^bold>\x:A. b x)`a \ b a" by (simplify lems: assms) lemma "\a : A; b : B a; B: A \ U(i); \x y. \x : A; y : B x\ \ c x y : D x y\ \ (\<^bold>\x:A. \<^bold>\y:B x. c x y)`a`b \ c a b" by (simplify) lemma assumes "(\<^bold>\x:A. \<^bold>\y:B x. c x y)`a \ \<^bold>\y:B a. c a y" "(\<^bold>\y:B a. c a y)`b \ c a b" shows "(\<^bold>\x:A. \<^bold>\y:B x. c x y)`a`b \ c a b" by (simplify lems: assms) lemma assumes "a : A" "b : B a" "\x y. \x : A; y : B x\ \ c x y : D x y" shows "(\<^bold>\x:A. \<^bold>\y:B x. c x y)`a`b \ c a b" by (simplify lems: assms) lemma assumes "a : A" "b : B a" "c : C a b" "\x y z. \x : A; y : B x; z : C x y\ \ d x y z : D x y z" shows "(\<^bold>\x:A. \<^bold>\y:B x. \<^bold>\z:C x y. d x y z)`a`b`c \ d a b c" by (simplify lems: assms) (* Polymorphic identity function *) definition Id :: "Numeral \ Term" where "Id n \ \<^bold>\A:U(n). \<^bold>\x:A. x" lemma assumes "A : U 0" and "x:A" shows "(Id 0)`A`x \ x" unfolding Id_def by (simplify lems: assms) (* See if we can find path inverse *) schematic_goal "\A : U(i); x : A; y : A\ \ ?x : x =\<^sub>A y \ y =\<^sub>A x" apply (rule Prod_intro) apply (rule Equal_elim) back back back back back back back defer back back back back back back back back back apply (rule Equal_form) apply assumption+ defer defer apply assumption defer defer apply (rule Equal_intro) apply assumption+ oops end