Skip to content

Commit

Permalink
Generalize Prelude proof helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
madman-bob authored and gallais committed Jul 5, 2023
1 parent ecf4765 commit af3c5fd
Show file tree
Hide file tree
Showing 15 changed files with 95 additions and 95 deletions.
2 changes: 1 addition & 1 deletion libs/base/Control/Function.idr
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public export
public export
[BiinjFromComp] {f : a -> b -> c} -> {g : c -> d} ->
Biinjective (g .: f) => Biinjective f where
biinjective = biinjective {f = (g .: f)} . cong g
biinjective prf = biinjective {f = (g .: f)} $ cong g prf

public export
[FlipBiinjective] {f : a -> b -> c} ->
Expand Down
2 changes: 1 addition & 1 deletion libs/base/Data/Fin/Order.idr
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ using (k : Nat)
connex {x = FZ} _ = Left $ FromNatPrf LTEZero
connex {y = FZ} _ = Right $ FromNatPrf LTEZero
connex {x = FS k} {y = FS j} prf =
case connex {rel = FinLTE} $ prf . (cong FS) of
case connex {rel = FinLTE} $ \c => prf $ cong FS c of
Left (FromNatPrf p) => Left $ FromNatPrf $ LTESucc p
Right (FromNatPrf p) => Right $ FromNatPrf $ LTESucc p

Expand Down
2 changes: 1 addition & 1 deletion libs/base/Data/Nat.idr
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Connex Nat LTE where
connex {x = Z} _ = Left LTEZero
connex {y = Z} _ = Right LTEZero
connex {x = S _} {y = S _} prf =
case connex $ prf . (cong S) of
case connex $ \xy => prf $ cong S xy of
Left jk => Left $ LTESucc jk
Right kj => Right $ LTESucc kj

Expand Down
2 changes: 1 addition & 1 deletion libs/base/Data/Vect.idr
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ replaceAtDiffIndexPreserves : (xs : Vect n a) -> (i, j : Fin n) -> Not (i = j) -
replaceAtDiffIndexPreserves (_::_) FZ FZ co _ = absurd $ co Refl
replaceAtDiffIndexPreserves (_::_) FZ (FS _) _ _ = Refl
replaceAtDiffIndexPreserves (_::_) (FS _) FZ _ _ = Refl
replaceAtDiffIndexPreserves (_::_) (FS z) (FS w) co y = replaceAtDiffIndexPreserves _ z w (co . cong FS) y
replaceAtDiffIndexPreserves (_::_) (FS z) (FS w) co y = replaceAtDiffIndexPreserves _ z w (\zw => co $ cong FS zw) y

--------------------------------------------------------------------------------
-- Transformations
Expand Down
2 changes: 1 addition & 1 deletion libs/base/Decidable/Equality/Core.idr
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ decEqCong $ No contra = No $ \c => contra $ inj f c
public export
decEqInj : (0 _ : Injective f) => Dec (f x = f y) -> Dec (x = y)
decEqInj $ Yes prf = Yes $ inj f prf
decEqInj $ No contra = No $ contra . cong f
decEqInj $ No contra = No $ \c => contra $ cong f c

public export
decEqCong2 : (0 _ : Biinjective f) => Dec (x = y) -> Lazy (Dec (v = w)) -> Dec (f x v = f y w)
Expand Down
6 changes: 3 additions & 3 deletions libs/papers/Data/Container.idr
Original file line number Diff line number Diff line change
Expand Up @@ -288,12 +288,12 @@ namespace Derivative
toPair v = case fromSum {c = Pair (Derivative c) d} {d = Pair c (Derivative d)} v of
Left p => let (MkExtension (shp1 ** p1) chld1, MkExtension shp2 chld2) = fromPair {c = Derivative c} p in
MkExtension ((shp1, shp2) ** Left p1) $ \ (p' ** neq) => case p' of
Left p1' => chld1 (p1' ** (neq . cong Left))
Left p1' => chld1 (p1' ** (\prf => neq $ cong Left prf))
Right p2' => chld2 p2'
Right p => let (MkExtension shp1 chld1, MkExtension (shp2 ** p2) chld2) = fromPair {c} {d = Derivative d} p in
MkExtension ((shp1, shp2) ** Right p2) $ \ (p' ** neq) => case p' of
Left p1' => chld1 p1'
Right p2' => chld2 (p2' ** (neq . cong Right))
Right p2' => chld2 (p2' ** (\prf => neq $ cong Right prf))

