11/-
22Copyright (c) 2026 Zongyuan Liu. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
4- Authors: Zongyuan Liu
4+ Authors: Zongyuan Liu, Markus de Medeiros
55-/
66module
77
@@ -62,30 +62,28 @@ nonrec instance frag_ne {q : Qp} : NonExpansive (frag q : A → UFracAuth) where
6262/-! ## Discrete instances -/
6363
6464@ [rocq_alias ufrac_auth_auth_discrete]
65- instance auth_discrete {q : Qp} {a : A} [DiscreteE a] : DiscreteE (●U{q} a : UFracAuth ) :=
65+ instance auth_discrete {q : Qp} {a : A} [DiscreteE a] : DiscreteE (●U{q} a) :=
6666 letI _ : DiscreteE (unit : Option (UFrac × A)) := none_is_discrete
6767 by infer_instance
6868
6969@ [rocq_alias ufrac_auth_frag_discrete]
70- instance frag_discrete {q : Qp} {a : A} [DiscreteE a] : DiscreteE (◯U{q} a : UFracAuth ) :=
70+ instance frag_discrete {q : Qp} {a : A} [DiscreteE a] : DiscreteE (◯U{q} a) :=
7171 by infer_instance
7272
7373/-! ## Validity -/
7474
7575@ [rocq_alias ufrac_auth_validN]
76- theorem validN {n : Nat} {a : A} {p : Qp} (ha : ✓{n} a) :
77- ✓{n} ((●U{p} a : UFracAuth) • ◯U{p} a) := by
76+ theorem validN {n : Nat} {a : A} {p : Qp} (ha : ✓{n} a) : ✓{n} (●U{p} a) • ◯U{p} a := by
7877 simpa only [both_validN] using ⟨incN_refl _, ⟨trivial, ha⟩⟩
7978
8079@ [rocq_alias ufrac_auth_valid]
81- theorem valid {p : Qp} {a : A} (ha : ✓ a) : ✓ (( ●U{p} a : UFracAuth ) • ◯U{p} a) :=
80+ theorem valid {p : Qp} {a : A} (ha : ✓ a) : ✓ (●U{p} a) • ◯U{p} a :=
8281 auth_both_valid_2 ⟨trivial, ha⟩ ⟨none, rfl⟩
8382
8483/-! ## Agreement -/
8584
8685@ [rocq_alias ufrac_auth_agreeN]
87- theorem agreeN {n : Nat} {p : Qp} {a b : A} (h : ✓{n} ((●U{p} a : UFracAuth) • ◯U{p} b)) :
88- a ≡{n}≡ b := by
86+ theorem agreeN {n : Nat} {p : Qp} {a b : A} (h : ✓{n} (●U{p} a) • ◯U{p} b) : a ≡{n}≡ b := by
8987 obtain ⟨mc, hmc⟩ := (both_validN.mp h).1
9088 match mc with
9189 | none => exact hmc.2
@@ -94,125 +92,119 @@ theorem agreeN {n : Nat} {p : Qp} {a b : A} (h : ✓{n} ((●U{p} a : UFracAuth)
9492 grind
9593
9694@ [rocq_alias ufrac_auth_agree]
97- theorem agree {p : Qp} {a b : A} (h : ✓ (( ●U{p} a : UFracAuth ) • ◯U{p} b) ) : a = b :=
98- OFE. eq_dist.mpr fun n => agreeN ( valid_iff_validN.mp h n )
95+ theorem agree {p : Qp} {a b : A} (h : ✓ (●U{p} a) • ◯U{p} b) : a = b :=
96+ eq_dist.mpr ( agreeN <| valid_iff_validN.mp h · )
9997
10098#rocq_ignore ufrac_auth_agree_L "Use agree"
10199
102100/-! ## Inclusion -/
103101
104102@ [rocq_alias ufrac_auth_includedN]
105103theorem includedN {n : Nat} {p q : Qp} {a b : A}
106- (h : ✓{n} (( ●U{p} a : UFracAuth ) • ◯U{q} b) ) : some b ≼{n} some a := by
104+ (h : ✓{n} (●U{p} a) • ◯U{q} b) : some b ≼{n} some a := by
107105 rw [both_validN] at h
108106 obtain ⟨⟨mc, hmc⟩, _⟩ := h
109107 match mc with
110108 | none => exact ⟨none, hmc.2 ⟩
111109 | some (_, cr) => exact ⟨some cr, hmc.2 ⟩
112110
113111@ [rocq_alias ufrac_auth_included]
114- theorem included [CMRA.Discrete A] {q p : Qp} {a b : A}
115- (h : ✓ ((●U{p} a : UFracAuth) • ◯U{q} b)) : some b ≼ some a := by
112+ theorem included [CMRA.Discrete A] {q p : Qp} {a b : A} (h : ✓ (●U{p} a) • ◯U{q} b) :
113+ some b ≼ some a := by
116114 rw [auth_both_valid_discrete] at h
117115 obtain ⟨⟨mc, hmc⟩, _⟩ := h
118116 match mc with
119- | none => exact ⟨none, congrArg (fun p => some p .snd) (some_eqv_some.mp hmc)⟩
120- | some (_, cr) => exact ⟨some cr, congrArg (fun p => some p .snd) (some_eqv_some.mp hmc)⟩
117+ | none => exact ⟨none, congrArg (some · .snd) (some_eqv_some.mp hmc)⟩
118+ | some (_, cr) => exact ⟨some cr, congrArg (some · .snd) (some_eqv_some.mp hmc)⟩
121119
122120@ [rocq_alias ufrac_auth_includedN_total]
123- theorem includedN_total [IsTotal A] {n : Nat} {q p : Qp} {a b : A}
124- (h : ✓{n} ((●U{p} a : UFracAuth) • ◯U{q} b)) : b ≼{n} a :=
125- some_incN_some_iff_is_total.mp <| includedN h
121+ theorem includedN_total [IsTotal A] {n : Nat} {q p : Qp} {a b : A} (h : ✓{n} (●U{p} a) • ◯U{q} b) :
122+ b ≼{n} a := some_incN_some_iff_is_total.mp <| includedN h
126123
127124@ [rocq_alias ufrac_auth_included_total]
128125theorem included_total [CMRA.Discrete A] [IsTotal A] {q p : Qp} {a b : A}
129- (h : ✓ (( ●U{p} a : UFracAuth ) • ◯U{q} b) ) : b ≼ a :=
126+ (h : ✓ (●U{p} a) • ◯U{q} b) : b ≼ a :=
130127 inc_of_some_inc_some <| included h
131128
132129/-! ## Auth-only validity -/
133130
134131@ [rocq_alias ufrac_auth_auth_validN]
135- theorem auth_validN {n : Nat} {q : Qp} {a : A} : (✓{n} ( ●U{q} a : UFracAuth) ) ↔ ✓{n} a := by
132+ theorem auth_validN {n : Nat} {q : Qp} {a : A} : (✓{n} ●U{q} a) ↔ ✓{n} a := by
136133 rw [Auth.auth_validN]
137134 exact ⟨(·.2 ), (⟨trivial, ·⟩)⟩
138135
139136@ [rocq_alias ufrac_auth_auth_valid]
140- theorem auth_valid {q : Qp} {a : A} : (✓ ( ●U{q} a : UFracAuth) ) ↔ ✓ a := by
137+ theorem auth_valid {q : Qp} {a : A} : (✓ ●U{q} a) ↔ ✓ a := by
141138 rw [Auth.auth_valid]
142139 exact ⟨(·.2 ), (⟨trivial, ·⟩)⟩
143140
144141/-! ## Fragment-only validity -/
145142
146143@ [rocq_alias ufrac_auth_frag_validN]
147- theorem frag_validN {n : Nat} {q : Qp} {a : A} : (✓{n} ( ◯U{q} a : UFracAuth) ) ↔ ✓{n} a := by
144+ theorem frag_validN {n : Nat} {q : Qp} {a : A} : (✓{n} ◯U{q} a) ↔ ✓{n} a := by
148145 rw [Auth.frag_validN]
149146 exact ⟨(·.2 ), (⟨trivial, ·⟩)⟩
150147
151148@ [rocq_alias ufrac_auth_frag_valid]
152- theorem frag_valid {q : Qp} {a : A} : (✓ ( ◯U{q} a : UFracAuth) ) ↔ ✓ a := by
149+ theorem frag_valid {q : Qp} {a : A} : (✓ ◯U{q} a) ↔ ✓ a := by
153150 rw [Auth.frag_valid]
154151 exact ⟨(·.2 ), (⟨trivial, ·⟩)⟩
155152
156153/-! ## Operations -/
157154
158155@ [rocq_alias ufrac_auth_frag_op]
159- theorem frag_op {q1 q2 : Qp} {a1 a2 : A} :
160- (◯U{q1 + q2} (a1 • a2) : UFracAuth) = (◯U{q1} a1) • ◯U{q2} a2 := rfl
156+ theorem frag_op {q1 q2 : Qp} {a1 a2 : A} : (◯U{q1 + q2} (a1 • a2)) = (◯U{q1} a1) • ◯U{q2} a2 := rfl
161157
162158@ [rocq_alias ufrac_auth_frag_op_validN]
163159theorem frag_op_validN {n : Nat} {q1 q2 : Qp} {a b : A} :
164- (✓{n} (( ◯U{q1} a : UFracAuth ) • ◯U{q2} b) ) ↔ ✓{n} (a • b) := frag_validN
160+ (✓{n} (◯U{q1} a) • ◯U{q2} b) ↔ ✓{n} (a • b) := frag_validN
165161
166162@ [rocq_alias ufrac_auth_frag_op_valid]
167- theorem frag_op_valid {q1 q2 : Qp} {a b : A} :
168- (✓ ((◯U{q1} a : UFracAuth) • ◯U{q2} b)) ↔ ✓ (a • b) := frag_valid
163+ theorem frag_op_valid {q1 q2 : Qp} {a b : A} : ✓ ((◯U{q1} a) • ◯U{q2} b) ↔ ✓ (a • b) := frag_valid
169164
170165/-! ## IsOp type class instances -/
171166
172167@ [rocq_alias ufrac_auth_is_op]
173168instance isOp_ufrac_auth {q q1 q2 : Qp} {a1 a2 : A} {a : outParam A}
174169 [h1 : IsOp io q q1 q2] [h2 : IsOp io a a1 a2] : IsOp io (◯U{q} a) (◯U{q1} a1) (◯U{q2} a2) where
175- is_op :=
176- (congrArg (frag · a) h1.is_op).trans <|
177- (congrArg (frag (q1 • q2)) h2.is_op).trans frag_op
170+ is_op := calc
171+ ◯U{q} a
172+ _ = ◯U{q1 • q2} a := congrArg (frag · a) h1.is_op
173+ _ = ◯U{q1 • q2} a1 • a2 := congrArg _ h2.is_op
178174
179175set_option synthInstance.checkSynthOrder false in
180176@ [rocq_alias ufrac_auth_is_op_core_id]
181177instance isOp_ufrac_auth_core_id {q q1 q2 : Qp} {a : A} [h1 : CoreId a] [h2 : IsOp io q q1 q2] :
182178 IsOp io (◯U{q} a) (◯U{q1} a) (◯U{q2} a) where
183- is_op :=
184- (congrArg (frag · a) h2.is_op).trans <|
185- (congrArg (frag (q1 • q2)) (op_self a).symm).trans frag_op
179+ is_op := calc
180+ (◯U{q} a)
181+ _ = ◯U{q1 • q2} a := congrArg (frag · a) h2.is_op
182+ _ = ◯U{q1 • q2} a • a := congrArg _ (op_self a).symm
186183
187184/-! ## Updates -/
188185
189186@ [rocq_alias ufrac_auth_update]
190187theorem update {p q : Qp} {a b a' b' : A} (h : (a, b) ~l~> (a', b')) :
191- ((●U{p} a : UFracAuth ) • ◯U{q} b) ~~> (●U{p} a') • ◯U{q} b' :=
188+ ((●U{p} a) • ◯U{q} b) ~~> (●U{p} a') • ◯U{q} b' :=
192189 auth_update <| .option (.prod_2 _ _ h)
193190
194191@ [rocq_alias ufrac_auth_update_surplus]
195192theorem update_surplus {p q : Qp} {a b : A} (h : ✓ (a • b)) :
196- (●U{p} a : UFracAuth ) ~~> (●U{p + q} (a • b)) • ◯U{q} b := by
193+ (●U{p} a) ~~> (●U{p + q} (a • b)) • ◯U{q} b := by
197194 refine auth_update_alloc (local_update_unital.mpr fun n mpa _ heq => ?_)
198195 refine ⟨⟨trivial, h.validN⟩, ?_⟩
199- have hop : some ((⟨p + q⟩ : UFrac), a • b)
200- ≡{n}≡ some ((⟨q⟩ : UFrac), b) • some ((⟨p⟩ : UFrac), a) :=
201- ⟨comm.dist, op_commN⟩
202- refine hop.trans ?_
203- exact (heq.trans (unit_left_id_dist mpa)).op_r
196+ refine .trans ?_ (heq.trans (unit_left_id_dist mpa)).op_r
197+ exact ⟨comm.dist, op_commN⟩
204198
205199@ [rocq_alias ufrac_auth_update_surplus_cancel]
206200theorem update_surplus_cancel {p q : Qp} {a b : A} [CMRA.Cancelable b] :
207- ((●U{p + q} (a • b) : UFracAuth ) • ◯U{q} b) ~~> ●U{p} a := by
201+ ((●U{p + q} (a • b)) • ◯U{q} b) ~~> ●U{p} a := by
208202 refine auth_update_dealloc (local_update_unital.mpr fun n mpa hv heq => ?_)
209203 match mpa with
210204 | none =>
211- have hp : p + q = q := ext_iff.mp heq.1
212- grind
205+ grind [show p + q = q from ext_iff.mp heq.1 ]
213206 | some (p', a') =>
214- have hpq : p + q = q + p'.frac := ext_iff.mp heq.1
215- have hp : p = p'.frac := by grind
207+ have hp : p = p'.frac := by grind [show p + q = q + p'.frac from ext_iff.mp heq.1 ]
216208 refine ⟨⟨trivial, validN_op_left hv.2 ⟩, ?_⟩
217209 refine ⟨.of_eq (ext_iff.mpr hp), ?_⟩
218210 refine cancelableN ?_ (op_commN.trans heq.2 )
0 commit comments