Есть ли какой-нибудь нетривиальный код, который использует Data.Maybe.Is-just?

Стандартная библиотека Agda предоставляет тип данных Maybe в сопровождении с видом Any, Тогда есть свойство Is-just определяется с помощью Any, Мне было трудно работать с этим типом, так как стандартная библиотека не предоставляет никаких инструментов для Any,

Поэтому я ищу примеры того, как работать с Is-just эффективно. Есть ли проект с открытым исходным кодом, который использует его?

В качестве альтернативы, я ищу, как правильно его использовать:

  • Дано Is-just m а также Is-nothing mкак устранить? Можно Relation.Nullary.Negation.contradiction использоваться здесь?
  • Учитывая собственность p : ... → (mp : Is-just m) → ... → ... ≡ to-witness mp что должно быть показано индуктивно p ... = {! p ... (subst Is-just m≡somethingelse mp) ... !}данный термин не заполняет дыру, потому что имеет тип ... ≡ to-witness (subst Is-just m≡somethingelse mp),

Часто кажется, что легче работать с Σ A (_≡_ m ∘ just) чем Is-just m,

1 ответ

Что касается вашего первого вопроса, можно получить противоречие из Is-just m а также Is-nothing m в контексте. Вы можете использовать ⊥-elim чтобы доказать что-либо.

module isJust where

open import Level
open import Data.Empty
open import Data.Maybe

contradiction :
  {ℓ : Level} {A : Set ℓ} {m : Maybe A}
  (j : Is-just m) (n : Is-nothing m) → ⊥
contradiction (just _) (just pr) = pr

Второй вариант слишком абстрактен для меня, чтобы быть уверенным, сработает ли то, что я предлагаю, но обычные стратегии - попытаться сопоставить образец значения типа Maybe A или на доказательство того, что Is-just m,

Что касается использования другого определения Is-justМне нравится

open import Data.Bool

isJust : {ℓ : Level} {A : Set ℓ} (m : Maybe A) → Set
isJust m = T (is-just m)

потому что это вычисляет.

Другие вопросы по тегам