Cortex.Wire.AdmissionArtifact.Check
Imports
import Mathlib.Data.List.Perm.BasicOverview
Reusable boolean checker combinators for decoded Wire admission artifacts.
Each helper is intentionally small: a checker returns Bool, and its paired
soundness theorem converts check = true into the proof-facing predicate. These
are Lean-side soundness combinators, not standalone proofs that the Haskell
validator uses the same algorithm. Artifact-specific modules keep the semantic
predicates and any Haskell-correspondence obligations.
namespace Cortex.Wirenamespace AdmissionArtifactnamespace CheckDecidable Propositions
Boolean form of a decidable proposition.
def propCheck (predicate : Prop) [Decidable predicate] : Bool :=
decide predicateSuccessful proposition checking returns the proposition.
theorem propCheck_sound
{predicate : Prop}
[Decidable predicate]
(hCheck : propCheck predicate = true) :
predicate :=
of_decide_eq_true hCheckList Quantifiers
Boolean universal quantification over a decoded finite row list.
def allDecide {α : Type}
(items : List α)
(predicate : α → Prop)
[DecidablePred predicate] :
Bool :=
items.all fun item => decide (predicate item)A successful finite boolean universal check supplies the corresponding predicate.
theorem allDecide_sound
{α : Type}
{items : List α}
{predicate : α → Prop}
[DecidablePred predicate]
(hCheck : allDecide items predicate = true) :
∀ item, item ∈ items → predicate item := α:Typeitems:List αpredicate:α → Propinst✝:DecidablePred predicatehCheck:allDecide items predicate = true⊢ ∀ (item : α), item ∈ items → predicate item
intro item α:Typeitems:List αpredicate:α → Propinst✝:DecidablePred predicatehCheck:allDecide items predicate = trueitem:αhItem:item ∈ items⊢ predicate item
α:Typeitems:List αpredicate:α → Propinst✝:DecidablePred predicatehCheck:allDecide items predicate = trueitem:αhItem:item ∈ itemshItemCheck:decide (predicate item) = true⊢ predicate item
All goals completed! 🐙
Boolean universal quantification for row checkers that already return Bool.
def allBool {α : Type} (items : List α) (check : α → Bool) : Bool :=
items.all checkA successful finite boolean universal check transports through local soundness.
theorem allBool_sound
{α : Type}
{items : List α}
{check : α → Bool}
{predicate : α → Prop}
(hCheck : allBool items check = true)
(hSound :
∀ item, item ∈ items → check item = true → predicate item) :
∀ item, item ∈ items → predicate item := α:Typeitems:List αcheck:α → Boolpredicate:α → ProphCheck:allBool items check = truehSound:∀ (item : α), item ∈ items → check item = true → predicate item⊢ ∀ (item : α), item ∈ items → predicate item
intro item α:Typeitems:List αcheck:α → Boolpredicate:α → ProphCheck:allBool items check = truehSound:∀ (item : α), item ∈ items → check item = true → predicate itemitem:αhItem:item ∈ items⊢ predicate item
All goals completed! 🐙Boolean existential search over a decoded finite row list.
def anyDecide {α : Type}
(items : List α)
(predicate : α → Prop)
[DecidablePred predicate] :
Bool :=
items.any fun item => decide (predicate item)A successful finite boolean existential check supplies a matching row.
theorem anyDecide_sound
{α : Type}
{items : List α}
{predicate : α → Prop}
[DecidablePred predicate]
(hCheck : anyDecide items predicate = true) :
∃ item, item ∈ items ∧ predicate item := α:Typeitems:List αpredicate:α → Propinst✝:DecidablePred predicatehCheck:anyDecide items predicate = true⊢ ∃ item, item ∈ items ∧ predicate item
α:Typeitems:List αpredicate:α → Propinst✝:DecidablePred predicatehCheck:anyDecide items predicate = trueitem:αhItem:item ∈ itemshPredicate:decide (predicate item) = true⊢ ∃ item, item ∈ items ∧ predicate item
All goals completed! 🐙Standard Row Properties
Boolean duplicate-freedom check for a decoded list.
def nodupCheck {α : Type} [DecidableEq α] (items : List α) : Bool :=
propCheck items.Nodup
Successful duplicate-freedom checking proves List.Nodup.
theorem nodupCheck_sound
{α : Type}
[DecidableEq α]
{items : List α}
(hCheck : nodupCheck items = true) :
items.Nodup :=
propCheck_sound hCheckBoolean duplicate-freedom check for a projected key list.
def nodupMapCheck {α β : Type}
[DecidableEq β]
(items : List α)
(key : α → β) :
Bool :=
nodupCheck (items.map key)
Successful projected duplicate-freedom checking proves List.Nodup for the keys.
theorem nodupMapCheck_sound
{α β : Type}
[DecidableEq β]
{items : List α}
{key : α → β}
(hCheck : nodupMapCheck items key = true) :
(items.map key).Nodup :=
nodupCheck_sound hCheckBoolean permutation check for two decoded lists.
def permCheck {α : Type} [DecidableEq α] (left right : List α) : Bool :=
propCheck (left.Perm right)
Successful permutation checking proves List.Perm.
theorem permCheck_sound
{α : Type}
[DecidableEq α]
{left right : List α}
(hCheck : permCheck left right = true) :
left.Perm right :=
propCheck_sound hCheckBoolean membership check for a decoded finite list.
def memCheck {α : Type} [DecidableEq α] (item : α) (items : List α) : Bool :=
propCheck (item ∈ items)Successful membership checking proves list membership.
theorem memCheck_sound
{α : Type}
[DecidableEq α]
{item : α}
{items : List α}
(hCheck : memCheck item items = true) :
item ∈ items :=
propCheck_sound hCheckBoolean set-style equality for lists, ignoring multiplicity and order.
def sameMembersCheck {α : Type} [DecidableEq α] (left right : List α) : Bool :=
allDecide left (fun item => item ∈ right) &&
allDecide right (fun item => item ∈ left)Successful set-style equality checking proves membership equivalence.
theorem sameMembersCheck_sound
{α : Type}
[DecidableEq α]
{left right : List α}
(hCheck : sameMembersCheck left right = true) :
∀ item, item ∈ left ↔ item ∈ right := α:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:sameMembersCheck left right = true⊢ ∀ (item : α), item ∈ left ↔ item ∈ right
α:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:((allDecide left fun item => item ∈ right) && allDecide right fun item => item ∈ left) = true⊢ ∀ (item : α), item ∈ left ↔ item ∈ right
α:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:(allDecide left fun item => item ∈ right) = true ∧ (allDecide right fun item => item ∈ left) = true⊢ ∀ (item : α), item ∈ left ↔ item ∈ right
α:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:(allDecide left fun item => item ∈ right) = true ∧ (allDecide right fun item => item ∈ left) = trueitem:α⊢ item ∈ left ↔ item ∈ right
α:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:(allDecide left fun item => item ∈ right) = true ∧ (allDecide right fun item => item ∈ left) = trueitem:α⊢ item ∈ left → item ∈ rightα:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:(allDecide left fun item => item ∈ right) = true ∧ (allDecide right fun item => item ∈ left) = trueitem:α⊢ item ∈ right → item ∈ left
α:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:(allDecide left fun item => item ∈ right) = true ∧ (allDecide right fun item => item ∈ left) = trueitem:α⊢ item ∈ left → item ∈ right α:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:(allDecide left fun item => item ∈ right) = true ∧ (allDecide right fun item => item ∈ left) = trueitem:αhItem:item ∈ left⊢ item ∈ right
All goals completed! 🐙
α:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:(allDecide left fun item => item ∈ right) = true ∧ (allDecide right fun item => item ∈ left) = trueitem:α⊢ item ∈ right → item ∈ left α:Typeinst✝:DecidableEq αleft:List αright:List αhCheck:(allDecide left fun item => item ∈ right) = true ∧ (allDecide right fun item => item ∈ left) = trueitem:αhItem:item ∈ right⊢ item ∈ left
All goals completed! 🐙Gated Pair Checks
Check all pairs that satisfy a decidable gate. Ungated pairs are ignored.
def allPairsWhenCheck
{α β : Type}
(left : List α)
(right : List β)
(condition : α → β → Prop)
[DecidableRel condition]
(check : α → β → Bool) :
Bool :=
left.all fun leftItem =>
right.all fun rightItem =>
if condition leftItem rightItem then
check leftItem rightItem
else
trueSuccessful gated-pair checking proves the target predicate for every gated pair.
theorem allPairsWhenCheck_sound
{α β : Type}
{left : List α}
{right : List β}
{condition : α → β → Prop}
[DecidableRel condition]
{check : α → β → Bool}
{predicate : α → β → Prop}
(hCheck : allPairsWhenCheck left right condition check = true)
(hSound :
∀ leftItem, leftItem ∈ left →
∀ rightItem, rightItem ∈ right →
check leftItem rightItem = true → predicate leftItem rightItem) :
∀ leftItem, leftItem ∈ left →
∀ rightItem, rightItem ∈ right →
condition leftItem rightItem → predicate leftItem rightItem := α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:allPairsWhenCheck left right condition check = truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItem⊢ ∀ (leftItem : α),
leftItem ∈ left → ∀ (rightItem : β), rightItem ∈ right → condition leftItem rightItem → predicate leftItem rightItem
intro leftItem α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:allPairsWhenCheck left right condition check = truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ left⊢ ∀ (rightItem : β), rightItem ∈ right → condition leftItem rightItem → predicate leftItem rightItem α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:allPairsWhenCheck left right condition check = truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:β⊢ rightItem ∈ right → condition leftItem rightItem → predicate leftItem rightItem α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:allPairsWhenCheck left right condition check = truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ right⊢ condition leftItem rightItem → predicate leftItem rightItem α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:allPairsWhenCheck left right condition check = truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ righthCondition:condition leftItem rightItem⊢ predicate leftItem rightItem
α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:(left.all fun leftItem =>
right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) =
truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ righthCondition:condition leftItem rightItem⊢ predicate leftItem rightItem
α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:(left.all fun leftItem =>
right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) =
truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ righthCondition:condition leftItem rightItemhLeftCheck:(right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) = true⊢ predicate leftItem rightItem
α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:(left.all fun leftItem =>
right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) =
truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ righthCondition:condition leftItem rightItemhLeftCheck:(right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) = truehRightCheck:(if condition leftItem rightItem then check leftItem rightItem else true) = true⊢ predicate leftItem rightItem
α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:(left.all fun leftItem =>
right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) =
truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ righthCondition:condition leftItem rightItemhLeftCheck:(right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) = truehRightCheck:(if condition leftItem rightItem then check leftItem rightItem else true) = truehConditionCheck:condition leftItem rightItem⊢ predicate leftItem rightItemα:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:(left.all fun leftItem =>
right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) =
truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ righthCondition:condition leftItem rightItemhLeftCheck:(right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) = truehRightCheck:(if condition leftItem rightItem then check leftItem rightItem else true) = truehConditionCheck:¬condition leftItem rightItem⊢ predicate leftItem rightItem
α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:(left.all fun leftItem =>
right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) =
truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ righthCondition:condition leftItem rightItemhLeftCheck:(right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) = truehRightCheck:(if condition leftItem rightItem then check leftItem rightItem else true) = truehConditionCheck:condition leftItem rightItem⊢ predicate leftItem rightItem α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:(left.all fun leftItem =>
right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) =
truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ righthCondition:condition leftItem rightItemhLeftCheck:(right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) = truehConditionCheck:condition leftItem rightItemhRightCheck:check leftItem rightItem = true⊢ predicate leftItem rightItem
All goals completed! 🐙
α:Typeβ:Typeleft:List αright:List βcondition:α → β → Propinst✝:DecidableRel conditioncheck:α → β → Boolpredicate:α → β → ProphCheck:(left.all fun leftItem =>
right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) =
truehSound:∀ (leftItem : α),
leftItem ∈ left →
∀ (rightItem : β), rightItem ∈ right → check leftItem rightItem = true → predicate leftItem rightItemleftItem:αhLeft:leftItem ∈ leftrightItem:βhRight:rightItem ∈ righthCondition:condition leftItem rightItemhLeftCheck:(right.all fun rightItem => if condition leftItem rightItem then check leftItem rightItem else true) = truehRightCheck:(if condition leftItem rightItem then check leftItem rightItem else true) = truehConditionCheck:¬condition leftItem rightItem⊢ predicate leftItem rightItem All goals completed! 🐙end Checkend AdmissionArtifactend Cortex.Wire