(*| .. Vericert: Verified high-level synthesis. Copyright (C) 2020-2022 Yann Herklotz This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ==================== Decidable Equalities ==================== |*) Require compcert.backend.RTL. Require Import compcert.common.AST. Require Import compcert.lib.Maps. Require Import compcert.lib.Integers. Require Import compcert.lib.Floats. Require Import vericert.common.Vericertlib. Require Import vericert.hls.Gible. Lemma comparison_eq: forall (x y : comparison), {x = y} + {x <> y}. Proof. decide equality. Defined. Lemma condition_eq: forall (x y : Op.condition), {x = y} + {x <> y}. Proof. generalize comparison_eq; intro. generalize Int.eq_dec; intro. generalize Int64.eq_dec; intro. decide equality. Defined. Lemma addressing_eq : forall (x y : Op.addressing), {x = y} + {x <> y}. Proof. generalize Int.eq_dec; intro. generalize AST.ident_eq; intro. generalize Z.eq_dec; intro. generalize Ptrofs.eq_dec; intro. decide equality. Defined. Lemma typ_eq : forall (x y : AST.typ), {x = y} + {x <> y}. Proof. decide equality. Defined. Lemma operation_eq: forall (x y : Op.operation), {x = y} + {x <> y}. Proof. generalize Int.eq_dec; intro. generalize Int64.eq_dec; intro. generalize Float.eq_dec; intro. generalize Float32.eq_dec; intro. generalize AST.ident_eq; intro. generalize condition_eq; intro. generalize addressing_eq; intro. generalize typ_eq; intro. decide equality. Defined. Lemma memory_chunk_eq : forall (x y : AST.memory_chunk), {x = y} + {x <> y}. Proof. decide equality. Defined. Lemma list_typ_eq: forall (x y : list AST.typ), {x = y} + {x <> y}. Proof. generalize typ_eq; intro. decide equality. Defined. Lemma option_typ_eq : forall (x y : option AST.typ), {x = y} + {x <> y}. Proof. generalize typ_eq; intro. decide equality. Defined. Lemma signature_eq: forall (x y : AST.signature), {x = y} + {x <> y}. Proof. repeat decide equality. Defined. Lemma list_operation_eq : forall (x y : list Op.operation), {x = y} + {x <> y}. Proof. generalize operation_eq; intro. decide equality. Defined. Lemma list_pos_eq : forall (x y : list positive), {x = y} + {x <> y}. Proof. generalize Pos.eq_dec; intros. decide equality. Defined. Lemma sig_eq : forall (x y : AST.signature), {x = y} + {x <> y}. Proof. repeat decide equality. Defined. Lemma instr_eq: forall (x y : instr), {x = y} + {x <> y}. Proof. generalize Pos.eq_dec; intro. generalize typ_eq; intro. generalize Int.eq_dec; intro. generalize Ptrofs.eq_dec; intro. generalize Int64.eq_dec; intro. generalize Float.eq_dec; intro. generalize Float32.eq_dec; intro. generalize memory_chunk_eq; intro. generalize addressing_eq; intro. generalize operation_eq; intro. generalize condition_eq; intro. generalize signature_eq; intro. generalize list_operation_eq; intro. generalize list_pos_eq; intro. generalize AST.ident_eq; intro. repeat decide equality. Defined. Lemma cf_instr_eq: forall (x y : cf_instr), {x = y} + {x <> y}. Proof. generalize Pos.eq_dec; intro. generalize typ_eq; intro. generalize Int.eq_dec; intro. generalize Int64.eq_dec; intro. generalize Float.eq_dec; intro. generalize Float32.eq_dec; intro. generalize Ptrofs.eq_dec; intro. generalize memory_chunk_eq; intro. generalize addressing_eq; intro. generalize operation_eq; intro. generalize condition_eq; intro. generalize signature_eq; intro. generalize list_operation_eq; intro. generalize list_pos_eq; intro. generalize AST.ident_eq; intro. repeat decide equality. Defined. Definition ceq {A: Type} (eqd: forall a b: A, {a = b} + {a <> b}) (a b: A): bool := if eqd a b then true else false.