2424module ClampTrustBounds
2525
2626import Data.Nat
27+ import NatLte
2728
2829%default total
2930
@@ -92,12 +93,12 @@ clamp_trust (S (S (S (S (S _))))) = Level5
9293||| TrustLevel whose trustValue ≥ 1 by direct computation.
9394public export
9495clamp_lower_bound : (n : Nat ) -> 1 `LTE ` trustValue (clamp_trust n)
95- clamp_lower_bound 0 = LTESucc LTEZero
96- clamp_lower_bound 1 = LTESucc LTEZero
97- clamp_lower_bound 2 = LTESucc LTEZero
98- clamp_lower_bound 3 = LTESucc LTEZero
99- clamp_lower_bound 4 = LTESucc LTEZero
100- clamp_lower_bound (S (S (S (S (S _ ))))) = LTESucc LTEZero
96+ clamp_lower_bound 0 = lteLit 1 1
97+ clamp_lower_bound 1 = lteLit 1 1
98+ clamp_lower_bound 2 = lteLit 1 2
99+ clamp_lower_bound 3 = lteLit 1 3
100+ clamp_lower_bound 4 = lteLit 1 4
101+ clamp_lower_bound (S (S (S (S (S _ ))))) = lteLit 1 5
101102
102103-- ==========================================================================
103104-- Section 5: clamp_upper_bound
@@ -109,12 +110,12 @@ clamp_lower_bound (S (S (S (S (S _))))) = LTESucc LTEZero
109110||| TrustLevel whose trustValue ≤ 5 by direct computation.
110111public export
111112clamp_upper_bound : (n : Nat ) -> trustValue (clamp_trust n) `LTE ` 5
112- clamp_upper_bound 0 = LTESucc LTEZero
113- clamp_upper_bound 1 = LTESucc LTEZero
114- clamp_upper_bound 2 = LTESucc ( LTESucc LTEZero )
115- clamp_upper_bound 3 = LTESucc ( LTESucc ( LTESucc LTEZero ))
116- clamp_upper_bound 4 = LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero )))
117- clamp_upper_bound (S (S (S (S (S _ ))))) = LTESucc ( LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero ))))
113+ clamp_upper_bound 0 = lteLit 1 5
114+ clamp_upper_bound 1 = lteLit 1 5
115+ clamp_upper_bound 2 = lteLit 2 5
116+ clamp_upper_bound 3 = lteLit 3 5
117+ clamp_upper_bound 4 = lteLit 4 5
118+ clamp_upper_bound (S (S (S (S (S _ ))))) = lteLit 5 5
118119
119120-- ==========================================================================
120121-- Section 6: clamp_monotone
@@ -145,12 +146,12 @@ data ClampZone : Nat -> Type where
145146||| Every Nat inhabits a ClampZone.
146147public export
147148classifyNat : (n : Nat ) -> ClampZone n
148- classifyNat 0 = Zone01 0 LTEZero
149- classifyNat 1 = Zone01 1 (LTESucc LTEZero )
149+ classifyNat 0 = Zone01 0 (lteLit 0 1 )
150+ classifyNat 1 = Zone01 1 (lteLit 1 1 )
150151classifyNat 2 = Zone2
151152classifyNat 3 = Zone3
152153classifyNat 4 = Zone4
153- classifyNat (S (S (S (S (S k))))) = Zone5up (S (S (S (S (S k))))) (LTESucc ( LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero )))))
154+ classifyNat (S (S (S (S (S k))))) = Zone5up (S (S (S (S (S k))))) (lteLit 5 ( S ( S ( S ( S ( S k) )))))
154155
155156||| clamp_trust is constant on zone 0 (returns Level1 for 0 and 1).
156157clampZone01 : (n : Nat ) -> n `LTE ` 1 -> clamp_trust n = Level1
@@ -169,50 +170,55 @@ clampZone5up (S (S (S (S (S _))))) _ = Refl
169170
170171-- TrustLTE lemmas for adjacent levels (used to build the monotonicity table).
171172
173+ -- Bodies use `lteLit` (machine-checked via Data.Nat.isLTE) rather than
174+ -- hand-counted LTESucc towers; the off-diagonal towers previously mis-counted
175+ -- (e.g. l1lteL2 proved LTE 2 2 instead of LTE 1 2). The count can no longer
176+ -- be wrong: `lteLit i j` type-checks iff i <= j.
177+
172178l1lteL1 : TrustLTE Level1 Level1
173- l1lteL1 = LTESucc LTEZero
179+ l1lteL1 = lteLit 1 1
174180
175181l1lteL2 : TrustLTE Level1 Level2
176- l1lteL2 = LTESucc ( LTESucc LTEZero )
182+ l1lteL2 = lteLit 1 2
177183
178184l1lteL3 : TrustLTE Level1 Level3
179- l1lteL3 = LTESucc ( LTESucc ( LTESucc LTEZero ))
185+ l1lteL3 = lteLit 1 3
180186
181187l1lteL4 : TrustLTE Level1 Level4
182- l1lteL4 = LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero )))
188+ l1lteL4 = lteLit 1 4
183189
184190l1lteL5 : TrustLTE Level1 Level5
185- l1lteL5 = LTESucc ( LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero ))))
191+ l1lteL5 = lteLit 1 5
186192
187193l2lteL2 : TrustLTE Level2 Level2
188- l2lteL2 = LTESucc ( LTESucc LTEZero )
194+ l2lteL2 = lteLit 2 2
189195
190196l2lteL3 : TrustLTE Level2 Level3
191- l2lteL3 = LTESucc ( LTESucc ( LTESucc LTEZero ))
197+ l2lteL3 = lteLit 2 3
192198
193199l2lteL4 : TrustLTE Level2 Level4
194- l2lteL4 = LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero )))
200+ l2lteL4 = lteLit 2 4
195201
196202l2lteL5 : TrustLTE Level2 Level5
197- l2lteL5 = LTESucc ( LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero ))))
203+ l2lteL5 = lteLit 2 5
198204
199205l3lteL3 : TrustLTE Level3 Level3
200- l3lteL3 = LTESucc ( LTESucc ( LTESucc LTEZero ))
206+ l3lteL3 = lteLit 3 3
201207
202208l3lteL4 : TrustLTE Level3 Level4
203- l3lteL4 = LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero )))
209+ l3lteL4 = lteLit 3 4
204210
205211l3lteL5 : TrustLTE Level3 Level5
206- l3lteL5 = LTESucc ( LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero ))))
212+ l3lteL5 = lteLit 3 5
207213
208214l4lteL4 : TrustLTE Level4 Level4
209- l4lteL4 = LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero )))
215+ l4lteL4 = lteLit 4 4
210216
211217l4lteL5 : TrustLTE Level4 Level5
212- l4lteL5 = LTESucc ( LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero ))))
218+ l4lteL5 = lteLit 4 5
213219
214220l5lteL5 : TrustLTE Level5 Level5
215- l5lteL5 = LTESucc ( LTESucc ( LTESucc ( LTESucc ( LTESucc LTEZero ))))
221+ l5lteL5 = lteLit 5 5
216222
217223||| clamp_monotone: n ≤ m → TrustLTE (clamp_trust n) (clamp_trust m).
218224|||
0 commit comments