Source code on Github{-# OPTIONS --with-K #-}
module Prelude.Tactics.PostulateIt where
open import Prelude.Init
open Meta
open import Prelude.Generics
open import Prelude.Monad
open import Prelude.Semigroup
open import Prelude.Show
genPostulate : Type → TC Name
genPostulate ty = do
n ← freshName $ "postulate[" ◇ show ty ◇ "]"
declarePostulate (vArg n) ty
return n
macro
postulateIt : Hole → TC ⊤
postulateIt hole = do
n ← genPostulate =<< inferType hole
unify hole (n ∙)
private
UIP : ∀ {A : Set ℓ} {x x′ : A} (p p′ : x ≡ x′) → p ≡ p′
UIP = postulateIt
_ : ∀ {n m : ℕ} (p p′ : n ≡ m) → p ≡ p′
_ = UIP {A = ℕ}