Loading theory "HOL-Quickcheck_Benchmark.Needham_Schroeder_Base" (required by "HOL-Quickcheck_Benchmark.Needham_Schroeder_No_Attacker_Example") Loading theory "HOL-Quickcheck_Benchmark.Find_Unused_Assms_Examples" ### theory "HOL-Quickcheck_Benchmark.Find_Unused_Assms_Examples" ### 0.063s elapsed time, 0.180s cpu time, 0.000s GC time Found termination order: "{}" Proofs for inductive predicate(s) "partsp" Proving monotonicity ... Proofs for inductive predicate(s) "analzp" Proving monotonicity ... Proofs for inductive predicate(s) "synthp" Proving monotonicity ... consts initState :: "agent \ msg set" consts knows :: "agent \ event list \ msg set" consts used :: "event list \ msg set" Found termination order: "(\p. length (snd p)) <*mlex*> {}" ### theory "HOL-Quickcheck_Benchmark.Needham_Schroeder_Base" ### 3.545s elapsed time, 20.440s cpu time, 0.520s GC time Loading theory "HOL-Quickcheck_Benchmark.Needham_Schroeder_Guided_Attacker_Example" Proofs for inductive predicate(s) "ns_publicp" Proving monotonicity ... ### Infering modes ### 0.047s elapsed time, 0.284s cpu time, 0.000s GC time ### Defining executable functions... ### 0.004s elapsed time, 0.024s cpu time, 0.000s GC time ### Compiling equations.... ### 0.017s elapsed time, 0.100s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.016s cpu time, 0.000s GC time ### Setting code equations.... ### 0.003s elapsed time, 0.020s cpu time, 0.000s GC time ### Infering modes ### 0.109s elapsed time, 0.656s cpu time, 0.000s GC time ### Defining executable functions... ### 0.000s elapsed time, 0.004s cpu time, 0.000s GC time ### Compiling equations.... ### 0.038s elapsed time, 0.228s cpu time, 0.000s GC time ### Proving equations.... ### 0.010s elapsed time, 0.060s cpu time, 0.000s GC time ### Setting code equations.... ### 0.013s elapsed time, 0.076s cpu time, 0.000s GC time ### theory "HOL-Quickcheck_Benchmark.Needham_Schroeder_Guided_Attacker_Example" ### 0.486s elapsed time, 2.912s cpu time, 0.000s GC time Loading theory "HOL-Quickcheck_Benchmark.Needham_Schroeder_No_Attacker_Example" Proofs for inductive predicate(s) "ns_publicp" Proving monotonicity ... ### Infering modes ### 0.034s elapsed time, 0.204s cpu time, 0.000s GC time ### Defining executable functions... ### 0.004s elapsed time, 0.020s cpu time, 0.000s GC time ### Compiling equations.... ### 0.011s elapsed time, 0.072s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.008s cpu time, 0.000s GC time ### Setting code equations.... ### 0.002s elapsed time, 0.016s cpu time, 0.000s GC time ### Infering modes ### 0.139s elapsed time, 0.724s cpu time, 0.148s GC time ### Defining executable functions... ### 0.000s elapsed time, 0.004s cpu time, 0.000s GC time ### Compiling equations.... ### 0.043s elapsed time, 0.256s cpu time, 0.000s GC time ### Proving equations.... ### 0.011s elapsed time, 0.068s cpu time, 0.000s GC time ### Setting code equations.... ### 0.014s elapsed time, 0.080s cpu time, 0.000s GC time ### theory "HOL-Quickcheck_Benchmark.Needham_Schroeder_No_Attacker_Example" ### 0.439s elapsed time, 2.524s cpu time, 0.148s GC time Loading theory "HOL-Quickcheck_Benchmark.Needham_Schroeder_Unguided_Attacker_Example" Proofs for inductive predicate(s) "ns_publicp" Proving monotonicity ... ### Infering modes ### 0.005s elapsed time, 0.028s cpu time, 0.000s GC time ### Defining executable functions... ### 0.004s elapsed time, 0.024s cpu time, 0.000s GC time ### Compiling equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### Proving equations.... ### 0.001s elapsed time, 0.004s cpu time, 0.000s GC time ### Setting code equations.... ### 0.001s elapsed time, 0.004s cpu time, 0.000s GC time ### Infering modes ### 0.042s elapsed time, 0.252s cpu time, 0.000s GC time ### Defining executable functions... ### 0.004s elapsed time, 0.024s cpu time, 0.000s GC time ### Compiling equations.... ### 0.012s elapsed time, 0.072s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### Setting code equations.... ### 0.003s elapsed time, 0.016s cpu time, 0.000s GC time ### Infering modes ### 0.090s elapsed time, 0.540s cpu time, 0.000s GC time ### Compiling equations.... ### 0.028s elapsed time, 0.168s cpu time, 0.000s GC time ### Proving equations.... ### 0.008s elapsed time, 0.052s cpu time, 0.000s GC time ### Setting code equations.... ### 0.010s elapsed time, 0.060s cpu time, 0.000s GC time ### theory "HOL-Quickcheck_Benchmark.Needham_Schroeder_Unguided_Attacker_Example" ### 0.421s elapsed time, 2.524s cpu time, 0.000s GC time Found 0 theorems with (potentially) superfluous assumptions: Checked 61 theorems with assumptions (177 total) in the theory "Real" Found 2 theorems with (potentially) superfluous assumptions: Divides.div_pos_geq: unnecessary assumption(s) 2 Divides.mod_pos_geq: unnecessary assumption(s) 1 and 2 Checked 79 theorems with assumptions (121 total) in the theory "Divides" Found 5 theorems with (potentially) superfluous assumptions: GCD.Lcm_0_iff_nat: unnecessary assumption(s) 1 GCD.gcd_non_0_int: unnecessary assumption(s) 1 GCD.gcd_non_0_nat: unnecessary assumption(s) 1 GCD.Gcd_remove0_nat: unnecessary assumption(s) 1 GCD.mult_inj_if_coprime_nat: unnecessary assumption(s) 3 Checked 58 theorems with assumptions (151 total) in the theory "GCD" Found 1 theorems with (potentially) superfluous assumptions: Fun.notIn_Un_bij_betw: unnecessary assumption(s) 1 Checked 109 theorems with assumptions (176 total) in the theory "Fun" Found 4 theorems with (potentially) superfluous assumptions: Wellfounded.wf_converse: unnecessary assumption(s) 3 Wellfounded.finite_acyclic_wf: unnecessary assumption(s) 1 Wellfounded.wf_iff_acyclic_if_finite: unnecessary assumption(s) 1 Wellfounded.finite_acyclic_wf_converse: unnecessary assumption(s) 1 Checked 74 theorems with assumptions (113 total) in the theory "Wellfounded" ns_publicp_i ?x = sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ Predicate.single () | a # list \ bot)) (sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says Spy B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent A_\) # evs1_ \ if B_ = Ba_ then Predicate.bind (Predicate.if_pred (Nonce NA_ \ analz (knows Spy evs1_))) (\x. case x of () \ Predicate.bind (ns_publicp_i evs1_) (\x. case x of () \ Predicate.single ())) else bot | Says Spy B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ bot | Says Spy B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ bot | Says Spy B_ (Crypt (pubEK Ba_) _) # evs1_ \ bot | Says Spy B_ (Crypt (priEK agent) msga) # evs1_ \ bot | Says Spy B_ _ # evs1_ \ bot | Says _ B_ msg # evs1_ \ bot | _ # evs1_ \ bot)) (sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says Spy A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs1_ \ if A_ = Aa_ then Predicate.bind (Predicate.if_pred (Nonce NA_ \ analz (knows Spy evs1_))) (\x. case x of () \ Predicate.bind (Predicate.if_pred (Nonce NB_ \ analz (knows Spy evs1_))) (\x. case x of () \ Predicate.bind (ns_publicp_i evs1_) (\x. case x of () \ Predicate.single ()))) else bot | Says Spy A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs1_ \ bot | Says Spy A_ (Crypt (pubEK Aa_) \_, msg2\) # evs1_ \ bot | Says Spy A_ (Crypt (pubEK Aa_) _) # evs1_ \ bot | Says Spy A_ (Crypt (priEK agent) msga) # evs1_ \ bot | Says Spy A_ _ # evs1_ \ bot | Says _ A_ msg # evs1_ \ bot | _ # evs1_ \ bot)) (sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) # evs1_ \ if B_ = Ba_ \ A_ = Aa_ then Predicate.bind (Predicate.not_pred (Predicate.if_pred (Nonce NA_ \ used evs1_))) (\x. case x of () \ Predicate.bind (ns_publicp_i evs1_) (\x. case x of () \ Predicate.single ())) else bot | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ bot | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ bot | Says A_ B_ (Crypt (pubEK Ba_) _) # evs1_ \ bot | Says A_ B_ (Crypt (priEK agent) msga) # evs1_ \ bot | Says A_ B_ _ # evs1_ \ bot | _ # evs1_ \ bot)) (sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs2_ \ if A_ = Aa_ then Predicate.bind (Predicate.not_pred (Predicate.if_pred (Nonce NB_ \ used evs2_))) (\x. case x of () \ Predicate.bind (pred_of_set (set evs2_)) (\x. case x of Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, Agent Ab_\) \ if NA_ = NAa_ \ A_ = Ab_ \ B_ = Bb_ \ B_ = Ba_ then Predicate.bind (ns_publicp_i evs2_) (\x. case x of () \ Predicate.single ()) else bot | Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, _\) \ bot | Says A'_ Ba_ (Crypt (pubEK Bb_) \_, msg2\) \ bot | Says A'_ Ba_ (Crypt (pubEK Bb_) _) \ bot | Says A'_ Ba_ (Crypt (priEK agent) msga) \ bot | Says A'_ Ba_ _ \ bot | _ \ bot)) else bot | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs2_ \ bot | Says B_ A_ (Crypt (pubEK Aa_) \_, msg2\) # evs2_ \ bot | Says B_ A_ (Crypt (pubEK Aa_) _) # evs2_ \ bot | Says B_ A_ (Crypt (priEK agent) msga) # evs2_ \ bot | Says B_ A_ _ # evs2_ \ bot | _ # evs2_ \ bot)) (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says A_ B_ (Crypt (pubEK Ba_) (Nonce NB_)) # evs3_ \ if B_ = Ba_ then Predicate.bind (pred_of_set (set evs3_)) (\x. case x of Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, Agent Ab_\) \ if B_ = Bc_ \ B_ = Bb_ \ A_ = Ab_ \ A_ = Aa_ then Predicate.bind (pred_of_set (set evs3_)) (\x. case x of Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, Nonce NBa_\) \ if NB_ = NBa_ \ A_ = Ad_ \ A_ = Ac_ \ NA_ = NAa_ then Predicate.bind (ns_publicp_i evs3_) (\x. case x of () \ Predicate.single ()) else bot | Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, _\) \ bot | Says B'_ Ac_ (Crypt (pubEK Ad_) \_, msg2\) \ bot | Says B'_ Ac_ (Crypt (pubEK Ad_) _) \ bot | Says B'_ Ac_ (Crypt (priEK agent) msga) \ bot | Says B'_ Ac_ _ \ bot | _ \ bot) else bot | Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, _\) \ bot | Says Aa_ Bb_ (Crypt (pubEK Bc_) \_, msg2\) \ bot | Says Aa_ Bb_ (Crypt (pubEK Bc_) _) \ bot | Says Aa_ Bb_ (Crypt (priEK agent) msga) \ bot | Says Aa_ Bb_ _ \ bot | _ \ bot) else bot | Says A_ B_ (Crypt (pubEK Ba_) _) # evs3_ \ bot | Says A_ B_ (Crypt (priEK agent) msga) # evs3_ \ bot | Says A_ B_ _ # evs3_ \ bot | _ # evs3_ \ bot)))))) ns_publicp ?x1.0 = Predicate.holds (ns_publicp_i ?x1.0) Found 6 theorems with (potentially) superfluous assumptions: Relation.reflp_sup: unnecessary assumption(s) 1 or 2 Relation.lfp_induct2: unnecessary assumption(s) 2 Relation.finite_Field: unnecessary assumption(s) 1 Relation.finite_Image: unnecessary assumption(s) 1 Relation.finite_Range: unnecessary assumption(s) 1 Relation.finite_Domain: unnecessary assumption(s) 1 Checked 107 theorems with assumptions (320 total) in the theory "Relation" ### preprocess-obtain graph ### 0.007s elapsed time, 0.040s cpu time, 0.000s GC time ### preprocess-process ### 0.009s elapsed time, 0.052s cpu time, 0.000s GC time ### Infering modes ### 0.009s elapsed time, 0.052s cpu time, 0.000s GC time ### Defining executable functions... ### 0.001s elapsed time, 0.004s cpu time, 0.000s GC time ### Compiling equations.... ### 0.052s elapsed time, 0.228s cpu time, 0.196s GC time ### Proving equations.... ### 0.003s elapsed time, 0.020s cpu time, 0.000s GC time ### Setting code equations.... ### 0.003s elapsed time, 0.016s cpu time, 0.000s GC time ### Infering modes ### 0.094s elapsed time, 0.560s cpu time, 0.000s GC time ### Defining executable functions... ### 0.000s elapsed time, 0.004s cpu time, 0.000s GC time ### Compiling equations.... ### 0.004s elapsed time, 0.024s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### Setting code equations.... ### 0.002s elapsed time, 0.016s cpu time, 0.000s GC time generator_cps_pos_ns_publicp_i ?x = Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_single () | a # list \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent A_\) # evs1_ \ if B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_if (Nonce NA_ \ analz (knows Spy evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ())) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy B_ (Crypt (pubEK Ba_) _) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy B_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy B_ _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says _ B_ msg # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs1_ \ if A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_if (Nonce NA_ \ analz (knows Spy evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_if (Nonce NB_ \ analz (knows Spy evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ()))) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy A_ (Crypt (pubEK Aa_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy A_ (Crypt (pubEK Aa_) _) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy A_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy A_ _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says _ A_ msg # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) # evs1_ \ if B_ = Ba_ \ A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce NA_ \ used evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ())) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs2_ \ if A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce NB_ \ used evs2_))) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set evs2_)) (\x. case x of Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, Agent Ab_\) \ if NA_ = NAa_ \ A_ = Ab_ \ B_ = Bb_ \ B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs2_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ()) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \_, msg2\) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) _) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (priEK agent) msga) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ _ # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) (Nonce NB_)) # evs3_ \ if B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set evs3_)) (\x. case x of Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, Agent Ab_\) \ if B_ = Bc_ \ B_ = Bb_ \ A_ = Ab_ \ A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set evs3_)) (\x. case x of Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, Nonce NBa_\) \ if NB_ = NBa_ \ A_ = Ad_ \ A_ = Ac_ \ NA_ = NAa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs3_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ()) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ _ # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)))))) generator_cps_pos_ns_publicp_o = Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single [])) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (analz (knows Spy x))) (\xa. case xa of Nonce NA_ \ Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xa. Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xaa. Quickcheck_Exhaustive.pos_bound_cps_single (Says Spy xa (Crypt (pubEK xa) \Nonce NA_, Agent xaa\) # x))) | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)))) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (analz (knows Spy x))) (\xa. case xa of Nonce NA_ \ Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (analz (knows Spy x))) (\xa. case xa of Nonce NB_ \ Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xa. Quickcheck_Exhaustive.pos_bound_cps_single (Says Spy xa (Crypt (pubEK xa) \Nonce NA_, Nonce NB_\) # x)) | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)))) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xa. Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce xa \ used x))) (\xaa. case xaa of () \ Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xaa. Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xaaa. Quickcheck_Exhaustive.pos_bound_cps_single (Says xaaa xaa (Crypt (pubEK xaa) \Nonce xa, Agent xaaa\) # x)))))))) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set x)) (\xa. case xa of Says A'_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent A_\) \ if B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xa. Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce xa \ used x))) (\xaa. case xaa of () \ Quickcheck_Exhaustive.pos_bound_cps_single (Says B_ A_ (Crypt (pubEK A_) \Nonce NA_, Nonce xa\) # x))) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (pubEK Ba_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (pubEK Ba_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)))) (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set x)) (\xa. case xa of Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) \ if B_ = Ba_ \ A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set x)) (\xa. case xa of Says B'_ Ab_ (Crypt (pubEK Ac_) \Nonce NAa_, Nonce NB_\) \ if A_ = Ac_ \ A_ = Ab_ \ NA_ = NAa_ then Quickcheck_Exhaustive.pos_bound_cps_single (Says A_ B_ (Crypt (pubEK B_) (Nonce NB_)) # x) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (pubEK Ac_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (pubEK Ac_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (pubEK Ac_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)))))))) generator_cps_neg_ns_publicp_i ?x = Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_single () | a # list \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent A_\) # evs1_ \ if B_ = Ba_ then Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce NA_ \ analz (knows Spy evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ())) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy B_ (Crypt (pubEK Ba_) _) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy B_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy B_ _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says _ B_ msg # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs1_ \ if A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce NA_ \ analz (knows Spy evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce NB_ \ analz (knows Spy evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ()))) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy A_ (Crypt (pubEK Aa_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy A_ (Crypt (pubEK Aa_) _) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy A_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy A_ _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says _ A_ msg # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) # evs1_ \ if B_ = Ba_ \ A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_not (Quickcheck_Exhaustive.pos_bound_cps_if (Nonce NA_ \ used evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ())) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs2_ \ if A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_not (Quickcheck_Exhaustive.pos_bound_cps_if (Nonce NB_ \ used evs2_))) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (neg_cps_of_set (set evs2_)) (\x. case x of Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, Agent Ab_\) \ if NA_ = NAa_ \ A_ = Ab_ \ B_ = Bb_ \ B_ = Ba_ then Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs2_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ()) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \_, msg2\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) _) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ _ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \_, msg2\) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) _) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (priEK agent) msga) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ _ # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) (Nonce NB_)) # evs3_ \ if B_ = Ba_ then Quickcheck_Exhaustive.neg_bound_cps_bind (neg_cps_of_set (set evs3_)) (\x. case x of Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, Agent Ab_\) \ if B_ = Bc_ \ B_ = Bb_ \ A_ = Ab_ \ A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (neg_cps_of_set (set evs3_)) (\x. case x of Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, Nonce NBa_\) \ if NB_ = NBa_ \ A_ = Ad_ \ A_ = Ac_ \ NA_ = NAa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs3_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ()) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \_, msg2\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) _) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ _ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ \ Quickcheck_Exhaustive.neg_bound_cps_empty) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \_, msg2\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) _) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ _ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ \ Quickcheck_Exhaustive.neg_bound_cps_empty) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ _ # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)))))) ns_publicp_i ?x = sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ Predicate.single () | a # list \ bot)) (sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) # evs1_ \ if B_ = Ba_ \ A_ = Aa_ then Predicate.bind (Predicate.not_pred (Predicate.if_pred (Nonce NA_ \ used evs1_))) (\x. case x of () \ Predicate.bind (ns_publicp_i evs1_) (\x. case x of () \ Predicate.single ())) else bot | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ bot | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ bot | Says A_ B_ (Crypt (pubEK Ba_) _) # evs1_ \ bot | Says A_ B_ (Crypt (priEK agent) msga) # evs1_ \ bot | Says A_ B_ _ # evs1_ \ bot | _ # evs1_ \ bot)) (sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs2_ \ if A_ = Aa_ then Predicate.bind (Predicate.not_pred (Predicate.if_pred (Nonce NB_ \ used evs2_))) (\x. case x of () \ Predicate.bind (pred_of_set (set evs2_)) (\x. case x of Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, Agent Ab_\) \ if NA_ = NAa_ \ A_ = Ab_ \ B_ = Bb_ \ B_ = Ba_ then Predicate.bind (ns_publicp_i evs2_) (\x. case x of () \ Predicate.single ()) else bot | Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, _\) \ bot | Says A'_ Ba_ (Crypt (pubEK Bb_) \_, msg2\) \ bot | Says A'_ Ba_ (Crypt (pubEK Bb_) _) \ bot | Says A'_ Ba_ (Crypt (priEK agent) msga) \ bot | Says A'_ Ba_ _ \ bot | _ \ bot)) else bot | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs2_ \ bot | Says B_ A_ (Crypt (pubEK Aa_) \_, msg2\) # evs2_ \ bot | Says B_ A_ (Crypt (pubEK Aa_) _) # evs2_ \ bot | Says B_ A_ (Crypt (priEK agent) msga) # evs2_ \ bot | Says B_ A_ _ # evs2_ \ bot | _ # evs2_ \ bot)) (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says A_ B_ (Crypt (pubEK Ba_) (Nonce NB_)) # evs3_ \ if B_ = Ba_ then Predicate.bind (pred_of_set (set evs3_)) (\x. case x of Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, Agent Ab_\) \ if B_ = Bc_ \ B_ = Bb_ \ A_ = Ab_ \ A_ = Aa_ then Predicate.bind (pred_of_set (set evs3_)) (\x. case x of Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, Nonce NBa_\) \ if NB_ = NBa_ \ A_ = Ad_ \ A_ = Ac_ \ NA_ = NAa_ then Predicate.bind (ns_publicp_i evs3_) (\x. case x of () \ Predicate.single ()) else bot | Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, _\) \ bot | Says B'_ Ac_ (Crypt (pubEK Ad_) \_, msg2\) \ bot | Says B'_ Ac_ (Crypt (pubEK Ad_) _) \ bot | Says B'_ Ac_ (Crypt (priEK agent) msga) \ bot | Says B'_ Ac_ _ \ bot | _ \ bot) else bot | Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, _\) \ bot | Says Aa_ Bb_ (Crypt (pubEK Bc_) \_, msg2\) \ bot | Says Aa_ Bb_ (Crypt (pubEK Bc_) _) \ bot | Says Aa_ Bb_ (Crypt (priEK agent) msga) \ bot | Says Aa_ Bb_ _ \ bot | _ \ bot) else bot | Says A_ B_ (Crypt (pubEK Ba_) _) # evs3_ \ bot | Says A_ B_ (Crypt (priEK agent) msga) # evs3_ \ bot | Says A_ B_ _ # evs3_ \ bot | _ # evs3_ \ bot)))) ns_publicp ?x1.0 = Predicate.holds (ns_publicp_i ?x1.0) generator_cps_pos_ns_publicp_i ?x = Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_single () | a # list \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) # evs1_ \ if B_ = Ba_ \ A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce NA_ \ used evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ())) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs2_ \ if A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce NB_ \ used evs2_))) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set evs2_)) (\x. case x of Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, Agent Ab_\) \ if NA_ = NAa_ \ A_ = Ab_ \ B_ = Bb_ \ B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs2_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ()) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \_, msg2\) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) _) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (priEK agent) msga) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ _ # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) (Nonce NB_)) # evs3_ \ if B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set evs3_)) (\x. case x of Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, Agent Ab_\) \ if B_ = Bc_ \ B_ = Bb_ \ A_ = Ab_ \ A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set evs3_)) (\x. case x of Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, Nonce NBa_\) \ if NB_ = NBa_ \ A_ = Ad_ \ A_ = Ac_ \ NA_ = NAa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs3_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ()) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ _ # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)))) generator_cps_pos_ns_publicp_o = Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single [])) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xa. Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce xa \ used x))) (\xaa. case xaa of () \ Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xaa. Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xaaa. Quickcheck_Exhaustive.pos_bound_cps_single (Says xaaa xaa (Crypt (pubEK xaa) \Nonce xa, Agent xaaa\) # x)))))))) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set x)) (\xa. case xa of Says A'_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent A_\) \ if B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xa. Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce xa \ used x))) (\xaa. case xaa of () \ Quickcheck_Exhaustive.pos_bound_cps_single (Says B_ A_ (Crypt (pubEK A_) \Nonce NA_, Nonce xa\) # x))) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (pubEK Ba_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (pubEK Ba_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)))) (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set x)) (\xa. case xa of Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) \ if B_ = Ba_ \ A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set x)) (\xa. case xa of Says B'_ Ab_ (Crypt (pubEK Ac_) \Nonce NAa_, Nonce NB_\) \ if A_ = Ac_ \ A_ = Ab_ \ NA_ = NAa_ then Quickcheck_Exhaustive.pos_bound_cps_single (Says A_ B_ (Crypt (pubEK B_) (Nonce NB_)) # x) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (pubEK Ac_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (pubEK Ac_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (pubEK Ac_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)))))) generator_cps_neg_ns_publicp_i ?x = Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_single () | a # list \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) # evs1_ \ if B_ = Ba_ \ A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_not (Quickcheck_Exhaustive.pos_bound_cps_if (Nonce NA_ \ used evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ())) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs2_ \ if A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_not (Quickcheck_Exhaustive.pos_bound_cps_if (Nonce NB_ \ used evs2_))) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (neg_cps_of_set (set evs2_)) (\x. case x of Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, Agent Ab_\) \ if NA_ = NAa_ \ A_ = Ab_ \ B_ = Bb_ \ B_ = Ba_ then Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs2_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ()) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \_, msg2\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) _) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ _ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \_, msg2\) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) _) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (priEK agent) msga) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ _ # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) (Nonce NB_)) # evs3_ \ if B_ = Ba_ then Quickcheck_Exhaustive.neg_bound_cps_bind (neg_cps_of_set (set evs3_)) (\x. case x of Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, Agent Ab_\) \ if B_ = Bc_ \ B_ = Bb_ \ A_ = Ab_ \ A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (neg_cps_of_set (set evs3_)) (\x. case x of Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, Nonce NBa_\) \ if NB_ = NBa_ \ A_ = Ad_ \ A_ = Ac_ \ NA_ = NAa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs3_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ()) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \_, msg2\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) _) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ _ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ \ Quickcheck_Exhaustive.neg_bound_cps_empty) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \_, msg2\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) _) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ _ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ \ Quickcheck_Exhaustive.neg_bound_cps_empty) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ _ # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)))) ### preprocess-obtain graph ### 0.003s elapsed time, 0.016s cpu time, 0.000s GC time ### preprocess-process ### 0.004s elapsed time, 0.024s cpu time, 0.000s GC time ### Infering modes ### 0.004s elapsed time, 0.024s cpu time, 0.000s GC time ### Defining executable functions... ### 0.000s elapsed time, 0.004s cpu time, 0.000s GC time ### Compiling equations.... ### 0.003s elapsed time, 0.016s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### Setting code equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### preprocess-obtain graph ### 0.003s elapsed time, 0.020s cpu time, 0.000s GC time ### preprocess-process ### 0.007s elapsed time, 0.044s cpu time, 0.000s GC time ### Infering modes ### 0.004s elapsed time, 0.028s cpu time, 0.000s GC time ### Compiling equations.... ### 0.003s elapsed time, 0.020s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.008s cpu time, 0.000s GC time ### Setting code equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### Defining executable functions... ### 0.000s elapsed time, 0.004s cpu time, 0.000s GC time ### Proving equations.... ### 0.001s elapsed time, 0.004s cpu time, 0.000s GC time ### Setting code equations.... ### 0.001s elapsed time, 0.008s cpu time, 0.000s GC time ### Infering modes ### 0.073s elapsed time, 0.436s cpu time, 0.000s GC time ### Compiling equations.... ### 0.004s elapsed time, 0.024s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### Setting code equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time Depth: 0 Depth 0: 0 ms Depth: 1 Depth 1: 0 ms Depth: 2 Depth 2: 0 ms Depth: 3 Depth 3: 0 ms Depth: 4 Depth 4: 4 ms Depth: 5 Depth 5: 168 ms Quickcheck found a counterexample: evs = [Says Alice Bob (Crypt (pubEK Bob) (Nonce 1)), Says Bob Alice (Crypt (pubEK Alice) \Nonce 0, Nonce 1\), Says Alice Bob (Crypt (pubEK Bob) \Nonce 0, Agent Alice\)] NB = 1 Checking goals: \ns_publicp evs; Says B A (Crypt (pubEK A) \Nonce NA, Nonce NB\) \ set evs; A \ Spy; B \ Spy; A \ B\ \ Nonce NB \ analz (knows Spy evs) Testing conjecture with Quickcheck-narrowing... Depth: 0 Depth 0: 0 ms Depth: 1 Depth 1: 0 ms Depth: 2 Depth 2: 0 ms Depth: 3 Depth 3: 0 ms Depth: 4 Depth 4: 4 ms Depth: 5 Depth 5: 100 ms Quickcheck found a counterexample: evs = [Says Alice Bob (Crypt (pubEK Bob) (Nonce 1)), Says Bob Alice (Crypt (pubEK Alice) \Nonce 0, Nonce 1\), Says Alice Bob (Crypt (pubEK Bob) \Nonce 0, Agent Alice\)] NB = 1 ### Infering modes ### 1.439s elapsed time, 8.224s cpu time, 1.048s GC time ### Defining executable functions... ### 0.003s elapsed time, 0.016s cpu time, 0.000s GC time ### Compiling equations.... ### 0.067s elapsed time, 0.400s cpu time, 0.000s GC time ### Proving equations.... ### 0.042s elapsed time, 0.216s cpu time, 0.000s GC time ### Setting code equations.... ### 0.056s elapsed time, 0.284s cpu time, 0.000s GC time ns_publicp_i ?x = sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ Predicate.single () | a # list \ bot)) (sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says Spy A_ X_ # evs1_ \ Predicate.bind (ns_publicp_i evs1_) (\x. case x of () \ Predicate.bind (synth'_i_i (analz (knows Spy evs1_)) X_) (\x. case x of () \ Predicate.single ())) | Says _ A_ X_ # evs1_ \ bot | _ # evs1_ \ bot)) (sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) # evs1_ \ if B_ = Ba_ \ A_ = Aa_ then Predicate.bind (Predicate.not_pred (Predicate.if_pred (Nonce NA_ \ used evs1_))) (\x. case x of () \ Predicate.bind (ns_publicp_i evs1_) (\x. case x of () \ Predicate.single ())) else bot | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ bot | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ bot | Says A_ B_ (Crypt (pubEK Ba_) _) # evs1_ \ bot | Says A_ B_ (Crypt (priEK agent) msga) # evs1_ \ bot | Says A_ B_ _ # evs1_ \ bot | _ # evs1_ \ bot)) (sup (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs2_ \ if A_ = Aa_ then Predicate.bind (Predicate.not_pred (Predicate.if_pred (Nonce NB_ \ used evs2_))) (\x. case x of () \ Predicate.bind (pred_of_set (set evs2_)) (\x. case x of Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, Agent Ab_\) \ if NA_ = NAa_ \ A_ = Ab_ \ B_ = Bb_ \ B_ = Ba_ then Predicate.bind (ns_publicp_i evs2_) (\x. case x of () \ Predicate.single ()) else bot | Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, _\) \ bot | Says A'_ Ba_ (Crypt (pubEK Bb_) \_, msg2\) \ bot | Says A'_ Ba_ (Crypt (pubEK Bb_) _) \ bot | Says A'_ Ba_ (Crypt (priEK agent) msga) \ bot | Says A'_ Ba_ _ \ bot | _ \ bot)) else bot | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs2_ \ bot | Says B_ A_ (Crypt (pubEK Aa_) \_, msg2\) # evs2_ \ bot | Says B_ A_ (Crypt (pubEK Aa_) _) # evs2_ \ bot | Says B_ A_ (Crypt (priEK agent) msga) # evs2_ \ bot | Says B_ A_ _ # evs2_ \ bot | _ # evs2_ \ bot)) (Predicate.bind (Predicate.single ?x) (\x. case x of [] \ bot | Says A_ B_ (Crypt (pubEK Ba_) (Nonce NB_)) # evs3_ \ if B_ = Ba_ then Predicate.bind (pred_of_set (set evs3_)) (\x. case x of Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, Agent Ab_\) \ if B_ = Bc_ \ B_ = Bb_ \ A_ = Ab_ \ A_ = Aa_ then Predicate.bind (pred_of_set (set evs3_)) (\x. case x of Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, Nonce NBa_\) \ if NB_ = NBa_ \ A_ = Ad_ \ A_ = Ac_ \ NA_ = NAa_ then Predicate.bind (ns_publicp_i evs3_) (\x. case x of () \ Predicate.single ()) else bot | Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, _\) \ bot | Says B'_ Ac_ (Crypt (pubEK Ad_) \_, msg2\) \ bot | Says B'_ Ac_ (Crypt (pubEK Ad_) _) \ bot | Says B'_ Ac_ (Crypt (priEK agent) msga) \ bot | Says B'_ Ac_ _ \ bot | _ \ bot) else bot | Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, _\) \ bot | Says Aa_ Bb_ (Crypt (pubEK Bc_) \_, msg2\) \ bot | Says Aa_ Bb_ (Crypt (pubEK Bc_) _) \ bot | Says Aa_ Bb_ (Crypt (priEK agent) msga) \ bot | Says Aa_ Bb_ _ \ bot | _ \ bot) else bot | Says A_ B_ (Crypt (pubEK Ba_) _) # evs3_ \ bot | Says A_ B_ (Crypt (priEK agent) msga) # evs3_ \ bot | Says A_ B_ _ # evs3_ \ bot | _ # evs3_ \ bot))))) ns_publicp ?x1.0 = Predicate.holds (ns_publicp_i ?x1.0) generator_cps_pos_ns_publicp_i ?x = Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_single () | a # list \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Spy A_ X_ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_synth'_i_i (analz (knows Spy evs1_)) X_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ())) | Says _ A_ X_ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) # evs1_ \ if B_ = Ba_ \ A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce NA_ \ used evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ())) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs2_ \ if A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce NB_ \ used evs2_))) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set evs2_)) (\x. case x of Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, Agent Ab_\) \ if NA_ = NAa_ \ A_ = Ab_ \ B_ = Bb_ \ B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs2_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ()) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ Ba_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \_, msg2\) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) _) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ (Crypt (priEK agent) msga) # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B_ A_ _ # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs2_ \ Quickcheck_Exhaustive.pos_bound_cps_empty)) (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) (Nonce NB_)) # evs3_ \ if B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set evs3_)) (\x. case x of Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, Agent Ab_\) \ if B_ = Bc_ \ B_ = Bb_ \ A_ = Ab_ \ A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set evs3_)) (\x. case x of Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, Nonce NBa_\) \ if NB_ = NBa_ \ A_ = Ad_ \ A_ = Ac_ \ NA_ = NAa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_ns_publicp_i evs3_) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single ()) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ac_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says Aa_ Bb_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ _ # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ # evs3_ \ Quickcheck_Exhaustive.pos_bound_cps_empty))))) generator_cps_pos_ns_publicp_o = Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_single [])) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind (generator_cps_pos_synth'_i_o (analz (knows Spy x))) (\xa. Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xaa. Quickcheck_Exhaustive.pos_bound_cps_single (Says Spy xaa xa # x)))))) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xa. Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce xa \ used x))) (\xaa. case xaa of () \ Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xaa. Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xaaa. Quickcheck_Exhaustive.pos_bound_cps_single (Says xaaa xaa (Crypt (pubEK xaa) \Nonce xa, Agent xaaa\) # x)))))))) (Quickcheck_Exhaustive.pos_bound_cps_plus (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set x)) (\xa. case xa of Says A'_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent A_\) \ if B_ = Ba_ then Quickcheck_Exhaustive.pos_bound_cps_bind exhaustive_class.exhaustive (\xa. Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_not (Quickcheck_Exhaustive.neg_bound_cps_if (Nonce xa \ used x))) (\xaa. case xaa of () \ Quickcheck_Exhaustive.pos_bound_cps_single (Says B_ A_ (Crypt (pubEK A_) \Nonce NA_, Nonce xa\) # x))) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (pubEK Ba_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (pubEK Ba_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A'_ B_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty)))) (Quickcheck_Exhaustive.pos_bound_cps_bind (Quickcheck_Exhaustive.pos_bound_cps_single ()) (\x. case x of () \ Quickcheck_Exhaustive.pos_bound_cps_bind generator_cps_pos_ns_publicp_o (\x. Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set x)) (\xa. case xa of Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) \ if B_ = Ba_ \ A_ = Aa_ then Quickcheck_Exhaustive.pos_bound_cps_bind (pos_cps_of_set (set x)) (\xa. case xa of Says B'_ Ab_ (Crypt (pubEK Ac_) \Nonce NAa_, Nonce NB_\) \ if A_ = Ac_ \ A_ = Ab_ \ NA_ = NAa_ then Quickcheck_Exhaustive.pos_bound_cps_single (Says A_ B_ (Crypt (pubEK B_) (Nonce NB_)) # x) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (pubEK Ac_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (pubEK Ac_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (pubEK Ac_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says B'_ Ab_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty) else Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.pos_bound_cps_empty | Says A_ B_ _ \ Quickcheck_Exhaustive.pos_bound_cps_empty | _ \ Quickcheck_Exhaustive.pos_bound_cps_empty))))))) generator_cps_neg_ns_publicp_i ?x = Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_single () | a # list \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Spy A_ X_ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_synth'_i_i (analz (knows Spy evs1_)) X_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ())) | Says _ A_ X_ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, Agent Aa_\) # evs1_ \ if B_ = Ba_ \ A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_not (Quickcheck_Exhaustive.pos_bound_cps_if (Nonce NA_ \ used evs1_))) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs1_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ())) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \Nonce NA_, _\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) \_, msg2\) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs1_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_plus (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, Nonce NB_\) # evs2_ \ if A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_not (Quickcheck_Exhaustive.pos_bound_cps_if (Nonce NB_ \ used evs2_))) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_bind (neg_cps_of_set (set evs2_)) (\x. case x of Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, Agent Ab_\) \ if NA_ = NAa_ \ A_ = Ab_ \ B_ = Bb_ \ B_ = Ba_ then Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs2_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ()) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) \_, msg2\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (pubEK Bb_) _) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A'_ Ba_ _ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \Nonce NA_, _\) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) \_, msg2\) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (pubEK Aa_) _) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ (Crypt (priEK agent) msga) # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B_ A_ _ # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs2_ \ Quickcheck_Exhaustive.neg_bound_cps_empty)) (Quickcheck_Exhaustive.neg_bound_cps_bind (Quickcheck_Exhaustive.neg_bound_cps_single ?x) (\x. case x of [] \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) (Nonce NB_)) # evs3_ \ if B_ = Ba_ then Quickcheck_Exhaustive.neg_bound_cps_bind (neg_cps_of_set (set evs3_)) (\x. case x of Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, Agent Ab_\) \ if B_ = Bc_ \ B_ = Bb_ \ A_ = Ab_ \ A_ = Aa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (neg_cps_of_set (set evs3_)) (\x. case x of Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, Nonce NBa_\) \ if NB_ = NBa_ \ A_ = Ad_ \ A_ = Ac_ \ NA_ = NAa_ then Quickcheck_Exhaustive.neg_bound_cps_bind (generator_cps_neg_ns_publicp_i evs3_) (\x. case x of () \ Quickcheck_Exhaustive.neg_bound_cps_single ()) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \Nonce NAa_, _\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) \_, msg2\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (pubEK Ad_) _) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says B'_ Ac_ _ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ \ Quickcheck_Exhaustive.neg_bound_cps_empty) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \Nonce NA_, _\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) \_, msg2\) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (pubEK Bc_) _) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ (Crypt (priEK agent) msga) \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says Aa_ Bb_ _ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ \ Quickcheck_Exhaustive.neg_bound_cps_empty) else Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (pubEK Ba_) _) # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ (Crypt (priEK agent) msga) # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | Says A_ B_ _ # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty | _ # evs3_ \ Quickcheck_Exhaustive.neg_bound_cps_empty))))) ### preprocess-obtain graph ### 0.003s elapsed time, 0.016s cpu time, 0.000s GC time ### preprocess-process ### 0.004s elapsed time, 0.024s cpu time, 0.000s GC time ### Infering modes ### 0.004s elapsed time, 0.020s cpu time, 0.000s GC time ### Defining executable functions... ### 0.000s elapsed time, 0.004s cpu time, 0.000s GC time ### Compiling equations.... ### 0.003s elapsed time, 0.016s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.008s cpu time, 0.000s GC time ### Setting code equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### Infering modes ### 0.072s elapsed time, 0.360s cpu time, 0.000s GC time ### Compiling equations.... ### 0.004s elapsed time, 0.020s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### Setting code equations.... ### 0.002s elapsed time, 0.008s cpu time, 0.000s GC time Depth: 0 Depth 0: 0 ms Depth: 1 Depth 1: 0 ms Depth: 2 Depth 2: 0 ms Depth: 3 Depth 3: 0 ms Depth: 4 Depth 4: 8 ms Depth: 5 Depth 5: 220 ms Depth: 6 [1 of 4] Compiling Typerep ( /tmp/isabelle-jenkins/process2823490157045745957/Quickcheck_Narrowing4561322/Typerep.hs.hs, /tmp/isabelle-jenkins/process2823490157045745957/Quickcheck_Narrowing4561322/Typerep.hs.o ) [2 of 4] Compiling Generated_Code ( /tmp/isabelle-jenkins/process2823490157045745957/Quickcheck_Narrowing4561322/Generated_Code.hs, /tmp/isabelle-jenkins/process2823490157045745957/Quickcheck_Narrowing4561322/Generated_Code.o ) [3 of 4] Compiling Narrowing_Engine ( /tmp/isabelle-jenkins/process2823490157045745957/Quickcheck_Narrowing4561322/Narrowing_Engine.hs, /tmp/isabelle-jenkins/process2823490157045745957/Quickcheck_Narrowing4561322/Narrowing_Engine.o ) [4 of 4] Compiling Main ( /tmp/isabelle-jenkins/process2823490157045745957/Quickcheck_Narrowing4561322/Main.hs, /tmp/isabelle-jenkins/process2823490157045745957/Quickcheck_Narrowing4561322/Main.o ) Linking /tmp/isabelle-jenkins/process2823490157045745957/Quickcheck_Narrowing4561322/isabelle_quickcheck_narrowing ... Depth: 0 Depth 0: 0 ms Depth: 1 Depth 1: 0 ms Depth: 2 Depth 2: 0 ms Depth: 3 Depth 3: 0 ms Depth: 4 Depth 4: 4 ms Depth: 5 [Quickcheck-narrowing] Test data size: 0 [Quickcheck-narrowing] Test data size: 1 [Quickcheck-narrowing] Test data size: 2 [Quickcheck-narrowing] Test data size: 3 [Quickcheck-narrowing] Test data size: 4 [Quickcheck-narrowing] Test data size: 5 [Quickcheck-narrowing] Test data size: 6 Depth 6: 10096 ms Quickcheck found no counterexample. ### preprocess-obtain graph ### 0.003s elapsed time, 0.016s cpu time, 0.000s GC time ### preprocess-process ### 0.007s elapsed time, 0.036s cpu time, 0.000s GC time ### Infering modes ### 0.004s elapsed time, 0.020s cpu time, 0.000s GC time ### Defining executable functions... ### 0.000s elapsed time, 0.004s cpu time, 0.000s GC time ### Compiling equations.... ### 0.004s elapsed time, 0.016s cpu time, 0.000s GC time ### Proving equations.... ### 0.002s elapsed time, 0.008s cpu time, 0.000s GC time ### Setting code equations.... ### 0.002s elapsed time, 0.012s cpu time, 0.000s GC time ### Defining executable functions... ### 0.000s elapsed time, 0.004s cpu time, 0.000s GC time ### Proving equations.... ### 0.001s elapsed time, 0.004s cpu time, 0.000s GC time ### Setting code equations.... ### 0.001s elapsed time, 0.004s cpu time, 0.000s GC time ### Infering modes ### 1.344s elapsed time, 6.580s cpu time, 0.728s GC time ### Defining executable functions... ### 0.003s elapsed time, 0.016s cpu time, 0.000s GC time ### Compiling equations.... ### 0.116s elapsed time, 0.536s cpu time, 0.192s GC time ### Proving equations.... ### 0.039s elapsed time, 0.200s cpu time, 0.000s GC time ### Setting code equations.... ### 0.066s elapsed time, 0.328s cpu time, 0.000s GC time Depth: 0 Depth 0: 0 ms Depth: 1 Depth 1: 0 ms Depth: 2 Depth 2: 0 ms Depth: 3 Depth 3: 0 ms Depth: 4 Depth 4: 56 ms Depth: 5 Found 0 theorems with (potentially) superfluous assumptions: Checked 197 theorems with assumptions (508 total) in the theory "Set" Depth 5: 73580 ms Quickcheck found a counterexample: evs = [Says Alice Bob (Crypt (pubEK Bob) (Nonce 1)), Says Bob Alice (Crypt (pubEK Alice) \Nonce 0, Nonce 1\), Says Alice Bob (Crypt (pubEK Bob) \Nonce 0, Agent Alice\)] NB = 1 Quickcheck ran out of time Quickcheck found no counterexample. Found 5 theorems with (potentially) superfluous assumptions: Map.finite_ran: unnecessary assumption(s) 1 Map.map_of_zip_upd: unnecessary assumption(s) 1 and 2 Map.finite_map_freshness: unnecessary assumption(s) 1 Map.fun_upd_restrict_conv: unnecessary assumption(s) 1 Map.finite_set_of_finite_maps: unnecessary assumption(s) 1 and 2 Checked 66 theorems with assumptions (139 total) in the theory "Map" Quickcheck ran out of time Quickcheck found no counterexample. *** Interrupt