Equations
- One or more equations did not get rendered due to their size.
- instDecidableEqTerm.decEq (Term.atom a) (Term.atom b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- instDecidableEqTerm.decEq (Term.atom a) (a_1.pair a_2) = isFalse ⋯
- instDecidableEqTerm.decEq (Term.atom a) (Term.op a_1 a_2) = isFalse ⋯
- instDecidableEqTerm.decEq (Term.atom a) a_1.hash = isFalse ⋯
- instDecidableEqTerm.decEq (a.pair a_1) (Term.atom a_2) = isFalse ⋯
- instDecidableEqTerm.decEq (a.pair a_1) (Term.op a_2 a_3) = isFalse ⋯
- instDecidableEqTerm.decEq (a.pair a_1) a_2.hash = isFalse ⋯
- instDecidableEqTerm.decEq (Term.op a a_1) (Term.atom a_2) = isFalse ⋯
- instDecidableEqTerm.decEq (Term.op a a_1) (a_2.pair a_3) = isFalse ⋯
- instDecidableEqTerm.decEq (Term.op a a_1) a_2.hash = isFalse ⋯
- instDecidableEqTerm.decEq a.hash (Term.atom a_1) = isFalse ⋯
- instDecidableEqTerm.decEq a.hash (a_1.pair a_2) = isFalse ⋯
- instDecidableEqTerm.decEq a.hash (Term.op a_1 a_2) = isFalse ⋯
- instDecidableEqTerm.decEq a.hash b.hash = if h : a = b then h ▸ have inst := instDecidableEqTerm.decEq a a; isTrue ⋯ else isFalse ⋯
Instances For
@[implicit_reducible]
Equations
- One or more equations did not get rendered due to their size.
- instReprTerm.repr (Term.atom a) prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Term.atom" ++ Std.Format.line ++ reprArg a)).group prec✝
Instances For
@[implicit_reducible]
Equations
- instReprTerm = { reprPrec := instReprTerm.repr }
- refl {R : Term → Term → Prop} (t : Term) : ReducesStar R t t
- trans {R : Term → Term → Prop} (t1 t2 t3 : Term) : R t1 t2 → ReducesStar R t2 t3 → ReducesStar R t1 t3
Instances For
theorem
normal_form_reduces_star_eq
{R : Term → Term → Prop}
{t t' : Term}
(hnf : IsNormalForm R t)
(hr : ReducesStar R t t')
:
theorem
uniqueness_of_normal_forms
{R : Term → Term → Prop}
(h_confl :
∀ {t t1 t2 : Term},
ReducesStar R t t1 → ReducesStar R t t2 → ∃ (t3 : Term), ReducesStar R t1 t3 ∧ ReducesStar R t2 t3)
{t t1 t2 : Term}
(h1 : ReducesStar R t t1)
(h2 : ReducesStar R t t2)
(hnf1 : IsNormalForm R t1)
(hnf2 : IsNormalForm R t2)
:
- member {S : List Term} (t : Term) (h : t ∈ S) : Derivable S t
- pair_intro {S : List Term} (t1 t2 : Term) (h1 : Derivable S t1) (h2 : Derivable S t2) : Derivable S (t1.pair t2)
- pair_elim_left {S : List Term} (t1 t2 : Term) (h : Derivable S (t1.pair t2)) : Derivable S t1
- pair_elim_right {S : List Term} (t1 t2 : Term) (h : Derivable S (t1.pair t2)) : Derivable S t2
- op_intro {S : List Term} (name : String) (t : Term) (h : Derivable S t) : Derivable S (Term.op name t)
- op_elim {S : List Term} (name : String) (t : Term) (h : Derivable S (Term.op name t)) : Derivable S t
- hash_intro {S : List Term} (t : Term) (h : Derivable S t) : Derivable S t.hash
Instances For
- base {nf : Term} : BuiltFromHash nf nf.hash
- pair_intro {nf t1 t2 : Term} (h1 : BuiltFromHash nf t1) (h2 : BuiltFromHash nf t2) : BuiltFromHash nf (t1.pair t2)
- op_intro {nf : Term} {o : String} {t : Term} (h : BuiltFromHash nf t) : BuiltFromHash nf (Term.op o t)
- hash_intro {nf t : Term} (h : BuiltFromHash nf t) : BuiltFromHash nf t.hash
Instances For
Expose all anchors for a chain by consing their hashes onto S.
Instances For
theorem
derivable_under_hashes
(S nfs : List Term)
(t : Term)
(h_not : ¬Derivable S t)
(h_nohash : ∀ (x : Term), x ∈ nfs → NoHash x t)
(h_nohash_S : ∀ (x : Term), x ∈ nfs → ∀ (y : Term), y ∈ S → NoHash x y)
(h_nohash_self : ∀ (x : Term), x ∈ nfs → ∀ (y : Term), y ∈ nfs → x ≠ y → NoHash x y)
(h_nodup : nfs.Nodup)
:
theorem
chain_forward_secrecy
(c : AnchorChain)
(h_ind : ChainIndependent c.nfs c.S)
(h_opaque : ∀ (nf : Term), nf ∈ c.nfs → SymbolicallySecret c.S nf)
(nf : Term)
:
nf ∈ c.nfs → SymbolicallySecret (exposeAnchors c) nf