Documentation

ISAR.QuineProof

inductive Term :
Instances For
    Equations
    Instances For
      @[implicit_reducible]
      Equations
      inductive ReducesStar (R : TermTermProp) :
      TermTermProp
      Instances For
        def IsNormalForm (R : TermTermProp) (t : Term) :
        Equations
        Instances For
          theorem normal_form_reduces_star_eq {R : TermTermProp} {t t' : Term} (hnf : IsNormalForm R t) (hr : ReducesStar R t t') :
          t = t'
          theorem uniqueness_of_normal_forms {R : TermTermProp} (h_confl : ∀ {t t1 t2 : Term}, ReducesStar R t t1ReducesStar 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) :
          t1 = t2
          inductive Derivable (S : List Term) :
          Instances For
            def termSize :
            TermNat
            Equations
            Instances For
              def NoHash (nf : Term) :
              Equations
              Instances For
                theorem size_pos (t : Term) :
                theorem size_contains_hash {nf t : Term} (h : ¬NoHash nf t) :
                theorem nohash_nf (nf : Term) :
                NoHash nf nf
                def subst (nf d : Term) :
                Equations
                Instances For
                  theorem subst_noop {nf d t : Term} (h : NoHash nf t) :
                  subst nf d t = t
                  theorem mem_map_of_mem {α β : Type} (f : αβ) {a : α} {l : List α} (h : a l) :
                  f a List.map f l
                  theorem derivable_mono (S1 S2 : List Term) (h_sub : ∀ (x : Term), x S1x S2) {t : Term} (h : Derivable S1 t) :
                  theorem derivable_subst_map (S : List Term) (nf d : Term) (hd : Derivable (List.map (subst nf d) S) d) {t : Term} (h : Derivable S t) :
                  Derivable (List.map (subst nf d) S) (subst nf d t)
                  theorem derivable_cut (S1 S2 : List Term) (h_sub : ∀ (x : Term), x S1Derivable S2 x) {t : Term} (h : Derivable S1 t) :
                  theorem map_subst_noop {nf d : Term} {l : List Term} (h : ∀ (x : Term), x lNoHash nf x) :
                  List.map (subst nf d) l = l
                  inductive BuiltFromHash (nf : Term) :
                  Instances For
                    theorem derivable_single_hash_imp {nf : Term} {S : List Term} {t : Term} (hS : S = [nf.hash]) (h : Derivable S t) :
                    theorem non_deducibility_of_preimages_symbolic (S : List Term) (nf : Term) (h_nohash : ∀ (x : Term), x SNoHash nf x) :
                    ¬Derivable S nf¬Derivable (nf.hash :: S) nf
                    theorem hash_noninterference_symbolic (S : List Term) (nf t' : Term) (_h_ne : nf t') (h_nohash_S : ∀ (x : Term), x SNoHash nf x) (h_nohash_t' : NoHash nf t') :
                    ¬Derivable S t'¬Derivable (nf.hash :: S) t'
                    theorem hash_preserves_non_derivability (S : List Term) (nf t' : Term) (h_nohash_S : ∀ (x : Term), x SNoHash nf x) (h_nohash_t' : NoHash nf t') :
                    ¬Derivable S t'¬Derivable (nf.hash :: S) t'

                    Symbolic Secrecy: The normal form nf is not derivable from the adversary's view S.

                    Equations
                    Instances For
                      theorem forward_secrecy (S : List Term) (nf : Term) (h_nohash_S : ∀ (x : Term), x SNoHash nf x) (h_not_derivable : ¬Derivable S nf) :
                      ¬Derivable (nf.hash :: S) nf
                      structure AnchorChain :

                      Anchor chain state: an evolving context S and a list of normal forms nfs with their anchors.

                      Instances For

                        Expose all anchors for a chain by consing their hashes onto S.

                        Equations
                        Instances For
                          Equations
                          Instances For
                            theorem derivable_under_hashes (S nfs : List Term) (t : Term) (h_not : ¬Derivable S t) (h_nohash : ∀ (x : Term), x nfsNoHash x t) (h_nohash_S : ∀ (x : Term), x nfs∀ (y : Term), y SNoHash x y) (h_nohash_self : ∀ (x : Term), x nfs∀ (y : Term), y nfsx yNoHash x y) (h_nodup : nfs.Nodup) :
                            ¬Derivable (List.map (fun (nf : Term) => nf.hash) nfs ++ S) t
                            theorem chain_forward_secrecy (c : AnchorChain) (h_ind : ChainIndependent c.nfs c.S) (h_opaque : ∀ (nf : Term), nf c.nfsSymbolicallySecret c.S nf) (nf : Term) :
                            def mask :
                            Equations
                            Instances For
                              def restore :
                              TermStringTerm
                              Equations
                              Instances For
                                def merge (t1 t2 : Term) :
                                Equations
                                Instances For
                                  theorem mask_distributes_over_merge (t1 t2 : Term) :
                                  mask (merge t1 t2) = merge (mask t1) (mask t2)
                                  theorem homomorphic_merge (t1 t2 : Term) (a : String) :
                                  restore (merge (mask t1) (mask t2)) a = merge (restore (mask t1) a) (restore (mask t2) a)