(* Title: HoTT/HoTT_Methods.thy Author: Josh Chen Date: Jun 2018 Method setup for the HoTT library. Relies heavily on Eisbach. *) theory HoTT_Methods imports "HOL-Eisbach.Eisbach" "HOL-Eisbach.Eisbach_Tools" HoTT_Base begin section \Method setup\ text "Prove type judgments \A : U\ and inhabitation judgments \a : A\ using rules declared [intro] and [elim], as well as additional provided lemmas. Can also perform typechecking, and search for elements of a type." method simple uses lems = (assumption|standard|rule lems)+ text "Find a proof of any valid typing judgment derivable from a given wellformed judgment." method wellformed uses jdgmt = ( match wellform in rl: "PROP ?P" \ \( catch \rule rl[OF jdgmt]\ \fail\ | catch \wellformed jdgmt: rl[OF jdgmt]\ \fail\ )\ ) text "Combine \simple\ and \wellformed\ to search for derivations. \wellformed\ uses the facts passed as \lems\ to derive any required typing judgments. Definitions passed as \unfolds\ are unfolded throughout. Roughly speaking \derive\ is more powerful than \simple\, but may fail to find a proof where \simple\ does if it reduces too eagerly." method derive uses lems unfolds = ( unfold unfolds | simple lems: lems | match lems in lem: "?X : ?Y" \ \wellformed jdgmt: lem\ )+ text "Simplify function applications." end