diff --git a/saw-core-coq/coq/generated/CryptolToCoq/CryptolPrimitivesForSAWCore.v b/saw-core-coq/coq/generated/CryptolToCoq/CryptolPrimitivesForSAWCore.v index 0acf5f5254..9e64903da5 100644 --- a/saw-core-coq/coq/generated/CryptolToCoq/CryptolPrimitivesForSAWCore.v +++ b/saw-core-coq/coq/generated/CryptolToCoq/CryptolPrimitivesForSAWCore.v @@ -23,7 +23,8 @@ Definition compose : forall (a : Type), forall (b : Type), forall (c : Type), (b fun (_1 : Type) (_2 : Type) (_3 : Type) (f : _2 -> _3) (g : _1 -> _2) (x : _1) => f (g x). Definition bvExp : forall (n : SAWCoreScaffolding.Nat), SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool -> SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool -> SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool := - fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => SAWCoreVectorsAsCoqVectors.foldr SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) n (fun (b : SAWCoreScaffolding.Bool) (a : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => if b then SAWCoreVectorsAsCoqVectors.bvMul n x (SAWCoreVectorsAsCoqVectors.bvMul n a a) else SAWCoreVectorsAsCoqVectors.bvMul n a a) (SAWCoreVectorsAsCoqVectors.bvNat n 1) (SAWCorePrelude.reverse n SAWCoreScaffolding.Bool y). + fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => SAWCoreVectorsAsCoqVectors.foldr SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) n (fun (b : SAWCoreScaffolding.Bool) (a : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => let var__0 := SAWCoreVectorsAsCoqVectors.bvMul n a a in + if b then SAWCoreVectorsAsCoqVectors.bvMul n x var__0 else var__0) (SAWCoreVectorsAsCoqVectors.bvNat n 1) (SAWCorePrelude.reverse n SAWCoreScaffolding.Bool y). Definition updFst : forall (a : Type), forall (b : Type), (a -> a) -> prod a b -> prod a b := fun (a : Type) (b : Type) (f : a -> a) (x : prod a b) => pair (f (SAWCoreScaffolding.fst x)) (SAWCoreScaffolding.snd x). @@ -121,28 +122,28 @@ Definition IntModNum : forall (num : Num), Type := fun (num : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer num. Definition Rational : Type := - unit. + unit : Type. Definition ecRatio : SAWCoreScaffolding.Integer -> SAWCoreScaffolding.Integer -> Rational := fun (x : SAWCoreScaffolding.Integer) (y : SAWCoreScaffolding.Integer) => tt. Definition eqRational : Rational -> Rational -> SAWCoreScaffolding.Bool := - fun (x : unit) (y : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: (==) Rational"%string. + fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: (==) Rational"%string. Definition ltRational : Rational -> Rational -> SAWCoreScaffolding.Bool := - fun (x : unit) (y : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: (<) Rational"%string. + fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: (<) Rational"%string. Definition addRational : Rational -> Rational -> Rational := - fun (x : unit) (y : unit) => SAWCoreScaffolding.error Rational "Unimplemented: (+) Rational"%string. + fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error Rational "Unimplemented: (+) Rational"%string. Definition subRational : Rational -> Rational -> Rational := - fun (x : unit) (y : unit) => SAWCoreScaffolding.error Rational "Unimplemented: (-) Rational"%string. + fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error Rational "Unimplemented: (-) Rational"%string. Definition mulRational : Rational -> Rational -> Rational := - fun (x : unit) (y : unit) => SAWCoreScaffolding.error Rational "Unimplemented: (*) Rational"%string. + fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error Rational "Unimplemented: (*) Rational"%string. Definition negRational : Rational -> Rational := - fun (x : unit) => SAWCoreScaffolding.error Rational "Unimplemented: negate Rational"%string. + fun (x : unit : Type) => SAWCoreScaffolding.error Rational "Unimplemented: negate Rational"%string. Definition integerToRational : SAWCoreScaffolding.Integer -> Rational := fun (x : SAWCoreScaffolding.Integer) => SAWCoreScaffolding.error Rational "Unimplemented: fromInteger Rational"%string. @@ -174,7 +175,9 @@ Definition eListSel : forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inha fun (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (n : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (num : Num) => seq num a -> SAWCoreScaffolding.Nat -> a) (fun (n1 : SAWCoreScaffolding.Nat) => SAWCorePrelude.sawAt n1 a) (SAWCorePrelude.streamGet a) n. Definition from : forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, forall (b : Type), forall {Inh_b : SAWCoreScaffolding.Inhabited b}, forall (m : Num), forall (n : Num), seq m a -> (a -> seq n b) -> seq (tcMul m n) (prod a b) := - fun (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (b : Type) {Inh_b : SAWCoreScaffolding.Inhabited b} (m : Num) (n : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (m1 : Num) => seq m1 a -> (a -> seq n b) -> seq (tcMul m1 n) (prod a b)) (fun (m1 : SAWCoreScaffolding.Nat) => CryptolPrimitivesForSAWCore.Num_rect (fun (n1 : Num) => SAWCoreVectorsAsCoqVectors.Vec m1 a -> (a -> seq n1 b) -> seq (tcMul (TCNum m1) n1) (prod a b)) (fun (n1 : SAWCoreScaffolding.Nat) (xs : SAWCoreVectorsAsCoqVectors.Vec m1 a) (k : a -> SAWCoreVectorsAsCoqVectors.Vec n1 b) => SAWCorePrelude.join m1 n1 (prod a b) (SAWCorePrelude.map a (SAWCoreVectorsAsCoqVectors.Vec n1 (prod a b)) (fun (x : a) => SAWCorePrelude.map b (prod a b) (fun (y : b) => pair x y) n1 (k x)) m1 xs)) (SAWCorePrelude.natCase (fun (m' : SAWCoreScaffolding.Nat) => SAWCoreVectorsAsCoqVectors.Vec m' a -> (a -> SAWCorePrelude.Stream b) -> seq (SAWCorePrelude.if0Nat Num m' (TCNum 0) TCInf) (prod a b)) (fun (xs : SAWCoreVectorsAsCoqVectors.Vec 0 a) (k : a -> SAWCorePrelude.Stream b) => SAWCoreVectorsAsCoqVectors.EmptyVec (prod a b)) (fun (m' : SAWCoreScaffolding.Nat) (xs : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ m') a) (k : a -> SAWCorePrelude.Stream b) => (fun (x : a) => SAWCorePrelude.streamMap b (prod a b) (fun (y : b) => pair x y) (k x)) (SAWCorePrelude.sawAt (SAWCoreScaffolding.Succ m') a xs 0)) m1) n) (CryptolPrimitivesForSAWCore.Num_rect (fun (n1 : Num) => SAWCorePrelude.Stream a -> (a -> seq n1 b) -> seq (tcMul TCInf n1) (prod a b)) (fun (n1 : SAWCoreScaffolding.Nat) => SAWCorePrelude.natCase (fun (n' : SAWCoreScaffolding.Nat) => SAWCorePrelude.Stream a -> (a -> SAWCoreVectorsAsCoqVectors.Vec n' b) -> seq (SAWCorePrelude.if0Nat Num n' (TCNum 0) TCInf) (prod a b)) (fun (xs : SAWCorePrelude.Stream a) (k : a -> SAWCoreVectorsAsCoqVectors.Vec 0 b) => SAWCoreVectorsAsCoqVectors.EmptyVec (prod a b)) (fun (n' : SAWCoreScaffolding.Nat) (xs : SAWCorePrelude.Stream a) (k : a -> SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n') b) => SAWCorePrelude.streamJoin (prod a b) n' (SAWCorePrelude.streamMap a (SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n') (prod a b)) (fun (x : a) => SAWCorePrelude.map b (prod a b) (fun (y : b) => pair x y) (SAWCoreScaffolding.Succ n') (k x)) xs)) n1) (fun (xs : SAWCorePrelude.Stream a) (k : a -> SAWCorePrelude.Stream b) => (fun (x : a) => SAWCorePrelude.streamMap b (prod a b) (fun (y : b) => pair x y) (k x)) (SAWCorePrelude.streamGet a xs 0)) n) m. + fun (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (b : Type) {Inh_b : SAWCoreScaffolding.Inhabited b} (m : Num) (n : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (m1 : Num) => seq m1 a -> (a -> seq n b) -> seq (tcMul m1 n) (prod a b)) (fun (m1 : SAWCoreScaffolding.Nat) => CryptolPrimitivesForSAWCore.Num_rect (fun (n1 : Num) => SAWCoreVectorsAsCoqVectors.Vec m1 a -> (a -> seq n1 b) -> seq (tcMul (TCNum m1) n1) (prod a b)) (fun (n1 : SAWCoreScaffolding.Nat) (xs : SAWCoreVectorsAsCoqVectors.Vec m1 a) (k : a -> SAWCoreVectorsAsCoqVectors.Vec n1 b) => let var__0 := prod a b in + SAWCorePrelude.join m1 n1 var__0 (SAWCorePrelude.map a (SAWCoreVectorsAsCoqVectors.Vec n1 var__0) (fun (x : a) => SAWCorePrelude.map b (prod a b) (fun (y : b) => pair x y) n1 (k x)) m1 xs)) (SAWCorePrelude.natCase (fun (m' : SAWCoreScaffolding.Nat) => SAWCoreVectorsAsCoqVectors.Vec m' a -> (a -> SAWCorePrelude.Stream b) -> seq (SAWCorePrelude.if0Nat Num m' (TCNum 0) TCInf) (prod a b)) (fun (xs : SAWCoreVectorsAsCoqVectors.Vec 0 a) (k : a -> SAWCorePrelude.Stream b) => SAWCoreVectorsAsCoqVectors.EmptyVec (prod a b)) (fun (m' : SAWCoreScaffolding.Nat) (xs : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ m') a) (k : a -> SAWCorePrelude.Stream b) => (fun (x : a) => SAWCorePrelude.streamMap b (prod a b) (fun (y : b) => pair x y) (k x)) (SAWCorePrelude.sawAt (SAWCoreScaffolding.Succ m') a xs 0)) m1) n) (CryptolPrimitivesForSAWCore.Num_rect (fun (n1 : Num) => SAWCorePrelude.Stream a -> (a -> seq n1 b) -> seq (tcMul TCInf n1) (prod a b)) (fun (n1 : SAWCoreScaffolding.Nat) => SAWCorePrelude.natCase (fun (n' : SAWCoreScaffolding.Nat) => SAWCorePrelude.Stream a -> (a -> SAWCoreVectorsAsCoqVectors.Vec n' b) -> seq (SAWCorePrelude.if0Nat Num n' (TCNum 0) TCInf) (prod a b)) (fun (xs : SAWCorePrelude.Stream a) (k : a -> SAWCoreVectorsAsCoqVectors.Vec 0 b) => SAWCoreVectorsAsCoqVectors.EmptyVec (prod a b)) (fun (n' : SAWCoreScaffolding.Nat) (xs : SAWCorePrelude.Stream a) (k : a -> SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n') b) => let var__0 := prod a b in + SAWCorePrelude.streamJoin var__0 n' (SAWCorePrelude.streamMap a (SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n') var__0) (fun (x : a) => SAWCorePrelude.map b (prod a b) (fun (y : b) => pair x y) (SAWCoreScaffolding.Succ n') (k x)) xs)) n1) (fun (xs : SAWCorePrelude.Stream a) (k : a -> SAWCorePrelude.Stream b) => (fun (x : a) => SAWCorePrelude.streamMap b (prod a b) (fun (y : b) => pair x y) (k x)) (SAWCorePrelude.streamGet a xs 0)) n) m. Definition mlet : forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, forall (b : Type), forall {Inh_b : SAWCoreScaffolding.Inhabited b}, forall (n : Num), a -> (a -> seq n b) -> seq n (prod a b) := fun (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (b : Type) {Inh_b : SAWCoreScaffolding.Inhabited b} (n : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (n1 : Num) => a -> (a -> seq n1 b) -> seq n1 (prod a b)) (fun (n1 : SAWCoreScaffolding.Nat) (x : a) (f : a -> SAWCoreVectorsAsCoqVectors.Vec n1 b) => SAWCorePrelude.map b (prod a b) (fun (y : b) => pair x y) n1 (f x)) (fun (x : a) (f : a -> SAWCorePrelude.Stream b) => SAWCorePrelude.streamMap b (prod a b) (fun (y : b) => pair x y) (f x)) n. @@ -185,11 +188,11 @@ Definition seqZip : forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabi Definition seqBinary : forall (n : Num), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, (a -> a -> a) -> seq n a -> seq n a -> seq n a := fun (num : Num) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (f : a -> a -> a) => CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => seq n a -> seq n a -> seq n a) (fun (n : SAWCoreScaffolding.Nat) => SAWCorePrelude.zipWith a a a f n) (SAWCorePrelude.streamMap2 a a a f) num. -Definition unitUnary : unit -> unit := - fun (_1 : unit) => tt. +Definition unitUnary : (unit : Type) -> unit : Type := + fun (_1 : unit : Type) => tt. -Definition unitBinary : unit -> unit -> unit := - fun (_1 : unit) (_2 : unit) => tt. +Definition unitBinary : (unit : Type) -> (unit : Type) -> unit : Type := + fun (_1 : unit : Type) (_2 : unit : Type) => tt. Definition pairUnary : forall (a : Type), forall (b : Type), (a -> a) -> (b -> b) -> prod a b -> prod a b := fun (a : Type) (b : Type) (f : a -> a) (g : b -> b) (xy : prod a b) => pair (f (fst xy)) (g (snd xy)). @@ -213,7 +216,7 @@ Definition integerCmp : SAWCoreScaffolding.Integer -> SAWCoreScaffolding.Integer fun (x : SAWCoreScaffolding.Integer) (y : SAWCoreScaffolding.Integer) (k : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or (SAWCoreScaffolding.intLt x y) (SAWCoreScaffolding.and (SAWCoreScaffolding.intEq x y) k). Definition rationalCmp : Rational -> Rational -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool := - fun (x : unit) (y : unit) (k : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or (ltRational x y) (SAWCoreScaffolding.and (eqRational x y) k). + fun (x : unit : Type) (y : unit : Type) (k : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or (ltRational x y) (SAWCoreScaffolding.and (eqRational x y) k). Definition bvCmp : forall (n : SAWCoreScaffolding.Nat), SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool -> SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool := fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (k : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or (SAWCoreVectorsAsCoqVectors.bvult n x y) (SAWCoreScaffolding.and (SAWCorePrelude.bvEq n x y) k). @@ -222,10 +225,11 @@ Definition bvSCmp : forall (n : SAWCoreScaffolding.Nat), SAWCoreVectorsAsCoqVect fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (k : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or (SAWCoreVectorsAsCoqVectors.bvslt n x y) (SAWCoreScaffolding.and (SAWCorePrelude.bvEq n x y) k). Definition vecCmp : forall (n : SAWCoreScaffolding.Nat), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, (a -> a -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) -> SAWCoreVectorsAsCoqVectors.Vec n a -> SAWCoreVectorsAsCoqVectors.Vec n a -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool := - fun (n : SAWCoreScaffolding.Nat) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (f : a -> a -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) (xs : SAWCoreVectorsAsCoqVectors.Vec n a) (ys : SAWCoreVectorsAsCoqVectors.Vec n a) (k : SAWCoreScaffolding.Bool) => SAWCoreVectorsAsCoqVectors.foldr (SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) SAWCoreScaffolding.Bool n (fun (f1 : SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) => f1) k (SAWCorePrelude.zipWith a a (SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) f n xs ys). + fun (n : SAWCoreScaffolding.Nat) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (f : a -> a -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) (xs : SAWCoreVectorsAsCoqVectors.Vec n a) (ys : SAWCoreVectorsAsCoqVectors.Vec n a) (k : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool in + SAWCoreVectorsAsCoqVectors.foldr var__0 SAWCoreScaffolding.Bool n (fun (f1 : var__0) => f1) k (SAWCorePrelude.zipWith a a var__0 f n xs ys). -Definition unitCmp : unit -> unit -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool := - fun (_1 : unit) (_2 : unit) (_3 : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.false. +Definition unitCmp : (unit : Type) -> (unit : Type) -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool := + fun (_1 : unit : Type) (_2 : unit : Type) (_3 : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.false. Definition pairCmp : forall (a : Type), forall (b : Type), (a -> a -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) -> (b -> b -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) -> prod a b -> prod a b -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool := fun (a : Type) (b : Type) (f : a -> a -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) (g : b -> b -> SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool) (x12 : prod a b) (y12 : prod a b) (k : SAWCoreScaffolding.Bool) => f (fst x12) (fst y12) (g (snd x12) (snd y12) k). @@ -260,8 +264,8 @@ Definition PEqWord : forall (n : SAWCoreScaffolding.Nat), PEq (SAWCoreVectorsAsC Definition PEqSeqBool : forall (n : Num), PEq (seq n SAWCoreScaffolding.Bool) := fun (n : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (n1 : Num) => PEq (seq n1 SAWCoreScaffolding.Bool)) (fun (n1 : SAWCoreScaffolding.Nat) => PEqWord n1) (SAWCoreScaffolding.error (PEq (SAWCorePrelude.Stream SAWCoreScaffolding.Bool)) "invalid Eq instance"%string) n. -Definition PEqUnit : PEq unit := - RecordCons "eq" (fun (x : unit) (y : unit) => SAWCoreScaffolding.true) RecordNil. +Definition PEqUnit : PEq (unit : Type) := + RecordCons "eq" (fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.true) RecordNil. Definition PEqPair : forall (a : Type), forall (b : Type), PEq a -> PEq b -> PEq (prod a b) := fun (a : Type) (b : Type) (pa : RecordTypeCons "eq" (a -> a -> SAWCoreScaffolding.Bool) RecordTypeNil) (pb : RecordTypeCons "eq" (b -> b -> SAWCoreScaffolding.Bool) RecordTypeNil) => RecordCons "eq" (SAWCorePrelude.pairEq a b (RecordProj pa "eq") (RecordProj pb "eq")) RecordNil. @@ -290,7 +294,7 @@ Definition PCmpWord : forall (n : SAWCoreScaffolding.Nat), PCmp (SAWCoreVectorsA Definition PCmpSeqBool : forall (n : Num), PCmp (seq n SAWCoreScaffolding.Bool) := fun (n : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (n1 : Num) => PCmp (seq n1 SAWCoreScaffolding.Bool)) (fun (n1 : SAWCoreScaffolding.Nat) => PCmpWord n1) (SAWCoreScaffolding.error (PCmp (SAWCorePrelude.Stream SAWCoreScaffolding.Bool)) "invalid Cmp instance"%string) n. -Definition PCmpUnit : PCmp unit := +Definition PCmpUnit : PCmp (unit : Type) := RecordCons "cmp" unitCmp (RecordCons "cmpEq" PEqUnit RecordNil). Definition PCmpPair : forall (a : Type), forall (b : Type), PCmp a -> PCmp b -> PCmp (prod a b) := @@ -311,7 +315,7 @@ Definition PSignedCmpWord : forall (n : SAWCoreScaffolding.Nat), PSignedCmp (SAW Definition PSignedCmpSeqBool : forall (n : Num), PSignedCmp (seq n SAWCoreScaffolding.Bool) := fun (n : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (n1 : Num) => PSignedCmp (seq n1 SAWCoreScaffolding.Bool)) (fun (n1 : SAWCoreScaffolding.Nat) => PSignedCmpWord n1) (SAWCoreScaffolding.error (PSignedCmp (SAWCorePrelude.Stream SAWCoreScaffolding.Bool)) "invalid SignedCmp instance"%string) n. -Definition PSignedCmpUnit : PSignedCmp unit := +Definition PSignedCmpUnit : PSignedCmp (unit : Type) := RecordCons "scmp" unitCmp (RecordCons "signedCmpEq" PEqUnit RecordNil). Definition PSignedCmpPair : forall (a : Type), forall (b : Type), PSignedCmp a -> PSignedCmp b -> PSignedCmp (prod a b) := @@ -345,7 +349,8 @@ Definition PZeroFun : forall (a : Type), forall (b : Type), PZero b -> PZero (a fun (a : Type) (b : Type) (pb : b) (_1 : a) => pb. Definition PLogic : Type -> Type := - fun (a : Type) => RecordTypeCons "and" (a -> a -> a) (RecordTypeCons "logicZero" (PZero a) (RecordTypeCons "not" (a -> a) (RecordTypeCons "or" (a -> a -> a) (RecordTypeCons "xor" (a -> a -> a) RecordTypeNil)))). + fun (a : Type) => let var__0 := a -> a -> a in + RecordTypeCons "and" var__0 (RecordTypeCons "logicZero" (PZero a) (RecordTypeCons "not" (a -> a) (RecordTypeCons "or" var__0 (RecordTypeCons "xor" var__0 RecordTypeNil)))). Definition PLogicBit : PLogic SAWCoreScaffolding.Bool := RecordCons "and" SAWCoreScaffolding.and (RecordCons "logicZero" PZeroBit (RecordCons "not" SAWCoreScaffolding.not (RecordCons "or" SAWCoreScaffolding.or (RecordCons "xor" SAWCoreScaffolding.xor RecordNil)))). @@ -368,14 +373,15 @@ Definition PLogicSeqBool : forall (n : Num), PLogic (seq n SAWCoreScaffolding.Bo Definition PLogicFun : forall (a : Type), forall (b : Type), PLogic b -> PLogic (a -> b) := fun (a : Type) (b : Type) (pb : RecordTypeCons "and" (b -> b -> b) (RecordTypeCons "logicZero" b (RecordTypeCons "not" (b -> b) (RecordTypeCons "or" (b -> b -> b) (RecordTypeCons "xor" (b -> b -> b) RecordTypeNil))))) => RecordCons "and" (funBinary a b (RecordProj pb "and")) (RecordCons "logicZero" (PZeroFun a b (RecordProj pb "logicZero")) (RecordCons "not" (compose a b b (RecordProj pb "not")) (RecordCons "or" (funBinary a b (RecordProj pb "or")) (RecordCons "xor" (funBinary a b (RecordProj pb "xor")) RecordNil)))). -Definition PLogicUnit : PLogic unit := +Definition PLogicUnit : PLogic (unit : Type) := RecordCons "and" unitBinary (RecordCons "logicZero" tt (RecordCons "not" unitUnary (RecordCons "or" unitBinary (RecordCons "xor" unitBinary RecordNil)))). Definition PLogicPair : forall (a : Type), forall (b : Type), PLogic a -> PLogic b -> PLogic (prod a b) := fun (a : Type) (b : Type) (pa : RecordTypeCons "and" (a -> a -> a) (RecordTypeCons "logicZero" a (RecordTypeCons "not" (a -> a) (RecordTypeCons "or" (a -> a -> a) (RecordTypeCons "xor" (a -> a -> a) RecordTypeNil))))) (pb : RecordTypeCons "and" (b -> b -> b) (RecordTypeCons "logicZero" b (RecordTypeCons "not" (b -> b) (RecordTypeCons "or" (b -> b -> b) (RecordTypeCons "xor" (b -> b -> b) RecordTypeNil))))) => RecordCons "and" (pairBinary a b (RecordProj pa "and") (RecordProj pb "and")) (RecordCons "logicZero" (pair (RecordProj pa "logicZero") (RecordProj pb "logicZero")) (RecordCons "not" (pairUnary a b (RecordProj pa "not") (RecordProj pb "not")) (RecordCons "or" (pairBinary a b (RecordProj pa "or") (RecordProj pb "or")) (RecordCons "xor" (pairBinary a b (RecordProj pa "xor") (RecordProj pb "xor")) RecordNil)))). Definition PRing : Type -> Type := - fun (a : Type) => RecordTypeCons "add" (a -> a -> a) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> a) (RecordTypeCons "mul" (a -> a -> a) (RecordTypeCons "neg" (a -> a) (RecordTypeCons "ringZero" (PZero a) (RecordTypeCons "sub" (a -> a -> a) RecordTypeNil))))). + fun (a : Type) => let var__0 := a -> a -> a in + RecordTypeCons "add" var__0 (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> a) (RecordTypeCons "mul" var__0 (RecordTypeCons "neg" (a -> a) (RecordTypeCons "ringZero" (PZero a) (RecordTypeCons "sub" var__0 RecordTypeNil))))). Definition PRingInteger : PRing SAWCoreScaffolding.Integer := RecordCons "add" SAWCoreScaffolding.intAdd (RecordCons "int" (fun (i : SAWCoreScaffolding.Integer) => i) (RecordCons "mul" SAWCoreScaffolding.intMul (RecordCons "neg" SAWCoreScaffolding.intNeg (RecordCons "ringZero" PZeroInteger (RecordCons "sub" SAWCoreScaffolding.intSub RecordNil))))). @@ -407,14 +413,15 @@ Definition PRingSeqBool : forall (n : Num), PRing (seq n SAWCoreScaffolding.Bool Definition PRingFun : forall (a : Type), forall (b : Type), PRing b -> PRing (a -> b) := fun (a : Type) (b : Type) (pb : RecordTypeCons "add" (b -> b -> b) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> b) (RecordTypeCons "mul" (b -> b -> b) (RecordTypeCons "neg" (b -> b) (RecordTypeCons "ringZero" b (RecordTypeCons "sub" (b -> b -> b) RecordTypeNil)))))) => RecordCons "add" (funBinary a b (RecordProj pb "add")) (RecordCons "int" (fun (i : SAWCoreScaffolding.Integer) (_1 : a) => RecordProj pb "int" i) (RecordCons "mul" (funBinary a b (RecordProj pb "mul")) (RecordCons "neg" (compose a b b (RecordProj pb "neg")) (RecordCons "ringZero" (PZeroFun a b (RecordProj pb "ringZero")) (RecordCons "sub" (funBinary a b (RecordProj pb "sub")) RecordNil))))). -Definition PRingUnit : PRing unit := +Definition PRingUnit : PRing (unit : Type) := RecordCons "add" unitBinary (RecordCons "int" (fun (i : SAWCoreScaffolding.Integer) => tt) (RecordCons "mul" unitBinary (RecordCons "neg" unitUnary (RecordCons "ringZero" tt (RecordCons "sub" unitBinary RecordNil))))). Definition PRingPair : forall (a : Type), forall (b : Type), PRing a -> PRing b -> PRing (prod a b) := fun (a : Type) (b : Type) (pa : RecordTypeCons "add" (a -> a -> a) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> a) (RecordTypeCons "mul" (a -> a -> a) (RecordTypeCons "neg" (a -> a) (RecordTypeCons "ringZero" a (RecordTypeCons "sub" (a -> a -> a) RecordTypeNil)))))) (pb : RecordTypeCons "add" (b -> b -> b) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> b) (RecordTypeCons "mul" (b -> b -> b) (RecordTypeCons "neg" (b -> b) (RecordTypeCons "ringZero" b (RecordTypeCons "sub" (b -> b -> b) RecordTypeNil)))))) => RecordCons "add" (pairBinary a b (RecordProj pa "add") (RecordProj pb "add")) (RecordCons "int" (fun (i : SAWCoreScaffolding.Integer) => pair (RecordProj pa "int" i) (RecordProj pb "int" i)) (RecordCons "mul" (pairBinary a b (RecordProj pa "mul") (RecordProj pb "mul")) (RecordCons "neg" (pairUnary a b (RecordProj pa "neg") (RecordProj pb "neg")) (RecordCons "ringZero" (pair (RecordProj pa "ringZero") (RecordProj pb "ringZero")) (RecordCons "sub" (pairBinary a b (RecordProj pa "sub") (RecordProj pb "sub")) RecordNil))))). Definition PIntegral : Type -> Type := - fun (a : Type) => RecordTypeCons "div" (a -> a -> a) (RecordTypeCons "integralRing" (PRing a) (RecordTypeCons "mod" (a -> a -> a) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> a -> r) (RecordTypeCons "toInt" (a -> SAWCoreScaffolding.Integer) RecordTypeNil)))). + fun (a : Type) => let var__0 := a -> a -> a in + RecordTypeCons "div" var__0 (RecordTypeCons "integralRing" (PRing a) (RecordTypeCons "mod" var__0 (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> a -> r) (RecordTypeCons "toInt" (a -> SAWCoreScaffolding.Integer) RecordTypeNil)))). Definition PIntegralInteger : PIntegral SAWCoreScaffolding.Integer := RecordCons "div" SAWCoreScaffolding.intDiv (RecordCons "integralRing" PRingInteger (RecordCons "mod" SAWCoreScaffolding.intMod (RecordCons "posNegCases" (fun (r : Type) (pos : SAWCoreScaffolding.Nat -> r) (neg : SAWCoreScaffolding.Nat -> r) (i : SAWCoreScaffolding.Integer) => if SAWCoreScaffolding.intLe 0%Z i then pos (SAWCoreScaffolding.intToNat i) else neg (SAWCoreScaffolding.intToNat (SAWCoreScaffolding.intNeg i))) (RecordCons "toInt" (fun (i : SAWCoreScaffolding.Integer) => i) RecordNil)))). @@ -429,19 +436,21 @@ Definition PField : Type -> Type := fun (a : Type) => RecordTypeCons "fieldDiv" (a -> a -> a) (RecordTypeCons "fieldRing" (PRing a) (RecordTypeCons "recip" (a -> a) RecordTypeNil)). Definition PFieldRational : PField Rational := - RecordCons "fieldDiv" (fun (x : unit) (y : unit) => SAWCoreScaffolding.error Rational "Unimplemented: (/.) Rational"%string) (RecordCons "fieldRing" PRingRational (RecordCons "recip" (fun (x : unit) => SAWCoreScaffolding.error Rational "Unimplemented: recip Rational"%string) RecordNil)). + RecordCons "fieldDiv" (fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error Rational "Unimplemented: (/.) Rational"%string) (RecordCons "fieldRing" PRingRational (RecordCons "recip" (fun (x : unit : Type) => SAWCoreScaffolding.error Rational "Unimplemented: recip Rational"%string) RecordNil)). Definition PFieldIntMod : forall (n : SAWCoreScaffolding.Nat), PField (SAWCoreScaffolding.IntMod n) := - fun (n : SAWCoreScaffolding.Nat) => RecordCons "fieldDiv" (fun (x : SAWCoreScaffolding.IntMod n) (y : SAWCoreScaffolding.IntMod n) => SAWCoreScaffolding.error (SAWCoreScaffolding.IntMod n) "Unimplemented: (/.) IntMod"%string) (RecordCons "fieldRing" (PRingIntMod n) (RecordCons "recip" (fun (x : SAWCoreScaffolding.IntMod n) => SAWCoreScaffolding.error (SAWCoreScaffolding.IntMod n) "Unimplemented: recip IntMod"%string) RecordNil)). + fun (n : SAWCoreScaffolding.Nat) => let var__0 := SAWCoreScaffolding.IntMod n in + RecordCons "fieldDiv" (fun (x : var__0) (y : SAWCoreScaffolding.IntMod n) => SAWCoreScaffolding.error (SAWCoreScaffolding.IntMod n) "Unimplemented: (/.) IntMod"%string) (RecordCons "fieldRing" (PRingIntMod n) (RecordCons "recip" (fun (x : var__0) => SAWCoreScaffolding.error (SAWCoreScaffolding.IntMod n) "Unimplemented: recip IntMod"%string) RecordNil)). Definition PFieldIntModNum : forall (n : Num), PField (IntModNum n) := fun (num : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => PField (IntModNum n)) PFieldIntMod (SAWCoreScaffolding.error (PField (IntModNum TCInf)) "PFieldIntModNum: no instance for inf"%string) num. Definition PRound : Type -> Type := - fun (a : Type) => RecordTypeCons "ceiling" (a -> SAWCoreScaffolding.Integer) (RecordTypeCons "floor" (a -> SAWCoreScaffolding.Integer) (RecordTypeCons "roundAway" (a -> SAWCoreScaffolding.Integer) (RecordTypeCons "roundCmp" (PCmp a) (RecordTypeCons "roundField" (PField a) (RecordTypeCons "roundToEven" (a -> SAWCoreScaffolding.Integer) (RecordTypeCons "trunc" (a -> SAWCoreScaffolding.Integer) RecordTypeNil)))))). + fun (a : Type) => let var__0 := a -> SAWCoreScaffolding.Integer in + RecordTypeCons "ceiling" var__0 (RecordTypeCons "floor" var__0 (RecordTypeCons "roundAway" var__0 (RecordTypeCons "roundCmp" (PCmp a) (RecordTypeCons "roundField" (PField a) (RecordTypeCons "roundToEven" var__0 (RecordTypeCons "trunc" var__0 RecordTypeNil)))))). Definition PRoundRational : PRound Rational := - RecordCons "ceiling" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: ceiling Rational"%string) (RecordCons "floor" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: floor Rational"%string) (RecordCons "roundAway" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: roundAway Rational"%string) (RecordCons "roundCmp" PCmpRational (RecordCons "roundField" PFieldRational (RecordCons "roundToEven" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: roundToEven Rational"%string) (RecordCons "trunc" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: trunc Rational"%string) RecordNil)))))). + RecordCons "ceiling" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: ceiling Rational"%string) (RecordCons "floor" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: floor Rational"%string) (RecordCons "roundAway" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: roundAway Rational"%string) (RecordCons "roundCmp" PCmpRational (RecordCons "roundField" PFieldRational (RecordCons "roundToEven" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: roundToEven Rational"%string) (RecordCons "trunc" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: trunc Rational"%string) RecordNil)))))). Definition PLiteral : forall (a : Type), Type := fun (a : Type) => SAWCoreScaffolding.Nat -> a. @@ -573,13 +582,16 @@ Definition ecFraction : forall (a : Type), forall {Inh_a : SAWCoreScaffolding.In fun (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} => SAWCoreScaffolding.error a "Unimplemented: fraction"%string. Definition ecShiftL : forall (m : Num), forall (ix : Type), forall (a : Type), PIntegral ix -> PZero a -> seq m a -> ix -> seq m a := - fun (m : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (m1 : Num) => forall (ix : Type), forall (a : Type), PIntegral ix -> PZero a -> seq m1 a -> ix -> seq m1 a) (fun (m1 : SAWCoreScaffolding.Nat) (ix : Type) (a : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (pz : a) (xs : SAWCoreVectorsAsCoqVectors.Vec m1 a) => RecordProj pix "posNegCases" (SAWCoreVectorsAsCoqVectors.Vec m1 a) (SAWCoreVectorsAsCoqVectors.shiftL m1 a (ecZero a pz) xs) (SAWCoreVectorsAsCoqVectors.shiftR m1 a (ecZero a pz) xs)) (fun (ix : Type) (a : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (pz : a) (xs : SAWCorePrelude.Stream a) => RecordProj pix "posNegCases" (SAWCorePrelude.Stream a) (SAWCorePrelude.streamShiftL a xs) (SAWCorePrelude.streamShiftR a pz xs)) m. + fun (m : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (m1 : Num) => forall (ix : Type), forall (a : Type), PIntegral ix -> PZero a -> seq m1 a -> ix -> seq m1 a) (fun (m1 : SAWCoreScaffolding.Nat) (ix : Type) (a : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (pz : a) (xs : SAWCoreVectorsAsCoqVectors.Vec m1 a) => let var__0 := ecZero a pz in + RecordProj pix "posNegCases" (SAWCoreVectorsAsCoqVectors.Vec m1 a) (SAWCoreVectorsAsCoqVectors.shiftL m1 a var__0 xs) (SAWCoreVectorsAsCoqVectors.shiftR m1 a var__0 xs)) (fun (ix : Type) (a : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (pz : a) (xs : SAWCorePrelude.Stream a) => RecordProj pix "posNegCases" (SAWCorePrelude.Stream a) (SAWCorePrelude.streamShiftL a xs) (SAWCorePrelude.streamShiftR a pz xs)) m. Definition ecShiftR : forall (m : Num), forall (ix : Type), forall (a : Type), PIntegral ix -> PZero a -> seq m a -> ix -> seq m a := - fun (m : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (m1 : Num) => forall (ix : Type), forall (a : Type), PIntegral ix -> PZero a -> seq m1 a -> ix -> seq m1 a) (fun (m1 : SAWCoreScaffolding.Nat) (ix : Type) (a : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (pz : a) (xs : SAWCoreVectorsAsCoqVectors.Vec m1 a) => RecordProj pix "posNegCases" (SAWCoreVectorsAsCoqVectors.Vec m1 a) (SAWCoreVectorsAsCoqVectors.shiftR m1 a (ecZero a pz) xs) (SAWCoreVectorsAsCoqVectors.shiftL m1 a (ecZero a pz) xs)) (fun (ix : Type) (a : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (pz : a) (xs : SAWCorePrelude.Stream a) => RecordProj pix "posNegCases" (SAWCorePrelude.Stream a) (SAWCorePrelude.streamShiftR a pz xs) (SAWCorePrelude.streamShiftL a xs)) m. + fun (m : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (m1 : Num) => forall (ix : Type), forall (a : Type), PIntegral ix -> PZero a -> seq m1 a -> ix -> seq m1 a) (fun (m1 : SAWCoreScaffolding.Nat) (ix : Type) (a : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (pz : a) (xs : SAWCoreVectorsAsCoqVectors.Vec m1 a) => let var__0 := ecZero a pz in + RecordProj pix "posNegCases" (SAWCoreVectorsAsCoqVectors.Vec m1 a) (SAWCoreVectorsAsCoqVectors.shiftR m1 a var__0 xs) (SAWCoreVectorsAsCoqVectors.shiftL m1 a var__0 xs)) (fun (ix : Type) (a : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (pz : a) (xs : SAWCorePrelude.Stream a) => RecordProj pix "posNegCases" (SAWCorePrelude.Stream a) (SAWCorePrelude.streamShiftR a pz xs) (SAWCorePrelude.streamShiftL a xs)) m. Definition ecSShiftR : forall (n : Num), forall (ix : Type), PIntegral ix -> seq n SAWCoreScaffolding.Bool -> ix -> seq n SAWCoreScaffolding.Bool := - finNumRec (fun (n : Num) => forall (ix : Type), PIntegral ix -> seq n SAWCoreScaffolding.Bool -> ix -> seq n SAWCoreScaffolding.Bool) (fun (n : SAWCoreScaffolding.Nat) (ix : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) => SAWCorePrelude.natCase (fun (w : SAWCoreScaffolding.Nat) => SAWCoreVectorsAsCoqVectors.Vec w SAWCoreScaffolding.Bool -> ix -> SAWCoreVectorsAsCoqVectors.Vec w SAWCoreScaffolding.Bool) (fun (xs : SAWCoreVectorsAsCoqVectors.Vec 0 SAWCoreScaffolding.Bool) (_1 : ix) => xs) (fun (w : SAWCoreScaffolding.Nat) (xs : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ w) SAWCoreScaffolding.Bool) => RecordProj pix "posNegCases" (SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ w) SAWCoreScaffolding.Bool) (SAWCoreVectorsAsCoqVectors.bvSShr w xs) (SAWCoreVectorsAsCoqVectors.bvShl (SAWCoreScaffolding.Succ w) xs)) n). + finNumRec (fun (n : Num) => forall (ix : Type), PIntegral ix -> seq n SAWCoreScaffolding.Bool -> ix -> seq n SAWCoreScaffolding.Bool) (fun (n : SAWCoreScaffolding.Nat) (ix : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) => SAWCorePrelude.natCase (fun (w : SAWCoreScaffolding.Nat) => SAWCoreVectorsAsCoqVectors.Vec w SAWCoreScaffolding.Bool -> ix -> SAWCoreVectorsAsCoqVectors.Vec w SAWCoreScaffolding.Bool) (fun (xs : SAWCoreVectorsAsCoqVectors.Vec 0 SAWCoreScaffolding.Bool) (_1 : ix) => xs) (fun (w : SAWCoreScaffolding.Nat) (xs : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ w) SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.Succ w in + RecordProj pix "posNegCases" (SAWCoreVectorsAsCoqVectors.Vec var__0 SAWCoreScaffolding.Bool) (SAWCoreVectorsAsCoqVectors.bvSShr w xs) (SAWCoreVectorsAsCoqVectors.bvShl var__0 xs)) n). Definition ecRotL : forall (m : Num), forall (ix : Type), forall (a : Type), PIntegral ix -> seq m a -> ix -> seq m a := finNumRec (fun (m : Num) => forall (ix : Type), forall (a : Type), PIntegral ix -> seq m a -> ix -> seq m a) (fun (m : SAWCoreScaffolding.Nat) (ix : Type) (a : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (xs : SAWCoreVectorsAsCoqVectors.Vec m a) => RecordProj pix "posNegCases" (SAWCoreVectorsAsCoqVectors.Vec m a) (SAWCoreVectorsAsCoqVectors.rotateL m a xs) (SAWCoreVectorsAsCoqVectors.rotateR m a xs)). @@ -621,7 +633,8 @@ Definition ecFromToLessThan : forall (first : Num), forall (bound : Num), forall fun (first : Num) (bound : Num) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} => finNumRec (fun (first1 : Num) => PLiteralLessThan a -> seq (tcSub bound first1) a) (fun (first1 : SAWCoreScaffolding.Nat) => CryptolPrimitivesForSAWCore.Num_rect (fun (bound1 : Num) => PLiteralLessThan a -> seq (tcSub bound1 (TCNum first1)) a) (fun (bound1 : SAWCoreScaffolding.Nat) (pa : SAWCoreScaffolding.Nat -> a) => SAWCoreVectorsAsCoqVectors.gen (SAWCorePrelude.subNat bound1 first1) a (fun (i : SAWCoreScaffolding.Nat) => pa (SAWCorePrelude.addNat i first1))) (fun (pa : SAWCoreScaffolding.Nat -> a) => SAWCorePrelude.MkStream a (fun (i : SAWCoreScaffolding.Nat) => pa (SAWCorePrelude.addNat i first1))) bound) first. Definition ecFromThenTo : forall (first : Num), forall (next : Num), forall (last : Num), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, forall (len : Num), PLiteral a -> PLiteral a -> PLiteral a -> seq len a := - fun (first : Num) (next : Num) (_1 : Num) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} => finNumRec (fun (len : Num) => PLiteral a -> PLiteral a -> PLiteral a -> seq len a) (fun (len : SAWCoreScaffolding.Nat) (pa : SAWCoreScaffolding.Nat -> a) (_2 : SAWCoreScaffolding.Nat -> a) (_3 : SAWCoreScaffolding.Nat -> a) => SAWCoreVectorsAsCoqVectors.gen len a (fun (i : SAWCoreScaffolding.Nat) => pa (SAWCorePrelude.subNat (SAWCorePrelude.addNat (getFinNat first) (SAWCorePrelude.mulNat i (getFinNat next))) (SAWCorePrelude.mulNat i (getFinNat first))))). + fun (first : Num) (next : Num) (_1 : Num) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} => finNumRec (fun (len : Num) => PLiteral a -> PLiteral a -> PLiteral a -> seq len a) (fun (len : SAWCoreScaffolding.Nat) (pa : SAWCoreScaffolding.Nat -> a) (_2 : SAWCoreScaffolding.Nat -> a) (_3 : SAWCoreScaffolding.Nat -> a) => SAWCoreVectorsAsCoqVectors.gen len a (fun (i : SAWCoreScaffolding.Nat) => let var__0 := getFinNat first in + pa (SAWCorePrelude.subNat (SAWCorePrelude.addNat var__0 (SAWCorePrelude.mulNat i (getFinNat next))) (SAWCorePrelude.mulNat i var__0)))). Definition ecFromToBy : forall (first : Num), forall (last : Num), forall (stride : Num), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, PLiteral a -> seq (tcAdd (TCNum 1) (tcDiv (tcSub last first) stride)) a := finNumRec (fun (first : Num) => forall (last : Num), forall (stride : Num), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, PLiteral a -> seq (tcAdd (TCNum 1) (tcDiv (tcSub last first) stride)) a) (fun (first : SAWCoreScaffolding.Nat) => finNumRec (fun (last : Num) => forall (stride : Num), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, PLiteral a -> seq (tcAdd (TCNum 1) (tcDiv (tcSub last (TCNum first)) stride)) a) (fun (last : SAWCoreScaffolding.Nat) => finNumRec (fun (stride : Num) => forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, PLiteral a -> seq (tcAdd (TCNum 1) (tcDiv (TCNum (SAWCorePrelude.subNat last first)) stride)) a) (fun (stride : SAWCoreScaffolding.Nat) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (pa : SAWCoreScaffolding.Nat -> a) => SAWCoreVectorsAsCoqVectors.gen (SAWCorePrelude.addNat 1 (SAWCorePrelude.divNat (SAWCorePrelude.subNat last first) stride)) a (fun (i : SAWCoreScaffolding.Nat) => pa (SAWCorePrelude.addNat first (SAWCorePrelude.mulNat i stride)))))). @@ -636,10 +649,12 @@ Definition ecFromToDownByGreaterThan : forall (first : Num), forall (bound : Num finNumRec (fun (first : Num) => forall (bound : Num), forall (stride : Num), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, PLiteral a -> seq (tcCeilDiv (tcSub first bound) stride) a) (fun (first : SAWCoreScaffolding.Nat) => finNumRec (fun (bound : Num) => forall (stride : Num), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, PLiteral a -> seq (tcCeilDiv (tcSub (TCNum first) bound) stride) a) (fun (bound : SAWCoreScaffolding.Nat) => finNumRec (fun (stride : Num) => forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, PLiteral a -> seq (tcCeilDiv (TCNum (SAWCorePrelude.subNat first bound)) stride) a) (fun (stride : SAWCoreScaffolding.Nat) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (pa : SAWCoreScaffolding.Nat -> a) => SAWCoreVectorsAsCoqVectors.gen (ceilDivNat (SAWCorePrelude.subNat first bound) stride) a (fun (i : SAWCoreScaffolding.Nat) => pa (SAWCorePrelude.subNat first (SAWCorePrelude.mulNat i stride)))))). Definition ecInfFrom : forall (a : Type), PIntegral a -> a -> seq TCInf a := - fun (a : Type) (pa : RecordTypeCons "div" (a -> a -> a) (RecordTypeCons "integralRing" (RecordTypeCons "add" (a -> a -> a) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> a) (RecordTypeCons "mul" (a -> a -> a) (RecordTypeCons "neg" (a -> a) (RecordTypeCons "ringZero" a (RecordTypeCons "sub" (a -> a -> a) RecordTypeNil)))))) (RecordTypeCons "mod" (a -> a -> a) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> a -> r) (RecordTypeCons "toInt" (a -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (x : a) => SAWCorePrelude.MkStream a (fun (i : SAWCoreScaffolding.Nat) => RecordProj (RecordProj pa "integralRing") "add" x (RecordProj (RecordProj pa "integralRing") "int" (SAWCoreScaffolding.natToInt i))). + fun (a : Type) (pa : RecordTypeCons "div" (a -> a -> a) (RecordTypeCons "integralRing" (RecordTypeCons "add" (a -> a -> a) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> a) (RecordTypeCons "mul" (a -> a -> a) (RecordTypeCons "neg" (a -> a) (RecordTypeCons "ringZero" a (RecordTypeCons "sub" (a -> a -> a) RecordTypeNil)))))) (RecordTypeCons "mod" (a -> a -> a) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> a -> r) (RecordTypeCons "toInt" (a -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (x : a) => SAWCorePrelude.MkStream a (fun (i : SAWCoreScaffolding.Nat) => let var__0 := RecordProj pa "integralRing" in + RecordProj var__0 "add" x (RecordProj var__0 "int" (SAWCoreScaffolding.natToInt i))). Definition ecInfFromThen : forall (a : Type), PIntegral a -> a -> a -> seq TCInf a := - fun (a : Type) (pa : RecordTypeCons "div" (a -> a -> a) (RecordTypeCons "integralRing" (RecordTypeCons "add" (a -> a -> a) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> a) (RecordTypeCons "mul" (a -> a -> a) (RecordTypeCons "neg" (a -> a) (RecordTypeCons "ringZero" a (RecordTypeCons "sub" (a -> a -> a) RecordTypeNil)))))) (RecordTypeCons "mod" (a -> a -> a) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> a -> r) (RecordTypeCons "toInt" (a -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (x : a) (y : a) => SAWCorePrelude.MkStream a (fun (i : SAWCoreScaffolding.Nat) => RecordProj (RecordProj pa "integralRing") "add" x (RecordProj (RecordProj pa "integralRing") "mul" (RecordProj (RecordProj pa "integralRing") "sub" y x) (RecordProj (RecordProj pa "integralRing") "int" (SAWCoreScaffolding.natToInt i)))). + fun (a : Type) (pa : RecordTypeCons "div" (a -> a -> a) (RecordTypeCons "integralRing" (RecordTypeCons "add" (a -> a -> a) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> a) (RecordTypeCons "mul" (a -> a -> a) (RecordTypeCons "neg" (a -> a) (RecordTypeCons "ringZero" a (RecordTypeCons "sub" (a -> a -> a) RecordTypeNil)))))) (RecordTypeCons "mod" (a -> a -> a) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> a -> r) (RecordTypeCons "toInt" (a -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (x : a) (y : a) => SAWCorePrelude.MkStream a (fun (i : SAWCoreScaffolding.Nat) => let var__0 := RecordProj pa "integralRing" in + RecordProj var__0 "add" x (RecordProj var__0 "mul" (RecordProj var__0 "sub" y x) (RecordProj var__0 "int" (SAWCoreScaffolding.natToInt i)))). Definition ecError : forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, forall (len : Num), seq len (SAWCoreVectorsAsCoqVectors.Vec 8 SAWCoreScaffolding.Bool) -> a := fun (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (len : Num) (msg : CryptolPrimitivesForSAWCore.Num_rect (fun (num : Num) => Type) (fun (n : SAWCoreScaffolding.Nat) => SAWCoreVectorsAsCoqVectors.Vec n (SAWCoreVectorsAsCoqVectors.Vec 8 SAWCoreScaffolding.Bool)) (SAWCorePrelude.Stream (SAWCoreVectorsAsCoqVectors.Vec 8 SAWCoreScaffolding.Bool)) len) => SAWCoreScaffolding.error a "encountered call to the Cryptol 'error' function"%string. @@ -663,25 +678,25 @@ Definition ecFoldlPrime : forall (n : Num), forall (a : Type), forall (b : Type) fun (n : Num) (a : Type) (b : Type) {Inh_b : SAWCoreScaffolding.Inhabited b} (pa : RecordTypeCons "eq" (a -> a -> SAWCoreScaffolding.Bool) RecordTypeNil) => ecFoldl n a b. Definition TCFloat : Num -> Num -> Type := - fun (_1 : Num) (_2 : Num) => unit. + fun (_1 : Num) (_2 : Num) => unit : Type. Definition PEqFloat : forall (e : Num), forall (p : Num), PEq (TCFloat e p) := - fun (e : Num) (p : Num) => RecordCons "eq" (fun (x : unit) (y : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: (==) Float"%string) RecordNil. + fun (e : Num) (p : Num) => RecordCons "eq" (fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: (==) Float"%string) RecordNil. Definition PCmpFloat : forall (e : Num), forall (p : Num), PCmp (TCFloat e p) := - fun (e : Num) (p : Num) => RecordCons "cmp" (fun (x : unit) (y : unit) (k : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: Cmp Float"%string) (RecordCons "cmpEq" (PEqFloat e p) RecordNil). + fun (e : Num) (p : Num) => RecordCons "cmp" (fun (x : unit : Type) (y : unit : Type) (k : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: Cmp Float"%string) (RecordCons "cmpEq" (PEqFloat e p) RecordNil). Definition PZeroFloat : forall (e : Num), forall (p : Num), PZero (TCFloat e p) := fun (e : Num) (p : Num) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: Zero Float"%string. Definition PRingFloat : forall (e : Num), forall (p : Num), PRing (TCFloat e p) := - fun (e : Num) (p : Num) => RecordCons "add" (fun (x : unit) (y : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: (+) Float"%string) (RecordCons "int" (fun (i : SAWCoreScaffolding.Integer) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: toInteger Float"%string) (RecordCons "mul" (fun (x : unit) (y : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: (*) Float"%string) (RecordCons "neg" (fun (x : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: neg Float"%string) (RecordCons "ringZero" (PZeroFloat e p) (RecordCons "sub" (fun (x : unit) (y : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: (-) Float"%string) RecordNil))))). + fun (e : Num) (p : Num) => RecordCons "add" (fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: (+) Float"%string) (RecordCons "int" (fun (i : SAWCoreScaffolding.Integer) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: toInteger Float"%string) (RecordCons "mul" (fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: (*) Float"%string) (RecordCons "neg" (fun (x : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: neg Float"%string) (RecordCons "ringZero" (PZeroFloat e p) (RecordCons "sub" (fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: (-) Float"%string) RecordNil))))). Definition PFieldFloat : forall (e : Num), forall (p : Num), PField (TCFloat e p) := - fun (e : Num) (p : Num) => RecordCons "fieldDiv" (fun (x : unit) (y : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: (/.) Float"%string) (RecordCons "fieldRing" (PRingFloat e p) (RecordCons "recip" (fun (x : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: recip Float"%string) RecordNil)). + fun (e : Num) (p : Num) => RecordCons "fieldDiv" (fun (x : unit : Type) (y : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: (/.) Float"%string) (RecordCons "fieldRing" (PRingFloat e p) (RecordCons "recip" (fun (x : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: recip Float"%string) RecordNil)). Definition PRoundFloat : forall (e : Num), forall (p : Num), PRound (TCFloat e p) := - fun (e : Num) (p : Num) => RecordCons "ceiling" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: ceiling Float"%string) (RecordCons "floor" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: floor Float"%string) (RecordCons "roundAway" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: roundAway Float"%string) (RecordCons "roundCmp" (PCmpFloat e p) (RecordCons "roundField" (PFieldFloat e p) (RecordCons "roundToEven" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: roundToEven Float"%string) (RecordCons "trunc" (fun (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: trunc Float"%string) RecordNil)))))). + fun (e : Num) (p : Num) => RecordCons "ceiling" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: ceiling Float"%string) (RecordCons "floor" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: floor Float"%string) (RecordCons "roundAway" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: roundAway Float"%string) (RecordCons "roundCmp" (PCmpFloat e p) (RecordCons "roundField" (PFieldFloat e p) (RecordCons "roundToEven" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: roundToEven Float"%string) (RecordCons "trunc" (fun (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Integer "Unimplemented: trunc Float"%string) RecordNil)))))). Definition PLiteralFloat : forall (e : Num), forall (p : Num), PLiteral (TCFloat e p) := fun (e : Num) (p : Num) (x : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: Literal Float"%string. @@ -696,55 +711,55 @@ Definition ecFpFromBits : forall (e : Num), forall (p : Num), seq (tcAdd e p) SA fun (e : Num) (p : Num) (_1 : CryptolPrimitivesForSAWCore.Num_rect (fun (num : Num) => Type) (fun (n : SAWCoreScaffolding.Nat) => SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (SAWCorePrelude.Stream SAWCoreScaffolding.Bool) (CryptolPrimitivesForSAWCore.Num_rect (fun (num1' : Num) => Num) (fun (n1 : SAWCoreScaffolding.Nat) => CryptolPrimitivesForSAWCore.Num_rect (fun (num2' : Num) => Num) (fun (n2 : SAWCoreScaffolding.Nat) => TCNum (SAWCorePrelude.addNat n1 n2)) ((fun (x : SAWCoreScaffolding.Nat) => TCInf) n1) p) (CryptolPrimitivesForSAWCore.Num_rect (fun (num2' : Num) => Num) (fun (y : SAWCoreScaffolding.Nat) => TCInf) TCInf p) e)) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpFromBits"%string. Definition ecFpToBits : forall (e : Num), forall (p : Num), TCFloat e p -> seq (tcAdd e p) SAWCoreScaffolding.Bool := - fun (e : Num) (p : Num) (_1 : unit) => SAWCoreScaffolding.error (seq (tcAdd e p) SAWCoreScaffolding.Bool) "Unimplemented: fpToBits"%string. + fun (e : Num) (p : Num) (_1 : unit : Type) => SAWCoreScaffolding.error (seq (tcAdd e p) SAWCoreScaffolding.Bool) "Unimplemented: fpToBits"%string. Definition ecFpEq : forall (e : Num), forall (p : Num), TCFloat e p -> TCFloat e p -> SAWCoreScaffolding.Bool := - fun (e : Num) (p : Num) (_1 : unit) (_2 : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: =.="%string. + fun (e : Num) (p : Num) (_1 : unit : Type) (_2 : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: =.="%string. Definition ecFpAdd : forall (e : Num), forall (p : Num), SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool -> TCFloat e p -> TCFloat e p -> TCFloat e p := - fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit) (_3 : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpAdd"%string. + fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit : Type) (_3 : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpAdd"%string. Definition ecFpSub : forall (e : Num), forall (p : Num), SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool -> TCFloat e p -> TCFloat e p -> TCFloat e p := - fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit) (_3 : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpSub"%string. + fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit : Type) (_3 : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpSub"%string. Definition ecFpMul : forall (e : Num), forall (p : Num), SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool -> TCFloat e p -> TCFloat e p -> TCFloat e p := - fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit) (_3 : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpMul"%string. + fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit : Type) (_3 : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpMul"%string. Definition ecFpDiv : forall (e : Num), forall (p : Num), SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool -> TCFloat e p -> TCFloat e p -> TCFloat e p := - fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit) (_3 : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpDiv"%string. + fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit : Type) (_3 : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpDiv"%string. Definition ecFpToRational : forall (e : Num), forall (p : Num), TCFloat e p -> Rational := - fun (e : Num) (p : Num) (_1 : unit) => SAWCoreScaffolding.error Rational "Unimplemented: fpToRational"%string. + fun (e : Num) (p : Num) (_1 : unit : Type) => SAWCoreScaffolding.error Rational "Unimplemented: fpToRational"%string. Definition ecFpFromRational : forall (e : Num), forall (p : Num), SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool -> Rational -> TCFloat e p := - fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpFromRational"%string. + fun (e : Num) (p : Num) (_1 : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (_2 : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpFromRational"%string. Definition fpIsNaN : forall (e : Num), forall (p : Num), TCFloat e p -> SAWCoreScaffolding.Bool := - fun (e : Num) (p : Num) (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsNaN"%string. + fun (e : Num) (p : Num) (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsNaN"%string. Definition fpIsInf : forall (e : Num), forall (p : Num), TCFloat e p -> SAWCoreScaffolding.Bool := - fun (e : Num) (p : Num) (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsInf"%string. + fun (e : Num) (p : Num) (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsInf"%string. Definition fpIsZero : forall (e : Num), forall (p : Num), TCFloat e p -> SAWCoreScaffolding.Bool := - fun (e : Num) (p : Num) (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsZero"%string. + fun (e : Num) (p : Num) (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsZero"%string. Definition fpIsNeg : forall (e : Num), forall (p : Num), TCFloat e p -> SAWCoreScaffolding.Bool := - fun (e : Num) (p : Num) (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsNeg"%string. + fun (e : Num) (p : Num) (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsNeg"%string. Definition fpIsNormal : forall (e : Num), forall (p : Num), TCFloat e p -> SAWCoreScaffolding.Bool := - fun (e : Num) (p : Num) (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsNormal"%string. + fun (e : Num) (p : Num) (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsNormal"%string. Definition fpIsSubnormal : forall (e : Num), forall (p : Num), TCFloat e p -> SAWCoreScaffolding.Bool := - fun (e : Num) (p : Num) (x : unit) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsSubnormal"%string. + fun (e : Num) (p : Num) (x : unit : Type) => SAWCoreScaffolding.error SAWCoreScaffolding.Bool "Unimplemented: fpIsSubnormal"%string. Definition fpFMA : forall (e : Num), forall (p : Num), SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool -> TCFloat e p -> TCFloat e p -> TCFloat e p -> TCFloat e p := - fun (e : Num) (p : Num) (r : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (x : unit) (y : unit) (z : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpFMA"%string. + fun (e : Num) (p : Num) (r : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (x : unit : Type) (y : unit : Type) (z : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpFMA"%string. Definition fpAbs : forall (e : Num), forall (p : Num), TCFloat e p -> TCFloat e p := - fun (e : Num) (p : Num) (x : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpAbs"%string. + fun (e : Num) (p : Num) (x : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpAbs"%string. Definition fpSqrt : forall (e : Num), forall (p : Num), SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool -> TCFloat e p -> TCFloat e p := - fun (e : Num) (p : Num) (r : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (x : unit) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpSqrt"%string. + fun (e : Num) (p : Num) (r : SAWCoreVectorsAsCoqVectors.Vec 3 SAWCoreScaffolding.Bool) (x : unit : Type) => SAWCoreScaffolding.error (TCFloat e p) "Unimplemented: fpSqrt"%string. Definition ecUpdate : forall (n : Num), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, forall (ix : Type), PIntegral ix -> seq n a -> ix -> a -> seq n a := fun (n : Num) => CryptolPrimitivesForSAWCore.Num_rect (fun (n1 : Num) => forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, forall (ix : Type), PIntegral ix -> seq n1 a -> ix -> a -> seq n1 a) (fun (n1 : SAWCoreScaffolding.Nat) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (ix : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (xs : SAWCoreVectorsAsCoqVectors.Vec n1 a) => RecordProj pix "posNegCases" (a -> SAWCoreVectorsAsCoqVectors.Vec n1 a) (SAWCorePrelude.upd n1 a xs) (fun (_1 : SAWCoreScaffolding.Nat) (_2 : a) => xs)) (fun (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (ix : Type) (pix : RecordTypeCons "div" (ix -> ix -> ix) (RecordTypeCons "integralRing" (RecordTypeCons "add" (ix -> ix -> ix) (RecordTypeCons "int" (SAWCoreScaffolding.Integer -> ix) (RecordTypeCons "mul" (ix -> ix -> ix) (RecordTypeCons "neg" (ix -> ix) (RecordTypeCons "ringZero" ix (RecordTypeCons "sub" (ix -> ix -> ix) RecordTypeNil)))))) (RecordTypeCons "mod" (ix -> ix -> ix) (RecordTypeCons "posNegCases" (forall (r : Type), (SAWCoreScaffolding.Nat -> r) -> (SAWCoreScaffolding.Nat -> r) -> ix -> r) (RecordTypeCons "toInt" (ix -> SAWCoreScaffolding.Integer) RecordTypeNil))))) (xs : SAWCorePrelude.Stream a) => RecordProj pix "posNegCases" (a -> SAWCorePrelude.Stream a) (SAWCorePrelude.streamUpd a xs) (fun (_1 : SAWCoreScaffolding.Nat) (_2 : a) => xs)) n. @@ -823,19 +838,23 @@ Definition processSHA2_512 : forall (n : Num), seq n (SAWCoreVectorsAsCoqVectors Definition ec_double : forall (p : Num), prod (IntModNum p) (prod (IntModNum p) (IntModNum p)) -> let var__0 := IntModNum p in prod var__0 (prod var__0 var__0) := - fun (p : Num) (x : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) => SAWCoreScaffolding.error (prod (IntModNum p) (prod (IntModNum p) (IntModNum p))) "Unimplemented: ec_double"%string. + fun (p : Num) (x : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) => let var__0 := IntModNum p in + SAWCoreScaffolding.error (prod var__0 (prod var__0 var__0)) "Unimplemented: ec_double"%string. Definition ec_add_nonzero : forall (p : Num), prod (IntModNum p) (prod (IntModNum p) (IntModNum p)) -> prod (IntModNum p) (prod (IntModNum p) (IntModNum p)) -> let var__0 := IntModNum p in prod var__0 (prod var__0 var__0) := - fun (p : Num) (x : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) (y : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) => SAWCoreScaffolding.error (prod (IntModNum p) (prod (IntModNum p) (IntModNum p))) "Unimplemented: ec_add_nonzero"%string. + fun (p : Num) (x : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) (y : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) => let var__0 := IntModNum p in + SAWCoreScaffolding.error (prod var__0 (prod var__0 var__0)) "Unimplemented: ec_add_nonzero"%string. Definition ec_mult : forall (p : Num), IntModNum p -> prod (IntModNum p) (prod (IntModNum p) (IntModNum p)) -> let var__0 := IntModNum p in prod var__0 (prod var__0 var__0) := - fun (p : Num) (x : CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (y : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) => SAWCoreScaffolding.error (prod (IntModNum p) (prod (IntModNum p) (IntModNum p))) "Unimplemented: ec_mult"%string. + fun (p : Num) (x : CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (y : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) => let var__0 := IntModNum p in + SAWCoreScaffolding.error (prod var__0 (prod var__0 var__0)) "Unimplemented: ec_mult"%string. Definition ec_twin_mult : forall (p : Num), IntModNum p -> prod (IntModNum p) (prod (IntModNum p) (IntModNum p)) -> prod (IntModNum p) (prod (IntModNum p) (IntModNum p)) -> let var__0 := IntModNum p in prod var__0 (prod var__0 var__0) := - fun (p : Num) (x : CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (y : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) (z : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) => SAWCoreScaffolding.error (prod (IntModNum p) (prod (IntModNum p) (IntModNum p))) "Unimplemented: ec_twin_mult"%string. + fun (p : Num) (x : CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (y : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) (z : prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (prod (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p) (CryptolPrimitivesForSAWCore.Num_rect (fun (n : Num) => Type) SAWCoreScaffolding.IntMod SAWCoreScaffolding.Integer p))) => let var__0 := IntModNum p in + SAWCoreScaffolding.error (prod var__0 (prod var__0 var__0)) "Unimplemented: ec_twin_mult"%string. Axiom replicate_False : forall (n : SAWCoreScaffolding.Nat), SAWCoreScaffolding.Eq (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (SAWCorePrelude.replicate n SAWCoreScaffolding.Bool SAWCoreScaffolding.false) (SAWCoreVectorsAsCoqVectors.bvNat n 0) . diff --git a/saw-core-coq/coq/generated/CryptolToCoq/SAWCorePrelude.v b/saw-core-coq/coq/generated/CryptolToCoq/SAWCorePrelude.v index 10db65f010..c25364190a 100644 --- a/saw-core-coq/coq/generated/CryptolToCoq/SAWCorePrelude.v +++ b/saw-core-coq/coq/generated/CryptolToCoq/SAWCorePrelude.v @@ -74,7 +74,9 @@ Definition trans4 : forall (a : Type), forall (w : a), forall (x : a), forall (y fun (a : Type) (w : a) (x : a) (y : a) (z : a) (eq1 : SAWCoreScaffolding.Eq a w x) (eq2 : SAWCoreScaffolding.Eq a x y) (eq3 : SAWCoreScaffolding.Eq a y z) => trans a w x z eq1 (trans a x y z eq2 eq3). Definition eq_inv_map : forall (a : Type), forall (b : Type), forall (a1 : a), forall (a2 : a), SAWCoreScaffolding.Eq a a1 a2 -> forall (f1 : a -> b), forall (f2 : a -> b), SAWCoreScaffolding.Eq b (f1 a2) (f2 a2) -> SAWCoreScaffolding.Eq b (f1 a1) (f2 a1) := - fun (a : Type) (b : Type) (a1 : a) (a2 : a) (eq_a : SAWCoreScaffolding.Eq a a1 a2) (f1 : a -> b) (f2 : a -> b) (eq_f : SAWCoreScaffolding.Eq b (f1 a2) (f2 a2)) => trans b (f1 a1) (f1 a2) (f2 a1) (eq_cong a a1 a2 eq_a b f1) (trans b (f1 a2) (f2 a2) (f2 a1) eq_f (eq_cong a a2 a1 (sym a a1 a2 eq_a) b f2)). + fun (a : Type) (b : Type) (a1 : a) (a2 : a) (eq_a : SAWCoreScaffolding.Eq a a1 a2) (f1 : a -> b) (f2 : a -> b) (eq_f : SAWCoreScaffolding.Eq b (f1 a2) (f2 a2)) => let var__0 := f2 a1 in + let var__1 := f1 a2 in + trans b (f1 a1) var__1 var__0 (eq_cong a a1 a2 eq_a b f1) (trans b var__1 (f2 a2) var__0 eq_f (eq_cong a a2 a1 (sym a a1 a2 eq_a) b f2)). (* Prelude.unsafeAssert was skipped *) @@ -183,7 +185,11 @@ Definition not_False : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreSca trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.false) (if SAWCoreScaffolding.false then SAWCoreScaffolding.false else SAWCoreScaffolding.true) SAWCoreScaffolding.true (SAWCoreScaffolding.not__eq SAWCoreScaffolding.false) (ite_false SAWCoreScaffolding.Bool SAWCoreScaffolding.false SAWCoreScaffolding.true). Definition not_not : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.not x)) x := - fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.not b)) b) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.not SAWCoreScaffolding.true)) (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false not_True SAWCoreScaffolding.Bool SAWCoreScaffolding.not) not_False) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.not SAWCoreScaffolding.false)) (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true not_False SAWCoreScaffolding.Bool SAWCoreScaffolding.not) not_True). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.true in + let var__1 := not_True in + let var__2 := SAWCoreScaffolding.not SAWCoreScaffolding.false in + let var__3 := not_False in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.not b)) b) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not var__0) var__2 SAWCoreScaffolding.true (eq_cong SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.false var__1 SAWCoreScaffolding.Bool SAWCoreScaffolding.not) var__3) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not var__2) var__0 SAWCoreScaffolding.false (eq_cong SAWCoreScaffolding.Bool var__2 SAWCoreScaffolding.true var__3 SAWCoreScaffolding.Bool SAWCoreScaffolding.not) var__1). Definition and_True1 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and SAWCoreScaffolding.true x) x := fun (x : SAWCoreScaffolding.Bool) => trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.and SAWCoreScaffolding.true x) (if SAWCoreScaffolding.true then x else SAWCoreScaffolding.false) x (SAWCoreScaffolding.and__eq SAWCoreScaffolding.true x) (ite_true SAWCoreScaffolding.Bool x SAWCoreScaffolding.false). @@ -198,7 +204,12 @@ Definition and_False2 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and b SAWCoreScaffolding.false) SAWCoreScaffolding.false) x (and_True1 SAWCoreScaffolding.false) (and_False1 SAWCoreScaffolding.false). Definition and_assoc : forall (x : SAWCoreScaffolding.Bool), forall (y : SAWCoreScaffolding.Bool), forall (z : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x (SAWCoreScaffolding.and y z)) (SAWCoreScaffolding.and (SAWCoreScaffolding.and x y) z) := - fun (x : SAWCoreScaffolding.Bool) (y : SAWCoreScaffolding.Bool) (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x (SAWCoreScaffolding.and y b)) (SAWCoreScaffolding.and (SAWCoreScaffolding.and x y) b)) z (trans2 SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x (SAWCoreScaffolding.and y SAWCoreScaffolding.true)) (SAWCoreScaffolding.and (SAWCoreScaffolding.and x y) SAWCoreScaffolding.true) (SAWCoreScaffolding.and x y) (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.and y SAWCoreScaffolding.true) y (and_True2 y) SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x)) (and_True2 (SAWCoreScaffolding.and x y))) (trans2 SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x (SAWCoreScaffolding.and y SAWCoreScaffolding.false)) (SAWCoreScaffolding.and (SAWCoreScaffolding.and x y) SAWCoreScaffolding.false) SAWCoreScaffolding.false (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x (SAWCoreScaffolding.and y SAWCoreScaffolding.false)) (SAWCoreScaffolding.and x SAWCoreScaffolding.false) SAWCoreScaffolding.false (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.and y SAWCoreScaffolding.false) SAWCoreScaffolding.false (and_False2 y) SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x)) (and_False2 x)) (and_False2 (SAWCoreScaffolding.and x y))). + fun (x : SAWCoreScaffolding.Bool) (y : SAWCoreScaffolding.Bool) (z : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.and x in + let var__1 := SAWCoreScaffolding.and y SAWCoreScaffolding.true in + let var__2 := SAWCoreScaffolding.and y SAWCoreScaffolding.false in + let var__3 := SAWCoreScaffolding.and x y in + let var__4 := SAWCoreScaffolding.and x var__2 in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x (SAWCoreScaffolding.and y b)) (SAWCoreScaffolding.and (SAWCoreScaffolding.and x y) b)) z (trans2 SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x var__1) (SAWCoreScaffolding.and var__3 SAWCoreScaffolding.true) var__3 (eq_cong SAWCoreScaffolding.Bool var__1 y (and_True2 y) SAWCoreScaffolding.Bool var__0) (and_True2 var__3)) (trans2 SAWCoreScaffolding.Bool var__4 (SAWCoreScaffolding.and var__3 SAWCoreScaffolding.false) SAWCoreScaffolding.false (trans SAWCoreScaffolding.Bool var__4 (SAWCoreScaffolding.and x SAWCoreScaffolding.false) SAWCoreScaffolding.false (eq_cong SAWCoreScaffolding.Bool var__2 SAWCoreScaffolding.false (and_False2 y) SAWCoreScaffolding.Bool var__0) (and_False2 x)) (and_False2 var__3)). Definition and_idem : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x x) x := fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and b b) b) x (and_True1 SAWCoreScaffolding.true) (and_False1 SAWCoreScaffolding.false). @@ -216,25 +227,34 @@ Definition or_False2 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding. fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or b SAWCoreScaffolding.false) b) x (or_True1 SAWCoreScaffolding.false) (or_False1 SAWCoreScaffolding.false). Definition or_assoc : forall (x : SAWCoreScaffolding.Bool), forall (y : SAWCoreScaffolding.Bool), forall (z : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x (SAWCoreScaffolding.or y z)) (SAWCoreScaffolding.or (SAWCoreScaffolding.or x y) z) := - fun (x : SAWCoreScaffolding.Bool) (y : SAWCoreScaffolding.Bool) (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x (SAWCoreScaffolding.or y b)) (SAWCoreScaffolding.or (SAWCoreScaffolding.or x y) b)) z (trans2 SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x (SAWCoreScaffolding.or y SAWCoreScaffolding.true)) (SAWCoreScaffolding.or (SAWCoreScaffolding.or x y) SAWCoreScaffolding.true) SAWCoreScaffolding.true (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x (SAWCoreScaffolding.or y SAWCoreScaffolding.true)) (SAWCoreScaffolding.or x SAWCoreScaffolding.true) SAWCoreScaffolding.true (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.or y SAWCoreScaffolding.true) SAWCoreScaffolding.true (or_True2 y) SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x)) (or_True2 x)) (or_True2 (SAWCoreScaffolding.or x y))) (trans2 SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x (SAWCoreScaffolding.or y SAWCoreScaffolding.false)) (SAWCoreScaffolding.or (SAWCoreScaffolding.or x y) SAWCoreScaffolding.false) (SAWCoreScaffolding.or x y) (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.or y SAWCoreScaffolding.false) y (or_False2 y) SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x)) (or_False2 (SAWCoreScaffolding.or x y))). + fun (x : SAWCoreScaffolding.Bool) (y : SAWCoreScaffolding.Bool) (z : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.or x in + let var__1 := SAWCoreScaffolding.or y SAWCoreScaffolding.true in + let var__2 := SAWCoreScaffolding.or y SAWCoreScaffolding.false in + let var__3 := SAWCoreScaffolding.or x y in + let var__4 := SAWCoreScaffolding.or x var__1 in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x (SAWCoreScaffolding.or y b)) (SAWCoreScaffolding.or (SAWCoreScaffolding.or x y) b)) z (trans2 SAWCoreScaffolding.Bool var__4 (SAWCoreScaffolding.or var__3 SAWCoreScaffolding.true) SAWCoreScaffolding.true (trans SAWCoreScaffolding.Bool var__4 (SAWCoreScaffolding.or x SAWCoreScaffolding.true) SAWCoreScaffolding.true (eq_cong SAWCoreScaffolding.Bool var__1 SAWCoreScaffolding.true (or_True2 y) SAWCoreScaffolding.Bool var__0) (or_True2 x)) (or_True2 var__3)) (trans2 SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x var__2) (SAWCoreScaffolding.or var__3 SAWCoreScaffolding.false) var__3 (eq_cong SAWCoreScaffolding.Bool var__2 y (or_False2 y) SAWCoreScaffolding.Bool var__0) (or_False2 var__3)). Definition or_idem : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x x) x := fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or b b) b) x (or_True1 SAWCoreScaffolding.true) (or_False1 SAWCoreScaffolding.false). Definition implies_True1 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (implies SAWCoreScaffolding.true x) x := - fun (x : SAWCoreScaffolding.Bool) => trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or (SAWCoreScaffolding.not SAWCoreScaffolding.true) x) (SAWCoreScaffolding.or SAWCoreScaffolding.false x) x (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false not_True SAWCoreScaffolding.Bool (fun (y : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or y x)) (or_False1 x). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.true in + trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or var__0 x) (SAWCoreScaffolding.or SAWCoreScaffolding.false x) x (eq_cong SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.false not_True SAWCoreScaffolding.Bool (fun (y : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or y x)) (or_False1 x). Definition implies_False1 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (implies SAWCoreScaffolding.false x) SAWCoreScaffolding.true := - fun (x : SAWCoreScaffolding.Bool) => trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or (SAWCoreScaffolding.not SAWCoreScaffolding.false) x) (SAWCoreScaffolding.or SAWCoreScaffolding.true x) SAWCoreScaffolding.true (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true not_False SAWCoreScaffolding.Bool (fun (y : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or y x)) (or_True1 x). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.false in + trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or var__0 x) (SAWCoreScaffolding.or SAWCoreScaffolding.true x) SAWCoreScaffolding.true (eq_cong SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.true not_False SAWCoreScaffolding.Bool (fun (y : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or y x)) (or_True1 x). Definition true_implies : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (implies SAWCoreScaffolding.true x) x := fun (x : SAWCoreScaffolding.Bool) => implies_True1 x. Definition xor_True1 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor SAWCoreScaffolding.true x) (SAWCoreScaffolding.not x) := - fun (x : SAWCoreScaffolding.Bool) => trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor SAWCoreScaffolding.true x) (if SAWCoreScaffolding.true then SAWCoreScaffolding.not x else x) (SAWCoreScaffolding.not x) (SAWCoreScaffolding.xor__eq SAWCoreScaffolding.true x) (ite_true SAWCoreScaffolding.Bool (SAWCoreScaffolding.not x) x). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not x in + trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor SAWCoreScaffolding.true x) (if SAWCoreScaffolding.true then var__0 else x) var__0 (SAWCoreScaffolding.xor__eq SAWCoreScaffolding.true x) (ite_true SAWCoreScaffolding.Bool var__0 x). Definition xor_False1 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor SAWCoreScaffolding.false x) x := - fun (x : SAWCoreScaffolding.Bool) => trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor SAWCoreScaffolding.false x) (if SAWCoreScaffolding.false then SAWCoreScaffolding.not x else x) x (SAWCoreScaffolding.xor__eq SAWCoreScaffolding.false x) (ite_false SAWCoreScaffolding.Bool (SAWCoreScaffolding.not x) x). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not x in + trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor SAWCoreScaffolding.false x) (if SAWCoreScaffolding.false then var__0 else x) x (SAWCoreScaffolding.xor__eq SAWCoreScaffolding.false x) (ite_false SAWCoreScaffolding.Bool var__0 x). Definition xor_False2 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor x SAWCoreScaffolding.false) x := fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor b SAWCoreScaffolding.false) b) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor SAWCoreScaffolding.true SAWCoreScaffolding.false) (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true (xor_True1 SAWCoreScaffolding.false) not_False) (xor_False1 SAWCoreScaffolding.false). @@ -246,10 +266,12 @@ Definition xor_same : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.E fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor b b) SAWCoreScaffolding.false) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.xor SAWCoreScaffolding.true SAWCoreScaffolding.true) (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false (xor_True1 SAWCoreScaffolding.true) not_True) (xor_False1 SAWCoreScaffolding.false). Definition boolEq_True1 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq SAWCoreScaffolding.true x) x := - fun (x : SAWCoreScaffolding.Bool) => trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq SAWCoreScaffolding.true x) (if SAWCoreScaffolding.true then x else SAWCoreScaffolding.not x) x (SAWCoreScaffolding.boolEq__eq SAWCoreScaffolding.true x) (ite_true SAWCoreScaffolding.Bool x (SAWCoreScaffolding.not x)). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not x in + trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq SAWCoreScaffolding.true x) (if SAWCoreScaffolding.true then x else var__0) x (SAWCoreScaffolding.boolEq__eq SAWCoreScaffolding.true x) (ite_true SAWCoreScaffolding.Bool x var__0). Definition boolEq_False1 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq SAWCoreScaffolding.false x) (SAWCoreScaffolding.not x) := - fun (x : SAWCoreScaffolding.Bool) => trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq SAWCoreScaffolding.false x) (if SAWCoreScaffolding.false then x else SAWCoreScaffolding.not x) (SAWCoreScaffolding.not x) (SAWCoreScaffolding.boolEq__eq SAWCoreScaffolding.false x) (ite_false SAWCoreScaffolding.Bool x (SAWCoreScaffolding.not x)). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not x in + trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq SAWCoreScaffolding.false x) (if SAWCoreScaffolding.false then x else var__0) var__0 (SAWCoreScaffolding.boolEq__eq SAWCoreScaffolding.false x) (ite_false SAWCoreScaffolding.Bool x var__0). Definition boolEq_True2 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq x SAWCoreScaffolding.true) x := fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq b SAWCoreScaffolding.true) b) x (boolEq_True1 SAWCoreScaffolding.true) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq SAWCoreScaffolding.false SAWCoreScaffolding.true) (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false (boolEq_False1 SAWCoreScaffolding.true) not_True). @@ -261,45 +283,97 @@ Definition boolEq_same : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffoldin fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq b b) SAWCoreScaffolding.true) x (boolEq_True1 SAWCoreScaffolding.true) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.boolEq SAWCoreScaffolding.false SAWCoreScaffolding.false) (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true (boolEq_False1 SAWCoreScaffolding.false) not_False). Definition not_or : forall (x : SAWCoreScaffolding.Bool), forall (y : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.or x y)) (SAWCoreScaffolding.and (SAWCoreScaffolding.not x) (SAWCoreScaffolding.not y)) := - fun (x : SAWCoreScaffolding.Bool) (y : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.or b y)) (SAWCoreScaffolding.and (SAWCoreScaffolding.not b) (SAWCoreScaffolding.not y))) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.or SAWCoreScaffolding.true y)) SAWCoreScaffolding.false (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.true) (SAWCoreScaffolding.not y)) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.or SAWCoreScaffolding.true y)) (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.or SAWCoreScaffolding.true y) SAWCoreScaffolding.true (or_True1 y) SAWCoreScaffolding.Bool SAWCoreScaffolding.not) not_True) (trans SAWCoreScaffolding.Bool SAWCoreScaffolding.false (SAWCoreScaffolding.and SAWCoreScaffolding.false (SAWCoreScaffolding.not y)) (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.true) (SAWCoreScaffolding.not y)) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.and SAWCoreScaffolding.false (SAWCoreScaffolding.not y)) SAWCoreScaffolding.false (and_False1 (SAWCoreScaffolding.not y))) (eq_cong SAWCoreScaffolding.Bool SAWCoreScaffolding.false (SAWCoreScaffolding.not SAWCoreScaffolding.true) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false not_True) SAWCoreScaffolding.Bool (fun (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.and z (SAWCoreScaffolding.not y))))) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.or SAWCoreScaffolding.false y)) (SAWCoreScaffolding.not y) (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.false) (SAWCoreScaffolding.not y)) (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.or SAWCoreScaffolding.false y) y (or_False1 y) SAWCoreScaffolding.Bool SAWCoreScaffolding.not) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.false) (SAWCoreScaffolding.not y)) (SAWCoreScaffolding.not y) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.false) (SAWCoreScaffolding.not y)) (SAWCoreScaffolding.and SAWCoreScaffolding.true (SAWCoreScaffolding.not y)) (SAWCoreScaffolding.not y) (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true not_False SAWCoreScaffolding.Bool (fun (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.and z (SAWCoreScaffolding.not y))) (and_True1 (SAWCoreScaffolding.not y))))). + fun (x : SAWCoreScaffolding.Bool) (y : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not y in + let var__1 := SAWCoreScaffolding.not SAWCoreScaffolding.true in + let var__2 := not_True in + let var__3 := SAWCoreScaffolding.not SAWCoreScaffolding.false in + let var__4 := SAWCoreScaffolding.or SAWCoreScaffolding.true y in + let var__5 := SAWCoreScaffolding.or SAWCoreScaffolding.false y in + let var__6 := SAWCoreScaffolding.not var__4 in + let var__7 := SAWCoreScaffolding.and var__1 var__0 in + let var__8 := SAWCoreScaffolding.and SAWCoreScaffolding.false var__0 in + let var__9 := fun (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.and z (SAWCoreScaffolding.not y) in + let var__10 := SAWCoreScaffolding.and var__3 var__0 in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.or b y)) (SAWCoreScaffolding.and (SAWCoreScaffolding.not b) (SAWCoreScaffolding.not y))) x (trans SAWCoreScaffolding.Bool var__6 SAWCoreScaffolding.false var__7 (trans SAWCoreScaffolding.Bool var__6 var__1 SAWCoreScaffolding.false (eq_cong SAWCoreScaffolding.Bool var__4 SAWCoreScaffolding.true (or_True1 y) SAWCoreScaffolding.Bool SAWCoreScaffolding.not) var__2) (trans SAWCoreScaffolding.Bool SAWCoreScaffolding.false var__8 var__7 (sym SAWCoreScaffolding.Bool var__8 SAWCoreScaffolding.false (and_False1 var__0)) (eq_cong SAWCoreScaffolding.Bool SAWCoreScaffolding.false var__1 (sym SAWCoreScaffolding.Bool var__1 SAWCoreScaffolding.false var__2) SAWCoreScaffolding.Bool var__9))) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not var__5) var__0 var__10 (eq_cong SAWCoreScaffolding.Bool var__5 y (or_False1 y) SAWCoreScaffolding.Bool SAWCoreScaffolding.not) (sym SAWCoreScaffolding.Bool var__10 var__0 (trans SAWCoreScaffolding.Bool var__10 (SAWCoreScaffolding.and SAWCoreScaffolding.true var__0) var__0 (eq_cong SAWCoreScaffolding.Bool var__3 SAWCoreScaffolding.true not_False SAWCoreScaffolding.Bool var__9) (and_True1 var__0)))). Definition not_and : forall (x : SAWCoreScaffolding.Bool), forall (y : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.and x y)) (SAWCoreScaffolding.or (SAWCoreScaffolding.not x) (SAWCoreScaffolding.not y)) := - fun (x : SAWCoreScaffolding.Bool) (y : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.and b y)) (SAWCoreScaffolding.or (SAWCoreScaffolding.not b) (SAWCoreScaffolding.not y))) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.and SAWCoreScaffolding.true y)) (SAWCoreScaffolding.not y) (SAWCoreScaffolding.or (SAWCoreScaffolding.not SAWCoreScaffolding.true) (SAWCoreScaffolding.not y)) (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.and SAWCoreScaffolding.true y) y (and_True1 y) SAWCoreScaffolding.Bool SAWCoreScaffolding.not) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.or (SAWCoreScaffolding.not SAWCoreScaffolding.true) (SAWCoreScaffolding.not y)) (SAWCoreScaffolding.not y) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or (SAWCoreScaffolding.not SAWCoreScaffolding.true) (SAWCoreScaffolding.not y)) (SAWCoreScaffolding.or SAWCoreScaffolding.false (SAWCoreScaffolding.not y)) (SAWCoreScaffolding.not y) (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false not_True SAWCoreScaffolding.Bool (fun (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or z (SAWCoreScaffolding.not y))) (or_False1 (SAWCoreScaffolding.not y))))) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.and SAWCoreScaffolding.false y)) SAWCoreScaffolding.true (SAWCoreScaffolding.or (SAWCoreScaffolding.not SAWCoreScaffolding.false) (SAWCoreScaffolding.not y)) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.and SAWCoreScaffolding.false y)) (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.and SAWCoreScaffolding.false y) SAWCoreScaffolding.false (and_False1 y) SAWCoreScaffolding.Bool SAWCoreScaffolding.not) not_False) (trans SAWCoreScaffolding.Bool SAWCoreScaffolding.true (SAWCoreScaffolding.or SAWCoreScaffolding.true (SAWCoreScaffolding.not y)) (SAWCoreScaffolding.or (SAWCoreScaffolding.not SAWCoreScaffolding.false) (SAWCoreScaffolding.not y)) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.or SAWCoreScaffolding.true (SAWCoreScaffolding.not y)) SAWCoreScaffolding.true (or_True1 (SAWCoreScaffolding.not y))) (eq_cong SAWCoreScaffolding.Bool SAWCoreScaffolding.true (SAWCoreScaffolding.not SAWCoreScaffolding.false) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true not_False) SAWCoreScaffolding.Bool (fun (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or z (SAWCoreScaffolding.not y))))). + fun (x : SAWCoreScaffolding.Bool) (y : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not y in + let var__1 := SAWCoreScaffolding.not SAWCoreScaffolding.true in + let var__2 := SAWCoreScaffolding.not SAWCoreScaffolding.false in + let var__3 := not_False in + let var__4 := SAWCoreScaffolding.and SAWCoreScaffolding.true y in + let var__5 := SAWCoreScaffolding.and SAWCoreScaffolding.false y in + let var__6 := SAWCoreScaffolding.or var__1 var__0 in + let var__7 := fun (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.or z (SAWCoreScaffolding.not y) in + let var__8 := SAWCoreScaffolding.not var__5 in + let var__9 := SAWCoreScaffolding.or var__2 var__0 in + let var__10 := SAWCoreScaffolding.or SAWCoreScaffolding.true var__0 in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.not (SAWCoreScaffolding.and b y)) (SAWCoreScaffolding.or (SAWCoreScaffolding.not b) (SAWCoreScaffolding.not y))) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.not var__4) var__0 var__6 (eq_cong SAWCoreScaffolding.Bool var__4 y (and_True1 y) SAWCoreScaffolding.Bool SAWCoreScaffolding.not) (sym SAWCoreScaffolding.Bool var__6 var__0 (trans SAWCoreScaffolding.Bool var__6 (SAWCoreScaffolding.or SAWCoreScaffolding.false var__0) var__0 (eq_cong SAWCoreScaffolding.Bool var__1 SAWCoreScaffolding.false not_True SAWCoreScaffolding.Bool var__7) (or_False1 var__0)))) (trans SAWCoreScaffolding.Bool var__8 SAWCoreScaffolding.true var__9 (trans SAWCoreScaffolding.Bool var__8 var__2 SAWCoreScaffolding.true (eq_cong SAWCoreScaffolding.Bool var__5 SAWCoreScaffolding.false (and_False1 y) SAWCoreScaffolding.Bool SAWCoreScaffolding.not) var__3) (trans SAWCoreScaffolding.Bool SAWCoreScaffolding.true var__10 var__9 (sym SAWCoreScaffolding.Bool var__10 SAWCoreScaffolding.true (or_True1 var__0)) (eq_cong SAWCoreScaffolding.Bool SAWCoreScaffolding.true var__2 (sym SAWCoreScaffolding.Bool var__2 SAWCoreScaffolding.true var__3) SAWCoreScaffolding.Bool var__7))). Definition ite_not : forall (a : Type), forall (b : SAWCoreScaffolding.Bool), forall (x : a), forall (y : a), SAWCoreScaffolding.Eq a (if SAWCoreScaffolding.not b then x else y) (if b then y else x) := - fun (a : Type) (b : SAWCoreScaffolding.Bool) (x : a) (y : a) => SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq a (if SAWCoreScaffolding.not b' then x else y) (if b' then y else x)) b (trans a (if SAWCoreScaffolding.not SAWCoreScaffolding.true then x else y) y (if SAWCoreScaffolding.true then y else x) (trans a (if SAWCoreScaffolding.not SAWCoreScaffolding.true then x else y) (if SAWCoreScaffolding.false then x else y) y (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false not_True a (fun (z : SAWCoreScaffolding.Bool) => if z then x else y)) (ite_false a x y)) (sym a (if SAWCoreScaffolding.true then y else x) y (ite_true a y x))) (trans a (if SAWCoreScaffolding.not SAWCoreScaffolding.false then x else y) x (if SAWCoreScaffolding.false then y else x) (trans a (if SAWCoreScaffolding.not SAWCoreScaffolding.false then x else y) (if SAWCoreScaffolding.true then x else y) x (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true not_False a (fun (z : SAWCoreScaffolding.Bool) => if z then x else y)) (ite_true a x y)) (sym a (if SAWCoreScaffolding.false then y else x) x (ite_false a y x))). + fun (a : Type) (b : SAWCoreScaffolding.Bool) (x : a) (y : a) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.true in + let var__1 := SAWCoreScaffolding.not SAWCoreScaffolding.false in + let var__2 := if var__0 then x else y in + let var__3 := if SAWCoreScaffolding.true then y else x in + let var__4 := fun (z : SAWCoreScaffolding.Bool) => if z then x else y in + let var__5 := if var__1 then x else y in + let var__6 := if SAWCoreScaffolding.false then y else x in + SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq a (if SAWCoreScaffolding.not b' then x else y) (if b' then y else x)) b (trans a var__2 y var__3 (trans a var__2 (if SAWCoreScaffolding.false then x else y) y (eq_cong SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.false not_True a var__4) (ite_false a x y)) (sym a var__3 y (ite_true a y x))) (trans a var__5 x var__6 (trans a var__5 (if SAWCoreScaffolding.true then x else y) x (eq_cong SAWCoreScaffolding.Bool var__1 SAWCoreScaffolding.true not_False a var__4) (ite_true a x y)) (sym a var__6 x (ite_false a y x))). Definition ite_nest1 : forall (a : Type), forall (b : SAWCoreScaffolding.Bool), forall (x : a), forall (y : a), forall (z : a), SAWCoreScaffolding.Eq a (if b then if b then x else y else z) (if b then x else z) := - fun (a : Type) (b : SAWCoreScaffolding.Bool) (x : a) (y : a) (z : a) => SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq a (if b' then if b' then x else y else z) (if b' then x else z)) b (trans a (if SAWCoreScaffolding.true then if SAWCoreScaffolding.true then x else y else z) x (if SAWCoreScaffolding.true then x else z) (trans a (if SAWCoreScaffolding.true then if SAWCoreScaffolding.true then x else y else z) (if SAWCoreScaffolding.true then x else y) x (ite_true a (if SAWCoreScaffolding.true then x else y) z) (ite_true a x y)) (sym a (if SAWCoreScaffolding.true then x else z) x (ite_true a x z))) (trans a (if SAWCoreScaffolding.false then if SAWCoreScaffolding.false then x else y else z) z (if SAWCoreScaffolding.false then x else z) (ite_false a (if SAWCoreScaffolding.false then x else y) z) (sym a (if SAWCoreScaffolding.false then x else z) z (ite_false a x z))). + fun (a : Type) (b : SAWCoreScaffolding.Bool) (x : a) (y : a) (z : a) => let var__0 := if SAWCoreScaffolding.false then x else z in + let var__1 := if SAWCoreScaffolding.false then x else y in + let var__2 := if SAWCoreScaffolding.true then x else z in + let var__3 := if SAWCoreScaffolding.true then x else y in + let var__4 := if SAWCoreScaffolding.true then var__3 else z in + SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq a (if b' then if b' then x else y else z) (if b' then x else z)) b (trans a var__4 x var__2 (trans a var__4 var__3 x (ite_true a var__3 z) (ite_true a x y)) (sym a var__2 x (ite_true a x z))) (trans a (if SAWCoreScaffolding.false then var__1 else z) z var__0 (ite_false a var__1 z) (sym a var__0 z (ite_false a x z))). Definition ite_nest2 : forall (a : Type), forall (b : SAWCoreScaffolding.Bool), forall (x : a), forall (y : a), forall (z : a), SAWCoreScaffolding.Eq a (if b then x else if b then y else z) (if b then x else z) := - fun (a : Type) (b : SAWCoreScaffolding.Bool) (x : a) (y : a) (z : a) => SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq a (if b' then x else if b' then y else z) (if b' then x else z)) b (trans a (if SAWCoreScaffolding.true then x else if SAWCoreScaffolding.true then y else z) x (if SAWCoreScaffolding.true then x else z) (ite_true a x (if SAWCoreScaffolding.true then y else z)) (sym a (if SAWCoreScaffolding.true then x else z) x (ite_true a x z))) (trans a (if SAWCoreScaffolding.false then x else if SAWCoreScaffolding.false then y else z) z (if SAWCoreScaffolding.false then x else z) (trans a (if SAWCoreScaffolding.false then x else if SAWCoreScaffolding.false then y else z) (if SAWCoreScaffolding.false then y else z) z (ite_false a x (if SAWCoreScaffolding.false then y else z)) (ite_false a y z)) (sym a (if SAWCoreScaffolding.false then x else z) z (ite_false a x z))). + fun (a : Type) (b : SAWCoreScaffolding.Bool) (x : a) (y : a) (z : a) => let var__0 := if SAWCoreScaffolding.true then y else z in + let var__1 := if SAWCoreScaffolding.false then y else z in + let var__2 := if SAWCoreScaffolding.false then x else z in + let var__3 := if SAWCoreScaffolding.true then x else z in + let var__4 := if SAWCoreScaffolding.false then x else var__1 in + SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq a (if b' then x else if b' then y else z) (if b' then x else z)) b (trans a (if SAWCoreScaffolding.true then x else var__0) x var__3 (ite_true a x var__0) (sym a var__3 x (ite_true a x z))) (trans a var__4 z var__2 (trans a var__4 var__1 z (ite_false a x var__1) (ite_false a y z)) (sym a var__2 z (ite_false a x z))). (* Prelude.ite_bit was skipped *) Definition ite_bit_false_1 : forall (b : SAWCoreScaffolding.Bool), forall (c : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (if b then SAWCoreScaffolding.false else c) (SAWCoreScaffolding.and (SAWCoreScaffolding.not b) c) := - fun (b : SAWCoreScaffolding.Bool) (c : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (if b' then SAWCoreScaffolding.false else c) (SAWCoreScaffolding.and (SAWCoreScaffolding.not b') c)) b (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.true then SAWCoreScaffolding.false else c) SAWCoreScaffolding.false (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.true) c) (ite_true SAWCoreScaffolding.Bool SAWCoreScaffolding.false c) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.true) c) SAWCoreScaffolding.false (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.true) c) (SAWCoreScaffolding.and SAWCoreScaffolding.false c) SAWCoreScaffolding.false (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false not_True SAWCoreScaffolding.Bool (fun (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.and z c)) (and_False1 c)))) (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.false then SAWCoreScaffolding.false else c) c (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.false) c) (ite_false SAWCoreScaffolding.Bool SAWCoreScaffolding.false c) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.false) c) c (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.false) c) (SAWCoreScaffolding.and SAWCoreScaffolding.true c) c (eq_cong SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true not_False SAWCoreScaffolding.Bool (fun (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.and z c)) (and_True1 c)))). + fun (b : SAWCoreScaffolding.Bool) (c : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.true in + let var__1 := SAWCoreScaffolding.not SAWCoreScaffolding.false in + let var__2 := SAWCoreScaffolding.and var__0 c in + let var__3 := fun (z : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.and z c in + let var__4 := SAWCoreScaffolding.and var__1 c in + SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (if b' then SAWCoreScaffolding.false else c) (SAWCoreScaffolding.and (SAWCoreScaffolding.not b') c)) b (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.true then SAWCoreScaffolding.false else c) SAWCoreScaffolding.false var__2 (ite_true SAWCoreScaffolding.Bool SAWCoreScaffolding.false c) (sym SAWCoreScaffolding.Bool var__2 SAWCoreScaffolding.false (trans SAWCoreScaffolding.Bool var__2 (SAWCoreScaffolding.and SAWCoreScaffolding.false c) SAWCoreScaffolding.false (eq_cong SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.false not_True SAWCoreScaffolding.Bool var__3) (and_False1 c)))) (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.false then SAWCoreScaffolding.false else c) c var__4 (ite_false SAWCoreScaffolding.Bool SAWCoreScaffolding.false c) (sym SAWCoreScaffolding.Bool var__4 c (trans SAWCoreScaffolding.Bool var__4 (SAWCoreScaffolding.and SAWCoreScaffolding.true c) c (eq_cong SAWCoreScaffolding.Bool var__1 SAWCoreScaffolding.true not_False SAWCoreScaffolding.Bool var__3) (and_True1 c)))). Definition ite_bit_true_1 : forall (b : SAWCoreScaffolding.Bool), forall (c : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (if b then SAWCoreScaffolding.true else c) (SAWCoreScaffolding.or b c) := - fun (b : SAWCoreScaffolding.Bool) (c : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (if b' then SAWCoreScaffolding.true else c) (SAWCoreScaffolding.or b' c)) b (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.true then SAWCoreScaffolding.true else c) SAWCoreScaffolding.true (SAWCoreScaffolding.or SAWCoreScaffolding.true c) (ite_true SAWCoreScaffolding.Bool SAWCoreScaffolding.true c) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.or SAWCoreScaffolding.true c) SAWCoreScaffolding.true (or_True1 c))) (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.false then SAWCoreScaffolding.true else c) c (SAWCoreScaffolding.or SAWCoreScaffolding.false c) (ite_false SAWCoreScaffolding.Bool SAWCoreScaffolding.true c) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.or SAWCoreScaffolding.false c) c (or_False1 c))). + fun (b : SAWCoreScaffolding.Bool) (c : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.or SAWCoreScaffolding.true c in + let var__1 := SAWCoreScaffolding.or SAWCoreScaffolding.false c in + SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (if b' then SAWCoreScaffolding.true else c) (SAWCoreScaffolding.or b' c)) b (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.true then SAWCoreScaffolding.true else c) SAWCoreScaffolding.true var__0 (ite_true SAWCoreScaffolding.Bool SAWCoreScaffolding.true c) (sym SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.true (or_True1 c))) (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.false then SAWCoreScaffolding.true else c) c var__1 (ite_false SAWCoreScaffolding.Bool SAWCoreScaffolding.true c) (sym SAWCoreScaffolding.Bool var__1 c (or_False1 c))). Definition ite_fold_not : forall (b : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (if b then SAWCoreScaffolding.false else SAWCoreScaffolding.true) (SAWCoreScaffolding.not b) := - fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (if b' then SAWCoreScaffolding.false else SAWCoreScaffolding.true) (SAWCoreScaffolding.not b')) b (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.true then SAWCoreScaffolding.false else SAWCoreScaffolding.true) SAWCoreScaffolding.false (SAWCoreScaffolding.not SAWCoreScaffolding.true) (ite_true SAWCoreScaffolding.Bool SAWCoreScaffolding.false SAWCoreScaffolding.true) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false not_True)) (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.false then SAWCoreScaffolding.false else SAWCoreScaffolding.true) SAWCoreScaffolding.true (SAWCoreScaffolding.not SAWCoreScaffolding.false) (ite_false SAWCoreScaffolding.Bool SAWCoreScaffolding.false SAWCoreScaffolding.true) (sym SAWCoreScaffolding.Bool (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true not_False)). + fun (b : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.true in + let var__1 := SAWCoreScaffolding.not SAWCoreScaffolding.false in + SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (if b' then SAWCoreScaffolding.false else SAWCoreScaffolding.true) (SAWCoreScaffolding.not b')) b (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.true then SAWCoreScaffolding.false else SAWCoreScaffolding.true) SAWCoreScaffolding.false var__0 (ite_true SAWCoreScaffolding.Bool SAWCoreScaffolding.false SAWCoreScaffolding.true) (sym SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.false not_True)) (trans SAWCoreScaffolding.Bool (if SAWCoreScaffolding.false then SAWCoreScaffolding.false else SAWCoreScaffolding.true) SAWCoreScaffolding.true var__1 (ite_false SAWCoreScaffolding.Bool SAWCoreScaffolding.false SAWCoreScaffolding.true) (sym SAWCoreScaffolding.Bool var__1 SAWCoreScaffolding.true not_False)). Definition ite_eq : forall (a : Type), forall (b : SAWCoreScaffolding.Bool), forall (x : a), SAWCoreScaffolding.Eq a (if b then x else x) x := fun (a : Type) (b : SAWCoreScaffolding.Bool) (x : a) => SAWCoreScaffolding.iteDep (fun (b' : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq a (if b' then x else x) x) b (ite_true a x x) (ite_false a x x). Definition or_triv1 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or x (SAWCoreScaffolding.not x)) SAWCoreScaffolding.true := - fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or b (SAWCoreScaffolding.not b)) SAWCoreScaffolding.true) x (or_True1 (SAWCoreScaffolding.not SAWCoreScaffolding.true)) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or SAWCoreScaffolding.false (SAWCoreScaffolding.not SAWCoreScaffolding.false)) (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true (or_False1 (SAWCoreScaffolding.not SAWCoreScaffolding.false)) not_False). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.false in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or b (SAWCoreScaffolding.not b)) SAWCoreScaffolding.true) x (or_True1 (SAWCoreScaffolding.not SAWCoreScaffolding.true)) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or SAWCoreScaffolding.false var__0) var__0 SAWCoreScaffolding.true (or_False1 var__0) not_False). Definition or_triv2 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or (SAWCoreScaffolding.not x) x) SAWCoreScaffolding.true := - fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or (SAWCoreScaffolding.not b) b) SAWCoreScaffolding.true) x (or_True2 (SAWCoreScaffolding.not SAWCoreScaffolding.true)) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.false) (SAWCoreScaffolding.not SAWCoreScaffolding.false) SAWCoreScaffolding.true (or_False2 (SAWCoreScaffolding.not SAWCoreScaffolding.false)) not_False). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.false in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.or (SAWCoreScaffolding.not b) b) SAWCoreScaffolding.true) x (or_True2 (SAWCoreScaffolding.not SAWCoreScaffolding.true)) (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.or var__0 SAWCoreScaffolding.false) var__0 SAWCoreScaffolding.true (or_False2 var__0) not_False). Definition and_triv1 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and x (SAWCoreScaffolding.not x)) SAWCoreScaffolding.false := - fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and b (SAWCoreScaffolding.not b)) SAWCoreScaffolding.false) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.and SAWCoreScaffolding.true (SAWCoreScaffolding.not SAWCoreScaffolding.true)) (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false (and_True1 (SAWCoreScaffolding.not SAWCoreScaffolding.true)) not_True) (and_False1 (SAWCoreScaffolding.not SAWCoreScaffolding.false)). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.true in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and b (SAWCoreScaffolding.not b)) SAWCoreScaffolding.false) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.and SAWCoreScaffolding.true var__0) var__0 SAWCoreScaffolding.false (and_True1 var__0) not_True) (and_False1 (SAWCoreScaffolding.not SAWCoreScaffolding.false)). Definition and_triv2 : forall (x : SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not x) x) SAWCoreScaffolding.false := - fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not b) b) SAWCoreScaffolding.false) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.true) (SAWCoreScaffolding.not SAWCoreScaffolding.true) SAWCoreScaffolding.false (and_True2 (SAWCoreScaffolding.not SAWCoreScaffolding.true)) not_True) (and_False2 (SAWCoreScaffolding.not SAWCoreScaffolding.false)). + fun (x : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.not SAWCoreScaffolding.true in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreScaffolding.and (SAWCoreScaffolding.not b) b) SAWCoreScaffolding.false) x (trans SAWCoreScaffolding.Bool (SAWCoreScaffolding.and var__0 SAWCoreScaffolding.true) var__0 SAWCoreScaffolding.false (and_True2 var__0) not_True) (and_False2 (SAWCoreScaffolding.not SAWCoreScaffolding.false)). Definition EqTrue : SAWCoreScaffolding.Bool -> Prop := fun (x : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool x SAWCoreScaffolding.true. @@ -330,8 +404,8 @@ Definition eitherCong0 : forall (t : Type), forall (x : Type), forall (y : Type) Definition eitherCong1 : forall (t : Type), forall (x : Type), forall (y : Type), SAWCoreScaffolding.Eq Type x y -> SAWCoreScaffolding.Eq Type (Either t x) (Either t y) := fun (t : Type) (x : Type) (y : Type) (eq : SAWCoreScaffolding.Eq Type x y) => eq_cong Type x y eq Type (fun (y' : Type) => Either t y'). -Definition boolToEither : SAWCoreScaffolding.Bool -> Either unit unit := - fun (b : SAWCoreScaffolding.Bool) => if b then Left unit unit tt else Right unit unit tt. +Definition boolToEither : SAWCoreScaffolding.Bool -> Either (unit : Type) (unit : Type) := + fun (b : SAWCoreScaffolding.Bool) => if b then Left (unit : Type) (unit : Type) tt else Right (unit : Type) (unit : Type) tt. Inductive Maybe (a : Type) : Type := | Nothing : Maybe a @@ -396,7 +470,9 @@ Definition eqNatAddS : forall (x : SAWCoreScaffolding.Nat), forall (y : SAWCoreS Definition eqNatAddComm : forall (x : SAWCoreScaffolding.Nat), forall (y : SAWCoreScaffolding.Nat), eqNat (addNat x y) (addNat y x) := fun (x : SAWCoreScaffolding.Nat) (y : SAWCoreScaffolding.Nat) => Nat__rec (fun (y' : SAWCoreScaffolding.Nat) => forall (x' : SAWCoreScaffolding.Nat), eqNat (addNat x' y') (addNat y' x')) (fun (x' : SAWCoreScaffolding.Nat) => eqNatAdd0 x') (fun (y' : SAWCoreScaffolding.Nat) (eqF : forall (x' : SAWCoreScaffolding.Nat), let var__0 := fun (n : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Nat in let var__1 := fun (_1 : SAWCoreScaffolding.Nat) (prev_sum : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Succ prev_sum in - SAWCoreScaffolding.Eq SAWCoreScaffolding.Nat (SAWCoreScaffolding.Nat_rect var__0 y' var__1 x') (SAWCoreScaffolding.Nat_rect var__0 x' var__1 y')) (x' : SAWCoreScaffolding.Nat) => trans SAWCoreScaffolding.Nat (addNat x' (SAWCoreScaffolding.Succ y')) (SAWCoreScaffolding.Succ (addNat x' y')) (SAWCoreScaffolding.Succ (addNat y' x')) (eqNatAddS x' y') (eqNatSucc (addNat x' y') (addNat y' x') (eqF x'))) y x. + SAWCoreScaffolding.Eq SAWCoreScaffolding.Nat (SAWCoreScaffolding.Nat_rect var__0 y' var__1 x') (SAWCoreScaffolding.Nat_rect var__0 x' var__1 y')) (x' : SAWCoreScaffolding.Nat) => let var__0 := addNat y' x' in + let var__1 := addNat x' y' in + trans SAWCoreScaffolding.Nat (addNat x' (SAWCoreScaffolding.Succ y')) (SAWCoreScaffolding.Succ var__1) (SAWCoreScaffolding.Succ var__0) (eqNatAddS x' y') (eqNatSucc var__1 var__0 (eqF x'))) y x. Definition addNat_assoc : forall (x : SAWCoreScaffolding.Nat), forall (y : SAWCoreScaffolding.Nat), forall (z : SAWCoreScaffolding.Nat), eqNat (addNat x (addNat y z)) (addNat (addNat x y) z) := fun (x : SAWCoreScaffolding.Nat) (y : SAWCoreScaffolding.Nat) (z : SAWCoreScaffolding.Nat) => Nat__rec (fun (x' : SAWCoreScaffolding.Nat) => eqNat (addNat x' (addNat y z)) (addNat (addNat x' y) z)) (SAWCoreScaffolding.Refl SAWCoreScaffolding.Nat (addNat y z)) (fun (x' : SAWCoreScaffolding.Nat) (eq : SAWCoreScaffolding.Eq SAWCoreScaffolding.Nat (SAWCoreScaffolding.Nat_rect (fun (n : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Nat) (addNat y z) (fun (_1 : SAWCoreScaffolding.Nat) (prev_sum : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Succ prev_sum) x') (SAWCoreScaffolding.Nat_rect (fun (n : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Nat) z (fun (_1 : SAWCoreScaffolding.Nat) (prev_sum : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Succ prev_sum) (SAWCoreScaffolding.Nat_rect (fun (n : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Nat) y (fun (_1 : SAWCoreScaffolding.Nat) (prev_sum : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Succ prev_sum) x'))) => eqNatSucc (addNat x' (addNat y z)) (addNat (addNat x' y) z) eq) x. @@ -584,7 +660,8 @@ Definition bvShiftR : forall (n : SAWCoreScaffolding.Nat), forall (a : Type), fo fun (n : SAWCoreScaffolding.Nat) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (w : SAWCoreScaffolding.Nat) (z : a) (xs : SAWCoreVectorsAsCoqVectors.Vec n a) (i : SAWCoreVectorsAsCoqVectors.Vec w SAWCoreScaffolding.Bool) => SAWCoreVectorsAsCoqVectors.shiftR n a z xs (SAWCoreVectorsAsCoqVectors.bvToNat w i). Definition bvSShiftR : forall (n : SAWCoreScaffolding.Nat), forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, forall (w : SAWCoreScaffolding.Nat), SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) a -> SAWCoreVectorsAsCoqVectors.Vec w SAWCoreScaffolding.Bool -> SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) a := - fun (n : SAWCoreScaffolding.Nat) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (w : SAWCoreScaffolding.Nat) (xs : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) a) (i : SAWCoreVectorsAsCoqVectors.Vec w SAWCoreScaffolding.Bool) => bvShiftR (SAWCoreScaffolding.Succ n) a w (SAWCorePrelude.sawAt (SAWCoreScaffolding.Succ n) a xs 0) xs i. + fun (n : SAWCoreScaffolding.Nat) (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (w : SAWCoreScaffolding.Nat) (xs : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) a) (i : SAWCoreVectorsAsCoqVectors.Vec w SAWCoreScaffolding.Bool) => let var__0 := SAWCoreScaffolding.Succ n in + bvShiftR var__0 a w (SAWCorePrelude.sawAt var__0 a xs 0) xs i. (* Prelude.bvAdd was skipped *) @@ -616,7 +693,8 @@ Definition bvCarry : forall (n : SAWCoreScaffolding.Nat), SAWCoreVectorsAsCoqVec fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => SAWCoreVectorsAsCoqVectors.bvult n (SAWCoreVectorsAsCoqVectors.bvAdd n x y) x. Definition bvSCarry : forall (n : SAWCoreScaffolding.Nat), SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool -> SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool := - fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool) => SAWCoreScaffolding.and (SAWCoreScaffolding.boolEq (msb n x) (msb n y)) (SAWCoreScaffolding.xor (msb n x) (msb n (SAWCoreVectorsAsCoqVectors.bvAdd (SAWCoreScaffolding.Succ n) x y))). + fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool) => let var__0 := msb n x in + SAWCoreScaffolding.and (SAWCoreScaffolding.boolEq var__0 (msb n y)) (SAWCoreScaffolding.xor var__0 (msb n (SAWCoreVectorsAsCoqVectors.bvAdd (SAWCoreScaffolding.Succ n) x y))). Definition bvAddWithCarry : forall (n : SAWCoreScaffolding.Nat), SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool -> SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool -> prod SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) := fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => pair (bvCarry n x y) (SAWCoreVectorsAsCoqVectors.bvAdd n x y). @@ -630,7 +708,8 @@ Definition bvAddWithCarry : forall (n : SAWCoreScaffolding.Nat), SAWCoreVectorsA (* Prelude.bvSub was skipped *) Definition bvSBorrow : forall (n : SAWCoreScaffolding.Nat), SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool -> SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool -> SAWCoreScaffolding.Bool := - fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool) => SAWCoreScaffolding.and (SAWCoreScaffolding.xor (msb n x) (msb n y)) (SAWCoreScaffolding.xor (msb n x) (msb n (SAWCoreVectorsAsCoqVectors.bvSub (SAWCoreScaffolding.Succ n) x y))). + fun (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool) (y : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool) => let var__0 := msb n x in + SAWCoreScaffolding.and (SAWCoreScaffolding.xor var__0 (msb n y)) (SAWCoreScaffolding.xor var__0 (msb n (SAWCoreVectorsAsCoqVectors.bvSub (SAWCoreScaffolding.Succ n) x y))). (* Prelude.bvMul was skipped *) @@ -692,7 +771,8 @@ Definition bvUExt : forall (m : SAWCoreScaffolding.Nat), forall (n : SAWCoreScaf fun (m : SAWCoreScaffolding.Nat) (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => append m n SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvNat m 0) x. Definition replicateBool : forall (n : SAWCoreScaffolding.Nat), SAWCoreScaffolding.Bool -> SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool := - fun (n : SAWCoreScaffolding.Nat) (b : SAWCoreScaffolding.Bool) => if b then bvNot n (SAWCoreVectorsAsCoqVectors.bvNat n 0) else SAWCoreVectorsAsCoqVectors.bvNat n 0. + fun (n : SAWCoreScaffolding.Nat) (b : SAWCoreScaffolding.Bool) => let var__0 := SAWCoreVectorsAsCoqVectors.bvNat n 0 in + if b then bvNot n var__0 else var__0. Definition bvSExt : forall (m : SAWCoreScaffolding.Nat), forall (n : SAWCoreScaffolding.Nat), SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool -> SAWCoreVectorsAsCoqVectors.Vec (addNat m (SAWCoreScaffolding.Succ n)) SAWCoreScaffolding.Bool := fun (m : SAWCoreScaffolding.Nat) (n : SAWCoreScaffolding.Nat) (x : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool) => append m (SAWCoreScaffolding.Succ n) SAWCoreScaffolding.Bool (replicateBool m (msb n x)) x. @@ -733,7 +813,8 @@ Definition streamAppend : forall (a : Type), forall (n : SAWCoreScaffolding.Nat) fun (a : Type) (n : SAWCoreScaffolding.Nat) (xs : SAWCoreVectorsAsCoqVectors.Vec n a) (ys : Stream a) => MkStream a (fun (i : SAWCoreScaffolding.Nat) => SAWCoreVectorsAsCoqVectors.atWithDefault n a (streamGet a ys (subNat i n)) xs i). Definition streamJoin : forall (a : Type), forall {Inh_a : SAWCoreScaffolding.Inhabited a}, forall (n : SAWCoreScaffolding.Nat), Stream (SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) a) -> Stream a := - fun (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (n : SAWCoreScaffolding.Nat) (s : Stream (SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) a)) => MkStream a (fun (i : SAWCoreScaffolding.Nat) => SAWCorePrelude.sawAt (SAWCoreScaffolding.Succ n) a (streamGet (SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) a) s (divNat i (SAWCoreScaffolding.Succ n))) (modNat i (SAWCoreScaffolding.Succ n))). + fun (a : Type) {Inh_a : SAWCoreScaffolding.Inhabited a} (n : SAWCoreScaffolding.Nat) (s : Stream (SAWCoreVectorsAsCoqVectors.Vec (SAWCoreScaffolding.Succ n) a)) => MkStream a (fun (i : SAWCoreScaffolding.Nat) => let var__0 := SAWCoreScaffolding.Succ n in + SAWCorePrelude.sawAt var__0 a (streamGet (SAWCoreVectorsAsCoqVectors.Vec var__0 a) s (divNat i var__0)) (modNat i var__0)). Definition streamSplit : forall (a : Type), forall (n : SAWCoreScaffolding.Nat), Stream a -> Stream (SAWCoreVectorsAsCoqVectors.Vec n a) := fun (a : Type) (n : SAWCoreScaffolding.Nat) (xs : Stream a) => MkStream (SAWCoreVectorsAsCoqVectors.Vec n a) (fun (i : SAWCoreScaffolding.Nat) => SAWCoreVectorsAsCoqVectors.gen n a (fun (j : SAWCoreScaffolding.Nat) => streamGet a xs (addNat (mulNat i n) j))). @@ -825,11 +906,14 @@ Definition uncurrySigma : forall (a : Type), forall (b : a -> Type), forall (c : (* Prelude.List__rec was skipped *) -Definition unfoldList : forall (a : Type), @Datatypes.list a -> Either unit (prod a (@Datatypes.list a)) := - fun (a : Type) (l : @Datatypes.list a) => @Datatypes.list_rect a (fun (_1 : @Datatypes.list a) => Either unit (prod a (@Datatypes.list a))) (Left unit (prod a (@Datatypes.list a)) tt) (fun (x : a) (l1 : @Datatypes.list a) (_1 : Either unit (prod a (@Datatypes.list a))) => Right unit (prod a (@Datatypes.list a)) (pair x l1)) l. +Definition unfoldList : forall (a : Type), @Datatypes.list a -> Either (unit : Type) (prod a (@Datatypes.list a)) := + fun (a : Type) (l : @Datatypes.list a) => let var__0 := @Datatypes.list a in + @Datatypes.list_rect a (fun (_1 : var__0) => Either (unit : Type) (prod a (@Datatypes.list a))) (Left (unit : Type) (prod a var__0) tt) (fun (x : a) (l1 : @Datatypes.list a) (_1 : Either (unit : Type) (prod a (@Datatypes.list a))) => Right (unit : Type) (prod a (@Datatypes.list a)) (pair x l1)) l. -Definition foldList : forall (a : Type), Either unit (prod a (@Datatypes.list a)) -> @Datatypes.list a := - fun (a : Type) => either unit (prod a (@Datatypes.list a)) (@Datatypes.list a) (fun (_1 : unit) => @Datatypes.nil a) (fun (tup : prod a (@Datatypes.list a)) => @Datatypes.cons a (SAWCoreScaffolding.fst tup) (SAWCoreScaffolding.snd tup)). +Definition foldList : forall (a : Type), Either (unit : Type) (prod a (@Datatypes.list a)) -> @Datatypes.list a := + fun (a : Type) => let var__0 := @Datatypes.list a in + let var__1 := prod a var__0 in + either (unit : Type) var__1 var__0 (fun (_1 : unit : Type) => @Datatypes.nil a) (fun (tup : var__1) => @Datatypes.cons a (SAWCoreScaffolding.fst tup) (SAWCoreScaffolding.snd tup)). Inductive ListSort : Type := | LS_Nil : ListSort @@ -851,13 +935,17 @@ Inductive W64List : Type := . Definition unfoldedW64List : Type := - Either unit (prod (@sigT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_1 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit)) (prod W64List unit)). + Either (unit : Type) (prod (@sigT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_1 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit : Type)) (prod W64List (unit : Type))). Definition unfoldW64List : W64List -> unfoldedW64List := - fun (l : W64List) => SAWCorePrelude.W64List_rect (fun (_1 : W64List) => unfoldedW64List) (Left unit (prod (@sigT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_1 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit)) (prod W64List unit)) tt) (fun (bv : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (l' : W64List) (_1 : Either unit (prod (@sigT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_1 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit)) (prod W64List unit))) => Right unit (prod (@sigT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_2 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit)) (prod W64List unit)) (pair (@existT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_2 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit) bv tt) (pair l' tt))) l. + fun (l : W64List) => let var__0 := SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool in + SAWCorePrelude.W64List_rect (fun (_1 : W64List) => unfoldedW64List) (Left (unit : Type) (prod (@sigT var__0 (fun (_1 : var__0) => unit : Type)) (prod W64List (unit : Type))) tt) (fun (bv : var__0) (l' : W64List) (_1 : Either (unit : Type) (prod (@sigT var__0 (fun (_1 : var__0) => unit : Type)) (prod W64List (unit : Type)))) => let var__1 := SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool in + let var__2 := fun (_2 : var__1) => unit : Type in + Right (unit : Type) (prod (@sigT var__1 var__2) (prod W64List (unit : Type))) (pair (@existT var__1 var__2 bv tt) (pair l' tt))) l. Definition foldW64List : unfoldedW64List -> W64List := - either unit (prod (@sigT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_1 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit)) (prod W64List unit)) W64List (fun (_1 : unit) => W64Nil) (fun (bv_l : prod (@sigT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_1 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit)) (prod W64List unit)) => W64Cons (@projT1 (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_1 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit) (SAWCoreScaffolding.fst bv_l)) (SAWCoreScaffolding.fst (SAWCoreScaffolding.snd bv_l))). + either (unit : Type) (prod (@sigT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_1 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit : Type)) (prod W64List (unit : Type))) W64List (fun (_1 : unit : Type) => W64Nil) (fun (bv_l : prod (@sigT (SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) (fun (_1 : SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool) => unit : Type)) (prod W64List (unit : Type))) => let var__0 := SAWCoreVectorsAsCoqVectors.Vec 64 SAWCoreScaffolding.Bool in + W64Cons (@projT1 var__0 (fun (_1 : var__0) => unit : Type) (SAWCoreScaffolding.fst bv_l)) (SAWCoreScaffolding.fst (SAWCoreScaffolding.snd bv_l))). Axiom bvEqWithProof : forall (n : SAWCoreScaffolding.Nat), forall (v1 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (v2 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), Maybe (SAWCoreScaffolding.Eq (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) v1 v2) . @@ -909,10 +997,12 @@ Definition genBVVecFromVec : forall (m : SAWCoreScaffolding.Nat), forall (a : Ty fun (m : SAWCoreScaffolding.Nat) (a : Type) (v : SAWCoreVectorsAsCoqVectors.Vec m a) (def : a) (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => genBVVec n len a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true) => SAWCoreVectorsAsCoqVectors.atWithDefault m a def v (SAWCoreVectorsAsCoqVectors.bvToNat n i)). Definition efq : forall (a : Type), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false -> a := - fun (a : Type) (contra : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) => SAWCoreScaffolding.coerce unit a (trans Type unit (if SAWCoreScaffolding.true then unit else a) a (sym Type (if SAWCoreScaffolding.true then unit else a) unit (ite_true Type unit a)) (trans Type (if SAWCoreScaffolding.true then unit else a) (if SAWCoreScaffolding.false then unit else a) a (eq_cong SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false contra Type (fun (b : SAWCoreScaffolding.Bool) => if b then unit else a)) (ite_false Type unit a))) tt. + fun (a : Type) (contra : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) => let var__0 := if SAWCoreScaffolding.true then unit : Type else a in + SAWCoreScaffolding.coerce (unit : Type) a (trans Type (unit : Type) var__0 a (sym Type var__0 (unit : Type) (ite_true Type (unit : Type) a)) (trans Type var__0 (if SAWCoreScaffolding.false then unit : Type else a) a (eq_cong SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false contra Type (fun (b : SAWCoreScaffolding.Bool) => if b then unit : Type else a)) (ite_false Type (unit : Type) a))) tt. Definition emptyBVVec : forall (n : SAWCoreScaffolding.Nat), forall (a : Type), BVVec n (SAWCoreVectorsAsCoqVectors.bvNat n 0) a := - fun (n : SAWCoreScaffolding.Nat) (a : Type) => genBVVec n (SAWCoreVectorsAsCoqVectors.bvNat n 0) a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i (SAWCoreVectorsAsCoqVectors.bvNat n 0)) SAWCoreScaffolding.true) => efq a (trans SAWCoreScaffolding.Bool SAWCoreScaffolding.true (SAWCoreVectorsAsCoqVectors.bvult n i (SAWCoreVectorsAsCoqVectors.bvNat n 0)) SAWCoreScaffolding.false (sym SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i (SAWCoreVectorsAsCoqVectors.bvNat n 0)) SAWCoreScaffolding.true pf) (not_bvult_zero n i))). + fun (n : SAWCoreScaffolding.Nat) (a : Type) => genBVVec n (SAWCoreVectorsAsCoqVectors.bvNat n 0) a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i (SAWCoreVectorsAsCoqVectors.bvNat n 0)) SAWCoreScaffolding.true) => let var__0 := SAWCoreVectorsAsCoqVectors.bvult n i (SAWCoreVectorsAsCoqVectors.bvNat n 0) in + efq a (trans SAWCoreScaffolding.Bool SAWCoreScaffolding.true var__0 SAWCoreScaffolding.false (sym SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.true pf) (not_bvult_zero n i))). Definition repeatBVVec : forall (n : SAWCoreScaffolding.Nat), forall (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (a : Type), a -> BVVec n len a := fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (x : a) => genBVVec n len a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true) => x). @@ -921,7 +1011,10 @@ Definition singletonBVVec : forall (n : SAWCoreScaffolding.Nat), forall (a : Typ fun (n : SAWCoreScaffolding.Nat) (a : Type) (x : a) => repeatBVVec n (SAWCoreVectorsAsCoqVectors.bvNat n 1) a x. Definition atBVVec : forall (n : SAWCoreScaffolding.Nat), forall (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (a : Type), BVVec n len a -> forall (ix : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), is_bvult n ix len -> a := - fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (x : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) a) (ix : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n ix len) SAWCoreScaffolding.true) => atWithProof (SAWCoreVectorsAsCoqVectors.bvToNat n len) a x (SAWCoreVectorsAsCoqVectors.bvToNat n ix) (bvult_to_IsLtNat n len (SAWCoreVectorsAsCoqVectors.bvToNat n ix) (trans SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n (SAWCoreVectorsAsCoqVectors.bvNat n (SAWCoreVectorsAsCoqVectors.bvToNat n ix)) len) (SAWCoreVectorsAsCoqVectors.bvult n ix len) SAWCoreScaffolding.true (eq_cong (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (SAWCoreVectorsAsCoqVectors.bvNat n (SAWCoreVectorsAsCoqVectors.bvToNat n ix)) ix (bvNat_bvToNat_id n ix) SAWCoreScaffolding.Bool (fun (y : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => SAWCoreVectorsAsCoqVectors.bvult n y len)) pf)). + fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (x : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) a) (ix : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n ix len) SAWCoreScaffolding.true) => let var__0 := SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool in + let var__1 := SAWCoreVectorsAsCoqVectors.bvToNat n ix in + let var__2 := SAWCoreVectorsAsCoqVectors.bvNat n var__1 in + atWithProof (SAWCoreVectorsAsCoqVectors.bvToNat n len) a x var__1 (bvult_to_IsLtNat n len var__1 (trans SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n var__2 len) (SAWCoreVectorsAsCoqVectors.bvult n ix len) SAWCoreScaffolding.true (eq_cong var__0 var__2 ix (bvNat_bvToNat_id n ix) SAWCoreScaffolding.Bool (fun (y : var__0) => SAWCoreVectorsAsCoqVectors.bvult n y len)) pf)). Axiom at_gen_BVVec : forall (n : SAWCoreScaffolding.Nat), forall (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (a : Type), forall (f : forall (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), is_bvult n i len -> a), forall (ix : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (pf : is_bvult n ix len), SAWCoreScaffolding.Eq a (atBVVec n len a (genBVVec n len a f) ix pf) (f ix pf) . @@ -931,7 +1024,8 @@ Definition updBVVec : forall (n : SAWCoreScaffolding.Nat), forall (len : SAWCore fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (v : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) a) (ix : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (elem : a) => genBVVec n len a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true) => if bvEq n i ix then elem else atBVVec n len a v i pf). Definition adjustBVVec : forall (n : SAWCoreScaffolding.Nat), forall (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (a : Type), BVVec n len a -> (a -> a) -> SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool -> BVVec n len a := - fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (v : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) a) (f : a -> a) (ix : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => genBVVec n len a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true) => if bvEq n i ix then f (atBVVec n len a v i pf) else atBVVec n len a v i pf). + fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (v : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) a) (f : a -> a) (ix : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => genBVVec n len a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true) => let var__0 := atBVVec n len a v i pf in + if bvEq n i ix then f var__0 else var__0). Definition takeBVVec : forall (n : SAWCoreScaffolding.Nat), forall (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (a : Type), forall (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), is_bvule n i len -> BVVec n len a -> BVVec n i a := fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvule n i len) SAWCoreScaffolding.true) (v : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) a) => genBVVec n i a (fun (j : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf2 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n j i) SAWCoreScaffolding.true) => atBVVec n len a v j (trans_bvult_bvule n j i len pf2 pf)). @@ -943,10 +1037,13 @@ Definition sliceBVVec : forall (n : SAWCoreScaffolding.Nat), forall (len : SAWCo fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (start' : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (len' : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf1 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvule n start' len) SAWCoreScaffolding.true) (pf2 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvule n len' (SAWCoreVectorsAsCoqVectors.bvSub n len start')) SAWCoreScaffolding.true) (v : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) a) => takeBVVec n (SAWCoreVectorsAsCoqVectors.bvSub n len start') a len' pf2 (dropBVVec n len a start' pf1 v). Definition updSliceBVVec : forall (n : SAWCoreScaffolding.Nat), forall (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (a : Type), BVVec n len a -> forall (start' : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (len' : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), BVVec n len' a -> BVVec n len a := - fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (v : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) a) (start' : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (len' : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (v_sub : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len') a) => genBVVec n len a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true) => if SAWCoreVectorsAsCoqVectors.bvule n start' i then maybe (is_bvult n (SAWCoreVectorsAsCoqVectors.bvSub n i start') len') a (atBVVec n len a v i pf) (fun (pf_sub : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n (SAWCoreVectorsAsCoqVectors.bvSub n i start') len') SAWCoreScaffolding.true) => atBVVec n len' a v_sub (SAWCoreVectorsAsCoqVectors.bvSub n i start') pf_sub) (bvultWithProof n (SAWCoreVectorsAsCoqVectors.bvSub n i start') len') else atBVVec n len a v i pf). + fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (v : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) a) (start' : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (len' : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (v_sub : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len') a) => genBVVec n len a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true) => let var__0 := SAWCoreVectorsAsCoqVectors.bvSub n i start' in + let var__1 := atBVVec n len a v i pf in + if SAWCoreVectorsAsCoqVectors.bvule n start' i then maybe (is_bvult n var__0 len') a var__1 (fun (pf_sub : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n var__0 len') SAWCoreScaffolding.true) => atBVVec n len' a v_sub (SAWCoreVectorsAsCoqVectors.bvSub n i start') pf_sub) (bvultWithProof n var__0 len') else var__1). Definition appendBVVec : forall (n : SAWCoreScaffolding.Nat), forall (len1 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (len2 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (a : Type), BVVec n len1 a -> BVVec n len2 a -> BVVec n (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2) a := - fun (n : SAWCoreScaffolding.Nat) (len1 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (len2 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (v1 : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len1) a) (v2 : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len2) a) => genBVVec n (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2) a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf12 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2)) SAWCoreScaffolding.true) => SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len1) b -> a) (SAWCoreVectorsAsCoqVectors.bvult n i len1) (fun (pf1 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len1) SAWCoreScaffolding.true) => atBVVec n len1 a v1 i pf1) (fun (not_pf1 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len1) SAWCoreScaffolding.false) => atBVVec n len2 a v2 (SAWCoreVectorsAsCoqVectors.bvSub n i len1) (bvult_sum_bvult_sub n i len1 len2 pf12 not_pf1)) (SAWCoreScaffolding.Refl SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len1))). + fun (n : SAWCoreScaffolding.Nat) (len1 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (len2 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (v1 : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len1) a) (v2 : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len2) a) => genBVVec n (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2) a (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf12 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2)) SAWCoreScaffolding.true) => let var__0 := SAWCoreVectorsAsCoqVectors.bvult n i len1 in + SAWCoreScaffolding.iteDep (fun (b : SAWCoreScaffolding.Bool) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len1) b -> a) var__0 (fun (pf1 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.true) => atBVVec n len1 a v1 i pf1) (fun (not_pf1 : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool var__0 SAWCoreScaffolding.false) => atBVVec n len2 a v2 (SAWCoreVectorsAsCoqVectors.bvSub n i len1) (bvult_sum_bvult_sub n i len1 len2 pf12 not_pf1)) (SAWCoreScaffolding.Refl SAWCoreScaffolding.Bool var__0)). Inductive IRTDesc (As : ListSort) : Type := | IRT_varD : SAWCoreScaffolding.Nat -> IRTDesc As @@ -993,15 +1090,26 @@ Definition IRT__rec : forall (As : ListSort), forall (P : forall (Ds : IRTSubsts fun (As : ListSort) (P : forall (Ds : IRTSubsts As), forall (D : IRTDesc As), IRT As Ds D -> Type) (f1 : forall (Ds : IRTSubsts As), forall (i : SAWCoreScaffolding.Nat), forall (x : IRT As (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTSubsts As) (fun (_1 : SAWCoreScaffolding.Nat) => IRTs_Nil As) (fun (_1 : IRTDesc As) (Ds1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTSubsts As) => Nat_cases (IRTSubsts As) Ds1 (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => rec n)) Ds (SAWCoreScaffolding.Succ i)) (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTDesc As) (fun (_1 : SAWCoreScaffolding.Nat) => IRT_empty As) (fun (D : IRTDesc As) (_1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTDesc As) => Nat_cases (IRTDesc As) D (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTDesc As) => rec n)) Ds i)), P (dropIRTs As Ds (SAWCoreScaffolding.Succ i)) (atIRTs As Ds i) x -> P Ds (IRT_varD As i) (IRT_elemD As Ds i x)) (f2 : forall (Ds : IRTSubsts As), forall (D : IRTDesc As), forall (x : IRT As (IRTs_Cons As (IRT_mu As D) Ds) D), P (IRTs_Cons As (IRT_mu As D) Ds) D x -> P Ds (IRT_mu As D) (IRT_fold As Ds D x)) (f3 : forall (Ds : IRTSubsts As), forall (Dl : IRTDesc As), forall (Dr : IRTDesc As), forall (xl : IRT As Ds Dl), P Ds Dl xl -> P Ds (IRT_Either As Dl Dr) (IRT_Left As Ds Dl Dr xl)) (f4 : forall (Ds : IRTSubsts As), forall (Dl : IRTDesc As), forall (Dr : IRTDesc As), forall (xr : IRT As Ds Dr), P Ds Dr xr -> P Ds (IRT_Either As Dl Dr) (IRT_Right As Ds Dl Dr xr)) (f5 : forall (Ds : IRTSubsts As), forall (Dl : IRTDesc As), forall (Dr : IRTDesc As), forall (xl : IRT As Ds Dl), P Ds Dl xl -> forall (xr : IRT As Ds Dr), P Ds Dr xr -> P Ds (IRT_prod As Dl Dr) (IRT_pair As Ds Dl Dr xl xr)) (f6 : forall (Ds : IRTSubsts As), forall (i : SAWCoreScaffolding.Nat), forall (Df : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As), forall (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i), forall (xf : IRT As Ds (Df a)), P Ds (Df a) xf -> P Ds (IRT_sigT As i Df) (IRT_existT As Ds i Df a xf)) (f7 : forall (Ds : IRTSubsts As), forall (n : SAWCoreScaffolding.Nat), forall (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (D : IRTDesc As), forall (xg : forall (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true -> IRT As Ds D), (forall (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true), P Ds D (xg i pf)) -> P Ds (IRT_BVVec As n len D) (IRT_genBVVec As Ds n len D xg)) (f8 : forall (Ds : IRTSubsts As), P Ds (IRT_unit As) (IRT_tt As Ds)) (f9 : forall (Ds : IRTSubsts As), forall (i : SAWCoreScaffolding.Nat), forall (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i), P Ds (IRT_varT As i) (IRT_elemT As Ds i a)) (Ds : IRTSubsts As) (D : IRTDesc As) (x : IRT As Ds D) => SAWCorePrelude.IRT_rect As P f1 f2 f3 f4 f5 f6 f7 f8 f9 Ds D x. Definition UnfoldedIRT : forall (As : ListSort), IRTSubsts As -> IRTDesc As -> Type := - fun (As : ListSort) (Ds : IRTSubsts As) (D : IRTDesc As) => IRTDesc__rec As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds1)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) D Ds. + fun (As : ListSort) (Ds : IRTSubsts As) (D : IRTDesc As) => let var__0 := IRTDesc As in + let var__1 := IRTSubsts As in + IRTDesc__rec As (fun (_1 : var__0) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D1 : var__0) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds1)) (fun (_1 : var__0) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_1 : var__0) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_1 : var__1) => unit : Type) (fun (_1 : var__1) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) D Ds. Definition unfoldIRT : forall (As : ListSort), forall (Ds : IRTSubsts As), forall (D : IRTDesc As), IRT As Ds D -> UnfoldedIRT As Ds D := - fun (As : ListSort) => IRT__rec As (fun (Ds : IRTSubsts As) (D : IRTDesc As) (_1 : IRT As Ds D) => UnfoldedIRT As Ds D) (fun (Ds : IRTSubsts As) (i : SAWCoreScaffolding.Nat) (x : IRT As (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTSubsts As) (fun (_1 : SAWCoreScaffolding.Nat) => IRTs_Nil As) (fun (_1 : IRTDesc As) (Ds1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTSubsts As) => Nat_cases (IRTSubsts As) Ds1 (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => rec n)) Ds (SAWCoreScaffolding.Succ i)) (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTDesc As) (fun (_1 : SAWCoreScaffolding.Nat) => IRT_empty As) (fun (D : IRTDesc As) (_1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTDesc As) => Nat_cases (IRTDesc As) D (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTDesc As) => rec n)) Ds i)) (_1 : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds1 i1)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i1 -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1 -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i1) (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTDesc As) (fun (_1 : SAWCoreScaffolding.Nat) => IRT_empty As) (fun (D : IRTDesc As) (_1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTDesc As) => Nat_cases (IRTDesc As) D (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTDesc As) => rec n)) Ds i) (dropIRTs As Ds (SAWCoreScaffolding.Succ i))) => x) (fun (Ds : IRTSubsts As) (D : IRTDesc As) (_1 : IRT As (IRTs_Cons As (IRT_mu As D) Ds) D) (rec : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i) D (IRTs_Cons As (IRT_mu As D) Ds)) => rec) (fun (Ds : IRTSubsts As) (Dl : IRTDesc As) (Dr : IRTDesc As) (_1 : IRT As Ds Dl) (recl : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i) Dl Ds) => Left (UnfoldedIRT As Ds Dl) (UnfoldedIRT As Ds Dr) recl) (fun (Ds : IRTSubsts As) (Dl : IRTDesc As) (Dr : IRTDesc As) (_1 : IRT As Ds Dr) (recr : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i) Dr Ds) => Right (UnfoldedIRT As Ds Dl) (UnfoldedIRT As Ds Dr) recr) (fun (Ds : IRTSubsts As) (Dl : IRTDesc As) (Dr : IRTDesc As) (_1 : IRT As Ds Dl) (recl : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i) Dl Ds) (_2 : IRT As Ds Dr) (recr : SAWCorePrelude.IRTDesc_rect As (fun (_3 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_3 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_4 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl1 Ds1) (recr Ds1)) (fun (_3 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_4 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl1 Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_3 : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_4 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_4 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_4 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_5 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_4 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_4 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_4 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_5 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_3 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_3 : IRTSubsts As) => unit) (fun (_3 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_3 : IRTSubsts As) => listSortGet As i) Dr Ds) => pair recl recr) (fun (Ds : IRTSubsts As) (i : SAWCoreScaffolding.Nat) (Df : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) (_1 : IRT As Ds (Df a)) (recf : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds1 i1)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i1 : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1 -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i1 -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a1 : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i1) => recf a1 Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i1) (Df a) Ds) => @existT (listSortGet As i) (fun (a1 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => UnfoldedIRT As Ds (Df a1)) a recf) (fun (Ds : IRTSubsts As) (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (D : IRTDesc As) (_1 : forall (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true -> IRT As Ds D) (recg : forall (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true -> let var__0 := IRTDesc As in - let var__1 := IRTSubsts As in - SAWCorePrelude.IRTDesc_rect As (fun (_3 : var__0) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds1 i1)) (fun (D1 : var__0) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds1)) (fun (_3 : var__0) (recl : IRTSubsts As -> Type) (_4 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_3 : var__0) (recl : IRTSubsts As -> Type) (_4 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i1 : SAWCoreScaffolding.Nat) (_3 : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_4 : Type) => rec n1)) As i1 -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_4 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_4 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_4 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_5 : Type) => rec n1)) As i1 -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a : SAWCorePrelude.ListSort_rect (fun (_4 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_4 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_4 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_5 : Type) => rec n1)) As i1) => recf a Ds1)) (fun (n1 : SAWCoreScaffolding.Nat) (len1 : SAWCoreVectorsAsCoqVectors.Vec n1 SAWCoreScaffolding.Bool) (_3 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n1 len1 (rec Ds1)) (fun (_3 : var__1) => unit) (fun (_3 : var__1) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_3 : IRTSubsts As) => listSortGet As i1) D Ds) => genBVVec n len (UnfoldedIRT As Ds D) recg) (fun (Ds : IRTSubsts As) => tt) (fun (Ds : IRTSubsts As) (i : SAWCoreScaffolding.Nat) (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) => a). + fun (As : ListSort) => let var__0 := IRTSubsts As in + IRT__rec As (fun (Ds : var__0) (D : IRTDesc As) (_1 : IRT As Ds D) => UnfoldedIRT As Ds D) (fun (Ds : var__0) (i : SAWCoreScaffolding.Nat) (x : IRT As (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTSubsts As) (fun (_1 : SAWCoreScaffolding.Nat) => IRTs_Nil As) (fun (_1 : IRTDesc As) (Ds1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTSubsts As) => Nat_cases (IRTSubsts As) Ds1 (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => rec n)) Ds (SAWCoreScaffolding.Succ i)) (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTDesc As) (fun (_1 : SAWCoreScaffolding.Nat) => IRT_empty As) (fun (D : IRTDesc As) (_1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTDesc As) => Nat_cases (IRTDesc As) D (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTDesc As) => rec n)) Ds i)) (_1 : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds1 i1)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i1 -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1 -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i1) (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTDesc As) (fun (_1 : SAWCoreScaffolding.Nat) => IRT_empty As) (fun (D : IRTDesc As) (_1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTDesc As) => Nat_cases (IRTDesc As) D (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTDesc As) => rec n)) Ds i) (dropIRTs As Ds (SAWCoreScaffolding.Succ i))) => x) (fun (Ds : var__0) (D : IRTDesc As) (_1 : IRT As (IRTs_Cons As (IRT_mu As D) Ds) D) (rec : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit : Type) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i) D (IRTs_Cons As (IRT_mu As D) Ds)) => rec) (fun (Ds : var__0) (Dl : IRTDesc As) (Dr : IRTDesc As) (_1 : IRT As Ds Dl) (recl : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit : Type) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i) Dl Ds) => Left (UnfoldedIRT As Ds Dl) (UnfoldedIRT As Ds Dr) recl) (fun (Ds : var__0) (Dl : IRTDesc As) (Dr : IRTDesc As) (_1 : IRT As Ds Dr) (recr : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit : Type) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i) Dr Ds) => Right (UnfoldedIRT As Ds Dl) (UnfoldedIRT As Ds Dr) recr) (fun (Ds : var__0) (Dl : IRTDesc As) (Dr : IRTDesc As) (_1 : IRT As Ds Dl) (recl : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit : Type) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i) Dl Ds) (_2 : IRT As Ds Dr) (recr : SAWCorePrelude.IRTDesc_rect As (fun (_3 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds1 i)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_3 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_4 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl1 Ds1) (recr Ds1)) (fun (_3 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_4 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl1 Ds1) (recr Ds1)) (fun (i : SAWCoreScaffolding.Nat) (_3 : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_4 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_4 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_4 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_5 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_4 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_4 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_4 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_5 : Type) => rec n)) As i) => recf a Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_3 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_3 : IRTSubsts As) => unit : Type) (fun (_3 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_3 : IRTSubsts As) => listSortGet As i) Dr Ds) => pair recl recr) (fun (Ds : var__0) (i : SAWCoreScaffolding.Nat) (Df : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) (_1 : IRT As Ds (Df a)) (recf : SAWCorePrelude.IRTDesc_rect As (fun (_2 : IRTDesc As) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds1 i1)) (fun (D : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D) Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_2 : IRTDesc As) (recl : IRTSubsts As -> Type) (_3 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i1 : SAWCoreScaffolding.Nat) (_2 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1 -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i1 -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a1 : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_4 : Type) => rec n)) As i1) => recf a1 Ds1)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n len (rec Ds1)) (fun (_2 : IRTSubsts As) => unit : Type) (fun (_2 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => listSortGet As i1) (Df a) Ds) => @existT (listSortGet As i) (fun (a1 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => UnfoldedIRT As Ds (Df a1)) a recf) (fun (Ds : var__0) (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (D : IRTDesc As) (_1 : forall (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true -> IRT As Ds D) (recg : forall (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true -> let var__1 := IRTDesc As in + let var__2 := IRTSubsts As in + SAWCorePrelude.IRTDesc_rect As (fun (_3 : var__1) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) => IRT As (dropIRTs As Ds1 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds1 i1)) (fun (D1 : var__1) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds1)) (fun (_3 : var__1) (recl : IRTSubsts As -> Type) (_4 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => Either (recl Ds1) (recr Ds1)) (fun (_3 : var__1) (recl : IRTSubsts As -> Type) (_4 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => prod (recl Ds1) (recr Ds1)) (fun (i1 : SAWCoreScaffolding.Nat) (_3 : SAWCorePrelude.ListSort_rect (fun (_3 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_3 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_3 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_4 : Type) => rec n1)) As i1 -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_4 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_4 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_4 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_5 : Type) => rec n1)) As i1 -> IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a : SAWCorePrelude.ListSort_rect (fun (_4 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_4 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_4 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_5 : Type) => rec n1)) As i1) => recf a Ds1)) (fun (n1 : SAWCoreScaffolding.Nat) (len1 : SAWCoreVectorsAsCoqVectors.Vec n1 SAWCoreScaffolding.Bool) (_3 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds1 : IRTSubsts As) => BVVec n1 len1 (rec Ds1)) (fun (_3 : var__2) => unit : Type) (fun (_3 : var__2) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_3 : IRTSubsts As) => listSortGet As i1) D Ds) => genBVVec n len (UnfoldedIRT As Ds D) recg) (fun (Ds : var__0) => tt) (fun (Ds : var__0) (i : SAWCoreScaffolding.Nat) (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) => a). Definition foldIRT : forall (As : ListSort), forall (Ds : IRTSubsts As), forall (D : IRTDesc As), UnfoldedIRT As Ds D -> IRT As Ds D := - fun (As : ListSort) (Ds : IRTSubsts As) (D : IRTDesc As) => IRTDesc__rec As (fun (D1 : IRTDesc As) => forall (Ds1 : IRTSubsts As), UnfoldedIRT As Ds1 D1 -> IRT As Ds1 D1) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) (x : IRT As (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTSubsts As) (fun (_1 : SAWCoreScaffolding.Nat) => IRTs_Nil As) (fun (_1 : IRTDesc As) (Ds2 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTSubsts As) => Nat_cases (IRTSubsts As) Ds2 (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => rec n)) Ds1 (SAWCoreScaffolding.Succ i)) (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTDesc As) (fun (_1 : SAWCoreScaffolding.Nat) => IRT_empty As) (fun (D1 : IRTDesc As) (_1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTDesc As) => Nat_cases (IRTDesc As) D1 (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTDesc As) => rec n)) Ds1 i)) => IRT_elemD As Ds1 i x) (fun (D1 : IRTDesc As) (rec : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D2) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) D1 Ds1 -> IRT As Ds1 D1) (Ds1 : IRTSubsts As) (x : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D2 : IRTDesc As) (rec1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec1 (IRTs_Cons As (IRT_mu As D2) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec1 : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec1 n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec1 : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec1 n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec1 : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec1 n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec1 Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) D1 (IRTs_Cons As (IRT_mu As D1) Ds1)) => IRT_fold As Ds1 D1 (rec (IRTs_Cons As (IRT_mu As D1) Ds1) x)) (fun (Dl : IRTDesc As) (recl : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1 -> IRT As Ds1 Dl) (Dr : IRTDesc As) (recr : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1 -> IRT As Ds1 Dr) (Ds1 : IRTSubsts As) (x : Either (SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1) (SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1)) => either (UnfoldedIRT As Ds1 Dl) (UnfoldedIRT As Ds1 Dr) (IRT As Ds1 (IRT_Either As Dl Dr)) (fun (xl : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1) => IRT_Left As Ds1 Dl Dr (recl Ds1 xl)) (fun (xr : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1) => IRT_Right As Ds1 Dl Dr (recr Ds1 xr)) x) (fun (Dl : IRTDesc As) (recl : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1 -> IRT As Ds1 Dl) (Dr : IRTDesc As) (recr : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1 -> IRT As Ds1 Dr) (Ds1 : IRTSubsts As) (x : prod (SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1) (SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1)) => uncurry (UnfoldedIRT As Ds1 Dl) (UnfoldedIRT As Ds1 Dr) (IRT As Ds1 (IRT_prod As Dl Dr)) (fun (xl : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1) (xr : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1) => IRT_pair As Ds1 Dl Dr (recl Ds1 xl) (recr Ds1 xr)) x) (fun (i : SAWCoreScaffolding.Nat) (Df : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : forall (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i), forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds2 i1)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i1 -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1 -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a1 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1) => recf a1 Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i1) (Df a) Ds1 -> IRT As Ds1 (Df a)) (Ds1 : IRTSubsts As) (x : @sigT (SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) => UnfoldedIRT As Ds1 (Df a))) => uncurrySigma (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) => UnfoldedIRT As Ds1 (Df a)) (IRT As Ds1 (IRT_sigT As i Df)) (fun (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) (xf : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds2 i1)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i1 -> IRTDesc As) (recf1 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1 -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a1 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1) => recf1 a1 Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i1) (Df a) Ds1) => IRT_existT As Ds1 i Df a (recf a Ds1 xf)) x) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (D1 : IRTDesc As) (recg : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D2) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_2 : Type) => rec n1)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_3 : Type) => rec n1)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_3 : Type) => rec n1)) As i) => recf a Ds2)) (fun (n1 : SAWCoreScaffolding.Nat) (len1 : SAWCoreVectorsAsCoqVectors.Vec n1 SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n1 len1 (rec Ds2)) (fun (_1 : IRTSubsts As) => unit) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) D1 Ds1 -> IRT As Ds1 D1) (Ds1 : IRTSubsts As) (x : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) (UnfoldedIRT As Ds1 D1)) => IRT_genBVVec As Ds1 n len D1 (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true) => recg Ds1 (atBVVec n len (UnfoldedIRT As Ds1 D1) x i pf))) (fun (Ds1 : IRTSubsts As) (x : unit) => IRT_tt As Ds1) (fun (Ds1 : IRTSubsts As) (x : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) => efq (IRT As Ds1 (IRT_empty As)) x) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) (x : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) => IRT_elemT As Ds1 i x) D Ds. + fun (As : ListSort) (Ds : IRTSubsts As) (D : IRTDesc As) => let var__0 := IRTDesc As in + let var__1 := IRTSubsts As in + IRTDesc__rec As (fun (D1 : var__0) => forall (Ds1 : IRTSubsts As), UnfoldedIRT As Ds1 D1 -> IRT As Ds1 D1) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) (x : IRT As (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTSubsts As) (fun (_1 : SAWCoreScaffolding.Nat) => IRTs_Nil As) (fun (_1 : IRTDesc As) (Ds2 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTSubsts As) => Nat_cases (IRTSubsts As) Ds2 (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTSubsts As) => rec n)) Ds1 (SAWCoreScaffolding.Succ i)) (SAWCorePrelude.IRTSubsts_rect As (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Nat -> IRTDesc As) (fun (_1 : SAWCoreScaffolding.Nat) => IRT_empty As) (fun (D1 : IRTDesc As) (_1 : IRTSubsts As) (rec : SAWCoreScaffolding.Nat -> IRTDesc As) => Nat_cases (IRTDesc As) D1 (fun (n : SAWCoreScaffolding.Nat) (_2 : IRTDesc As) => rec n)) Ds1 i)) => IRT_elemD As Ds1 i x) (fun (D1 : var__0) (rec : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D2) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) D1 Ds1 -> IRT As Ds1 D1) (Ds1 : IRTSubsts As) (x : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D2 : IRTDesc As) (rec1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec1 (IRTs_Cons As (IRT_mu As D2) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec1 : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec1 n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec1 : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec1 n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec1 : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec1 n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec1 Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) D1 (IRTs_Cons As (IRT_mu As D1) Ds1)) => IRT_fold As Ds1 D1 (rec (IRTs_Cons As (IRT_mu As D1) Ds1) x)) (fun (Dl : var__0) (recl : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1 -> IRT As Ds1 Dl) (Dr : IRTDesc As) (recr : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1 -> IRT As Ds1 Dr) (Ds1 : IRTSubsts As) (x : Either (SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1) (SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1)) => let var__2 := IRTDesc As in + let var__3 := IRTSubsts As in + let var__4 := SAWCorePrelude.IRTDesc_rect As (fun (_1 : var__2) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : var__2) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : var__2) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : var__2) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : var__3) => unit : Type) (fun (_1 : var__3) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) in + either (UnfoldedIRT As Ds1 Dl) (UnfoldedIRT As Ds1 Dr) (IRT As Ds1 (IRT_Either As Dl Dr)) (fun (xl : var__4 Dl Ds1) => IRT_Left As Ds1 Dl Dr (recl Ds1 xl)) (fun (xr : var__4 Dr Ds1) => IRT_Right As Ds1 Dl Dr (recr Ds1 xr)) x) (fun (Dl : var__0) (recl : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1 -> IRT As Ds1 Dl) (Dr : IRTDesc As) (recr : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1 -> IRT As Ds1 Dr) (Ds1 : IRTSubsts As) (x : prod (SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1) (SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1)) => let var__2 := IRTDesc As in + let var__3 := IRTSubsts As in + uncurry (UnfoldedIRT As Ds1 Dl) (UnfoldedIRT As Ds1 Dr) (IRT As Ds1 (IRT_prod As Dl Dr)) (fun (xl : SAWCorePrelude.IRTDesc_rect As (fun (_1 : var__2) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : var__2) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : var__2) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : var__2) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : var__3) => unit : Type) (fun (_1 : var__3) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dl Ds1) (xr : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl1 Ds2) (recr1 Ds2)) (fun (_1 : IRTDesc As) (recl1 : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr1 : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl1 Ds2) (recr1 Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i) => recf a Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) Dr Ds1) => IRT_pair As Ds1 Dl Dr (recl Ds1 xl) (recr Ds1 xr)) x) (fun (i : SAWCoreScaffolding.Nat) (Df : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i -> IRTDesc As) (recf : forall (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i), forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds2 i1)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i1 -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1 -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a1 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1) => recf a1 Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i1) (Df a) Ds1 -> IRT As Ds1 (Df a)) (Ds1 : IRTSubsts As) (x : @sigT (SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) => UnfoldedIRT As Ds1 (Df a))) => let var__2 := SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i in + uncurrySigma (listSortGet As i) (fun (a : var__2) => UnfoldedIRT As Ds1 (Df a)) (IRT As Ds1 (IRT_sigT As i Df)) (fun (a : var__2) (xf : SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i1 : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i1)) (atIRTs As Ds2 i1)) (fun (D1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D1) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i1 -> IRTDesc As) (recf1 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1 -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i1) (fun (a1 : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_3 : Type) => rec n)) As i1) => recf1 a1 Ds2)) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n len (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i1 : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i1) (Df a) Ds1) => IRT_existT As Ds1 i Df a (recf a Ds1 xf)) x) (fun (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (D1 : IRTDesc As) (recg : forall (Ds1 : IRTSubsts As), SAWCorePrelude.IRTDesc_rect As (fun (_1 : IRTDesc As) => IRTSubsts As -> Type) (fun (i : SAWCoreScaffolding.Nat) (Ds2 : IRTSubsts As) => IRT As (dropIRTs As Ds2 (SAWCoreScaffolding.Succ i)) (atIRTs As Ds2 i)) (fun (D2 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => rec (IRTs_Cons As (IRT_mu As D2) Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => Either (recl Ds2) (recr Ds2)) (fun (_1 : IRTDesc As) (recl : IRTSubsts As -> Type) (_2 : IRTDesc As) (recr : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => prod (recl Ds2) (recr Ds2)) (fun (i : SAWCoreScaffolding.Nat) (_1 : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_2 : Type) => rec n1)) As i -> IRTDesc As) (recf : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_3 : Type) => rec n1)) As i -> IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => @sigT (listSortGet As i) (fun (a : SAWCorePrelude.ListSort_rect (fun (_2 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_2 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_2 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n1 : SAWCoreScaffolding.Nat) (_3 : Type) => rec n1)) As i) => recf a Ds2)) (fun (n1 : SAWCoreScaffolding.Nat) (len1 : SAWCoreVectorsAsCoqVectors.Vec n1 SAWCoreScaffolding.Bool) (_1 : IRTDesc As) (rec : IRTSubsts As -> Type) (Ds2 : IRTSubsts As) => BVVec n1 len1 (rec Ds2)) (fun (_1 : IRTSubsts As) => unit : Type) (fun (_1 : IRTSubsts As) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (i : SAWCoreScaffolding.Nat) (_1 : IRTSubsts As) => listSortGet As i) D1 Ds1 -> IRT As Ds1 D1) (Ds1 : IRTSubsts As) (x : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len) (UnfoldedIRT As Ds1 D1)) => IRT_genBVVec As Ds1 n len D1 (fun (i : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (pf : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool (SAWCoreVectorsAsCoqVectors.bvult n i len) SAWCoreScaffolding.true) => recg Ds1 (atBVVec n len (UnfoldedIRT As Ds1 D1) x i pf))) (fun (Ds1 : var__1) (x : unit : Type) => IRT_tt As Ds1) (fun (Ds1 : var__1) (x : SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) => efq (IRT As Ds1 (IRT_empty As)) x) (fun (i : SAWCoreScaffolding.Nat) (Ds1 : IRTSubsts As) (x : SAWCorePrelude.ListSort_rect (fun (_1 : ListSort) => SAWCoreScaffolding.Nat -> Type) (fun (_1 : SAWCoreScaffolding.Nat) => SAWCoreScaffolding.Eq SAWCoreScaffolding.Bool SAWCoreScaffolding.true SAWCoreScaffolding.false) (fun (A : Type) (_1 : ListSort) (rec : SAWCoreScaffolding.Nat -> Type) => Nat_cases Type A (fun (n : SAWCoreScaffolding.Nat) (_2 : Type) => rec n)) As i) => IRT_elemT As Ds1 i x) D Ds. (* Prelude.CompM was skipped *) @@ -1017,7 +1125,8 @@ Definition fmapM : forall (a : Type), forall (b : Type), (a -> b) -> CompM a -> fun (a : Type) (b : Type) (f : a -> b) (m : CompM a) => @bindM CompM _ a b m (fun (x : a) => @returnM CompM _ b (f x)). Definition applyM : forall (a : Type), forall (b : Type), CompM (a -> b) -> CompM a -> CompM b := - fun (a : Type) (b : Type) (f : CompM (a -> b)) (m : CompM a) => @bindM CompM _ (a -> b) b f (fun (f1 : a -> b) => @bindM CompM _ a b m (fun (x : a) => @returnM CompM _ b (f1 x))). + fun (a : Type) (b : Type) (f : CompM (a -> b)) (m : CompM a) => let var__0 := a -> b in + @bindM CompM _ var__0 b f (fun (f1 : var__0) => @bindM CompM _ a b m (fun (x : a) => @returnM CompM _ b (f1 x))). Definition fmapM2 : forall (a : Type), forall (b : Type), forall (c : Type), (a -> b -> c) -> CompM a -> CompM b -> CompM c := fun (a : Type) (b : Type) (c : Type) (f : a -> b -> c) (m1 : CompM a) (m2 : CompM b) => applyM b c (fmapM a (b -> c) f m1) m2. @@ -1041,7 +1150,13 @@ Definition mapBVVecM : forall (a : Type), forall (b : Type), forall {Inh_b : SAW fun (a : Type) (b : Type) {Inh_b : SAWCoreScaffolding.Inhabited b} (f : a -> CompM b) (n : SAWCoreScaffolding.Nat) (len : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => mapM a b f (SAWCoreVectorsAsCoqVectors.bvToNat n len). Definition appendCastBVVecM : forall (n : SAWCoreScaffolding.Nat), forall (len1 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (len2 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (len3 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool), forall (a : Type), BVVec n len1 a -> BVVec n len2 a -> CompM (BVVec n len3 a) := - fun (n : SAWCoreScaffolding.Nat) (len1 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (len2 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (len3 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (v1 : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len1) a) (v2 : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len2) a) => maybe (SAWCoreScaffolding.Eq (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2) len3) (CompM (BVVec n len3 a)) (@errorM CompM _ (BVVec n len3 a) "Could not cast BVVec"%string) (fun (pf : SAWCoreScaffolding.Eq (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2) len3) => @returnM CompM _ (BVVec n len3 a) (SAWCoreScaffolding.coerce (BVVec n (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2) a) (BVVec n len3 a) (eq_cong (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2) len3 pf Type (fun (l : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) => BVVec n l a)) (appendBVVec n len1 len2 a v1 v2))) (bvEqWithProof n (SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2) len3). + fun (n : SAWCoreScaffolding.Nat) (len1 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (len2 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (len3 : SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) (a : Type) (v1 : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len1) a) (v2 : SAWCoreVectorsAsCoqVectors.Vec (SAWCoreVectorsAsCoqVectors.bvToNat n len2) a) => let var__0 := SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2 in + let var__1 := BVVec n len3 a in + let var__2 := SAWCoreScaffolding.Eq (SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool) var__0 len3 in + maybe var__2 (CompM var__1) (@errorM CompM _ var__1 "Could not cast BVVec"%string) (fun (pf : var__2) => let var__3 := SAWCoreVectorsAsCoqVectors.Vec n SAWCoreScaffolding.Bool in + let var__4 := SAWCoreVectorsAsCoqVectors.bvAdd n len1 len2 in + let var__5 := BVVec n len3 a in + @returnM CompM _ var__5 (SAWCoreScaffolding.coerce (BVVec n var__4 a) var__5 (eq_cong var__3 var__4 len3 pf Type (fun (l : var__3) => BVVec n l a)) (appendBVVec n len1 len2 a v1 v2))) (bvEqWithProof n var__0 len3). (* Prelude.fixM was skipped *) @@ -1060,7 +1175,8 @@ Definition appendCastBVVecM : forall (n : SAWCoreScaffolding.Nat), forall (len1 (* Prelude.letRecM was skipped *) Definition letRecM1 : forall (a : Type), forall (b : Type), forall (c : Type), ((a -> CompM b) -> a -> CompM b) -> ((a -> CompM b) -> CompM c) -> CompM c := - fun (a : Type) (b : Type) (c : Type) (fn : (a -> CompM b) -> a -> CompM b) (body : (a -> CompM b) -> CompM c) => @CompM.letRecM (CompM.LRT_Cons (CompM.LRT_Fun a (fun (_1 : a) => CompM.LRT_Ret b)) CompM.LRT_Nil) c (fun (f : a -> CompM b) => pair (fn f) tt) (fun (f : a -> CompM b) => body f). + fun (a : Type) (b : Type) (c : Type) (fn : (a -> CompM b) -> a -> CompM b) (body : (a -> CompM b) -> CompM c) => let var__0 := a -> CompM b in + @CompM.letRecM (CompM.LRT_Cons (CompM.LRT_Fun a (fun (_1 : a) => CompM.LRT_Ret b)) CompM.LRT_Nil) c (fun (f : var__0) => pair (fn f) tt) (fun (f : var__0) => body f). (* Prelude.test_fun0 was skipped *) diff --git a/saw-core-coq/src/Language/Coq/AST.hs b/saw-core-coq/src/Language/Coq/AST.hs index 740279bb35..052166ae2d 100644 --- a/saw-core-coq/src/Language/Coq/AST.hs +++ b/saw-core-coq/src/Language/Coq/AST.hs @@ -29,6 +29,8 @@ data Term -- | A variable that needs to be printed with a leading at sign in order to -- make all arguments explicit | ExplVar Ident + -- | A ascription @tm : tp@ of a type to a term + | Ascription Term Term | NatLit Integer | ZLit Integer | List [Term] diff --git a/saw-core-coq/src/Language/Coq/Pretty.hs b/saw-core-coq/src/Language/Coq/Pretty.hs index 9635ea920f..f78e86068e 100644 --- a/saw-core-coq/src/Language/Coq/Pretty.hs +++ b/saw-core-coq/src/Language/Coq/Pretty.hs @@ -129,6 +129,9 @@ ppTerm p e = ExplVar x -> parensIf (p > PrecApp) $ string "@" <> ppIdent x + Ascription tm tp -> + parensIf (p > PrecLambda) + (ppTerm PrecApp tm <+> text ":" <+> ppTerm PrecApp tp) NatLit i -> integer i ZLit i -> diff --git a/saw-core-coq/src/Verifier/SAW/Translation/Coq/Term.hs b/saw-core-coq/src/Verifier/SAW/Translation/Coq/Term.hs index f9ff459198..f76f42ca60 100644 --- a/saw-core-coq/src/Verifier/SAW/Translation/Coq/Term.hs +++ b/saw-core-coq/src/Verifier/SAW/Translation/Coq/Term.hs @@ -226,7 +226,10 @@ flatTermFToExpr tf = -- traceFTermF "flatTermFToExpr" tf $ case tf of Primitive pn -> translateIdent (primName pn) UnitValue -> pure (Coq.Var "tt") - UnitType -> pure (Coq.Var "unit") + UnitType -> + -- We need to explicitly tell Coq that we want unit to be a Type, since + -- all SAW core sorts are translated to Types + pure (Coq.Ascription (Coq.Var "unit") (Coq.Sort Coq.Type)) PairValue x y -> Coq.App (Coq.Var "pair") <$> traverse translateTerm [x, y] PairType x y -> Coq.App (Coq.Var "prod") <$> traverse translateTerm [x, y] PairLeft t -> @@ -537,7 +540,7 @@ translateTermUnshared t = withLocalTranslationState $ do Lambda {} -> do paramTerms <- translateParams params - e' <- translateTerm e + e' <- translateTermLet e pure (Coq.Lambda paramTerms e') where -- params are in normal, outermost first, order