diff --git a/encodings/bool_hol.lp b/encodings/bool_hol.lp index 58ac1527e2dc8572817f0c0364f07ab7687fe473..266cf78272f0224f106c0b3199faf03fac5b9a6a 100644 --- a/encodings/bool_hol.lp +++ b/encodings/bool_hol.lp @@ -25,10 +25,15 @@ set builtin "or" ≔ or symbol if {s: Set} p: (Prf p → El s) → (Prf (¬ p) → El s) → El s rule if {bool} $p $then $else ↪ ($p ⊃ $then) ⊃ (λ_, (¬ $p) ⊃ $else) +definition iff P Q ≔ (P ⊃ (λ_, Q)) ∧ ((λ_, Q ⊃ (λ_, P))) + symbol eq {s: Set}: El s → El s → El bool set infix 2 "=" ≔ eq set builtin "eq" ≔ eq // FIXME emacs indentation rule Prf ($x = $y) ↪ Î p: El (_ ~> bool), Prf (p $x) → Prf (p $y) - -definition iff P Q ≔ (P ⊃ (λ_, Q)) ∧ ((λ_, Q ⊃ (λ_, P))) +theorem eq_refl {a: Set} (x: El a): Prf (x = x) +proof + assume a x p h + apply h +qed diff --git a/paper/proof_irr.lp b/paper/proof_irr.lp new file mode 100644 index 0000000000000000000000000000000000000000..45548f6fd5c3c8c6060e20ada83c709b04c7a39e --- /dev/null +++ b/paper/proof_irr.lp @@ -0,0 +1,56 @@ +require open personoj.encodings.lhol +require open personoj.encodings.pvs_cert +require open personoj.encodings.bool_hol + + +set declared "â„•" +constant symbol â„•: Set +constant symbol z: El â„• +constant symbol s (_: El â„•): El â„• +constant symbol leq: El â„• → El â„• → Bool +set infix left 3 "≤" ≔ leq + +// Agda manual +symbol p1: Prf (z ≤ s z) +symbol p2: Prf (z ≤ s z) +definition bounded (k: El â„•) ≔ psub (λn, n ≤ k) + +constant symbol slist (bound: El â„•): Set +constant symbol snil (bound: El â„•): El (slist bound) +constant symbol scons {bound: El â„•} (head: El (bounded bound)) + (tail: El (slist (fst head))) + : El (slist bound) + +set declared "lâ‚" +set declared "lâ‚‚" +definition lâ‚: El (slist (s z)) ≔ scons (pair z p1) (snil z) +definition lâ‚‚: El (slist (s z)) ≔ scons (pair z p2) (snil z) + +theorem listeq: Prf (lâ‚ = lâ‚‚) +proof + refine eq_refl lâ‚ +qed + +// Proof irrelevance without K +symbol plus: El â„• → El â„• → El â„• +set infix left 10 "+" ≔ plus + +constant symbol even_p: El â„• → Bool +definition even ≔ psub even_p + +symbol plus_closed_even (n m: El even): Prf (even_p ((fst n) + (fst m))) + +definition add (n m: El even) : El even + ≔ pair ((fst n) + (fst m)) (plus_closed_even n m) + +symbol app_thm (a b: Set) (f: El (a ~> b)) + (x y: El a) (_: Prf (x = y)) + : Prf (f x = f y) + +symbol fun_ext (a b: Set) (f g: El (a ~> b)) (_: Prf (∀ (λx, f x = g x))): Prf (f = g) + +symbol plus_commutativity (n m: El â„•): Prf (n + m = m + n) + +theorem even_add_commutativity (n m: El even): Prf (add n m = add m n) +proof +admit