Есть ли какой-нибудь нетривиальный код, который использует 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)
потому что это вычисляет.