export
fromPair : Extension (Derivative (Pair c d)) x ->
Expand Down Expand Up @@ -323,7 +323,7 @@ namespace Derivative
right = toCompose
$ MkExtension (shp1 ** p1)
$ \ (p1' ** neqp1) => MkExtension (shp2 p1')
$ \ p2' => chld ((p1' ** p2') ** (neqp1 . cong fst))
$ \ p2' => chld ((p1' ** p2') ** (\prf => neqp1 $ cong fst prf))

export
toCompose : ((s : _) -> DecEq (Position c s)) -> ((s : _) -> DecEq (Position d s)) ->
Expand Down
6 changes: 3 additions & 3 deletions libs/papers/Search/Auto.idr
Original file line number Diff line number Diff line change
Expand Up @@ -259,8 +259,8 @@ thinApart FZ FZ neq = absurd (neq Refl)
thinApart FZ (FS y') neq = (y' ** Refl)
thinApart (FS FZ) FZ neq = (FZ ** Refl)
thinApart (FS (FS x)) FZ neq = (FZ ** Refl)
thinApart (FS x@FZ) (FS y) neq = bimap FS (cong FS) (thinApart x y (neq . cong FS))
thinApart (FS x@(FS{})) (FS y) neq = bimap FS (cong FS) (thinApart x y (neq . cong FS))
thinApart (FS x@FZ) (FS y) neq = bimap FS (\prf => cong FS prf) (thinApart x y (\prf => neq $ cong FS prf))
thinApart (FS x@(FS{})) (FS y) neq = bimap FS (\prf => cong FS prf) (thinApart x y (\prf => neq $ cong FS prf))

public export
data Thicken : (x, y : Fin n) -> Type where
Expand Down Expand Up @@ -462,7 +462,7 @@ apply r args = let (premises, rest) = splitAt r.arity args in

mkVars : (m : Nat) -> (vars : SnocList Name ** length vars = m)
mkVars Z = ([<] ** Refl)
mkVars m@(S m') = bimap (:< UN (Basic $ "_invalidName" ++ show m)) (cong S) (mkVars m')
mkVars m@(S m') = bimap (:< UN (Basic $ "_invalidName" ++ show m)) (\prf => cong S prf) (mkVars m')

solveAcc : {m : _} -> Nat -> HintDB -> PartialProof m -> Space Proof
solveAcc idx rules (MkPartialProof 0 goals k)
Expand Down
6 changes: 3 additions & 3 deletions libs/prelude/Prelude/Basics.idr
Original file line number Diff line number Diff line change
Expand Up @@ -99,18 +99,18 @@ public export

||| Equality is a congruence.
public export
cong : (0 f : t -> u) -> (p : a = b) -> f a = f b
cong : (0 f : t -> u) -> (0 p : a = b) -> f a = f b
cong f Refl = Refl

||| Two-holed congruence.
export
-- These are natural in equational reasoning.
cong2 : (0 f : t1 -> t2 -> u) -> (p1 : a = b) -> (p2 : c = d) -> f a c = f b d
cong2 : (0 f : t1 -> t2 -> u) -> (0 p1 : a = b) -> (0 p2 : c = d) -> f a c = f b d
cong2 f Refl Refl = Refl

||| Irrelevant equalities can always be made relevant
export
irrelevantEq : (0 _ : a === b) -> a === b
irrelevantEq : (0 _ : a ~=~ b) -> a ~=~ b
irrelevantEq Refl = Refl

--------------
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Case/CaseBuilder.idr
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ conTypeEq (CName x tag) (CName x' tag')
Yes Refl => Just Refl
No contra => Nothing
conTypeEq CDelay CDelay = Just Refl
conTypeEq (CConst x) (CConst y) = cong CConst <$> constantEq x y
conTypeEq (CConst x) (CConst y) = (\xy => cong CConst xy) <$> constantEq x y
conTypeEq _ _ = Nothing

