簡體   English   中英

了解Agda中的分配解決方案

[英]Understanding Assignment Solution in Agda

考慮以下提取的代碼段,以證明Agda中變量的“打字唯一性”:

unicity : ∀ {Γ₁ Γ₂ e τ₁ τ₂} →  (Γ₁ ⊢ e ∷ τ₁) → (Γ₂ ⊢ e ∷ τ₂) → (Γ₁ ≈ Γ₂) → (τ₁ ∼ τ₂)
unicity   (VarT here) (VarT here) (_ , ( τ∼ , _ ))   = τ∼ 
unicity (VarT here) (VarT (ski`p {α = α} lk2)) (s≡s' , ( _ , _ )) = ⊥-elim (toWitnessFalse α (toWitness` s≡s'))
unicity (VarT (skip {α = α} lk1)) (VarT here) (s'≡s , ( _ , _ )) = ⊥-elim (toWitnessFalse α (toWitness s'≡s))
unicity (VarT (skip lk1)) (VarT (skip lk2)) (_ ,( _ , Γ≈ ))     = unicity (VarT lk1) (VarT lk2) Γ≈

我需要對⊥-elim toWitnessFalsetoWitnessFalsetoWitness的工作進行解釋。 此外,什么做的表達平均值/代表什么?

是空類型,因此(從總體上來說,一致的語言)您永遠無法構造類型的值。 但是,這也意味着您能想到的任何命題都來自 這是⊥-elim見證:

⊥-elim : ∀ {w} {Whatever : Set w} → ⊥ → Whatever

這在實踐中非常有用,因為您可能在某些假設下編寫證明,而其中一些假設可能是 ,或者它們可能是負面陳述(對於某些A A → ⊥ ),並且您也可以證明A等。然后,您發現實際上不再需要關心那個特定的分支,因為這是不可能的。 但是,只是因為您不在乎,您仍然必須以某種方式正式滿足結果類型。 這就是⊥-elim給您的。

toWitness的類型和相關定義如下:

T : Bool → Set
T true  = ⊤
T false = ⊥

⌊_⌋ : ∀ {p} {P : Set p} → Dec P → Bool
⌊ yes _ ⌋ = true
⌊ no  _ ⌋ = false

True : ∀ {p} {P : Set p} → Dec P → Set
True Q = T ⌊ Q ⌋

toWitness : ∀ {p} {P : Set p} {Q : Dec P} → True Q → P

給定一個Q : Dec P ,則True Q (如果Q = yes _ )或 (如果Q = no _ )。 那么,調用toWitness的唯一方法是讓Q表示P為真,並傳遞瑣碎的單元構造函數tt : ⊤ ; 唯一的可能是將有Q說, P是假的,並作為參數傳遞一個 ,但正如我們看到的,這是不可能的。 總而言之, toWitness說,如果Q告訴我們P成立的決定,那么我們可以從Q獲得P的證明。

toWitnessFalse是完全與角色相同的逆轉:如果Q告訴我們,決定P不成立,那么我們可以得到證明¬ PQ

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM