theory scratch imports HoTT begin (* Typechecking *) schematic_goal "\a : A; b : B\ \ (a,b) : ?A" by simple (* 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 (simp add: asm | rule comp | derive lems: asm)+ end lemma "a : A \ indEqual[A] (\x y _. y =\<^sub>A x) (\x. refl(x)) a a refl(a) \ refl(a)" by verify_simp lemma "\a : A; \x. x : A \ b x : X\ \ (\<^bold>\x:A. b x)`a \ b a" by verify_simp lemma assumes "a : A" and "\x. x : A \ b x : B x" shows "(\<^bold>\x:A. b x)`a \ b a" by (verify_simp lems: assms) lemma "\a : A; b : B a; B: A \ U\ \ (\<^bold>\x:A. \<^bold>\y:B x. c x y)`a`b \ c a b" oops 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" apply (simp add: assms) done lemmas lems = Prod_comp[where ?A = "B a" and ?b = "\b. c a b" and ?a = b] Prod_comp[where ?A = A and ?b = "\x. \<^bold>\y:B x. c x y" and ?a = a] lemma assumes "a : A" "b : B a" "B: A \ U" "\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" apply (verify_simp lems: assms) end