def
definition
revokeAt
show as:
view math explainer →
open explainer
Read the cached plain-language explainer.
open lean source
IndisputableMonolith.Recognition.Consent on GitHub at line 24.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
used by
formal source
21def permitsAt {A} (w : ConsentWindow A) (t : Nat) (a : A) : Bool :=
22 activeAt w t && w.scope a
23
24def revokeAt {A} (w : ConsentWindow A) (r : Nat) : ConsentWindow A :=
25 { w with revokedAt? := some (match w.revokedAt? with | none => r | some tr => Nat.min tr r) }
26
27@[simp] lemma revoke_narrows_active {A} (w : ConsentWindow A) (r t : Nat) :
28 activeAt (revokeAt w r) t → activeAt w t := by
29 unfold activeAt revokeAt
30 intro h
31 by_cases h1 : w.tEnd? = none
32 · cases w.tEnd? <;> simp [h1] at h ⊢
33 · cases w.tEnd? <;> simp at h ⊢
34
35@[simp] lemma revoke_narrows_perm {A} (w : ConsentWindow A) (r t : Nat) (a : A) :
36 permitsAt (revokeAt w r) t a → permitsAt w t a := by
37 unfold permitsAt
38 intro h
39 have := revoke_narrows_active (w:=w) (r:=r) (t:=t) (by exact And.left h)
40 -- conservative boolean reasoning
41 have hs : w.scope a = true ∨ w.scope a = false := by
42 by_cases hh : w.scope a = true <;> [exact Or.inl hh, exact Or.inr hh]
43 cases hs with
44 | inl htrue =>
45 simp [permitsAt, htrue] at h ⊢
46 cases h with
47 | intro hact _ =>
48 simpa [htrue] using And.intro this rfl
49 | inr hfalse =>
50 simp [permitsAt, hfalse] at h
51
52end ConsentWindow
53
54/-- A ledger of consent windows. -/