data Group : List Name -> -- variables in scope
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Name.idr
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ nameEq (NS xs x) (NS ys y) with (decEq xs ys)
nameEq (NS ys x) (NS ys y) | (Yes Refl) | Nothing = Nothing
nameEq (NS ys y) (NS ys y) | (Yes Refl) | (Just Refl) = Just Refl
nameEq (NS xs x) (NS ys y) | (No contra) = Nothing
nameEq (UN x) (UN y) = map (cong UN) (userNameEq x y)
nameEq (UN x) (UN y) = map (\xy => cong UN xy) (userNameEq x y)
nameEq (MN x t) (MN x' t') with (decEq x x')
nameEq (MN x t) (MN x t') | (Yes Refl) with (decEq t t')
nameEq (MN x t) (MN x t) | (Yes Refl) | (Yes Refl) = Just Refl
Expand Down
2 changes: 1 addition & 1 deletion src/Core/TT.idr
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ constantEq (Ch x) (Ch y) = case decEq x y of
Yes Refl => Just Refl
No contra => Nothing
constantEq (Db x) (Db y) = Nothing -- no DecEq for Doubles!
constantEq (PrT x) (PrT y) = cong PrT <$> primTypeEq x y
constantEq (PrT x) (PrT y) = (\xy => cong PrT xy) <$> primTypeEq x y
constantEq WorldVal WorldVal = Just Refl

constantEq _ _ = Nothing
Expand Down
2 changes: 1 addition & 1 deletion tests/base/deriving_traversable/expected
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ LOG derive.traversable.clauses:1:
traverseIVect : {0 m : _} -> {0 a, b : Type} -> {0 f : Type -> Type} -> Applicative f => (a -> f b) -> IVect {n = m} a -> f (IVect {n = m} b)
traverseIVect f (MkIVect x2) = MkIVect <$> (traverse f x2)
LOG derive.traversable.clauses:1:
traverseEqMap : {0 key, eq : _} -> {0 a, b : Type} -> {0 f : Type -> Type} -> Applicative f => (a -> f b) -> EqMap key {{conArg:13922} = eq} a -> f (EqMap key {{conArg:13922} = eq} b)
traverseEqMap : {0 key, eq : _} -> {0 a, b : Type} -> {0 f : Type -> Type} -> Applicative f => (a -> f b) -> EqMap key {{conArg:13919} = eq} a -> f (EqMap key {{conArg:13919} = eq} b)
traverseEqMap f (MkEqMap x3) = MkEqMap <$> (traverse (traverse f) x3)
LOG derive.traversable.clauses:1:
traverseTree : {0 l : _} -> {0 a, b : Type} -> {0 f : Type -> Type} -> Applicative f => (a -> f b) -> Tree l a -> f (Tree l b)
Expand Down
138 changes: 69 additions & 69 deletions tests/idris2/evaluator002/expected
Original file line number Diff line number Diff line change
@@ -1,89 +1,89 @@
1/2: Building Lib (Lib.idr)
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2558}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2559}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2559}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2559}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2559}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2559}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2558}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2558}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2558}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2555}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2556}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2556}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2556}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2556}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2556}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2555}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2555}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2555}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2559}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2556}
LOG eval.stuck.outofscope:5: Stuck function: {_:2561}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2562}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2559}
LOG eval.stuck.outofscope:5: Stuck function: {_:2564}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2565}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2565}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2565}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2566}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2566}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2566}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2566}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2570}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2570}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2570}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2570}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2570}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2567}
LOG eval.stuck.outofscope:5: Stuck function: {_:2573}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{b:2574}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2562}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2562}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2563}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2564}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2564}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2564}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2564}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2564}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2563}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2563}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2563}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2567}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2564}
LOG eval.stuck.outofscope:5: Stuck function: {_:2570}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{b:2571}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2572}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2572}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2572}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2575}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2575}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2575}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2575}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2578}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2578}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2578}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2578}
LOG eval.stuck.outofscope:5: Stuck function: Prelude.Types.List.reverse
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2593}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2594}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2594}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2594}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2594}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2594}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2594}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2594}
LOG eval.stuck.outofscope:5: Stuck function: {_:2597}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{b:2598}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2599}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2599}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2599}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2590}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2591}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2591}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2591}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2591}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2591}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2591}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{_:2591}
LOG eval.stuck.outofscope:5: Stuck function: {_:2594}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{b:2595}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2596}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2596}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2596}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2598}
LOG eval.stuck.outofscope:5: Stuck function: Lib.{a:2598}
LOG eval.stuck.outofscope:5: Stuck function: Lib.accMapAux
2/2: Building Main (Main.idr)
LOG eval.stuck.outofscope:5: Stuck function: Main.{b:2603}
LOG eval.stuck.outofscope:5: Stuck function: Main.{b:2600}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{b:2600}
LOG eval.stuck.outofscope:5: Stuck function: Main.{b:2600}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{b:2603}
LOG eval.stuck.outofscope:5: Stuck function: Main.{b:2603}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2607}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2607}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2607}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2610}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2610}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2612}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2610}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2613}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2613}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2615}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2613}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2613}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{ty:2624}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{ty:2624}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2604}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2610}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{ty:2621}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Main.{ty:2621}
LOG eval.stuck.outofscope:5: Stuck function: Main.{a:2601}
LOG eval.stuck.outofscope:5: Stuck function: Lib.accMap
Main> LOG eval.stuck:5: Stuck function: Lib.accMapAux
LOG eval.stuck:5: Stuck function: Lib.accMapAux
Expand Down
Loading

0 comments on commit af3c5fd

Please sign in to comment.