open import 1Lab.Univalence.SIP open import 1Lab.Reflection open import 1Lab.Type.Sigma open import 1Lab.Univalence open import 1Lab.Equiv open import 1Lab.Path open import 1Lab.Type module 1Lab.Univalence.SIP.Auto where open import Agda.Builtin.Reflection renaming ( bindTC to _>>=_ ; catchTC to infixr 8 _<|>_ ) hiding (Type) makeAutoStr-term : Nat → Term → TC ⊤ makeAutoStr-term zero t = typeError (strErr "autoDesc ran out of fuel" ∷ []) makeAutoStr-term (suc n) t = tryPoint <|> tryBin (quote _s→_) <|> tryBin (quote _s×_) <|> useConst where tryPoint = do unify t (con (quote s∙) []) tryBin : Name → TC ⊤ tryBin namen = do h1 ← newMeta unknown h2 ← newMeta unknown tt ← unify (con namen (h1 v∷ h2 v∷ [])) t tt ← makeAutoStr-term n h1 makeAutoStr-term n h2 useConst = do unify t (con (quote s-const) (unknown v∷ [])) macro auto-str-term : Term → TC ⊤ auto-str-term = makeAutoStr-term 100