Source code on Github{-# OPTIONS --without-K #-}
module Tactic.Rewrite.Tests where
open import Data.List.NonEmpty using (List⁺; _∷_)
open import Data.Nat hiding (_≟_; _^_)
open import Data.Nat.Properties using (≤-refl) renaming (m≤n⇒m≤1+n to ≤-step)
open import Data.Maybe.Relation.Unary.Any using (just)
open import Class.DecEq
open import Meta.Prelude hiding (_^_)
open import Tactic.Rewrite
rw-just : ∀ {m} {n : ℕ} → m ≡ just n → Is-just m
rw-just eq
= eq ≈: just tt
postulate
X : Set
a b : X
eq : a ≡ b
P : X → Set
Pa : P a
_∋⋮_ : (A : Set ℓ) → List⁺ A → A
_∋⋮_ _ (x ∷ _) = x
pattern _⋮_ x xs = x ∷ xs
pattern _⋮_ x xs = x ∷ xs
pattern _⋮∅ x = x ∷ []
infixl -10 _∋⋮_
infixr -9 _⋮_
infix -8 _⋮∅
_ = ∃ (_≤ 3)
∋⋮ 3 , ≤-refl
⋮ 2 , ≤-step ≤-refl
⋮ 1 , ≤-step (≤-step ≤-refl)
⋮ 0 , ≤-step (≤-step (≤-step ≤-refl))
⋮∅
_ = P b
∋⋮ subst (λ x → P x) eq Pa
⋮ Pa :≈ eq
⋮ sym eq ≈: Pa
⋮∅
_ = P a ≡ P b
∋⋮ subst (λ x → P a ≡ P x) eq refl
⋮ subst (λ x → P x ≡ P b) (sym eq) refl
⋮ eq ≈: refl
⋮ sym eq ≈: refl
⋮ ⟪ _== 1 ⟫ refl {x = P a} :≈ eq
⋮ ⟪[ 1 , 2 , 3 ]⟫ refl {x = P a} :≈ eq
⋮∅
postulate
P² : X → X → Set
P²a : P² a a
_ = P² b b
∋⋮ subst (λ x → P² x x) eq P²a
⋮ P²a :≈ eq
⋮ sym eq ≈: P²a
⋮∅
postulate
P³ : X → X → X → Set
P³a : P³ a b a
_ = P³ b a a
∋⋮ ⟪[ 1 ]⟫ (⟪[ 0 ]⟫ P³a :≈ eq) :≈ sym eq
⋮ ⟪[ 0 ]⟫ eq ≈: ⟪[ 0 ]⟫ P³a :≈ eq
⋮∅
postulate g : P b → X
_ = (∃ λ (A : Set) → A)
∋⋮ (-, g (Pa :≈ eq))
⋮ (-, g (sym eq ≈: Pa))
⋮∅
postulate
f : P a ≡ P b → X
f′ : (P a ≡ P b) × (P b ≡ P a) → X
rw-in-argument : X
rw-in-argument = f Pa≡Pb
where Pa≡Pb : P a ≡ P b
Pa≡Pb rewrite eq = refl
_ = X
∋⋮ f $ subst (λ x → P a ≡ P x) eq refl
⋮ f $ subst (λ x → P x ≡ P b) (sym eq) refl
⋮ (f $ ⟪ _== 1 ⟫ refl {x = P a} :≈ eq)
⋮ f $ eq ≈: refl
⋮∅
_ = X
∋⋮ f′ $ eq ≈: (refl , refl)
⋮ f′ $ sym eq ≈: (refl , refl)
⋮∅